Question

Au début de ma vie, j’ai découvert la douleur de R et du fait que Windows se trouvait sur des pages différentes en ce qui concerne le séparateur entre les répertoires et les sous-répertoires. Même si je connais le problème, je suis toujours peiné de devoir mettre manuellement une barre oblique inversée devant toutes mes barres obliques inverses ou de les remplacer par des barres obliques.

J'aime copier un nom de chemin ou un nom de fichier complet avec l’une des applications que j’exécute sur mon ordinateur (par exemple, XYPlorer, Everything by voidtools), puis le coller dans Tinn-R. Est-ce que je peux quand même automatiser la tâche que je suis en train de faire manuellement.

  • Existe-t-il un paramètre dans Tinn-R?
  • Y at-il un paramètre dans R?
  • Existe-t-il un script autohotkey qui pourrait le faire pour moi par défaut?

Contexte pour ceux qui ne savent pas de quoi je parle

Citations de FAQ pour R pour Windows, version pour R-2.9.2, B. D. Ripley et D. J. Murdoch

  

Les barres obliques inversées doivent être doublées en R   chaînes de caractères, donc par exemple un   Besoins   "" d: \ R-2.9.2 \ library \ xgobi \ scripts \ xgobi.bat".   Vous pouvez vous rendre la vie plus facile   en utilisant des barres obliques comme chemin   séparateurs: ils fonctionnent sous Windows

Était-ce utile?

La solution

J'ai écrit un script autohotkey qui est déclenché en tapant " rfil " - sans les guillemets.

:O:rfil:: ;replaces backslashes with forward slashes in a file name that is stored on the clipboard
StringReplace,clipboard,clipboard,\,/,All
send %clipboard%
return

Si quelqu'un peut me dire plus rapidement que d'utiliser la commande d'envoi, je l'apprécierais. J'ai un script autohotkey qui tourne tout le temps sur tous mes ordinateurs, donc je n'ai pas eu à télécharger un nouveau logiciel pour pouvoir exécuter ce script. Je l'ai simplement ajouté à mon fichier de script par défaut.

Je serai heureux d’expliquer ce que j’ai fait si vous le souhaitez.

Autres conseils

ClipPath ajoute des options de menu contextuel pour choisir le type de barre oblique de votre choix. coller.

Via Faire en sorte que la génétique soit faite , ce qui semble être une ressource utile pour les utilisateurs de R. en général.

J'ai adapté le code d'auto-clé suivant partagé pour remplacer toutes les barres obliques inverses par des barres obliques lorsque je colle quelque chose dans RStudio. Cette approche présente des avantages et des inconvénients.

Avantages: vous n'avez pas à y penser. Le code ne fonctionnera que si la fenêtre active est RStudio.

Inconvénients: Le code est appelé chaque fois que vous collez quelque chose dans R. Chaque fois, il tente de trouver des barres obliques inverses et de les remplacer par des barres obliques.

GroupAdd, R, RStudio

;replaces backslashes with forward slashes in a file name that is stored on the clipboard
#IfWinActive ahk_group R
   ^v::
      StringReplace,clipboard,clipboard,\,/,All
      send %clipboard%
   return
#IfWinActive

J'utilise search & amp; remplacez, mais bien sûr, ce n'est pas complètement automatique et vous devez prendre soin de ne pas remplacer " \ t " ou "\ n".

Ce n'est pas exactement la réponse que vous cherchez, mais R possède ses propres fonctions de script shell que j'utilise souvent:

list.files (, full = TRUE) [retourne le chemin complet avec les séparateurs appropriés]

file.path () [se joint au séparateur spécifique au système d'exploitation]

et ainsi de suite ...

Vous pouvez créer une fonction wrapper autour de tous les noms de chemins:

> replace.slash <- function(path.name) gsub("\\\\","/",path.name)
> path.name <- "c:\\tmp\\"
> replace.slash(path.name)
[1] "c:/tmp/"

[Modifier]: Merci Hadley. J'ai corrigé l'erreur ici.

En passant, j’ai trouvé cela très discussion utile sur ce sujet .

Il s'agit du code AutoIt qui fait la même chose (remplace \ avec / ).

Local $text1 = ClipGet()
$text2=StringReplace($text1,"\","/")
ClipPut($text2)

Pourquoi ne pas créer une fonction qui vérifie le système d'exploitation et renvoie le séparateur de fichier approprié (la solution Java que je crois)?

file_sep <- function(){
ifelse(.Platform$OS.type == "unix", "/", "//")
}
file_sep()

vous pouvez choisir un nom plus court si vous le souhaitez. Le gros défaut ici est que vous devez coller ensemble les chemins de fichiers, mais cela vaut toujours la peine si vous travaillez sur de gros projets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top