根据操作系统或条件更改工作目录

时间:2018-10-08 15:12:03

标签: r

我使用R在2台Windows机器以及macbookpro上使用我的Google驱动器。根据我所使用的计算机,最终我会取消注释并注释掉启动脚本的代码行,如下所示:

#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,对我来说将非常有用,而且我还没有找到该怎么做的方法。

我知道在rstudio中使用project是理想的选择,但是Google云端硬盘在尝试对该文件进行同步并每次对其进行任何更改时都将其锁定时遇到了问题。这很烦人,所以我没有使用过Rstudio项目。

1 个答案:

答案 0 :(得分:1)

有关您计算机的数据应该在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为Windows提供sysname值。


另一种方法是仅基于文件路径进行检查,并将工作目录设置为列表中的第一个可用目录:

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

setwd(Find(dir.exists, locations))

以波浪号~开头的路径在Windows机器上将不可用-因此这也将区分macOS和Windows。