我想設置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