Команда R для установки рабочего каталога в расположение исходного файла в Rstudio
Я разрабатываю некоторые учебники в R. каждый код R содержится в определенной папке. Там есть файлы данных и другие файлы. Я хочу открыть .r
файл и источник его такой, что мне не нужно менять рабочий каталог в Rstudio, как показано ниже:
есть ли способ автоматически указать мой рабочий каталог в 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 "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, я не могу рассказывать.
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, если вы еще этого не сделали.