【问题标题】:nested for loop to lapply for list of matrices - non identical output嵌套 for 循环以适用于矩阵列表 - 输出不相同
【发布时间】:2019-02-08 16:39:49
【问题描述】:

我对嵌套循环进行了计算,然后我尝试将其转换为 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    

【问题讨论】:

    标签: r for-loop nested apply lapply


    【解决方案1】:

    我们可以把代码改成

    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 而不是行

    【讨论】:

      猜你喜欢
      • 2021-02-24
      • 1970-01-01
      • 2021-11-02
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 2019-09-08
      • 1970-01-01
      相关资源
      最近更新 更多