Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

get first entries in rows of list?

Tags:

list

indexing

r

I have a list, with 3 "columns":

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

How can I access the e.g. first 10 entries of each column?

test[c(1:10),]

doesn't work. I know it works for data.frames:

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

How do I solve this with lists?

Edit: To get an answer more general:

How do I get the entries 15 to 20 in column 1 and 3? Here is what I do for data.frames:

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

It seems like the indexing differs a lot between data.frames and lists.

like image 346
TWiSt_kid Avatar asked Aug 13 '13 12:08

TWiSt_kid


2 Answers

You can do it with functions lapply() and 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

If there will be less than n= values in list element then this show all values.

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
like image 144
Didzis Elferts Avatar answered Oct 10 '22 16:10

Didzis Elferts


Depending on the return type you want, lapply or sapply will be useful. I'd use [ to get the elements you want:

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
like image 35
Simon O'Hanlon Avatar answered Oct 10 '22 16:10

Simon O'Hanlon