Команда R для установки рабочего каталога в расположение исходного файла в Rstudio

Я разрабатываю некоторые учебники в R. каждый код R содержится в определенной папке. Там есть файлы данных и другие файлы. Я хочу открыть .r файл и источник его такой, что мне не нужно менять рабочий каталог в Rstudio, как показано ниже:

enter image description here

есть ли способ автоматически указать мой рабочий каталог в R.

13 ответов


Я знаю, что этот вопрос устарел, но я искал решение для этого, а также Google перечисляет это в самом верху:

this.dir <- dirname(parent.frame(2)$ofile)
setwd(this.dir)

поместите это где-нибудь в файл (лучше всего было бы начать), так что wd изменяется в соответствии с этим файлом.

согласно комментариям, это может не обязательно работать на каждой платформе (Windows, похоже, работает, Linux/Mac для некоторых). Имейте в виду, что это решение для поиска файлов, не обязательно для запуска фрагментов в этом файле.

см. также получить имя файла и путь из исходных файлов


чтобы получить местоположение исходного сценария, вы можете использовать utils::getSrcDirectory или utils::getSrcFilename. Таким образом, изменение рабочего каталога на текущий файл можно сделать с помощью:

setwd(getSrcDirectory()[1])

Это не работает в RStudio, если вы Run код, а не источникing это. Для этого вам нужно использовать rstudioapi::getActiveDocumentContext.

setwd(dirname(rstudioapi::getActiveDocumentContext()$path))

это второе решение требует, чтобы вы использовали RStudio в качестве IDE, конечно.


этот ответ может помочь:

script.dir <- dirname(sys.frame(1)$ofile)

Примечание: скрипт должен быть получен, чтобы вернуть правильный путь

Я нашел его в: https://support.rstudio.com/hc/communities/public/questions/200895567-can-user-obtain-the-path-of-current-Project-s-directory-

ответ шмелей (с родителем.кадр вместо sys.frame) не работал со мной, я всегда получаю ошибку.


решение

dirname(parent.frame(2)$ofile)

не работает для меня.

Я использую алгоритм грубой силы, но работает:

File <- "filename"
Files <- list.files(path=file.path("~"),recursive=T,include.dirs=T)
Path.file <- names(unlist(sapply(Files,grep,pattern=File))[1])
Dir.wd <- dirname(Path.file)

более легко при поиске в каталоге:

Dirname <- "subdir_name"
Dirs <- list.dirs(path=file.path("~"),recursive=T)
dir_wd <- names(unlist(sapply(Dirs,grep,pattern=Dirname))[1])

dirname(rstudioapi::getActiveDocumentContext()$path)

работает для меня, но если вы не хотите использовать rstudioapi и вы не просто, вы можете использовать символ ~ на вашем пути. Символ ~ относится к рабочему каталогу RStudio по умолчанию (по крайней мере, в Windows).

RStudio options

если ваш рабочий каталог RStudio "D:/Documents",setwd("~/proyect1") совпадает с setwd("D:/Documents/proyect1").

как только вы установите это, вы можете перейти к подкаталогу:read.csv("DATA/mydata.csv"). Это то же самое, что read.csv("D:/Documents/proyect1/DATA/mydata.csv").

если вы хотите, чтобы перейти к родительской папке, вы можете использовать "../". Например: read.csv("../olddata/DATA/mydata.csv") что же read.csv("D:/Documents/oldata/DATA/mydata.csv")

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


Я понимаю, что это устарело, но я не мог получить прежние ответы на работу очень удовлетворительно, поэтому я хотел внести свой вклад в мой метод, если кто-то еще столкнется с той же ошибкой, упомянутой в комментариях к ответу шмеля.

Mine основан на простой системной команде. Все, что вы кормите функцию, - это имя вашего скрипта:

extractRootDir <- function(x) {
    abs <- suppressWarnings(system(paste("find ./ -name",x), wait=T, intern=T, ignore.stderr=T))[1];
    path <- paste("~",substr(abs, 3, length(strsplit(abs,"")[[1]])),sep="");
    ret <- gsub(x, "", path);
    return(ret);
}

setwd(extractRootDir("myScript.R"));

выход из функции будет выглядеть как "/Users/you/Path/To/Script". Надеюсь, это поможет любому, кто мог застрять.


Я просто ищу решение этой проблемы, пришел на эту страницу. Я знаю его датированные, но предыдущие решения, где неудовлетворительные или не работали для меня. Вот моя работа, если интересно.

filename = "your_file.R"
filepath = file.choose()  # browse and select your_file.R in the window
dir = substr(filepath, 1, nchar(filepath)-nchar(filename))
setwd(dir)

Я понимаю, что это старый поток, но у меня была аналогичная проблема с необходимостью установить рабочий каталог и не смог получить ни одного из решений для меня. Вот что сработало, если кто-то еще наткнется на это позже:

# SET WORKING DIRECTORY TO CURRENT DIRECTORY:
system("pwd=`pwd`; $pwd 2> dummyfile.txt")
dir <- fread("dummyfile.txt")
n<- colnames(dir)[2]
n2 <- substr(n, 1, nchar(n)-1)
setwd(n2)

это немного запутанно, но в основном это использует системные команды для получения рабочего каталога и сохранения его в dummyfile.txt, затем R читает этот файл, используя данные.таблица::fread операционной. Остальное-просто очистка того, что было напечатано в файл, чтобы у меня остался только путь к каталогу.

Мне нужно было запустить R в кластере, поэтому не было никакого способа узнать, в каком каталоге я окажусь (задания получают номер и вычислительный узел). Это помогло мне.


Если вы работаете в Linux, вы можете попробовать следующее:

setwd(system("pwd", intern = T) )

это работает для меня.


Если вы используете rstudio, вы можете автоматически установить свой рабочий каталог в каталог скриптов, используя rstudioapi следующим образом:

library(rstudioapi)

# Getting the path of your current open file
current_path = rstudioapi::getActiveDocumentContext()$path 
setwd(dirname(current_path ))
print( getwd() )

сначала необходимо установить пакет rstudioapi. Обратите внимание, что я печатаю путь, чтобы быть на 100% уверенным, что я в нужном месте, но это необязательно.


большинство GUIs предполагают, что если вы находитесь в каталоге и "открываете", дважды щелкните или иным образом попытайтесь выполнить .R файл, что каталог, в котором он находится, будет рабочим каталогом, если не указано иное. Графический интерфейс Mac предоставляет метод изменения поведения по умолчанию, который можно изменить в панели настроек запуска, установленной в запущенном сеансе, и вступит в силу при следующем "запуске". Вы также должны смотреть на:

?Startup

В В RStudio документация гласит:

" при запуске через ассоциацию файлов RStudio автоматически устанавливает рабочий каталог в каталог открытого файла."Настройка по умолчанию для RStudio должна быть зарегистрирована в качестве обработчика .R файлы, хотя есть также упоминание о возможности установить "ассоциацию" по умолчанию с RStudio for .Rdata and .Расширения Р. Если статус "обработчик" и статус "ассоциация" одинаковы в Linux, я не могу рассказывать.

http://www.rstudio.com/ide/docs/using/workspaces


dirname(parent.frame(2)$ofile)  

тоже не работает для меня, но следующее (Как предложено в https://stackoverflow.com/a/35842176/992088) работает для меня в ubuntu 14.04

dirname(rstudioapi::getActiveDocumentContext()$path)

Если вы используете кодировку UTF-8:

path <- rstudioapi::getActiveDocumentContext()$path
Encoding(path) <- "UTF-8"
setwd(dirname(path))

вам нужно установить пакет rstudioapi, если вы еще этого не сделали.