我有一个文件夹列表。在每个文件夹中都有一个与 R 相同的脚本,必须在文件夹中的文件上运行。我编写了一次脚本并将脚本复制到每个文件夹中。问题是我有一个大约 100 个文件夹的列表,所以我不可能在当前工作目录中手动设置 wd()。我想知道是否可以使用例如“。”来设置当前工作目录。这样:
setwd("/User/myname/./")
或者以另一种简单的方式告诉 R 当前的工作目录,而不是每次都输入文件夹名称。
我有一个文件夹列表。在每个文件夹中都有一个与 R 相同的脚本,必须在文件夹中的文件上运行。我编写了一次脚本并将脚本复制到每个文件夹中。问题是我有一个大约 100 个文件夹的列表,所以我不可能在当前工作目录中手动设置 wd()。我想知道是否可以使用例如“。”来设置当前工作目录。这样:
setwd("/User/myname/./")
或者以另一种简单的方式告诉 R 当前的工作目录,而不是每次都输入文件夹名称。
这个怎么样?
# set the working directory to the main folder containing all the directories
setwd( "/user/yourdir/" )
# pull all files and folders (including subfolders) into a character vector
# keep ONLY the files that END with ".R" or ".r"
r.scripts <- list.files( pattern=".*\\.[rR]$" , recursive = TRUE )
# look at the contents.. now you've got just the R scripts..
# i think that's what you want?
r.scripts
# and you can loop through and source() each one
for ( i in r.scripts ) source( i )
据我了解,您想触发一批 R 脚本,其中脚本分布在多个文件夹中。
就个人而言,我可能会编写一个 shell 脚本(或操作系统等效)来执行此操作,而不是在 R 中执行它。
for dir in /directoriesLocation/*/
do
cat $dir/scriptName.R | R --slave --args $arg1 $arg2
done
其中$dir是包含 R 脚本scriptName.R的所有目录的位置
除了其他很好的答案之外,该source
函数还有一个chdir
参数,可以将工作目录临时更改为源文件所在的目录。
一种选择是使用list.files
和/或其他工具为每个脚本文件创建一个带有文件名(包括路径)的向量。然后source
每个文件并让source
处理chdir
为您设置工作目录。