2012-01-31 12 views
23

Sto provando a scrivere una funzione in R per analizzare in batch un numero di file in un modo simile. I file sono di classe ExpressionSetIllumina. Posso fare un vettore di caratteri (stringa) con i nomi di tutti i file nella directory e caricare ognuno di loro:Come chiamare un oggetto con la variabile di carattere con lo stesso nome

list = list.files() 
for (i in list[1]) {  
    load(i) 
} 

Questo carica i file correttamente

> ls() 
[1] "i"     "list"     "SSD.BA.vsn" 
> class(SSD.BA.vsn) 
[1] "ExpressionSetIllumina" 
attr(,"package") 
[1] "beadarray" 

Quello che voglio fare ora è quello di utilizzare i (stringa di caratteri "SSD.BA.vsn") per assegnare all'oggetto SSD.BA.vsn a una nuova dati degli oggetti in modo che:

>data = SomeFunction(i) 
>class(data) 
[1] "ExpressionSetIllumina" 
attr(,"package") 
[1] "beadarray" 

Ma tutto quello che ho provato finora solo i rendimenti dati come un vettore di caratteri con lo stesso valore di i o non funziona affatto. Quindi mi chiedo se c'è una funzione che lo farebbe per me o se avrei bisogno di affrontarlo in un altro modo.

Ho il nome di un oggetto o una variabile memorizzato come una stringa in un vettore di caratteri. Come posso usare il nome dell'oggetto stringa per fare qualcosa sull'oggetto?

risposta

31

Penso che vogliate get.

data <- get(i) 

Detto questo, una volta di iniziare a usare get (e la sua controparte, assign), di solito finisce con il codice illeggibile orribile.

Per analisi batch come la vostra, spesso è meglio leggere tutti i dati in un elenco di frame di dati, quindi utilizzare liberamente lapply. Qualcosa di simile:

data_files <- list.files() 
all_vars <- lapply(data_files, function(file) 
{ 
    vars_loaded <- load(file) 
    mget(vars_loaded, parent.frame()) 
}) 

mget è la versione di get che recupera più variabili in una sola volta. Qui è usato per recuperare tutte le cose che sono state caricate dalla chiamata da caricare.

Ora è disponibile un elenco di elenchi: l'elenco di livello superiore è correlato al file, gli elenchi di livello inferiore contengono le variabili caricate da tale file.

+0

Proprio ciò che era necessario. Grazie! Ma terrò presente il tuo suggerimento sulla leggibilità del codice. – Ophiothrix

Problemi correlati