我喜欢 R 频繁更新以便为我提供最好的新包,但它似乎对我的 cron 计划中的 R 脚本造成了问题。
我注意到每次 ubuntu updater 更新我的 r-base 包时,当我尝试运行我的脚本时,它都会显示类似“ there is no library(XML)
”的内容。
然后我必须去“ update.packages("XML")
”获取与我的新版本 R 兼容的该包的新版本。
我安装了很多软件包,因此我发现自己经常会追踪它们并输入像“ update.packages(c("XML", "ggplot2", "timeseries"))
”这样的长命令。
当我更新后忘记执行此操作时,我的所有 R cron 脚本都会失败。
是否有人有一个好的工作流程可以自动检查我已经安装了哪些包,并在需要更新时更新它们?
答案1
您可以在 cron 脚本中添加一个install.packages()
调用,以便它在运行其余 R cron 作业之前安装所有当前包。
install.packages
采用向量,因此您甚至可以将该文件与您想要在其他地方安装的软件包一起保存,然后在您的 cron 更新脚本中自动加载它。
installed.packages()
返回已安装包的向量,因此您可以使用%in%
它来调用尚未安装的包:
desired.packages <- c("plyr","taRifx","ggplot2")
missing.packages <- ! desired.packages %in% installed.packages()[,1]
if( any(missing.packages) ) {
install.packages( desired.packages[missing.packages] )
}
编辑:可能更好的解决方案
按照@JoshuaUlrich 的说法聊天中的建议:
将其放在您的.Rprofile 中。
local({
.libPaths("/home/evilgenius/R/library")
})
然后,在 Ubuntu 清除所有内容后,您就可以运行update.packages()
,君主制将会恢复。
此解决方案需要更加谨慎,以免携带与当前版本 R 不兼容的软件包。