utilisation de R pour copier des fichiers
Dans le cadre d'une tâche plus importante effectuée dans R run sous windows, je voudrais copier les fichiers sélectionnés entre les répertoires. Est-il possible de donner dans R une commande comme cp patha/filea*.csv pathb (notez le caractère générique, pour plus d'épices)?
30
demandé sur
MichaelChirico
2010-03-05 07:10:08
2 réponses
Je ne pense pas qu'il y ait un moyen direct (timide de shelling-out), mais quelque chose comme ce qui suit fonctionne habituellement pour moi.
flist <- list.files("patha", "^filea.+[.]csv$", full.names = TRUE)
file.copy(flist, "pathb")
Notes:
- Je volontairement décomposé en deux étapes, ils peuvent être combinés.
- voir l'expression régulière: R utilise une expression rationnelle vraie, et sépare également le modèle de fichier du chemin, dans deux arguments distincts.
- notez les
^et$(beg/end of string) dans la regex - c'est un gotcha commun, car ceux-ci sont implicites pour les modèles de type générique, mais requis avec des expressions rationnelles (de peur que certains noms de fichiers qui correspondent au modèle générique mais commencent et / ou se terminent par du texte supplémentaire soient également sélectionnés). - dans le monde Windows, les gens ajouteront généralement l'argument
ignore.case = TRUEàlist.files, afin d'émuler le fait que les recherches dans les répertoires sont insensibles à la casse avec ce système d'exploitation.
La fonction - R fournit un moyen pratique de convertir des motifs génériques en expressions régulières. Par exemple
fpattern = glob2rx('filea*.csv')renvoie un regex différent mais équivalent.
glob2rx()de 44
répondu
mjv
2016-08-30 00:21:50
Vous pouvez
- Utilisez
system()pour déclencher une commande comme si elle était sur le shell, y compris globbing - utiliser
list.files()akadir()pour faire le globbing / reg.exp correspondant à vous-même et la copie des fichiers individuellement - Utilisez
file.copysur des fichiers individuels comme indiqué dans la réponse de mjv
11
répondu
Dirk Eddelbuettel
2010-03-05 04:53:13