【发布时间】:2011-05-26 16:09:12
【问题描述】:
我想知道如何在 R 中自动检测操作系统,例如将东西放在 .Rprofile 中。
【问题讨论】:
-
相关:stackoverflow.com/questions/2096473/… 但下面的答案更完整。
标签: r operating-system
我想知道如何在 R 中自动检测操作系统,例如将东西放在 .Rprofile 中。
【问题讨论】:
标签: r operating-system
switch(Sys.info()[['sysname']],
Windows= {print("I'm a Windows PC.")},
Linux = {print("I'm a penguin.")},
Darwin = {print("I'm a Mac.")})
由于我花了很多时间来解决这个问题,我认为其他人也会受益。
问候,
【讨论】:
> Sys.info()
sysname
"Linux"
release
"2.6.32-26-generic"
version
"#48-Ubuntu SMP Wed Nov 24 09:00:03 UTC 2010"
【讨论】:
R.version$os 但Sys.info() 更适合测试。
R.version 的帮助页面显示“不要使用 R.version$os 测试代码运行的平台:请改用 .Platform$OS.type。”烦人的是,它没有提到Sys.info() 的适用性。
我不确定是否使用Sys.info(),因为帮助页面显示它并非在所有 R 平台上都实现;也许改用.Platform? ?.Platform 有很多有用的信息,因为:
‘.Platform’是一个列表,里面有一些 R所在平台的详细信息 被建。这提供了手段 编写可移植操作系统的 R 代码。
R 中包含的包似乎也比Sys.info 更频繁地使用.Platform 。
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
【讨论】:
由于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)
}
【讨论】: