问题描述
我的手指开始厌倦键入update.packages(checkBuilt = T,ask = F)
。我想知道是否有可能在update.packages()
函数中重新定义默认参数。到目前为止,我已经尝试将以下内容添加到我的 .Rprofile 文件中:
utils::assignInNamespace(
"update.packages",function(checkBuilt = TRUE,ask = FALSE,...) {
update.packages(checkBuilt = checkBuilt,ask = ask,...)
},"utils"
)
update.packages()
Error: C stack usage 7976404 is too close to the limit
我还尝试在 .Rprofile 中将formals()
与以下内容配合使用:
local({
args_new <- alist(lib.loc = .libPaths(),checkBuilt = TRUE)
ind <- which(methods::formalArgs(update.packages) %in% names(args_new))
formals(update.packages)[ind] <- args_new
})
但是启动R时会导致以下错误:
Error in formals(update.packages) : object 'update.packages' not found
解决方法
正如@Roland在评论中所说,您的定义是递归的。您不必理会assignInNamespace
:将新功能保留在工作区中就足够了。然后,您可以在其定义中使用utils::update.packages
,例如
update.packages <- function(checkBuilt = TRUE,ask = FALSE,...)
utils::update.packages(checkBuilt = checkBuilt,ask = ask,...)
出于帮助页面上列出的原因,您应避免使用assignInNamespace
。