【问题标题】:Extract the first element for every vector in a list in R提取R中列表中每个向量的第一个元素
【发布时间】:2020-06-25 07:57:12
【问题描述】:

我在 R 中有更多列表,我只想提取每个向量的第一个元素。 pb是列表的长度不一样。

`[[13]]
     start end
[1,]   274 284

[[14]]
     start  end
[1,]   275  285
[2,]   786  796
[3,]  1297 1307`

在此示例中,我希望向量 1 获得:274275 以及向量 2:786NA 我试过了:

Data$Variable2 = lapply(Data$Position,"[",2:2)
Data$Variablex = sapply(Data$Position,"[[",2)
Data$Variablex = map(Data$Position,2)

没有任何作用。因为对于第一个列表,我获得了285 而不是NA。 这只是一个例子,我有将近 8000 个不同长度的列表。

有什么想法吗?

谢谢。

【问题讨论】:

    标签: r list vector


    【解决方案1】:

    您可以检查矩阵中的行数:

    get_vec <- function(Data, n) {
      sapply(Data, function(x) if(nrow(x) >= n) x[n, 1] else NA)
    }
    
    vector1 <- get_vec(Data$Position, 1)
    vector2 <- get_vec(Data$Position, 2)
    

    【讨论】:

      【解决方案2】:

      您可以使用基于tryCatch 的矢量化函数。

      ext <- Vectorize(
        function(x, i) tryCatch(unname(x[i, 1]), error=function(e) rep(NA, length(i))),
        vectorize.args="i")
      

      用法示例:

      sapply(L, ext, 1)
      # [1] 274 275 275
      sapply(L, ext, 3)
      # [1]   NA 1297   NA
      sapply(L, ext, 1:3)
      #      [,1] [,2] [,3]
      # [1,]  274  275  276
      # [2,]   NA  786  787
      # [3,]   NA 1297   NA
      lapply(L, ext, c(1, 3))
      # [[1]]
      # [1] 274  NA
      # 
      # [[2]]
      # [1]  275 1297
      # 
      # [[3]]
      # [1] 276  NA
      

      数据:

      dn <- list(NULL, c("start", "end"))
      L <- list(matrix(c(274, 284), 1, dimnames=dn),
           matrix(c(275, 786, 1297, 285, 796, 1307), ncol=2, dimnames=dn),
           matrix(c(276, 787, 286, 797), ncol=2, dimnames=dn))
      
      L
      # [[1]]
      # start end
      # [1,]   274 284
      # 
      # [[2]]
      # start  end
      # [1,]   275  285
      # [2,]   786  796
      # [3,]  1297 1307
      # 
      # [[3]]
      # start end
      # [1,]   276 286
      # [2,]   787 797
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-25
        • 1970-01-01
        • 1970-01-01
        • 2015-03-04
        • 1970-01-01
        • 2011-07-11
        • 1970-01-01
        相关资源
        最近更新 更多