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


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

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

13 94

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

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

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

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

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, я не могу рассказывать.

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, если вы еще не сделали этого.