2011-08-24 3 views
1

Je veux des trames de données d'exportation de lot dans mon espace de travail ayant la chaîne « obj » dans leur nom à un fichier csv avec le même nomFonction exporter des objets de l'espace de travail (trames de données) pour csv fichiers

Je pensais à la code suivant, qui malheureusement ne fonctionne pas.

for (i in ls(pattern="obj")){ 
write.csv2(i, paste(i,".csv", sep="")) 
} 

Des idées? Merci d'avance

+1

juste deviner, mais si vous avez un tas de choses nommées d'après un certain modèle, comme obj1, obj2, etc vous seriez alors être il vaut mieux les stocker dans une liste. Ensuite, il suffit de boucler la liste plutôt que de construire des noms et d'utiliser 'get' ... – Spacedman

+0

Vous avez raison. Ça ira. Merci! – ECII

Répondre

5

write.csv2 prend l'objet plutôt que le nom de l'objet comme premier argument. Utilisez get pour y remédier.

write.csv2(get(i), paste(i,".csv", sep="")) 
+2

Pour clarifier, essayez ces deux lignes: write.csv2 (x, file = 'foo.csv') et write.csv2 ("x", file = 'bar.csv'). La deuxième version n'est pas ce que vous voulez, mais c'est ce que votre code original faisait. –

+0

+1 bonne utilisation de 'get' – Andrie

1

Vous pouvez le faire avec eval:

eval(call("write.csv2", as.name(i), paste(i, ".csv", sep=""))) 
+0

Très fantaisie, mais quand vous reviendrez au code dans six mois, vous souviendrez-vous de ce qu'il fait? Voir 'bibliothèque (fortunes); fortune ("eval") '. –

+0

D'accord, 'get' est plus propre. – Anatoliy

Questions connexes