我对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,但在接下来的步骤中会有所改变
我希望你理解我的问题并感谢你的回答!
答案 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)
当然,您可以嵌套该解决方案以检查当前列表项的元素中的其他列表。