2014-12-26 58 views
3

我正在处理一些嵌入了R代码的文本。我正在使用Sweave来制作PDF文档。我想打印写入我的PDF的函数,但是print(f)其中f是一个任意的函数,消除了一些关键方面,比如函数名。例如:漂亮的打印R功能

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

print(f) 

产生这样的:

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

有一些或版本的print时打印的东西,我可以剪切和粘贴直接返回到R,保留函数声明一些类似的功能( f <-部分)?此外,这是一种思想之后,有没有办法设置字符的最大宽度?

+0

我不是一个Sweave用户,但你确定Sweave不提供显示将R源代码的一个直接的方式?我知道其他处理器(Knitr,Rmarkdown)。 –

回答

5

有可能是一个更好的办法,但像这样的工作:

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')。本身不是问题,但值得记住。 –

+0

在这种情况下,这些是我可能愿意接受的两个警告,但我还没有机会测试提议的解决方案。 –