在当前工作目录中设置setwd()。

6

我有一个文件夹列表。在每个文件夹中都有一个 R 相同的脚本,必须在文件夹中运行。我写了一次脚本,并将脚本复制到每个文件夹中。问题是我有大约100个文件夹,所以不可能手动设置当前工作目录setwd()。我想知道是否有可能使用例如"."设置当前工作目录,方法如下:

setwd("/User/myname/./")

或者采用另一种简单的方式,告诉R当前工作目录而不是每次都输入文件夹名称。

1
你为什么要在每个文件夹中复制相同的脚本,而且为什么需要设置工作目录?你想要实现什么? - Roland
1
为什么不只编写一个脚本,然后通过循环对每个文件夹执行其内容呢? - sebastian-c
嗨,Roland和Sebastian!由于我从一个非常大的矩阵开始(约2.8G),所以我将其分成子文件夹,并在每个文件夹中运行相同的脚本,因为我必须对文件执行相同的操作。 - Fuv8
3个回答

8

这个怎么样?

# 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 )

1
你可能会对list.files函数中的pattern参数感兴趣。 - Roland
1
如果OP想循环遍历文件夹并将工作目录设置为它们,则可以考虑list.dirs(recursive = FALSE)(如果它们都在同一级别)。 - sebastian-c
嗨,安东尼,是的,这差不多就是我想要的。 - Fuv8
1
你可能还想在source中加入chdir = T - hadley

3
除了其他很棒的回答之外,source函数还有一个chdir参数,它会临时将工作目录更改为源文件所在的目录。
一种选项是使用list.files和/或其他工具创建一个包含每个脚本文件的文件名(包括路径)的向量。然后,使用source函数分别对这些文件进行源代码处理,让sourcechdir帮助您设置工作目录。

3
据我所知,您想触发一批R脚本,这些脚本分布在多个文件夹中。
个人认为,我可能会编写一个shell脚本(或操作系统等效),而不是在R中执行。
for dir in /directoriesLocation/*/
do
    cat $dir/scriptName.R | R --slave --args $arg1 $arg2
done

其中$dir是包含R脚本scriptName.R的所有目录的位置。


嗨!是的,我运行一个 .sh 脚本来调用一个 .bash 脚本来运行所有的 .R 脚本,因为我正在集群上工作。 - Fuv8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接