13

是否可以在运行时更改 R 函数中形式参数的默认值?

假设,我们有函数

f <- function(x=1) { 
    ...
}

我可以以某种方式将 x 的默认值从 1 更改为 2 吗?


在此先感谢,
斯文

4

4 回答 4

7

更新:2020-12-13

此方法不再可用

是的,默认包允许您这样做。

于 2012-04-18T15:09:13.623 回答
2

另一种方法(显示在不同的SO 帖子中)是使用该formals功能,例如:

formals(f) <- 2

于 2016-02-10T18:23:28.927 回答
1

由于CRAN 不再提供Defaults包,因此您可以使用default

举个例子:

x <- list(a = 1, b = 2, c = 3)
default::default(unlist) <- list(use.names = FALSE)
unlist(x)
#> [1] 1 2 3

unlist <- default::reset_default(unlist)
unlist(x)
#> a b c 
#> 1 2 3

reprex 包(v0.2.0.9000)于 2019 年 3 月 22 日创建。

于 2019-03-22T14:57:24.873 回答
1

我尝试为packagefinder具有fp()指向别名的库执行相同的参数包装findPackage()。我尝试了各种方法,包括 using formals(),但最后,唯一对我有用的是以下 3 个变体:

#--------------------------------------
# packagefinder
#--------------------------------------
# fp = findPackage
# Set default to use: 
#   fp(... , display = "console", return.df = TRUE)
#--------------------------------------
fp <- function(...) {
  packagefinder::fp(..., display="console", return.df=TRUE)
}

fp <- function(...) invisible(findPackage(..., display="console", return.df=TRUE))
fp <- function(..., display="console", return.df=TRUE) packagefinder::fp(...,display=display, return.df=return.df)

我无法使用的formals()方法。

# Fail-1
formals(fp) <- alist(... = , display="console", return.df=TRUE)

# Fail-2
MY_ARGS <- list(display="console", return.df=TRUE)
formals(fp)[names(MY_ARGS)] <- MY_ARGS

其他相关帖子:

于 2020-12-13T18:00:47.863 回答