让R source()保留空行

时间:2015-09-22 15:36:11

标签: r

我希望'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

我在每个语句或注释块之后得到一个空行。输入中的空行将丢失。

1 个答案:

答案 0 :(得分:0)

@Thomas将我指向source()来源的相关部分,其中故意丢弃前导空行,

while (length(dep) && length(grep("^[[:blank:]]*$", 
  dep[1L]))) {
  dep <- dep[-1L]
  leading <- leading - 1L
}

(在使用虚假换行符打印剩余内容之前)。

显然,这种行为是有意的,在文档中没有被认为值得一提,但对于经验较丰富的R用户来说“已知”。