Lorsque je dois filtrer un data.frame, c'est-à-dire extraire des lignes qui remplissent certaines conditions, je préfère utiliser la subset
fonction:
subset(airquality, Month == 8 & Temp > 90)
Plutôt que la [
fonction:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Il y a deux raisons principales à ma préférence:
Je trouve que le code se lit mieux, de gauche à droite. Même les personnes qui ne connaissent rien à R pourraient dire ce que fait la
subset
déclaration ci-dessus.Étant donné que les colonnes peuvent être appelées variables dans l'
select
expression, je peux enregistrer quelques frappes. Dans mon exemple ci-dessus, je n'ai dû taperairquality
qu'une seule fois avecsubset
, mais trois fois avec[
.
Je vivais donc heureux, en utilisant subset
partout parce qu'il est plus court et se lit mieux, même en préconisant sa beauté à mes collègues codeurs R. Mais hier, mon monde s'est brisé. En lisant la subset
documentation, je remarque cette section:
Attention
Il s'agit d'une fonction pratique destinée à être utilisée de manière interactive. Pour la programmation, il est préférable d'utiliser les fonctions de sous-ensemble standard comme [, et en particulier l'évaluation non standard du sous-ensemble d'arguments peut avoir des conséquences imprévues.
Quelqu'un pourrait-il aider à clarifier ce que les auteurs veulent dire?
Premièrement, que veulent-ils dire par « pour une utilisation interactive »? Je sais ce qu'est une session interactive, par opposition à un script exécuté en mode BATCH mais je ne vois pas quelle différence cela devrait faire.
Ensuite, pourriez-vous expliquer " l'évaluation non standard du sous-ensemble d'arguments " et pourquoi elle est dangereuse, peut-être fournir un exemple?
dplyr::filter
a le même problème. Autrement dit, si l'environnement possède une variable portant ce nom, il l'utilisera à la place de la variable dans le bloc de données. Rend le débogage déroutant!
with(airquality, airquality[Month == 8 & Temp > 90, ])