【问题标题】:Get access to the first row of a list in R访问R中列表的第一行
【发布时间】:2016-07-18 12:35:37
【问题描述】:

以 R 中的列表为例

A=list()
A[[1]]=c(1,2)
A[[2]]=c(3,4)

是否可以返回一个向量,该向量给出列表中每个条目的第一个元素(此处为c(1,3))?

作为扩展:如果列表的元素不仅仅是向量而是矩阵,那又如何呢?是否可以获得包含每个矩阵第二行第一个元素的向量?

【问题讨论】:

  • c(A[[1]][1],A[[2]][1])

标签: r list


【解决方案1】:
 A=list()
 A[[1]]=c(1,2)
 A[[2]]=c(3,4)
 A[[3]]=c(5,6)

 A
 # [[1]]
 # [1] 1 2

 # [[2]]
 # [1] 3 4

 # [[3]]
 # [1] 5 6

我。仅对第一个元素使用 sapply() 函数的第一个解决方案

 sapply(A,'[[',1)
 # [1] 1 3 5

对于获取让我们说每个嵌套列表的第 1、第 3、第 4 个元素。不适用于本例

 sapply(A,`[`,c(1,3,4))

二。使用for 循环的第二种解决方案

 for(i in 1:length(A)){
 print (A[[i]][1])
 }
 # [1] 1
 # [1] 3
 # [1] 5

【讨论】:

  • 谢谢。这只是一个简单的例子。我的列表要大得多,所以我认为也许有一个没有循环的函数。
  • 您可以使用sapply() 获取包含嵌套列表对象所有第一个元素的向量形式。
【解决方案2】:

试试下面这个:

sapply(A, "[", 1) 

【讨论】:

    【解决方案3】:

    你也可以这样做:

    unlist(lapply(A, "[[", 1))
    
    # [1] 1 3
    

    对于第二个元素:

    unlist(lapply(A, "[[", 2))
    
    # [1] 2 4
    

    为所有人做到这一点:

    t(sapply(seq_along(A[[1]]), function(x) unlist(lapply(A, "[[", x))))
    
    #     [,1] [,2]
    #[1,]    1    3
    #[2,]    2    4
    

    【讨论】:

    • 作为我的问题的扩展:如果列表的元素不仅是向量,而且是矩阵,怎么办?例如,我如何访问每个矩阵第二行的每个第一个元素?
    • @fabian92 这是另一个问题。您可以发布它并查看答案或编辑您的问题以反映这一点。
    【解决方案4】:

    不是最优雅的,但你可以使用 as.data.frame() 将列表转换为数据框,然后提取第一行。

    A=list()
    A[[1]]=c(1,2)
    A[[2]]=c(3,4)
    b<-as.vector(as.data.frame(A)[1,])
    b
    
      c.1..2. c.3..4.
    1       1       3
    

    【讨论】:

      猜你喜欢
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多