【问题标题】:get first entries in rows of list?获取列表行中的第一个条目?
【发布时间】:2013-08-15 02:26:53
【问题描述】:

我有一个列表,有 3 个“列”:

test = list(1:100, 1:100,1:100)

如何访问例如每列的前 10 个条目?

test[c(1:10),]

不起作用。我知道它适用于 data.frames:

as.data.frame(test)[1:10,1:3]

如何用列表解决这个问题?

编辑:要获得更笼统的答案:

如何获取第 1 列和第 3 列中的条目 15 到 20?这是我对 data.frames 所做的:

as.data.frame(test)[c(15:20),c(1,3)]

data.frames 和列表之间的索引似乎有很大不同。

【问题讨论】:

  • 您好,我注意到您从未投票/接受了答案。您可能需要阅读网站的 aboutFAQ 部分,以帮助您充分利用 SO。如果某个答案确实解决了您的问题,您可能需要考虑投票和/或将其标记为已接受,以表明问题已得到回答,方法是勾选合适答案旁边的绿色小复选标记。您没有义务这样做,但它有助于保持网站没有未回答的问题,并奖励那些花时间解决您的问题的人。

标签: r list indexing


【解决方案1】:

您可以使用函数 lapply()head() 来做到这一点。

lapply(test,head,n=10)
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10

[[2]]
 [1]  1  2  3  4  5  6  7  8  9 10

[[3]]
 [1]  1  2  3  4  5  6  7  8  9 10

如果列表元素中的值少于n=,则显示所有值。

test = list(1:100, 1:100,1:5)
lapply(test,head,n=10)
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10

[[2]]
 [1]  1  2  3  4  5  6  7  8  9 10

[[3]]
[1] 1 2 3 4 5

【讨论】:

    【解决方案2】:

    根据您想要的返回类型,lapplysapply 将很有用。我会使用[ 来获取您想要的元素:

    lapply( test , `[` , 1:10 )
    [[1]]
     [1]  1  2  3  4  5  6  7  8  9 10
    
    [[2]]
     [1]  1  2  3  4  5  6  7  8  9 10
    
    [[3]]
     [1]  1  2  3  4  5  6  7  8  9 10
    
     sapply( test , `[` , 1:10 )
          [,1] [,2] [,3]
     [1,]    1    1    1
     [2,]    2    2    2
     [3,]    3    3    3
     [4,]    4    4    4
     [5,]    5    5    5
     [6,]    6    6    6
     [7,]    7    7    7
     [8,]    8    8    8
     [9,]    9    9    9
    [10,]   10   10   10
    

    【讨论】:

    • 如果列表元素中的值少于 10 个,您的 lapply() 解决方案将产生 NA 值,这可能会产生误导。
    • @DidzisElferts 指出,但这不是原始问题的一部分。如果 OP 回来说这是一个要求,我会使用你的解决方案。
    【解决方案3】:

    您可以使用Map 函数,如果您在一个函数中有两个或两个以上的输入,这将很有帮助:

    mytest<-Map(function(x) x[1:10], test)
    > mytest
    [[1]]
     [1]  1  2  3  4  5  6  7  8  9 10
    
    [[2]]
     [1]  1  2  3  4  5  6  7  8  9 10
    
    [[3]]
     [1]  1  2  3  4  5  6  7  8  9 10
    

    【讨论】:

    • 简化为:Map(head,test,10).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 2017-05-19
    • 2014-10-10
    • 2016-12-14
    相关资源
    最近更新 更多