setwd() в текущем рабочем каталоге

У меня есть список папок. В каждой папке есть R идентичный скрипт, который должен запускаться для файлов в папке. Я написал сценарий один раз и скопировал сценарий в каждую папку. Проблема в том, что у меня есть список из около 100 папок, поэтому я не могу установить setwd() в текущем рабочем каталоге вручную. Я хотел бы знать, возможно ли установить текущий рабочий каталог, например, с помощью "." в этом случае:

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

или другим простым способом, который сообщает R текущую рабочую директорию вместо того, чтобы каждый раз вводить имя папки.

3 ответа

Решение

Как насчет этого?

# 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-сценариев, где сценарии распределены по нескольким папкам.

Лично я бы, вероятно, написал сценарий оболочки (или эквивалент ОС) для этого, а не для 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 ручкой настройки рабочего каталога для вас.

Другие вопросы по тегам