首页 > 解决方案 > 如何在R语言中单行打印

问题描述

我在 R 中做了一些 HandOn:

toppers <- sample(80:100, 5)
s <- ifelse(toppers>90,"best class", "needs improvement")

我需要在一行中打印 s 。我能怎么做?

实际的:

[1] "best class"        "needs improvement" "needs improvement"
[4] "needs improvement" "needs improvement"

预期的:

[1] "best class"        "needs improvement" "needs improvement"  "needs improvement" "needs improvement"

标签: r

解决方案


您的“预期”输出不明确,因此我将给出各种答案以涵盖所有基础。

首先,如果您只对在交互式会话中获得确切的格式感兴趣,您可以简单地告诉 R 使用更大的线宽,这样它就不会换行:

> options(width=9999)

调用之后,默认的 read-eval-print 循环打印的对象将显示在一行上,直到它们达到 9999 的长度:

> s
[1] "needs improvement" "needs improvement" "needs improvement" "best class"        "needs improvement"

另一种方法是,如果您只是想将列表打印到控制台标准输出而不进行任何格式化,则使用cat(). cat()直接打印到控制台或文件,无需太多转换。

> cat(s)
needs improvement needs improvement needs improvement best class needs improvement

您会注意到删除引号。如果要在输出中的每个字符串周围保留引号,我们可以使用deparse(). 我们还将使用sapply()分别对每个字符串进行解析,否则它会c()在整个事情周围放置一个不需要的东西:

> cat(sapply(s, function(word) deparse(word)), collapse=' ')
"needs improvement" "needs improvement" "needs improvement" "best class" "needs improvement"

以上仍然直接打印到控制台标准输出。如果要将组合字符串保存在变量中,我们可以使用paste0()代替cat()

> x <- paste0(sapply(s, function(word) deparse(word)), collapse=' ')
> cat(x)
"needs improvement" "needs improvement" "needs improvement" "best class" "needs improvement"

推荐阅读