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