2013-06-10 4 views
23

Ho una lista dei frame di dati e ho dato ogni elemento della lista (ad esempio, ogni frame di dati) un nome:Utilizzando lapply per applicare una funzione sopra l'elenco dei frame di dati e il salvataggio di output per i file con nomi diversi

per esempio

df1 <- data.frame(x = c(1:5), y = c(11:15)) 
df2 <- data.frame(x = c(1:5), y = c(11:15)) 
mylist <- list(A = df1, B = df2) 

Ho una funzione che desidero applicare a ciascun frame di dati; In questa funzione, voglio includere una riga per scrivere i risultati in un file (eventualmente voglio fare cose più complicate come salvare grafici della correlazione tra due variabili per ogni frame di dati ma ho pensato di iniziare in modo semplice)

per esempio

NewVar <- function(mydata, whichVar, i) { 
mydata$newVar <- mydata[, whichVar] + 1 
write.csv(mydata, file = i) 
} 

voglio usare lapply() per applicare questa funzione per ogni frame di dati nella mia lista

qualcosa di simile:

hh<-lapply(mylist, NewVar, whichVar = "y") 

non riesco a capire come assegnare la "i" nel contesto di lapply in modo che i esegua l'iterazione dei nomi nell'elenco di frame di dati, salvando più file con nomi diversi (in questo caso, due file denominati A e B) che corrispondono al da fotogrammi.

+1

So che hai detto che si sta cercando di evitare l'uso di un ciclo for ma penso che sia giusto usare un ciclo for in questo caso. Non mi piace usare 'lapply()' se non viene restituito nulla. Qualcosa come 'l_ply()' dal pacchetto 'plyr' è probabilmente più appropriato. O solo un ciclo for. – MadScone

risposta

7

Si lavorerà con il seguente lapply chiamata:

lapply(names(mylist), function(x) NewVar(mylist[[x]], "y", x)) 
11

Ci sono molte opzioni. Per esempio:

lapply(names(mylist), 
     function(x)write.csv(mylist[x], 
           file =paste0(x,'.csv'))) 

o utilizzando gli indici:

lapply(seq_along(mylist), 
    function(i)write.csv(mylist[i], 
          file =paste0(names(mylist)[i],'.csv'))) 
+0

Grazie per la risposta ... Tuttavia, ho provato entrambe le opzioni e non sembrano funzionare per una funzione definita al di fuori del comando lapply. La mia vera funzione ha bisogno di fare un sacco di analisi e quindi salvare tutti i risultati quindi nessuna opzione per definirla in una riga. – user2414840

Problemi correlati