我应该如何选择如何使用 R 进行打印? [关闭]

2024-02-12

R 中有多种显示文本的方法:cat, print, write, writeLines, sink, message,以及我现在不记得的其他替代方案。这里和互联网上的其他地方还有其他问题对其中一些进行比较,但它们通常只涵盖两三个。必须有一个可用的表格或图表来简要总结它们之间的差异。是的,我查了手册,但我无法区分其中大多数。

更新:在我发布这个问题后,其他人也提出了一个非常相似的问题,并得到了很好的回应:为什么在 R 中编写包时 message() 比 print() 更好? https://stackoverflow.com/questions/36699272/why-is-message-a-better-choice-than-print-in-r-for-writing-a-package。由于这个问题已经结束,我无法将其标记为重复或添加答案,所以我只是留下这张便条。


这是一个很好的问题,因为 R 因使用许多略有不同的方法来完成类似的任务而臭名昭著。

功能print用于简单地打印到 R 控制台。例如:

# a sample vector
tmp<-c("foo","bar","baz")
tmp
# [1] "foo" "bar" "baz"

print(tmp)
#[1] "foo" "bar" "baz"

还值得注意的是print加载其他包后可以获得新的打印方式,例如xtable包裹。

The cat函数连接传递给它的所有条目,并以更类似于您可能更习惯的命令行或 shell(例如 bash)的方式打印它们。例如:

cat(tmp)
# foo bar baz

paste函数,它还可以包含分隔符,并允许 R 发挥其他技巧:

cat(tmp,sep = "|")
# foo|bar|baz
# handy for creating complex regular expressions

# create some LaTeX markup
FigureFilepath<-"/path/to/figure/i.jpg"
cat("\\includegraphics[width=0.9\\linewidth,height=0.9\\textheight,keepaspectratio]{", FigureFilepath, "}\n", sep="")
# \includegraphics[width=0.9\linewidth,height=0.9\textheight,keepaspectratio]{/path/to/figure/i.jpg}

正如所暗示的,如果您在环境中使用 R,例如在 LaTeX 文档中,这会很方便knitr并想要打印特殊格式的文本。

The write函数是 cat 的包装器,它打印到文件并对矩阵进行一些特殊处理(此处未显示):

write(tmp,file = "output.txt")
file.show("output.txt")
# foo
# bar
# baz

虽然OP没有提到这一点,但我认为有必要提及paste函数,包括它的表兄弟paste0. The paste函数还将项目打印到控制台,这些项目在视觉上看起来类似于print, e.g.:

paste(tmp)
# [1] "foo" "bar" "baz"

然而,也存在一些显着的差异。您还可以组合来自不同向量的元素,并指定分隔符:

paste(tmp,c("one","two"),sep = "~")
# [1] "foo~one" "bar~two" "baz~one"
# Note how the second element is recycled here!

你也可以collapse将所有内容与另一个指定分隔符连接在一起的输出:

paste(tmp,c("one","two"),sep = "~",collapse = "|")
# [1] "foo~one|bar~two|baz~one"

如果您只是想要一个快速简单的方法,您可以使用paste0不使用分隔符,但也可以支持collapse.

paste0(tmp,c("one","two"))
# [1] "fooone" "bartwo" "bazone"

重要的是,输出paste and paste0可以保存为对象或在另一个函数中使用,这与cat根据理查德的评论。

x<-paste(tmp,c("one","two"),sep = "~")
x
# [1] "foo~one" "bar~two" "baz~one"

如果您尝试保存输出,这是控制台输出print or cat进入一个对象:

> x<-print("yes")
[1] "yes"
> x
[1] "yes"
> x<-cat("yes")
yes
> x
NULL

大多数 R 初学者通常会遇到的另一个症结是使用print and paste在 for 循环内。控制台输出为paste在 a 内执行时不显示for循环,如下所示:

for(i in 1){
  paste("This is paste")
  print("This is print")
  cat("This is cat")
}
# [1] "This is print"
# This is cat

The sink函数只是将 R 控制台输出转移到文件中。

sink("output.txt")
cat("hello")
cat("\n")
cat("world")
print(tmp)
sink()
# hello
# world[1] "foo" "bar" "baz"

