J'ai une liste de blocs de données et j'ai donné un nom à chaque élément de la liste (par exemple, chaque bloc de données):
par exemple.
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 trame de données; Dans cette fonction, je veux inclure une ligne pour écrire les résultats dans un fichier (finalement, je veux faire des choses plus compliquées comme enregistrer les tracés de la corrélation entre deux variables pour chaque bloc de données, mais je pensais commencer simplement)
par exemple.
NewVar <- function(mydata, whichVar, i) {
mydata$newVar <- mydata[, whichVar] + 1
write.csv(mydata, file = i)
}
Je souhaite utiliser lapply()
pour appliquer cette fonction à chaque bloc de données de ma liste
quelque chose comme:
hh<-lapply(mylist, NewVar, whichVar = "y")
Je ne peux pas comprendre comment attribuer le "i" dans le contexte de lapply afin que i
répète les noms dans la liste des trames de données, enregistrant plusieurs fichiers avec des noms différents (dans ce cas, deux fichiers nommés A
et B
) qui correspondent aux trames de données modifiées.
Cela fonctionnera avec l'appel lapply
suivant:
lapply(names(mylist), function(x) NewVar(mylist[[x]], "y", x))
Il existe de nombreuses options. Par exemple:
lapply(names(mylist),
function(x)write.csv(mylist[x],
file =paste0(x,'.csv')))
ou en utilisant des index:
lapply(seq_along(mylist),
function(i)write.csv(mylist[i],
file =paste0(names(mylist)[i],'.csv')))