避免在R中的列表上循环

时间:2016-05-02 08:31:28

标签: r

我对R比较陌生,并试图找到解决问题的更快方法。我想做一些约束编程,我有列表,其中包含每个变量的所有可能值。为了找到一个可行的解决方案,我必须做一些切割,我现在已经意识到有很多循环。我希望有办法做一些像“lapply”这样的事情,但我还需要知道另一个列表的相关值,不知道怎么做。

以下是一个例子:

y=rep(list(rep(list(c(0, 1)), N)), S);

job=-1:J
job=rep(list(rep(list(rep(list(job), J)), N)), S)

for (s in 1:S){
  for (n in 1:N){
    if (length(y[[s]][[n]])==1 && y[[s]][[n]]==0){
      job[[s]][[n]]=rep(list(-1), J);
    }
  }
}

以下有更多这些for循环,我知道在beginnig中没有变化,因为y [[s]] [[n]]的长度为2,但在接下来的步骤中会有所改变

我希望你理解我的问题并感谢你的回答!

1 个答案:

答案 0 :(得分:0)

有一种方法可以同时迭代两个列表lapply(它们必须具有相同的长度),就像这样:

x1 = list(1, 2, 3)
y1 = list(3, 2, 3)

lapply(seq(1, length(x1)), function(i, x, y){
  if(x[[i]] == y[[i]]){
    return(TRUE)
  } else{
    return(FALSE)
  }
}, x = x1, y = y1)

当然,您可以嵌套该解决方案以检查当前列表项的元素中的其他列表。