R - 如何使用多个后续函数处理点点点(省略号/"...") - 即仅传递一些变量

标签 r parameter-passing ellipsis nonlinear-optimization do.call

我正在使用 alabama 包中的 constrOptim.nl 进行非线性优化。但是,我的问题更多地与传递参数(和点-点-点(省略号/“...”)和可能的 do.call)有关 - 所以我首先给出一个一般示例,然后再给出引用constrOptim.nl函数。

假设,我有以下功能 - 我只能从中编辑 secondthird不能 first.

first<-function (abc, second, third, ...){
second(abc,...)
third(abc,...)
}

second<- function(abc, ttt='nothing special'){
print(abc)
print(ttt)
}

third<- function(abc, zzz="default"){
print(abc)
print(zzz)
}

我想要的输出与我刚运行时得到的输出相同

second("test", ttt='something special')
third("test", zzz="non-default")

这是

"test"
"something special"
"test"
"non-default"

但是,下面的代码无法执行此操作。

first("test",second=second, third=third, ttt='something special',zzz="non-default")

如何更改调用或 secondthird 函数以使其工作?

http://www.r-bloggers.com/r-three-dots-ellipsis/ 在这里,我发现了一些 do.call 可以帮助我的建议,但目前我无法理解它应该如何工作。

我无法更改 first 函数,因为这是我的特定问题中的 constrOptim.nl - 它旨在能够将更多参数传递给不同的函数。但是,我可以更改 secondthird 函数 - 因为它们是我想要最小化的限制和函数。显然我也可以更改函数的调用。

所以更具体地说,这是我的具体问题: 我执行具有非线性限制的最大似然估计:

minimize <- function(Param,VARresiduals){ 
   #Blahblah
   for (index in 1:nrow(VARreisduals)){
   #Likelihood Blahbla
   }
  return(LogL)
}
heq<-function(Param,W){   
  B<-Param[1:16]
  restriction[1]<-Lrestriction%*%(diag(4)%x%(solve(W))%*%as.vector(B))
  restriction[2:6]<-#BlablaMoreRestrictions
  return(restriction)
}

现在我调用 constrOptim.nl...

constrOptim.nl(par=rnorm(20), fn=minimize,hin=NULL heq=heq,VARresiduals,W)

...但是得到同样的错误,就像我在调用上面的 first 函数时收到的一样 - 类似于:“第二个错误(abc,...):未使用的参数(zzz = “非默认”)。

如何更改 minimizeheq 或调用? :) 提前致谢

在帖子被标记为重复后

更新: 相关帖子的答案更改了我示例中的 first 函数 - 因为它在那里实现了一个调用其他函数的 do.call 。但是,我无法更改示例中的第一个函数,因为我想让 constrOptim.nl 运行各种不同的函数。还有别的办法吗?

最佳答案

我想出的解决方案不是很优雅,但很有效。

second_2<- function(abc, extras){
  a<-extras[[1]]
  print(abc)
  print(a)
}

third_2<- function(abc, extras){
  a<-extras[[2]]
  print(abc)
  print(a)
}

extras<-list()
extras[[1]]<-'something special'
extras[[2]]<-"non-default"
extras


first("test",second=second_2, third=third_2, extras)

令人惊讶的是,下面的代码也可以工作,但结果略有不同

 first("test",second=second, third=third, extras) 

毕竟,现在设置默认值有点笨拙,但并非不可行。

关于R - 如何使用多个后续函数处理点点点(省略号/"...") - 即仅传递一些变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37251002/

相关文章:

r - 如何读取 R 中的 Mapinfo 文件

python - cx_ORACLE传递参数ORA-01008错误

sql-server - ssrs多值参数存储过程

bash - 大量参数(操作数)在命令行参数传递中排在首位

jquery - 为长链接添加 <wbr> 和省略号(使用 jquery.linkify 链接)

html - 带有内联元素的 CSS 省略号?

r - 找不到 KDE 安装 - RKWard

r - 删除以数值开头的字符串的最后部分

r - 从机器学习算法的角度看 h2o.ai 和 SparkMLlib 的区别

R:如何使用省略号中的参数等列表元素?