在R中,我可以停止打印(cat(“”))返回NULL吗?为什么猫(“食物”)会回归foo>

时间:2010-10-29 20:43:46

标签: r concatenation paste cat

如果我输入

print(cat(""))

我得到了

NULL

我想使用cat()打印出R脚本的进度,但我不明白为什么它会在所有连接字符串的末尾返回NULL,更重要的是,如何让它停止?

7 个答案:

答案 0 :(得分:13)

您的所有答案都在?cat的文档中。回答您特定问题的部分是:

  

参数:

fill: a logical or (positive) numeric controlling how the output is
      broken into successive lines.  If ‘FALSE’ (default), only
      newlines created explicitly by ‘"\n"’ are printed.
      Otherwise, the output is broken into lines with print width
      equal to the option ‘width’ if ‘fill’ is ‘TRUE’, or the value
      of ‘fill’ if this is numeric.  Non-positive ‘fill’ values
      are ignored, with a warning.

......和......

  

值:

 None (invisible ‘NULL’).

因此,您无法阻止print(cat(...))返回NULL,因为这是cat返回的内容。您需要明确添加cat("foo\n")等新行。

答案 1 :(得分:7)

我遇到了完全相同的问题。简而言之,cat()在R下有点不可思议。你没有详细说明你如何使用cat(),但我建议你看paste()

?paste

我认为这可能就是你要找的东西。

答案 2 :(得分:7)

NULL是“cat()”的返回值。如果省略外部“print()”,则不会看到NULL。

答案 3 :(得分:5)

我认为不需要使用print(cat())。打印消息cat()已足够。这可能是您正在寻找的:

  for (j in 1:n) {
     cat("Running loop", j, "of", n, "\n")
  }

答案 4 :(得分:4)

为此,我经常使用writeLines(),与strwrap()paste()结合使用,如果我打印出当前迭代的信息,请说出循环值。 strwrap()根据需要处理换行,writeLines()表示我不必记得在"\n"次来电时添加cat()

> writeLines(strwrap("a very very very very long long long long long long long long string, that is too wide for the current pager width"))
a very very very very long long long long long long long long string,
that is too wide for the current pager width

以下是使用它打印迭代指示符的示例:

for(i in 1:1000) {
    if(isTRUE(all.equal(i %% 100, 0)))
        writeLines(strwrap(paste("Iteration", i)))
    ## do something
}

给出:

> for(i in 1:1000) {
+     if(isTRUE(all.equal(i %% 100, 0)))
+         writeLines(strwrap(paste("Iteration", i)))
+     ## do something
+ }
Iteration 100
Iteration 200
Iteration 300
Iteration 400
Iteration 500
Iteration 600
Iteration 700
Iteration 800
Iteration 900
Iteration 1000

答案 5 :(得分:0)

如果要将其分配给变量,以便在* apply或function(x)的LOOP中使用,请尝试以下操作:

x<-eval(paste0(name,".y"))

名称是变量,&#34; .y&#34;为它添加一个字符串,粘贴说要打印,eval评估打印,&lt; - 将它分配给变量,ax就是那个变量。

答案 6 :(得分:0)

我有一点不同的问题,因为我想连接一些 html 文本以在我的 Rmarkdown 中包装长字符串,并且从 cat() 获得相同的 NULL。简单地从闪亮的包中包装 HTML() 解决了这个问题。

```{r, results = "asis"}
HTML(cat("<span style='white-space: pre-wrap; word-break: break-all;'>",comments,"</span>"))