请注意,两者之间写入控制台的任何内容sink()命令将被写入文件,这可能是不可取的。

The writeLines函数可以与“连接”类型对象一起使用,以便将输出发送到其他地方,通常是发送到文件。不像sink,它只会将指定的项目写入文件。

fileConn<-file("output.txt")
writeLines(tmp,fileConn)
cat("This is test text")
print("Hello world")
close(fileConn)
file.show("output.txt")
# foo
# bar
# baz

您可以为此提出一些创造性的用途,例如在脚本末尾创建系统会话日志

fileConn<-file("syslog.txt")
writeLines(capture.output(system('uname -srv',intern=T),sessionInfo()), fileConn)
close(fileConn)
# file.show("syslog.txt")
# <too long to fit here!>

对于其中一些函数以它们的方式工作的原因,在本博客中也有一些很好的解释:http://arrgh.tim-smith.us/atomic.html http://arrgh.tim-smith.us/atomic.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该如何选择如何使用 R 进行打印? [关闭] 的相关文章

  • 在 R 中进行 Cox 回归后,将预测危险比列添加到数据帧中

    在 R 中运行 Cox PH 回归后 我需要在数据框中添加预测风险比的列 数据框是面板数据 其中 numgvkey 如果公司标识符 和年龄是时间标识符 您可以从此链接下载一小部分日期 https drive google com file
  • 将密度曲线拟合到 R 中的直方图

    R中有没有可以将曲线拟合到直方图的函数 假设您有以下直方图 hist c rep 65 times 5 rep 25 times 5 rep 35 times 10 rep 45 times 4 看上去很正常 但其实是歪曲的 我想拟合一条倾
  • 如果“testthat”测试在“R”中失败,则打印自定义诊断信息

    I use a testthat单元测试来检查是否data frame函数返回的结果与我期望它返回的结果相同 如果测试失败 testthat打印一些诊断信息 例如 MyFunction df orig is not identical to
  • 如何生成向量的所有组合[重复]

    这个问题在这里已经有答案了 假设我有 3 个绿球 2 个橙球和 8 个黄球 我想订购它们 鉴于所有相同颜色的球都是相同的 如何生成所有可能的序列 在 R 中 使用gregmisc 我可以 balls lt c orange orange g
  • 如何调整ggplot直方图的时间刻度轴

    我正在使用一个数据框 其中一列包含POSIXct日期时间值 我正在尝试使用绘制这些时间戳的直方图ggplot2但我有两个问题 我不知道如何设置 binwidthgeom histogram 我想将每个垃圾箱设置为一天或一周 我尝试提供 di
  • 将summary()写入as.data.frame以在ggplot / R中使用

    请查找 af 数据样本t below 我正在使用以下方法进行竞争风险分析etmCIF来自etm package 产生以下结果 这很好 但需要更好的图形 曾经有一个ggtrans etm函数将数据导入ggplot 然而 这个功能显然被删除了
  • 使用 ggplot2 修改点子集的形状

    我正在尝试绘制一个沿大量维度变化的大型散点图 这是我的起始情节 p lt ggplot mtcars aes wt mpg shape cyl colour gear size carb geom point 使用mtcars数据集 我只是
  • 查找数据帧列表中同一列中的所有重复值并将其转换为 NULL

    我有一个清单BELGIAN COAST list包含数百个数据帧 df1 df2 15 列 X 1000 行 每个数据帧的最后一列称为Chemicals并包含一些字符 例如Sulfate or Ammonia 但是这一列有很多行Chemic
  • 使用 dplyr:group_by 将数据帧分成多个子集?

    有没有办法根据 group by 组使用 dplyr 将一个数据帧拆分为数据帧的子集 mtcars gt group by cyl gear gt codes 非常感谢 好吧 并不是你真的想要 但你可以这样做tidyr 即nearly一样的
  • 如何获得属于五分位数的x?

    我正在大学学习使用 R 进行计量经济学项目 所以请原谅我的笨拙 基本上 使用并给出 一个矩阵 股票价格 行 天 列 公司股票价格 另一个矩阵 市值 行 天 列 公司市值 我必须收集第三个矩阵每天观察的属于市值分布第一五分位数的股票价格 然后
  • 仅保留百分比的尾随零

    给出以下示例 library pander tableAbs lt Titanic 1 1 tablePct lt round prop table tableAbs 100 2 table lt cbind tableAbs tableP
  • 解析,用三点参数替换

    让我们考虑一个典型的deparse substitute R call f1 lt function u x y print deparse substitute x varU vu varX vx varY vy f1 u varU x
  • r 中的 5 维图

    我正在尝试在 R 中绘制 5 维图 我目前正在使用rgl包以 4 个维度绘制数据 使用 3 个变量作为 x y z 坐标 另一个变量作为颜色 我想知道是否可以使用这个包添加第五个变量 例如空间中点的大小或形状 这是我的数据和当前代码的示例
  • R:将 JSON 时间格式转换为 POSIX

    我有一个 JSON 字符串 并将其放入数据框中 我能够做到这一点 但我在使用 apply 函数之一将所有时间字符串转换为 POSIX 格式时遇到问题 See here https stackoverflow com questions 90
  • 在 R 中使用 Huggingface Transformer 模型

    我正在尝试在 R 中使用不同的 Huggingface 模型 这是通过 reticulate 导入 Transformer 包来实现的 谢谢 https rpubs com eR ic transfoRmers https rpubs co
  • 为什么 geom_boxplot 比基本箱线图识别更多异常值?

    这是一个可重复的示例 与基本箱线图相比 最后一个治疗组又发现了一个异常值 dta lt structure list Treatment c A A A A A A A A A A A A A A A A B B B B B B B B B
  • 使用 dplyr::filter 的整洁方式是什么?

    使用下面的函数调用foo c b 输出以内联方式显示 正确的写作方式是什么df gt filter x gt x 我已经包含了一个使用的示例mutate以整洁的风格与之对比filter foo lt function variables x
  • 使用predictNLS围绕R中的拟合值创建置信区间?

    我想使用 R 中 propogate 包中的 PredictNLS 围绕一大组拟合值构建置信区间 作为示例 我将使用它们在函数描述中引用的数据集 https rdrr io github anspiess propagate man pre
  • 具有 dplyr、tidyverse 和 broom 的相关矩阵 - P 值矩阵

    全部 我想使用以下方法从相关矩阵中获取 p 值dplyr 和 或扫帚包 并同时测试多个变量 我知道其他方法 但 dplyr 对我来说似乎更简单 更直观 此外 dplyr 需要关联每个变量以获得特定的 p 值 这使得该过程更容易 更快 我检查
  • 非闪亮上下文中的反应式对象绑定

    实际问题 你怎样才能近似反应性环境 行为 http shiny rstudio com tutorial lesson6 建立者shiny http shiny rstudio com函数 或者甚至可能在一个函数中使用这些函数无光泽上下文以

