обнаружение операционной системы в R (например, для адаптивных файлов .Rprofile) - PullRequest
46 голосов
/ 16 декабря 2010

Мне было интересно, как автоматически обнаружить операционную систему в R, например, чтобы поместить вещи в .Rprofile.

Ответы [ 4 ]

87 голосов
/ 16 декабря 2010
switch(Sys.info()[['sysname']],
Windows= {print("I'm a Windows PC.")},
Linux  = {print("I'm a penguin.")},
Darwin = {print("I'm a Mac.")})

Поскольку мне потребовалось больше, чем тривиальное количество времени, чтобы разобраться в этом, я подумал, что другие тоже выиграют.

С уважением,

  • Брайан
32 голосов
/ 16 декабря 2010

Я не уверен в использовании Sys.info(), так как на странице справки сказано, что это не реализовано на всех платформах R; может вместо этого использовать .Platform? ?.Platform имеет много полезной информации, так как:

Plat. Platform ’- список с некоторыми детали платформы, под которой R был построен. Это обеспечивает средства для написать OS-портативный код R.

Также кажется, что пакеты, включенные в R, используют .Platform намного чаще, чем 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
6 голосов
/ 16 декабря 2010
> Sys.info()
                                      sysname 
                                      "Linux" 
                                      release 
                          "2.6.32-26-generic" 
                                      version 
"#48-Ubuntu SMP Wed Nov 24 09:00:03 UTC 2010" 
2 голосов
/ 24 октября 2016

Поскольку Sys.info() и .Platform$OS.type дают разные результаты, в зависимости от того, какая ОС работает, я провел дополнительный поиск и обнаружил следующую функцию на https://www.r -bloggers.com / identifying-the-os-from-г /

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...