Utiliser lapply pour appliquer une fonction sur la liste des bases de données et sauvegarder la sortie dans des fichiers avec des noms différents

j'ai une liste de bases de données et j'ai donné à chaque élément de la liste (par exemple, chaque base de données) un nom:

e.g.

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)  

j'ai une fonction que je veux appliquer à chaque base de données; dans cette fonction, je veux inclure une ligne pour écrire les résultats au dossier (éventuellement, je veux faire des choses plus compliquées comme sauver des parcelles de la corrélation entre deux variables pour chaque base de données, mais j'ai pensé que je commencerais simple)

e.g.

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

je souhaitez utiliser lapply() pour appliquer cette fonction à chaque bloc de données dans ma liste

quelque chose comme:

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

je ne peux pas comprendre comment attribuer le "je" dans le contexte de lapply de sorte que i itère les noms dans la liste des cadres de données, enregistrant plusieurs fichiers avec des noms différents (dans ce cas, deux fichiers nommés A et B) qui correspondent aux cadres de données modifiés.

23
demandé sur MERose 2013-06-10 10:39:13

2 réponses

Il va travailler avec le suivant lapply appel:

lapply(names(mylist), function(x) NewVar(mylist[[x]], "y", x))
8
répondu Sven Hohenstein 2013-06-10 06:52:21

Il existe de nombreuses options. Par exemple:

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

ou à l'aide d'indices :

 lapply(seq_along(mylist),
     function(i)write.csv(mylist[i],
                          file =paste0(names(mylist)[i],'.csv')))
11
répondu agstudy 2013-06-10 06:49:41