是否可以在foreach中使用zip迭代器(即将两个迭代器“ zip”在一起)?

Ada*_*ski 5 foreach iterator r

我有两个长度相等的对象(一个是通过解析JSON生成的列表,另一个是数组的多维切片),例如:

library(rjson)
library(foreach)
iter1<-iter( fromJSON(file=jsonfilename)$someJSONarray )
iter2<-iter( myarr, by="row" )
Run Code Online (Sandbox Code Playgroud)

我需要能够执行以下操作:

out=foreach(x=zipiter(iter1,iter2),combine=list) %do%
{
    #Do stuff with elements from both iterators accessed by e.g. x[[1]] and x[[2]]
}
Run Code Online (Sandbox Code Playgroud)

是否有任何标准的方法(例如在带有boost Zip迭代器的Python / C ++中)?

Ste*_*ton 6

包中有一个izip函数itertools可以执行您描述的操作:

library(itertools)
out <- foreach(x=izip(iter1, iter2)) %do% {
    # x[[1]] contains a value from iter1
    # x[[2]] contains a value from iter2
}
Run Code Online (Sandbox Code Playgroud)

但是我更愿意指定多个循环变量foreach

out <- foreach(x=iter1, y=iter2) %do% {
    # x contains a value from iter1
    # y contains a value from iter2
}
Run Code Online (Sandbox Code Playgroud)

两种解决方案都并行地迭代来自迭代器的值。如果要在列表中使用两个参数,则izip更加方便。