【问题标题】:Detect OS and change the path appropriately in R检测操作系统并在 R 中适当更改路径
【发布时间】:2014-04-20 19:23:30
【问题描述】:

我的电脑上安装了两个操作系统 - windows 和 linux。当我在 Windows 中编写脚本然后尝试在 linux 上运行它们时,我必须更改每条路径。

例如,要在 Windows 中设置我的工作目录,我必须输入 setwd("d://MyStatistics")

然而,在linux中,这个命令是setwd("/media/55276F9D5951EC83/MyStatistics")

如果来自其他系统,是否可以自动检测当前操作系统并更改路径?

【问题讨论】:

    标签: linux windows r path


    【解决方案1】:

    如果两个系统在一个地方都有相同的文件夹集,您可能很容易实现“一条适合所有人”的目标(编辑:只需重新阅读问题,因为您谈论的是一台计算机,这应该是案子)。然后,您可以使用类似 Roland 的答案的方法将该位置设置为脚本开头的工作目录,或者通过将其添加到每个操作系统中的 Rprofile.site 使其成为 R 打开的默认目录。然后,您可以通过粘贴到初始目录来设置工作目录。

    类似:

    #add line to Rprofile.site for both OS
    setwd("/path/to/folder/containing/data/folders")
    

    然后在脚本中:

    starting.directory = getwd() #at beginning of script
    setwd(paste0(starting.directory, "/MyStatistics")) 
    

    您也可以在 Rprofile.site 中添加“starting.directory”作为对象:

    #add line to Rprofile.site for both OS
    starting.directory <- "/path/to/folder/containing/data/folders"
    

    然后使用与上面相同的 paste0。

    您还可以在两个操作系统中更改 Rprofile.site 以包含具有各种工作目录名称的对象,这些对象指向具有操作系统特定路径的同一文件夹,因此它们可以被称为“setwd(myStatsDirectory)”,并且粘贴到如上。也许最好的方法是对您希望能够与两个系统一起使用的每个驱动器执行类似的操作,这样您就可以执行以下操作:

    setwd(D.Drive)
    setwd(paste0(D.Drive, "/folder1/folder2/etc"))
    

    (编辑:这与 Simon O'Hanlon 对 Roland 的回答的评论类似,在主目录中使用波浪号)

    【讨论】:

      【解决方案2】:

      使用测试R.version$platform.Platform$OS.typif 条件。

      # It's as simple as...
      path <- "/media/55276F9D5951EC83/MyStatistics"
      if( .Platform$OS.type == "windows" )
        path <- "d:\\MyStatistics"
      
      setwd( path )
      

      【讨论】:

      • 谢谢,但这只是我问题的第一部分。现在我必须以某种方式改变路径。
      • 我不明白。如果if 没有解决您的问题,您需要提供更多详细信息。
      • 更准确地说,现在我知道如何检测操作系统(我们有一个返回当前操作系统的函数),但是如果我的路径是 windows 样式,我现在必须自动将其更改为 linux 样式(反之亦然)。
      • 我不明白你的问题。您可以在两个系统的 setwd 中使用相同的路径分隔符 ( / )。另外,在您的示例中,我相信您的意思是 \\ 而不是 //.
      • @SimonO'Hanlon,您的解决方案解决了我的问题,但我的问题是我们是否可以消除重复性,因为使用这种方法我必须始终提供两种路径(windows 和 linux)。
      【解决方案3】:

      这个link 会很有帮助。

      Sys.info() 返回 R 运行平台的详细信息

      【讨论】:

      • 文档指出此功能并非在所有 R 平台上都实现。我会使用.Platform {base},它返回一个带有属性的列表:OS.type = 字符串,给出计算机的操作系统(系列)。 “unix”或“windows”之一。
      • @KemHeyndels 感谢这对了解很有用(猜我应该 RT(F)M!)
      猜你喜欢
      • 2015-01-15
      • 2017-03-25
      • 2015-10-14
      • 1970-01-01
      • 2012-02-05
      • 2014-06-25
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多