L'attribution et le retrait des objets dans une boucle: eval(parse(coller(
Je suis à la recherche d'assigner des objets dans une boucle. J'ai lu qu'une certaine forme de eval(parse(
est ce dont j'ai besoin pour cela, mais je suis en cours d'exécution dans les erreurs de cotation invalid text
ou no such file or directory.
ci-Dessous est un exemple de code de ce que j'essaie de faire:
x <- array(seq(1,18,by=1),dim=c(3,2,3))
for (i in 1:length(x[1,1,])) {
eval(parse(paste(letters[i],"<-mean(x[,,",i,"])",sep="")
}
Et quand j'ai fini d'utiliser ces objets, je voudrais les supprimer (les objets réels sont très grandes et causer des problèmes de mémoire plus tard...)
for (i in 1:length(x[1,1,])) eval(parse(paste("rm(",letters[i],")",sep="")))
Les deux eval(parse(paste(
parties de ce script, les erreurs de retour pour invalid text
ou no such file or directory
. Ai-je raté quelque chose dans l'utilisation de eval(parse(
? Est-il un moyen plus facile/mieux à affecter des objets dans une boucle?
Vous devez vous connecter pour publier un commentaire.
Qui est assez dégueulasse et frustrant de chemin à faire à ce sujet. Utilisation
assign
d'attribuer et derm
liste de l'argument de supprimer des objets.Chaque fois que vous vous sentez le besoin d'utiliser
parse
, n'oubliez pas de fortune(106):Bien qu'il semble qu'il y a de meilleures façons de gérer cela, si vous avez vraiment ne souhaitez utiliser la fonction "eval(parse(paste(" approche, ce qui vous manque plus que le texte drapeau.
analyser suppose que son premier argument est un chemin à un fichier dont il va ensuite analyser. Dans votre cas, vous n'avez pas envie d'aller lire un fichier à parser, tu veux directement passer du texte à analyser. Ainsi, votre code, réécrite (dans ce qui a été appelé dégoûtant formulaire ci-dessus) serait
En plus de ne pas spécifier "text=" il vous manque quelques parenthèses sur le côté droit de fermer votre analyser et eval consolidés.
Il semble que votre problème a été résolu, mais pour les gens qui atteignent cette page qui veulent vraiment utiliser la fonction eval(parse(coller, je tenais à préciser.
Il est préférable de ne pas utiliser la fonction eval(coller( ou attribuer dans ce cas. Les deux cas, cela crée beaucoup de variables globales qui vient de provoquer des maux de tête plus tard.
La meilleure approche est d'utiliser des structures de données existantes pour stocker vos objets, les listes sont le plus général pour ces types de cas.
Ensuite, vous pouvez utiliser le bouton [ls]appliquer des fonctions à faire des choses avec les différents éléments, généralement beaucoup plus rapide qu'en parcourant les variables globales. Si vous souhaitez enregistrer tous les objets créés, vous avez juste une liste de sauvegarder/charger. Quand vient le temps de les supprimer, vous venez de supprimer 1 objet unique et tout est parti (pas de boucle). Vous pouvez nommer les éléments de la liste de se référer à eux par leur nom plus tard, ou par index.
Très mauvaise idée; vous ne devez jamais utiliser
eval
ouparse
dans R, sauf si vous savez parfaitement ce que vous faites.Les Variables peuvent être créées à l'aide de:
Et retiré par:
Mais dans votre cas, il peut être fait avec de simples nommé vecteur:
eval
est une bonne idée, dans certaines langues, mais le calcul sur la langue est l'une des R les forces de... stat.l'epf de zurich.ch/R-manuel/R-devel/doc/manual/... Mais oui, dans ce contexte, attribuer est préféré.eval
jusqu'à ce que vous êtes en avance 😉