detecting operating system in R (e.g. for adaptive .Rprofile files)

前端 未结 4 1454
野趣味
野趣味 2020-11-27 04:44

I was wondering how to automatically detect operating system in R, for example to place things in the .Rprofile.

相关标签:
4条回答
  • 2020-11-27 05:18

    Since Sys.info() and .Platform$OS.type produce differing results depending upon which OS is running, I searched some more and found the following function at https://www.r-bloggers.com/identifying-the-os-from-r/

    get_os <- function(){
      sysinf <- Sys.info()
      if (!is.null(sysinf)){
        os <- sysinf['sysname']
        if (os == 'Darwin')
          os <- "osx"
      } else { ## mystery machine
        os <- .Platform$OS.type
        if (grepl("^darwin", R.version$os))
          os <- "osx"
        if (grepl("linux-gnu", R.version$os))
          os <- "linux"
      }
      tolower(os)
    }
    
    0 讨论(0)
  • 2020-11-27 05:27
    > Sys.info()
                                          sysname 
                                          "Linux" 
                                          release 
                              "2.6.32-26-generic" 
                                          version 
    "#48-Ubuntu SMP Wed Nov 24 09:00:03 UTC 2010" 
    
    0 讨论(0)
  • 2020-11-27 05:28
    switch(Sys.info()[['sysname']],
    Windows= {print("I'm a Windows PC.")},
    Linux  = {print("I'm a penguin.")},
    Darwin = {print("I'm a Mac.")})
    

    Since it took me more than a trivial amount of time to sort this out, I thought other would benefit as well.

    Regards,

    • Brian
    0 讨论(0)
  • 2020-11-27 05:38

    I'm not sure about using Sys.info() since the help page says it is not implemented on all R platforms; maybe use .Platform instead? ?.Platform has a lot of useful information, since:

    ‘.Platform’ is a list with some details of the platform under which R was built. This provides means to write OS-portable R code.

    It also seems the packages included with R use .Platform much more frequently than Sys.info.

    josh: /c/R/R-2.12.0-src/src/library
    > grep ".Platform" */R/* | wc -l
    144
    josh: /c/R/R-2.12.0-src/src/library
    > grep ".Platform\$OS.type" */R/* | wc -l
    99
    josh: /c/R/R-2.12.0-src/src/library
    > grep "Sys.info" */R/* | wc -l
    4
    
    0 讨论(0)
提交回复
热议问题