вложенный в цикл для вывода списка матриц - неидентичный вывод - PullRequest
0 голосов
/ 03 сентября 2018

Я сделал расчет для вложенного цикла, затем я попытался преобразовать его в lapply, но он не показывает тот же результат, вы знаете, почему это так? Это мой код:

#list
l <- list()
l[[1]] <- matrix(c(4, 3, 20, 10), ncol=2)
l[[2]] <- matrix(c(3, 3, 40, 12), ncol=2)
l[[3]] <- matrix(c(2, 3, 60, 10), ncol=2)
#loop
##index
s <- 1:length(l)
#for loop
zzz <- list()
for (i in s){
zzz[[i]] <- apply(X = l[[i]], MARGIN = 1, 
                FUN = function(x) spDistsN1(l[[i]], x, longlat = T))
zzz
}
#lapply loop
yyy <- lapply(s, function(x){
apply(X = l[[i]], MARGIN = 1, 
    FUN = function(x) spDistsN1(l[[i]], x, longlat = T))
})

И они выводятся не одинаково, почему?

identical(zzz,yyy)
[1] FALSE    

1 Ответ

0 голосов
/ 03 сентября 2018

Мы можем изменить код на

library(sp)
yyy <- lapply(s, function(i) apply(l[[i]], 1, FUN= function(x) 
             spDistsN1(l[[i]], x, longlat = TRUE)))
identical(zzz, yyy)
#[1] TRUE

В коде OP, анонимный вызов функции, используемый в обеих функциях, равен x, поэтому в spDistsN1 x приходил от всего matrix вместо строки

...