Problème user function appliquée à un data frame

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

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Problème user function appliquée à un data frame

Messagepar Pierre-Yves Berrard » 21 Nov 2018, 08:55

Colin Ginot a écrit :Pierre-Yves, bien que la fonction est appelée 100 000 fois, ce n'est pas très gênant car le lapply permet de le faire en parallèle (enfin c'est ce que j'en ai compris), ce qui rend mon calcul presque instantané.

Effectivement, j'en étais resté à la fonction de départ qui était appelée 15*100000 fois.
PY

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

Re: Problème user function appliquée à un data frame

Messagepar Logez Maxime » 21 Nov 2018, 09:13

re,

Pierre-Yves, bien que la fonction est appelée 100 000 fois, ce n'est pas très gênant car le lapply permet de le faire en parallèle (enfin c'est ce que j'en ai compris), ce qui rend mon calcul presque instantané.
Si tu fais un lapply sur un tableau 100000*15 alors la fonction n'est pas appelée 100 000 fois mais 15 fois. Le lapply applique la même fonction aux colonnes de ton tableau.

Attention le lapply n'effectue pas les calculs en "parallèle" contrairement à parLapply du package parallel par exemple. La parallélisation sous entend que tu fais des calculs sur plusieurs cœurs, ce qui n'est pas le cas ici. Les calculs se font en série colonne après colonne et sur un seul cœur.
Pour un calcul aussi rapide que celui-ci la parallélisation ne t'apporterait rien.

Cordialement,
Maxime

Colin Ginot
Messages : 11
Enregistré le : 19 Nov 2018, 14:08

Re: Problème user function appliquée à un data frame

Messagepar Colin Ginot » 21 Nov 2018, 09:20

Code : Tout sélectionner

Si tu fais un lapply sur un tableau 100000*15 alors la fonction n'est pas appelée 100 000 fois mais 15 fois. Le lapply applique la même fonction aux colonnes de ton tableau. :

Oui c'est bien ce que j'avais compris.

Merci pour les précisions sur la parallélisation. Cependant, si on ne peux pas parler de parallélisation car on n'utilise pas plusieurs GPU ou CPU, le lapply permet bien de faire les calculs sur toutes les données d'un même vecteur en même temps ou alors c'est une espèce de boucle for optimisée pour garder en mémoire les bonnes valeurs ? Mais le processeur n'est lui capable que de faire un calcul après l'autre non ?
Du coup je ne comprend pas vraiment comment marche la fonction lapply d'un point de vu machine.

On s'éloigne un peu du sujet mais je trouve ça intéressant de comprendre les interfaces entre la machine et le code.

Colin

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

Re: Problème user function appliquée à un data frame

Messagepar Logez Maxime » 21 Nov 2018, 09:33

Le lapply permet d'appliquer à chaque valeur d'un vecteur la même fonction. Quand ton vecteur est de mode liste, (c'est le cas d'un data.frame qui est une "sous classe" de liste) alors tu appliques la même fonction à chaque élément de ta liste (à chaque colonne de ton data.frame) mais pas à proprement parler en même temps. L'opération se fait sur une colonne, puis sur la suivante, etc. jusqu'à ce que l'opération soit faite sur toutes les colonnes. C'est équivalent à faire une boucle sur tes colonnes et à appliquer ta fonction aux valeurs de chacune de tes colonnes. C'est bien pour ça qu'on ne peut pas parler de parralélisation.
Par contre l'avantage c'est que ces opérations se font sur toutes les colonnes sans pour autant avoir besoin de programmer à la main une boucle.

Cordialement,
Maxime

Colin Ginot
Messages : 11
Enregistré le : 19 Nov 2018, 14:08

Re: Problème user function appliquée à un data frame

Messagepar Colin Ginot » 21 Nov 2018, 09:45

Merci de ces précisions.

Colin.


Retourner vers « Questions en cours »

Qui est en ligne

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