Команда 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, если вы выполнить код, а не источник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.кадр) не работал со мной, я всегда получаю ошибку.
решение
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")
это самый лучший способ для меня, чтобы писать скрипты, независимо от того, какой компьютер вы используете.
Я понимаю, что это устарело, но я не мог получить прежние ответы, чтобы работать очень удовлетворительно, поэтому я хотел внести свой метод в случае, если кто-то еще столкнется с той же ошибкой, упомянутой в комментариях к ответу шмеля.
мой основан на простой системной команде. Все, что вы кормите функцию-это имя вашего скрипта:
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% уверенным, что я нахожусь в нужном месте, но это необязательно.
большинство графических интерфейсов предполагают, что если вы находитесь в каталоге и "открыть", дважды щелкните или иным образом попытайтесь выполнить .R file, что каталог, в котором он находится, будет рабочим каталогом, если не указано иное. Графический интерфейс Mac предоставляет способ изменить это поведение по умолчанию, которое может быть изменено в панели запуска настроек, которые вы устанавливаете в запущенном сеансе и вступают в силу при следующем "запуске". Вы также должны смотреть на:
?Startup
The RStudio документация гласит:
" при запуске через ассоциацию файлов, RStudio автоматически устанавливает рабочий каталог в каталог открытого файла."Настройка по умолчанию для RStudio должна быть зарегистрирована как обработчик .R файлов, хотя есть также упоминание о возможности установить "ассоциацию" по умолчанию с RStudio for .Рдата И.Расширения Р. Независимо от того, имеют ли статус "обработчик" и статус "ассоциация" одинаковы в Linux, я не могу рассказывать.
dirname(parent.frame(2)$ofile)
тоже не работает для меня, но следующее (Как предложено в https://stackoverflow.com/a/35842176/992088) работает для меня в ubuntu 14.04
dirname(rstudioapi::getActiveDocumentContext()$path)