您对工作原理的理解对source
我来说似乎是正确的。但是让我们写一个例子,这样你就可以与你的设置进行比较,也许可以找到你出错的地方。
让/Users/me/test/mother.R
文件包含以下内容:
print("I am the mother")
print(paste("The current dir is:", getwd()))
source("grandmother.R") # local path
并让/Users/me/test/grandmother.R
文件包含以下内容:
print("I am the grandmother")
你从哪里开始将有助于理解:
> getwd()
[1] "/Users/me"
这不起作用:
> source("/Users/me/test/mother.R")
[1] "I am the mother"
[1] "The current dir is: /Users/me"
Error in file(filename, "r", encoding = encoding) :
cannot open the connection
In addition: Warning message:
In file(filename, "r", encoding = encoding) :
cannot open file 'grandmother.R': No such file or directory
grandmother.R
因为 R正在目录中寻找getwd()
...
反而,
> source("/Users/me/test/mother.R", chdir = TRUE)
[1] "I am the mother"
[1] "The current dir is: /Users/me/test"
[1] "I am the grandmother"
有效,因为source()
临时将当前目录更改为/Users/me/test/
它可以找到的位置grandmother.R
。
当source
把句柄给你回来时,你最终会回到你开始的地方,这意味着就像@CarlWitthoft 指出的那样,它chdir
是本地调用。source
> getwd()
[1] "/Users/me"