r - 如何捕获system()的输出

标签 r stdout knitr

此问题是由Rmarkdown not outputting results of system command to html file引起的。由于某些原因,R(或system())中system2()的输出无法被sink()capture.output()捕获,因此knitr目前无法记录输出。例如,在R控制台中:

> system('ls')
DESCRIPTION
NAMESPACE
R
README.md
inst
man


但在编织文档中,您不会看到输出,因为capture.output(system('ls'))character(0),即无法捕获输出。正如我在该问题的回答中提到的,我当然可以做cat(system('ls', intern = TRUE), sep = '\n'),但这有点尴尬。我想知道这是否是一种无需使用system()intern = TRUE即可捕获cat()输出的方法。



更新:有关为解决该问题而提供的hack,请参见https://github.com/yihui/knitr/issues/1203

最佳答案

您可以添加掩盖knitr::system的函数base::system。用户可以像system::base一样使用它,但是输出可以由capture.output捕获:

system <- function(...) {
  stopifnot(!any(names(list(...)) %in% "intern"))
  result <- base::system(..., intern = TRUE)
  print(result)
}


我承认,这有点怪异,老实说,我不确定可能的副作用。但我认为可能值得一试。

关于r - 如何捕获system()的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36928322/

相关文章:

c++ - 将标准输出重定向到 ostream

linux - 这个 ksh 代码是如何工作的?

r - RStudio 预览版中 Knitting Html 的问题

R在ggplot中的coord_flip()之后调整条形之间的空间

r - eval(expr,envir,enclos)中的错误:找不到对象

r - 使用 R 创建关系矩阵

java - UNIX STDOUT 结束符号

r - R中的线性插值(lm),奇怪的行为

r - 在 knitr 输出中包含 R 帮助

RMarkdown/Knit : Hide code for Word document,,但 HTML 文档中的代码折叠