R - 更改嵌套函数调用的默认参数

时间:2015-04-20 14:12:42

标签: r

我正在尝试从包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包(也许它无论如何都没有帮助)如何更改嵌套在另一个函数中的函数的默认参数值?

1 个答案:

答案 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中的第一行。请注意,我们完全重写了参数,而不仅仅是更改默认值,但似乎这对您有用。

相关问题