获取列表行中的第一个条目?

时间:2013-08-13 12:52:28

标签: r list indexing

我有一个列表,有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和list之间有很大差异。

3 个答案:

答案 0 :(得分:9)

您可以使用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

答案 1 :(得分:3)

根据您想要的返回类型,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

答案 2 :(得分:2)

如果函数中有两个或两个以上的输入,则可以使用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