Мне было интересно, как автоматически обнаружить операционную систему в R, например, чтобы поместить вещи в .Rprofile.
Обнаружение операционной системы в R (например, для адаптивных файлов .Rprofile)
Ответ 1
Я не уверен в использовании Sys.info()
, поскольку на странице справки сказано, что он не реализован на всех R-платформах; возможно, вместо этого используйте .Platform
? ?.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
Ответ 2
switch(Sys.info()[['sysname']],
Windows= {print("I'm a Windows PC.")},
Linux = {print("I'm a penguin.")},
Darwin = {print("I'm a Mac.")})
Так как мне потребовалось больше тривиального количества времени, чтобы разобраться в этом, я подумал, что другие выиграют.
Привет,
- Брайан
Ответ 3
> Sys.info()
sysname
"Linux"
release
"2.6.32-26-generic"
version
"#48-Ubuntu SMP Wed Nov 24 09:00:03 UTC 2010"
Ответ 4
Так как Sys.info()
и .Platform$OS.type
производят разные результаты в зависимости от того, какая ОС работает, я искал еще несколько и нашел следующую функцию в 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)
}