2013-04-09 21 views
54

Che cos'è la differenza tra dataframe e lista in R? Quale dovrebbe essere usato quando? Quale è più facile da ripetere?Qual è la differenza tra dataframe e lista in R?

Problema esatto: Devo prima memorizzare 3 elementi di stringa come "a", "b", "c". Più avanti per ognuno di questi, ho bisogno di aggiungere altri 3 elementi; per esempio per "a" devo aggiungere "a1", "a2", "a3". Successivamente devo usare nested for loops per accedere a questi elementi.

Quindi sono confuso a utilizzare dataframe o elenco o qualche altro tipo di dati, in cui potrei prima archiviare e quindi aggiungere (tipo di ogni colonna)?

Attualmente sto ottenendo gli errori, come "numero di elementi da sostituire non è un multiplo di lunghezza di sostituzione"

+0

Penso che questi possono aiutare voi .. http://www.r-tutor.com/r- introduzione/data-frame e http://www.r-tutor.com/r-introduction/list – Futuregeek

+0

Era davvero quella brutta domanda? Sono un newbee in R e provengono da java e C#, questo linguaggio di scripting sembrava difficile ... :( – ShazSimple

+1

@ShazSimple La domanda in sé non è poi così male, è fin troppo generica Se vuoi una soluzione al tuo problema specifico , dovrai presentarci un esempio riproducibile minimo, come spiegato [qui] (http: // StackOverflow.com/domande/5963269/how-to-make-a-great-r-riproducibile-esempio). Per questo, ti preghiamo di fare una nuova domanda. Possiamo lasciare questo qui come riferimento. –

risposta

95

La questione non è così stupido come alcune persone pensano che sia. Conosco molte persone che lottano con questa differenza e che cosa usare dove. Riassumendo:

Le liste sono di gran lunga la struttura dati più flessibile in R. Possono essere viste come una raccolta di elementi senza alcuna restrizione sulla classe, lunghezza o struttura di ciascun elemento. L'unica cosa di cui hai bisogno è di non dare due elementi con lo stesso nome. Questo potrebbe causare un sacco di confusione, e R non dà errori per questo:

> X <- list(a=1,b=2,a=3) 
> X$a 
[1] 1 

cornici dati sono liste pure, ma hanno alcune limitazioni:

  • non è possibile utilizzare lo stesso nome per due diverse variabili
  • tutti gli elementi di un frame di dati sono vettori
  • tutti gli elementi di un frame di dati hanno una lunghezza uguale.

causa di queste limitazioni e la risultante struttura bidimensionale, frame di dati può mimare alcuni del comportamento di matrici. È possibile selezionare le righe ed eseguire operazioni su righe. Non puoi farlo con le liste, perché una fila non è definita lì.

Tutto ciò implica che è necessario utilizzare un frame di dati per qualsiasi set di dati che si adatti a tale struttura bidimensionale. In sostanza, si utilizzano i frame di dati per qualsiasi set di dati in cui una colonna coincide con una variabile e una riga coincide con una singola osservazione nel senso ampio della parola. Per tutte le altre strutture, le liste sono la strada da percorrere.

Si noti che se si desidera una struttura nidificata, è necessario utilizzare gli elenchi. Poiché gli elementi di una lista possono essere elenchi, è possibile creare oggetti strutturati molto flessibili.

+1

Domanda successiva: Ho tre enormi frame di dati e devo eseguire un numero di funzioni uniformi su di essi. Dovrei metterli in una lista e 'lapply' o dovrei tenerli separati? Quale avrà meno ripercussioni sulla mia memoria e meno probabilità di liberare il mio computer? – vagabond

+1

@vagabond dovrei controllare questo, ma sospetto che il collo della bottiglia sarebbe la creazione della lista modificata da parte di lapply. Puoi controllarti con Rprofmem e tracemem se vuoi. –

0

Guardate l'esempio: Se si utilizza applicare invece di sapply per ottenere la classe -

apply(iris,2,class) # function elements are rows or columns 
Sepal.Length Sepal.Width Petal.Length Petal.Width  Species 
"character" "character" "character" "character" "character" 

sapply(iris,class) # function elements are variables 
Sepal.Length Sepal.Width Petal.Length Petal.Width  Species 
"numeric" "numeric" "numeric" "numeric"  "factor" 
Problemi correlati