0

当我在 R 中(在标准命令行界面中)显示一个对象,并且该对象很长时,R 用消息剪切它

[ reached getOption("max.print") -- omitted 538 rows ]

但仍然设法弄乱我的终端。

对我来说,所需的行为如下:如果输出的行数超过 N,则输出将存储到临时文本文件中,并使用 less 显示文本文件。

解决方案原型使用capture.output

data(iris3)
t <- tempfile()
capture.output(print(iris), file=t)
system(paste0("less ", t))

它或多或少地做了我想要的,但是(i)与终端共享 max.print (不好!)并且(ii)当输出太大时不会自动运行。

有什么办法可以做到这一点?至少解决上面的(i)会有很大帮助(这样 capture.output 没有限制或有与终端不同的限制)。

4

1 回答 1

1

sink()函数可以将所有输出发送到文本文件而不会阻塞控制台。但是,只有当输出长于预定义阈值时,我才知道如何执行它。

data(iris3)
zz <- file("longoutput.txt", open = "wt")
sink(zz)
sink(zz, type = "message")

iris # object to print

## back to the console
sink(type = "message")
sink()
file.show("longoutput.txt")
于 2014-11-06T16:29:33.150 回答