检测最近的存储库

时间:2012-05-25 02:36:10

标签: r

有没有办法检测最近的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. 查找最近或某些默认值作为回购列表
  3. 提前感谢你帮忙解决这个问题。

1 个答案:

答案 0 :(得分: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")))

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

公平地说,只需选择一个随机存储库,您就可以获得非常合理的结果。 (也许在不知名的地方排除一些......)

确定是否已设置回购是一个简单的问题,即查找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@")应该有用。