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

ROperating System

R Problem Overview


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

R Solutions


Solution 1 - R

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

Solution 2 - R

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

Solution 3 - R

> Sys.info()
                                      sysname 
                                      "Linux" 
                                      release 
                          "2.6.32-26-generic" 
                                      version 
"#48-Ubuntu SMP Wed Nov 24 09:00:03 UTC 2010" 

 

Solution 4 - R

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBrian G. PetersonView Question on Stackoverflow
Solution 1 - RBrian G. PetersonView Answer on Stackoverflow
Solution 2 - RJoshua UlrichView Answer on Stackoverflow
Solution 3 - RSpacedmanView Answer on Stackoverflow
Solution 4 - RmhminaiView Answer on Stackoverflow