Extraire data frames d'une liste de data frames

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Théodore Perron-Kyritsos
Messages : 12
Enregistré le : 04 Juil 2017, 12:41

Extraire data frames d'une liste de data frames

Messagepar Théodore Perron-Kyritsos » 05 Juil 2017, 13:25

Bonjour,

J'ai une list nommée l comprenant plusieurs dataframe (obtenue grâce à lapply), comment puis je extraire ces tableaux de données afin de les traiter independamment ?

Merci.

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Extraire data frames d'une liste de data frames

Messagepar Logez Maxime » 05 Juil 2017, 14:14

Bonjour,

tout dépend de ce que tu entends par extraction. Si c'est extraire un élément d'une liste ça se fera avec les doubles crochets :

Code : Tout sélectionner

l1 <- list(Iris = iris, Indo = Indometh)

head(l1[[1]])
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
S'il s'agit d'extraire ces data.frame dans des objets du même nom que ceux de la liste :

Code : Tout sélectionner

sapply(names(l1), function(x) assign(x, l1[[x]], envir = globalenv()))
ls()
[1] "Indo" "Iris" "l1"
Si tu n'as pas de noms :

Code : Tout sélectionner

sapply(seq_along(l1), function(x) assign(sprintf("tab%1d", x), l1[[x]], envir = globalenv()))
ls()
[1] "Indo" "Iris" "l1"   "tab1" "tab2"
Cordialement,
Maxime

Théodore Perron-Kyritsos
Messages : 12
Enregistré le : 04 Juil 2017, 12:41

Re: Extraire data frames d'une liste de data frames

Messagepar Théodore Perron-Kyritsos » 05 Juil 2017, 15:21

La deuxième solution que vous proposez convient parfaitement à ma question !

Juste une question pour mieux comprendre ce que je fais sur R, la formulation orale de :

Code : Tout sélectionner

sapply(names(l1), function(x) assign(x, l1[[x]], envir = globalenv()))


Serait : à chaque élément de ma liste l1 je le place dans mon global envirronement tout en le nommant par son nom à l'intérieur de ma liste.

Je ne comprend pas bien ce que fait names() en début de fonction, pourquoi cela ne marche t'il pas seulement en métant :

Code : Tout sélectionner

sapply(l1, function(x) assign(x, l1[[x]], envir = globalenv()))


Merci !


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron