2013-08-13 22 views
5

Ho un elenco, con 3 "colonne":ottieni le prime voci in righe di elenco?

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

Come posso accedere al es le prime 10 voci di ogni colonna?

test[c(1:10),] 

non funziona. So che funziona per data.frames:

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

Come posso risolvere questo con gli elenchi?

Modifica: Per avere una risposta più generale:

Come faccio ad avere le voci da 15 a 20 nella colonna 1 e 3? Ecco quello che faccio per data.frames:

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

sembra che l'indicizzazione si differenzia molto tra data.frames e liste.

+6

Ciao, ho notato hai * mai * votato/accettato una risposta. Potresti voler leggere le sezioni [** circa **] (http://stackoverflow.com/about) e [** FAQ **] (http://stackoverflow.com/faq) del sito web per aiutarti Ottieni il massimo da SO. Se una risposta risolve il tuo problema, potresti * considerare * l'upvoting e/o contrassegnarlo come accettato per mostrare la risposta alla domanda, spuntando il piccolo segno di spunta verde accanto alla risposta adatta. Non sei ** obbligato a farlo, ma aiuta a mantenere il sito pulito da domande senza risposta e premia chi si prende il tempo per risolvere il tuo problema. –

risposta

9

È possibile farlo con le funzioni lapply() e 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 

Se ci saranno meno di n= valori nella lista degli elementi, allora questo spettacolo tutti i valori.

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 
+0

+1 per la contabilità dei casi limite. –

3

A seconda del tipo di ritorno che si desidera, lapply o sapply sarà utile. Userei [ per ottenere gli elementi che si desidera:

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 
+0

la tua soluzione lapply() produrrà valori NA se ci saranno meno di 10 valori nell'elemento list e ciò potrebbe essere fuorviante. –

+0

@DidzisElferts punto preso, ma che non era parte del problema originale. Se l'OP ritorna e dice che è un requisito, utilizzerei la soluzione. –

2

È possibile utilizzare Map funzione che è utile se si hanno due o più di due ingressi in funzione:

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 
+3

Semplifica con: 'Map (head, test, 10)'. – Thomas

Problemi correlati