找到包含R函数定义的源文件

use*_*356 9 r metaprogramming

我来自蟒蛇背景,我正试图赶上R,所以请耐心等待

我有一个R文件 - util.R包含以下行:

util.add <- function(a,b) a + b
util.sub <- function(a,b) { a - b }
Run Code Online (Sandbox Code Playgroud)

我的来源如下:

source('path/util.R')

我现在有两个函数对象,想要编写一个函数,如下所示:

getFilePath(util.add)

这会给我这个结果

[1] "path/util.R"

Ben*_*ker 8

srcref如果你足够深入,挖掘其中一个加载函数的属性似乎有效...

source("tmp/tmpsrc.R")
str(util.add)
## function (a, b)  
##  - attr(*, "srcref")=Class 'srcref'  atomic [1:8] 1 13 1 31 13 31 1 1
##   .. ..- attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile' <environment: 0x8fffb18> 
srcfile <- attr(attr(util.add,"srcref"),"srcfile")
ls(srcfile)
## [1] "Enc"           "filename"      "fixedNewlines" "isFile"       
## [5] "lines"         "parseData"     "timestamp"     "wd"    
srcfile$filename
## [1] "tmp/tmpsrc.R"
Run Code Online (Sandbox Code Playgroud)

  • @user1827356 `Rscript` 默认情况下不加载 `srcref`。解决方法是使用以下代码片段:`Rscript -e "options(keep.source = TRUE); source('your_main_file.R')"` 或在 `.Rprofile` 文件中永久设置选项 `keep.source` (详细信息请参阅“?启动”) (2认同)