漂亮打印R函数

3

我正在处理一些包含R代码的文本。我使用Sweave生成PDF文档。我想将函数按照编写方式打印到PDF中,但是print(f)(其中f是任意函数)会删除一些关键方面,例如函数名称。例如:

f <- function(x, y = 2) {
  return(x^y)
}

print(f)

产生了这个:

> source('~/.active-rstudio-document')
function(x, y = 2) {
  return(x^y)
}

是否有类似于print的函数可以直接将内容复制并粘贴回R中,同时保留函数声明(即f <-部分)?此外,这是一个想法,能否设置字符的最大宽度?


我不是Sweave的用户,但你确定Sweave没有直接显示R源代码的方法吗?我知道其他处理器(Knitr,rmarkdown)可以做到。 - Konrad Rudolph
1个回答

6
也许有更好的方法,但类似以下代码可以解决该问题:
f <- function(x, y = 2) {
  return(x^y)
}

pretty <- function(fun){
    captured <- capture.output(fun)
    captured[1] <- paste(as.character(substitute(fun)), "<-", captured[1])

    cat(paste(captured, collapse="\n"))
}

pretty(f)

## f <- function(x, y = 2) {
##   return(x^y)
## }

1
确实不错的方法。但需要注意两点:(1)根据源代码的加载方式,这个方法可能会保留源代码的原始格式或重新格式化源代码(source选项keep.source)。 (2)它假定使用<-来分配函数(而不是例如=,<<-甚至assign)。这本身不是问题,但值得记住。 - Konrad Rudolph
在这种情况下,这是我可能愿意接受的两个警告,但我还没有机会测试所提出的解决方案。 - James Howard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接