在运行时更改R函数的默认参数

时间:2012-04-18 15:03:40

标签: r reflection

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

我们假设,我们有函数

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

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


提前谢谢,
斯文

4 个答案:

答案 0 :(得分:5)

是的,Defaults包允许您这样做。

答案 1 :(得分:1)

替代方案(显示在不同的SO post中)是使用formals函数,例如:

formals(f) <- 2

答案 2 :(得分:0)

由于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 package(v0.2.0.9000)于2019-03-22创建。

答案 3 :(得分:0)

我尝试对packagefinder库进行相同的参数包装,该库的别名为fp()指向findPackage()。我尝试了各种方法,包括使用 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

与此相关的其他相关帖子: