有没有办法检测最近的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))))
}
所以,如果这条路线合理,我想要克服两个问题:
repos
提前感谢你帮忙解决这个问题。
答案 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@")
应该有用。