1

有没有办法检测最近的 R 存储库?这不一定是完美的,只是相当接近。

我将讨论全局,因为可能有更好的方法来处理我正在做的事情。我正在编写一个使用available.packages().

当我检查包裹时,这会引发一个错误:

Error in contrib.url(getOption("repos"), type):
  trying to use CRAN without setting a mirror.
Calls: p_cran -> available.packages -> contrib.url
Execution is halted

我的想法是使用以下方法临时设置镜像:

x <- getOption("repos")
#SOME HOW TEST IF x IS NOT SET BUT NOT SURE HOW
if (is.not.set(x)){
    y <- get.local.mirror.function()
    options(repos=structure(c(CRAN=y)))
    on.exit(options(repos=structure(c(CRAN=x))))
}

所以我想如果这条路线是合理的,我有两个问题需要克服:

  1. 判断是否repos已设置
  2. 找到最接近或一些默认值作为存储库

提前感谢您帮助解决这个问题。

4

1 回答 1

2

这个问题的棘手部分是没有获取 R 存储库的位置 - 保持一个常量来记录主要存储库的位置应该很容易。棘手的部分是找到用户自己的位置

我的建议是检查时区设置。您可以Sys.timezone()直接阅读并应用于查找表,但这是一个字符串,可能会很痛苦。相反,我会尝试找到 UTC 偏移量,例如

tmp = as.POSIXlt(Sys.time())
offset =  as.numeric(as.POSIXct(format(tmp))) 
         - as.numeric(as.POSIXct(format(tmp, tz = "UTC")))

然后您可以根据某种表查找偏移量,并将每个波段与某个存储库匹配。请务必考虑存储库已关闭或其他情况的情况......

公平地说,您可能只需选择一个随机存储库即可获得相当合理的结果。(也许不包括一些在茫茫荒野中的人......)

确定是否已设置 repos 是一个简单的查找options("repos")getOption("repos"). 来自?options

‘repos’: URLs of the repositories for use by ‘update.packages’.
      Defaults to ‘c(CRAN="@CRAN@")’, a value that causes some
      utilities to prompt for a CRAN mirror. 

所以(getOption("repos")[1] == "@CRAN@")应该工作。

于 2012-05-25T09:09:16.507 回答