r - 使用 forms() 更改其他人编写的 R 函数的默认参数时如何处理省略号 (...)

标签 r function arguments

当有一个 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/

相关文章:

r ggplot 动态使用 plotmath 表达式

r - 对 n*m 矩阵的所有列组合进行函数运算,生成 m*m 结果

c - 我如何解释这个看似函数声明但不符合通常模式的声明?

r - 获取作为参数传递给函数的函数名称

r - stat_compare_means 对选定组进行方差分析

ios - 我怎样才能让我的函数快速接受两个不同的对象?

javascript - 返回函数的最后一个参数

powershell - 等效于curl的PowerShell http://www.example.com/script.sh | bash -s <参数>

无法弄清楚如何使用 write() 将整数写入文件

r - 为什么 dplyr 这么慢?