如果我输入
print(cat(""))
我得到了
NULL
我想使用cat()
打印出R脚本的进度,但我不明白为什么它会在所有连接字符串的末尾返回NULL
,更重要的是,如何让它停止?
答案 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>"))