我希望'source()'重现输入文件。这几乎到了那里:
source(in.file, echo=TRUE, max.deparse=100000, prompt.echo="", print.eval=FALSE)
不幸的是它丢弃了空行!我没有看到文档中提到的这种行为。这是一个错误吗?
为了保持源的可读性,并避免虚假的版本控制更改,我想重现完全。我怎样才能实现它?
我可以使用hack:首先用“#empty”替换所有空行,然后在R中运行'source()',然后在输出中反转替换。但那是迂回而丑陋的。
示例输入。在实际使用中,我在调用'source'之前在我的R会话中定义'foo',但为了保持这种自包含,我将它包含在这里:
foo <- function(x) {
if (x > 100) cat ("# Wow!\n")
}
# comment kept.
# empty lines?
foo(2)
foo(4)
foo(16)
foo(256)
foo(2015)
foo(9)
foo(22)
# the end
期望的输出 - 我想用“哇”注释任何大的'x':
foo <- function(x) {
if (x > 100) cat ("# Wow!\n")
}
# comment kept.
# empty lines?
foo(2)
foo(4)
foo(16)
foo(256)
# Wow!
foo(2015)
# Wow!
foo(9)
foo(22)
# the end
实际输出:
foo <- function(x) {
if (x > 100) cat ("# Wow!\n")
}
# comment kept.
# empty lines?
foo(2)
foo(4)
foo(16)
foo(256)
# Wow!
foo(2015)
# Wow!
foo(9)
foo(22)
# the end
我在每个语句或注释块之后得到一个空行。输入中的空行将丢失。
答案 0 :(得分:0)
@Thomas将我指向source()
来源的相关部分,其中故意丢弃前导空行,
while (length(dep) && length(grep("^[[:blank:]]*$",
dep[1L]))) {
dep <- dep[-1L]
leading <- leading - 1L
}
(在使用虚假换行符打印剩余内容之前)。
显然,这种行为是有意的,在文档中没有被认为值得一提,但对于经验较丰富的R用户来说“已知”。