Избежать цикла в списке в 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-петель, и я знаю, что в начале не будет никаких изменений, потому что y[[s]][[n]] имеет длину 2, но это будет изменено в течение следующих шагов.

Я надеюсь, что вы понимаете мою проблему и спасибо за ответ!

Метки

1 ответ

  1. Существует способ итерации двух списков 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)
    

    конечно, вы можете вложить это решение, чтобы проверить другие списки в элементе текущего элемента списка.