将函数的输出反馈到R中的嵌套foreach循环

时间:2015-07-13 12:07:25

标签: r loops foreach nested

我希望创建一个嵌套的foreach循环,以便外循环执行一个函数并将此输出提供给嵌套的foreach循环。我想%dopar%只用于内部循环,输出应该是一个列组合数组,用于来自外部foreach循环的每次迭代。代码如下:

data <- readLines('listofthings.txt') ##this is the master list
h <- as.vector(words(length=6,alphabet=s2c("ACGT"))) ##this is an array of six-lettered words that I want to search in data1 below

foreach (i = 1:length(data),.packages=c("ade4","seqinr")) %:% 
data1 <- s2c(c2s(data[i])) ##this converts the string to characters & is every item in the master 'data' list
g <- foreach (j = 1:length(data1),.packages=c("ade4","seqinr"),.combine=cbind) %dopar% {
  g[which(h==c2s(data1[j:(j+5)]))]+1 ##adds +1 to the same row which has the six letter word as h
}

因此,我希望代码将data1提供给内部循环,然后执行后续操作。我已经写了评论中每一步都做了什么,它可能仍然令人困惑。我想知道的是如何编写一个嵌套的foreach循环,以便外循环将函数的输出提供给内部foreach循环。

谢谢!

1 个答案:

答案 0 :(得分:0)

foreach接受它在函数参数的第一个元素中传递的数据,在...的帮助文件中“命名为”?foreach。这些是foreach迭代的元素。下面我创建一个包含向量的列表的示例,但这些向量可以很容易地是data.frames,matrices或者what-have-you。

library(foreach)

ml <- list(el1 = rnorm(10), el2 = rnorm(20), el3 = rnorm(30))

foreach(i = ml) %do% length(i)

[[1]]
[1] 10

[[2]]
[1] 20

[[3]]
[1] 30