Изменить рабочий каталог в зависимости от операционной системы или условий - PullRequest
0 голосов
/ 08 октября 2018

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

#setwd("C:/Users/sweetusername/Google Drive/projectX") # win10 work
#setwd("~/Google Drive/projectX") # macbookpro
setwd("C:/Users/sweetusername_butslightlydifferent/Google Drive/projectX") # win10 home

Я хотел бы иметь возможность проверить как таковой:

ifelse(operating system == mac, setwd("~/Google Drive/projectX"),
ifelse(find C:/Users/sweetusername,
  setwd("C:/Users/sweetusername/Google Drive/projectX"), 
ifelse(find C:/Users/sweetusername_butslightlydifferent,
  setwd("C:/Users/sweetusername_butslightlydifferent/Google Drive/projectX"),
print("Location Not Found: Check Directory Structure"))))

Я знаю, что это довольно глупое мышление, и кто-то элегантно подумал, как это сделать.Я нашел, где люди сканируют каталог на наличие файлов, чтобы я мог получить синтаксис для последних двух частей.Но проверка, является ли ОС Mac или даже Linux, была бы очень полезной для меня, и я не нашел, как это сделать.

Я знаю, что использование project в rstudio было бы идеальным, но я имеюпроблемы с Google Диском, пытающимся синхронизировать этот файл и блокировать его каждый раз, когда в него вносятся какие-либо изменения.Это очень раздражает, поэтому я не использовал проекты Rstudio.

1 Ответ

0 голосов
/ 08 октября 2018

Данные о вашем компьютере должны быть доступны в Sys.info().

Mac OS обычно имеет имя Darwin, так что вы можете использовать его, чтобы проверить, находитесь ли вы на компьютере mac:

sysname <- Sys.info()["sysname"]

if(sysname == "Darwin") {
    setwd("~/Google Drive/projectX") # example on mac machine
} else if(sysname == "Linux") {
    setwd("~/GoogleDrive/projextX") # example on linux machine
} else if(sysname == "Windows") {
    setwd("C:/Users/sweetusername/Google Drive/projectX") # example on win machine
}

Спасибо @RLave за предоставление значения sysname для Windows.


Альтернативным способом является проверка только на основе путей к файлам и установка рабочего каталога на первый доступный каталог.в вашем списке:

locations <- c("~/Google Drive/projectX",
               "C:/Users/sweetusername/Google Drive/projectX",
               "C:/Users/sweetusername_butslightlydifferent/Google Drive/projectX",
               )

setwd(Find(dir.exists, locations))

Пути, начинающиеся с тильды ~, будут недоступны на компьютерах с Windows - поэтому это также различает макросы и окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...