我正在尝试从包updateR()
配置installr
以使用我公司的内部CRAN,以便最终用户更轻松地进行升级。 updateR()
使用另一个函数check.for.updates.R()
来确定是否存在更新的版本。 check.for.updates.R()
有一个参数,page_with_download_url="http://cran.rstudio.com/bin/windows/base/"
我要设置为"http://internal/cran/bin/windows/base/"
。
我使用formals(check.for.updates.R)$page_with_download_url = "http://lnxaws01/cran/bin/windows/base/"
尝试设置默认参数。
formals(check.for.updates.R)
#>$notify_user
#>[1] TRUE
#>
#>$use_GUI
#>[1] TRUE
#>
#>$page_with_download_url
#>[1] "http://internal/cran/bin/windows/base/"
#>
#>$pat
#>[1] "R-[0-9.]+-win"
所以,这似乎有效。检查它是否真正有效:
check.for.updates.R(use.GUI=F)
#>No need to update. You are using the latest R version:
R version 3.1.3 (2015-03-09)[1] FALSE
注意 - 在发布时,R 3.2.0刚刚发布,我们的内部CRAN仍在运行3.1.3,所以这是正确的响应。
然而,updateR()
继续检查RStudio CRAN并最终认为可以使用新包。
从CRAN中移除Defaults
包(也许它无论如何都没有帮助)如何更改嵌套在另一个函数中的函数的默认参数值?
答案 0 :(得分:2)
这不起作用,因为当你"修改" check.for.updates.R
,你并没有真正修改它。而是创建一个分配给掩盖原始副本的全局环境的副本。因此,如果您运行该功能,它看起来就像您所期望的那样。但是,如果你运行updateR
,它将查找其命名空间环境,这是原始未更改的函数所在的位置。
由于updateR
未公开所需的check.for.updates.R
参数,您可以改为trace
check.for.updates.R
:
trace(
installr::check.for.updates.R,
quote(page_with_download_url <- "http://internal/cran/bin/windows/base/")
)
这将使该行代码成为check.for.updates.R
中的第一行。请注意,我们完全重写了参数,而不仅仅是更改默认值,但似乎这对您有用。