随机推荐

  • 原子整数incrementAndGet()线程安全吗?

    原子整数incrementAndGet 方法线程安全吗 我没有看到其中使用同步关键字 我使用以下代码来生成唯一 ID public enum UniqueIdGenerator INSTANCE private AtomicLong ins
  • python:读取json并循环字典

    我正在学习 python 我像这样循环将 json 转换为字典 它可以工作 但这是正确的方法吗 谢谢 import json output file open output json read output json json loads
  • 启动集群时在 EMR 上配置 Zeppelin 的 Spark 解释器

    我正在 EMR 上创建集群并配置 Zeppelin 以从 S3 读取笔记本 为此 我使用一个 json 对象 如下所示 Classification zeppelin env Properties Configurations Classi
  • 无法使用 PowerMockRunner 运行 JUnit 测试

    我有一个基于 Gradle 的 Java 项目 我现在想使用 PowerMock 模拟私有方法 问题是我无法使用 PowerMockRunner 因为当我添加 RunWith org powermock modules junit4 Pow
  • 逻辑表达式解析器

    我正在尝试为以下表达式创建一个逻辑表达式解析器 变量A gt 变量B 而不是变量C 对于给定的变量值 解析器应该能够返回结果是 true 还是 false 基本上 表达式仅包含变量 逻辑运算符 或 与 蕴涵 等价 否定和括号 我想问实现这种
  • 将属性文件中的所有键和值作为 Spring 中的 Map 注入

    有人可以提供一些想法来注入属性文件中的所有动态键和值并将其传递为Map to DBConstants使用 Setter 注入和 Collection 的类 密钥事先未知并且可能会有所不同 Example Property File that
  • Maven 不执行任何单元测试

    我正在使用带有多模块的 Maven 有3个项目 foo the parent project foo core foo bar 我配置了所有依赖项和插件foo s pom
  • 我们什么时候以及为什么需要ApplicationRunner和Runner接口?

    我正在学习Spring引导 有哪些典型用例ApplicationRunner或任何跑步者界面 import org junit jupiter api Test import org springframework boot Applica
  • 在 python 中将文件路径作为命令行参数传递

    我需要在文件中写入一些内容 我通过 python 命令行传递这些内容 我正在使用下面的代码mycode py import csv import sys path sys argv 1 row 4 Danny New York with o
  • Spring MVC:进行 AJAX 调用后在对话框中显示数据

    我是 Spring 和 Web 技术的新手 我有一个表 其中包含带有超链接的列 当我单击一行的超链接时 我需要在对话框中显示该行数据以及其他详细信息 我的控制器方法返回一个ModelAndView其中包含我需要显示的数据和显示页面 问题 如
  • 三星中的InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS

    在我的应用程序中 我有一个EditText 带有一个按钮来更改键盘输入类型 代码 ToggleCambiarTeclado setOnClickListener new OnClickListener Override public voi
  • 曾经有效的相同代码现在返回异常

    我正在尝试在几个股票代码之间进行简单的关联 我之前运行过相同的代码并且有效 现在 它返回一个异常 该异常引用了一堆文件并包含我不理解的其他消息 此外 必须在控制台中手动停止该命令 我对 python 和一般编程都很陌生 我正在使用 Spyd
  • 子活动完成时有时不会调用 onActivityResult

    在测试过程中 我注意到有时子活动的 finish 不会执行 onActivityResult 大多数时候它工作正常 但我无法弄清楚这个问题何时以及为何发生 子活动开始 public void launchSubActivity Class
  • 使用Java通过FTP将所有目录复制到服务器

    我需要将一个目录从本地磁盘复制到服务器 该目录包含很多目录 子目录和文件 想想目录的层次结构树 以下是复制一个文件的示例 public void saveFilesToServer throws IOException FTPClient
  • “保留执行”的含义

    阅读答案来自在c标识符中使用下划线的规则是什么 https stackoverflow com questions 228783 what are the rules about using an underscore in a c ide
  • 为什么并行化会如此显着地降低性能?

    我有一个 OpenMP 程序 数千行 无法在这里重现 其工作原理如下 它由工作线程和任务队列组成 一个任务由一个卷积组成 每次工作线程从工作队列中弹出任务时 它都会执行所需的卷积 并可选择将更多卷积推送到队列中 没有特定的 主 线程 所有工
  • 使用 React Router 和 Redux Simple Router 进行 onEnter 转换不会渲染新路由的组件

    我有一个使用react 0 14 redux 3 05 react router 1 0 3 和 redux simple router 2 0 2 的应用程序 我正在尝试根据商店状态为我的一些路线配置 onEnter 转换 转换挂钩成功触
  • 一个视图中的两个模型模板 - Backbone/Marionette

    我试图在一个视图中使用两个模型 并使用这两个模型的模板 我正在和木偶一起工作 这是我对视图的初始化 main app layout header show new APP Views HeaderView model oneModel mo
  • 如何将信号从一个程序发送到另一个程序?

    我使用消息队列作为两个程序之间的 IPC 现在我想使用消息队列将数据从一个程序发送到另一个程序 然后通过信号 SIGINT 通知它 我不知道如何将信号从一个程序发送到另一个程序 如果有解决方案 任何人都可以提供示例代码吗 include
  • 我应该如何选择如何使用 R 进行打印? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 R 中有多种显示文本的方法 cat print write writeLines sink message 以及我现在不记得的其他替代