12

我正在尝试运行一个包含大量注释的脚本来解释每个表格、统计测试和图表。我正在使用 RStudio IDE,如下所示

source(filename, echo=T)

这可确保脚本将所有内容输出到控制台。如果我运行以下序列,它将所有输出发送到 txt 文件,然后关闭输出转移

sink("filenameIwantforoutput.txt")
source(filename, echo=T)
sink()

唉,我发现我的很多评论都没有被输出。相反,我得到

“……但前提是我们有一个专门的 b ……[截断]”。

在我知道在哪里保存输出之前有一次,但那是几个月前的事了,现在我不记得了。你可以吗?

4

2 回答 2

16

max.deparse.length=参数设置为source。您可能需要大于默认值 150 的值。例如:

source(filename, echo=TRUE, max.deparse.length=1e3)

请注意详细信息部分的最后一段?source

如果 'echo' 为真,并且解析后的表达式超过了 'max.deparse.length',则输出那么多字符,后跟 '.... [TRUNCATED]'。

于 2011-05-24T00:18:01.850 回答
1

source()您可以通过覆盖.Rprofile.

这似乎是覆盖函数的合理案例,因为理论上更改应该只影响屏幕输出。我们可以设计一个不是这种情况的示例,例如,可以捕获屏幕输出并用作变量,capture.output(source("somefile.R"))但似乎不太可能。以更改返回值的方式更改函数可能会反过来咬你或与你共享代码的任何人(例如,如果你更改函数na.rm参数的默认值)。

.source_modified <- source
formals(.source_modified)$max.deparse.length <- Inf
# Use 'nms' because we don't want to do it for all because some were already
# unlocked. Thus if we lock them again, then we are changing the previous
# state.
# (https://stackoverflow.com/a/62563023/1376404)
rlang::env_binding_unlock(env = baseenv(), nms = "source")
assign(x = "source", value = .source_modified, envir = baseenv())
rlang::env_binding_lock(env = baseenv(), nms = "source")
rm(.source_modified)

另一种方法是创建您自己的类似“别名”的函数。我在我的 .Rprofile 中使用以下内容:

s <- source
formals(s)$max.deparse.length <- Inf
formals(s)$echo <- TRUE
于 2021-11-01T20:50:30.173 回答