我想设置foreach函数的形式参数。我将使用.combine参数给出一个简单的例子。设置'foreach'函数的形式参数
我写了改变功能的甲缩醛(下面的代码)
bind<-function(FUN,args.new) {
args.all<-formals(FUN)
args.all[names(args.all) %in% names(args.new)]<-args.new
FUN.tmp<-FUN
formals(FUN.tmp)<-args.all
FUN.tmp
}
所以一般的包装,我改变的foreach功能
library(foreach)
foreach.bind<-bind(foreach,list('.combine'='rbind'))
的甲缩醛,当我检查新的甲缩醛我得到(与预期的一样):
> formals(foreach.bind)
$...
$.combine
[1] "rbind"
$.init
$.final
NULL
$.inorder
[1] TRUE
$.multicombine
[1] FALSE
$.maxcombine
if (.multicombine) 100 else 2
$.errorhandling
c("stop", "remove", "pass")
$.packages
NULL
$.export
NULL
$.noexport
NULL
$.verbose
[1] FALSE
>
但是当我调用foreach.bind时,所有工作都像.combine var没有设置!例如,声明:
a<-function(x) c(1,x)
,并呼吁:
> foreach.bind(i=list(1,2,3)) %do% a(i)
[[1]]
[1] 1 1
[[2]]
[1] 1 2
[[3]]
[1] 1 3
>
正如我所说的,像.combine参数没有被正式成立。
在另一方面,如果我叫原来的功能它炒菜:
> foreach(i=list(1,2,3),.combine='rbind') %do% a(i)
[,1] [,2]
result.1 1 1
result.2 1 2
result.3 1 3
>
不管怎么说,有谁能够给我解释一下什么是在这种情况下发生?或者提供其他方式来“绑定”foreach功能?
我不确定更改正式参数列表是什么,但http://stackoverflow.com/questions/6547219/ how-to-bind-function-arguments描述了如何去做你想做的事情。 – zwol
我看到这篇文章。这正是我的绑定函数所做的。正如史蒂夫所说,这是foreach函数的一个问题,它检查缺少的值。 – MSardelich
我特指'Curry'函数(在被接受的答案的顶部),它不会*做你的绑定函数所做的事情,而且似乎更有可能在一般情况下正常工作。 – zwol