5

我对 R 很陌生,我正在尝试获取一个再次获取文件的文件。所以我有一个文件,我们称之为mother.R,其中包含一个源调用:

source ("grandmother.R")

母亲.R 和祖母.R 在同一个目录中。

我现在想获取mother.R:

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

我的假设是,这chdir=T会导致在源代码中查找源代码C:/Users/whatever/R/,但在像这样采购时找不到祖母.R。我误会了chdir吗?有没有办法做到这一点而不必在mother.R中使用绝对路径?

4

1 回答 1

11

您对工作原理的理解对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"
于 2013-10-23T11:39:50.527 回答