此问题是由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/