26

如果我输入

print(cat(""))

我明白了

NULL

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

4

7 回答 7

14

你所有的答案都在文档中?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").

于 2010-10-29T20:49:29.890 回答
11

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

于 2013-04-10T20:23:54.183 回答
7

我有完全相同的问题。简而言之,cat()在 R 下有点不稳定。您没有详细说明您如何尝试使用cat(),但我建议您查看paste().

?paste

我想这可能是你正在寻找的东西。

于 2010-10-29T20:57:52.173 回答
6

我没有看到需要使用print(cat()). 打印一条消息 cat()已经足够了。这可能是您正在寻找的:

  for (j in 1:n) {
     cat("Running loop", j, "of", n, "\n")
  }
于 2014-02-17T18:50:57.383 回答
4

为此,如果我要打印当前迭代的信息,我经常使用writeLines(), 和strwrap(), 并结合说循环值。根据需要处理长行的换行,这意味着我不必记得在通话结束时添加 a。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
于 2010-10-29T21:37:35.350 回答
0

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

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

名称是变量,“.y”向其中添加了一个字符串,paste 表示要打印,eval 评估打印,<- 将其分配给变量,而 ax 是该变量。

于 2018-04-05T20:45:44.007 回答
0

我有一点不同的问题,我想连接一些 html 文本以在我的 Rmarkdown 中包装长字符串,并且从cat(). 只需HTML()从闪亮的包装中包裹即可解决问题。

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



于 2021-06-03T16:15:00.683 回答