我写了一个不同函数和脚本的列表,并将它们放在工作目录的一些子文件夹中,这样我就可以将所有函数划分为参数(描述性统计,地统计,回归......)
当我输入source(“function_in_subfolder”)时,R告诉我没有功能。 我明白这是因为函数必须保留在工作目录中。 有没有办法将工作目录的子文件夹设置为函数的源(让我们说以分层方式)?
答案 0 :(得分:5)
source
function有一个chdir
参数,如果设置为TRUE
,则会将工作目录设置为脚本所在的目录。新工作目录在脚本执行期间有效,之后会更改回来。承担以下结构
main.R
one/
script.R
two/
subscript.R
您可以从source("one/script.R", chdir=T)
致电main.R
,然后在script.R
致电source("two/subscript.R", chdir=T)
。
但是,默认情况下,R将从当前目录开始搜索。没有“搜索路径列表”之类的东西,例如PATH
环境变量,尽管显然是someone attempted to create such a thing。我强烈建议不要试图“随处”找到一个脚本文件。相反,请准确指出要在哪个位置运行哪个脚本。否则,简单地将文件添加到脚本中导致的名称冲突可能导致不可预测的行为,这也很难调试。
答案 1 :(得分:0)
一种解决方案是使用list.files
来获取函数的完整路径。例如:
myfunction.path <- list.files(getwd(),
recursive=TRUE,full.names=TRUE,
pattern='^myfunction.R$')
然后你可以打电话给它:
source(myfunction.path)
list.files
的递归调用可能很昂贵,因此您可能应该在分析开始时调用它一次,并将所有函数路径存储在命名列表中。并且要小心如果您在2个不同的子目录中创建具有相同名称的2个源文件,则结果不能是唯一的。