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.copy
sur des fichiers individuels comme indiqué dans la réponse de mjv
11
répondu
Dirk Eddelbuettel
2010-03-05 04:53:13