И Даррен, и EJJ решили использовать go и использовать %*%
Если мы не возражаем против поведения NA по умолчанию при логическом сравнении, мы можем использовать простые for-loop
или lapply
lapply(seq(la), function(i)a[[i]] == b[[i]])
Если мы хотим обеспечить некоторую безопасность, чтобы списки были «сопоставимы», мы можем сравнить их внешнюю и внутреннюю длину и обернуть это в функцию, как показано ниже
compare_each_list_element <- function(a, b){
la <- length(lla <- lengths(a))
lb <- length(llb <- lengths(b))
if(la != lb || any(lla != llb)){
warning('Either length(a) != length(b) or some length within a is not equal to some length within b!')
return(FALSE)
}
lapply(seq(la), function(i)a[[i]] == b[[i]])
}
compare_each_list_element(list(1:3, 2, c(3, 2)), list(1:3, 3, c(2, NA)))
[[1]]
[1] TRUE TRUE TRUE
[[2]]
[1] FALSE
[[3]]
[1] FALSE NA