source(...,chdir = TRUE)似乎没有改变目录

时间:2013-10-23 11:14:25

标签: r chdir

我对R很新,我正在尝试提供一个再次采购文件的文件。所以我有一个文件,让我们称之为mother.R,它包含一个源代码:

source ("grandmother.R")

mother.R和grandmother.R在同一目录中。

我现在想要母亲来源.R:

source ("C:/Users/whatever/R/mother.R", chdir=T)

我的假设是chdir=T会导致在C:/Users/whatever/R/下查找源中的源,但是在这样的采购时它找不到grandmother.R。我是否想念chdir?有没有办法做到这一点,而不必在mother.R?

中使用绝对路径

1 个答案:

答案 0 :(得分:8)

您对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

因为R在grandmother.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为您提供处理权时,您最终会在您开始的位置结束,这意味着chdirsource调用的本地地方,如@CarlWitthoft指出的那样。

> getwd()
[1] "/Users/me"