当有一个 R 函数使得我的使用始终与默认值不同时,为了使我的代码简洁且更易于维护,我喜欢在脚本开头执行类似以下操作(在本例中我是使用 R.oo
包中的 ll()
):
> formals(ll.default)$private <- T;
这很好用。但是,现在我想创建一个默认选项,该函数从其 ...
参数中读取该选项(在本例中,我想添加参数 is.function=F
为默认值,...
是第二个正式参数)。有人知道该怎么做吗?我尝试了以下...
> formals(ll.default)[[2]]$is.function <-F
Error in formals(ll.default)[[2]]$is.function <- F :
argument "*tmp*" is missing, with no default
> formals(ll.default)$`...`$is.function <-F
Error in formals(ll.default)$...$is.function <- F :
argument "*tmp*" is missing, with no default
> formals(ll.default)$`...`<-alist(is.function=F)
> ll()
Error in ll.default() : '...' used in an incorrect context
> formals(ll.default)$`...`<-pairlist(is.function=F)
> ll()
Error in ll.default() : '...' used in an incorrect context
我查看了Defaults
包,但文档说:
Currently, it is NOT possible to pass values for . . . arguments, only formally specified arguments in the original function definition
有人知道一种方法来实现这一点,而不是因为一个参数而编写包装器吗?
最佳答案
您可以在功能
库中使用Curry
:
library(functional)
> test <- function(private=FALSE,...) return(private)
> Curry(test,private=TRUE)
function (...)
do.call(FUN, c(.orig, list(...)))
<environment: 0x4d0bed8>
> testP <- Curry(test,private=TRUE)
> testP()
[1] TRUE
> test()
[1] FALSE
> test2 <- function(...,private=FALSE) return(private)
> test2()
[1] FALSE
> test2P <- Curry(test2,private=TRUE)
> test2P()
[1] TRUE
但是,您想要的示例函数 ll
失败了,这让我相信还发生了其他事情:
> llP <- Curry(ll, private=TRUE)
> ll()
member data.class dimension objectSize
1 llP function NULL 1008
> llP()
Error in get("...", envir = envir) :
argument "..." is missing, with no default
关于r - 使用 forms() 更改其他人编写的 R 函数的默认参数时如何处理省略号 (...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15253494/