Utilisez-vous attach() ou appeler des variables par nom ou de découpage?
De nombreux intro R de livres et de guides commencer avec la pratique de la fixation d'un data.frame
de sorte que vous pouvez appeler les variables par leur nom. J'ai toujours trouvé ça favorable pour les variables d'appels avec $
ou de notation crochet de découpage [,2]
. De cette façon, je peux utiliser plusieurs data.frame
s sans les confondre et/ou de l'utilisation itération à l'successivement les colonnes d'intérêt. J'ai remarqué que Google a récemment posté des directives de codage pour R qui inclus la ligne
1) joindre: éviter de l'utiliser
Comment les gens se sentent à propos de cette pratique?
Vous devez vous connecter pour publier un commentaire.
Je n'utilise jamais l'attacher.
with
etwithin
sont vos amis.Exemple de code:
Edit: hadley mentionne transformer les dans les commentaires. voici un code:
transform
est une variation sur l'intérieur.attach()
,with()
n'est pas "résoudre par les" fonctions. D'abord configurerprintx <- function { print(x) }
. Maintenant,with(list(x=42), printx())
échoue, même siwith(list(x=42), print(x))
etattach(list(x=42)); printx()
réussir! 🙁Je préfère utiliser
with
pour obtenir l'équivalent deattach
sur une seule commande:Cela conduit naturellement à une forme où
subset
est le premier argument:ce qui le rend assez clair que nous fonctionnons sur une sélection de données. Et tandis que de nombreux de la modélisation de la fonction à la fois
data
etsubset
arguments, l'utilisation ci-dessus est plus régulier car il s'applique également aux fonctions qui n'ont pasdata
etsubset
arguments.Le principal problème avec les joindre est qu'il peut entraîner un comportement indésirable. Supposons que vous avez un objet avec le nom xyz dans votre espace de travail. Maintenant, vous fixez dataframe abc, qui a une colonne nommée xyz. Si votre code de référence xyz, pouvez-vous garantir que c'est les références à l'objet ou le dataframe de la colonne? Si vous n'utilisez pas de joindre puis c'est facile. juste xyz se réfère à l'objet. abc$xyz se réfère à la colonne de la dataframe.
L'une des principales raisons qui attachent est fréquemment utilisé dans les manuels scolaires, c'est qu'il réduit le code.
"Fixer" est un mal de la tentation. Le seul endroit où il travaille bien, c'est dans la salle de classe où l'on est reçu une seule dataframe et on s'attend à écrire des lignes de code pour faire l'analyse sur un dataframe. L'utilisateur est peu probable que jamais l'utiliser à nouveau des données une fois que le travail est fait et remis.
Cependant, dans le monde réel, plusieurs blocs de données peuvent être ajoutés à la collection de données dans un projet particulier. En outre, souvent, on copie et colle les blocs de code à utiliser pour quelque chose de similaire. Souvent, on est emprunt de quelque chose que l'on faisait il y a quelques mois et ne peut pas se rappeler les nuances de ce qui a été appelé à partir d'où. Dans ces circonstances, on obtient noyé par l'utilisation antérieure de la "attacher".
Comme dit Leoni,
with
etwithin
sont de parfaits substituts deattach
, mais je ne serait pas tout à fait à rejeter. Je l'utilise parfois, quand je travaille directement à la R invite et que vous souhaitez tester certaines commandes avant de les écrire sur un script. En particulier lors de l'essai de plusieurs commandes,attach
peut être un plus intéressant, pratique et même inoffensif alternative àwith
etwithin
, car après l'exécution deattach
, l'invite de commande est clair pour vous d'écrire des entrées et voir les résultats.Assurez-vous de
detach
vos données une fois que vous avez terminé!Je préfère ne pas utiliser de
attach()
, car il est beaucoup trop facile à exécuter un batch de code plusieurs fois à chaque fois que l'appel deattach()
. La trame de données est ajouté au chemin de recherche à chaque fois, en prolongeant inutilement. Bien sûr, une bonne pratique est égalementdetach()
à la fin du bloc de code, mais qui est souvent oublié.Au lieu de cela, j'utilise xxx$y ou xxx[,"y"]. C'est plus transparent.
Une autre possibilité est d'utiliser l'argument données disponibles dans de nombreuses fonctions qui permet à l'individu de variables pour être référencé au sein de la trame de données. par exemple,
lm(z ~ y, data=xxx)
.Alors que, moi aussi, je préfère ne pas utiliser de
attach()
, il a sa place quand vous avez besoin de persistance d'un objet (dans ce cas, undata.frame
) par le biais de la durée de vie de votre programme quand vous avez plusieurs fonctions de l'utiliser. Au lieu de passer l'objet dans toutes les R la fonction qui l'utilise, je pense qu'il est plus commode de le garder dans un endroit et appeler ses éléments au besoin.Cela dit, je voudrais l'utiliser seulement si je sais combien le souvenir que j'ai de disponible et que si je fais en sorte que je
detach()
cedata.frame
une fois qu'il est hors de portée.Suis-je logique?