将函数转换为字符串而不会丢失注释

时间:2017-09-11 21:35:14

标签: r

我想将函数转换为字符串。我不能直接将类函数转换为类字符,因此我使用functionlistcharacter逻辑。但是,list会从函数中删除注释。

示例:

foo <- function() {
    1 + 1
}
# Can't use as.character(foo), thus:
as.character(list(foo))
    "function () \n{\n    1 + 1\n}"

但是,如果函数包含注释,那么它将被删除

bar <- function() {
    # sum
    1 + 1
}
as.character(list(bar))
    "function () \n{\n    1 + 1\n}"

问题:为什么列表会从函数中删除注释以及如何保存它们?或者将函数转换为字符串的更好方法是什么?

修改  MrFlick建议使用capture.output用于交互式R会话。但是,如果使用code.R

bar <- function() {
    # sum
    1 + 1
}
# collectMetaData()
print(paste0(capture.output(print(bar)), collapse="\n"))

尝试使用Rscript code.R运行它,我的输出仍为:"function () \n{\n 1 + 1\n}"

1 个答案:

答案 0 :(得分:3)

我不知道,你为什么要这样做。这看起来像是一个xy问题。无论如何,你似乎想要解析函数:

bar <- function() {
  # sum
  1 + 1
}

paste(deparse(bar, control = "useSource"), collapse = "\n")
#[1] "function() {\n  # sum\n  1 + 1\n}"