在许多(解释型)编程语言中,在获取文件时设置变量,以便某些代码可以确定加载文件的文件名。例如。在ruby中,加载文件时设置变量__FILE__
。
R中有这样的功能吗?有没有办法让R代码确定它的加载位置?
示例:
main.R:
source("foo.R")
/home/bar/foo.R:
print(FULL_FILENAME)
如何更换FULL_FILENAME以使其打印:
[1] "/home/bar/foo.R"
没有对源代码中的任何文件名进行硬编码?
答案 0 :(得分:1)
您可以将它放在文件的顶部,暂时使用hack provided by Gabor:
this.file <- parent.frame(2)$ofile
如果要提取目录名称,可以执行以下操作:
this.dir <- dirname(this.file)
根据我对事物的理解,采购文件会创建两个父环境。外部(向上两步)包含有关源代码所在文件的信息。
答案 1 :(得分:1)
这是一种更可靠的方法,不依赖于source
的实现:
(function() {
print(getSrcFilename(sys.call(sys.nframe())))
})()