Question

Lors de l'exécution d'un plug-in de R-dans SPSS, je reçois une chaîne de chemin Windows en entrée par exemple.

'C:\Users\mhermans\somefile.csv'

Je voudrais utiliser ce chemin dans le code ultérieur de R, mais les barres obliques doivent être remplacés par des barres obliques vers l'avant, sinon R interprète comme échappe (par exemple. Erreurs « \ U utilisé sans chiffres hexadécimaux »).

J'ai cependant pas été en mesure de trouver une fonction qui peut remplacer les barres obliques inverses par des barres obliques de foward ou échapper à double eux. Toutes ces fonctions prennent ces caractères sont échappés.

Alors, est-il quelque chose le long des lignes de:

>gsub('\\', '/', 'C:\Users\mhermans')
C:/Users/mhermans
Était-ce utile?

La solution

Vous pouvez essayer d'utiliser l'argument des «allowEscapes de scan en ()

X=scan(what="character",allowEscapes=F)
C:\Users\mhermans\somefile.csv

print(X)
[1] "C:\\Users\\mhermans\\somefile.csv"

Autres conseils

Vous devez d'abord l'obtenir attribué à un nom:

pathname <- 'C:\\Users\\mhermans\\somefile.csv'

Notez que pour l'obtenir dans un vecteur de nom que vous aviez besoin de les doubler tous, ce qui donne une indication sur la façon dont vous pouvez utiliser regex. En fait, si vous le lisez depuis un fichier texte, alors R fera tout le doublement pour vous. Rappelez-vous ce pas vraiment doubler les barres obliques inverses. Il est stocké sous la forme d'une barre oblique inverse, mais il est affiché comme ça et doit être entrée comme celle de la console. Sinon, pour le transformer en un caractère spécial l'interpréteur R essaie (et échoue souvent). Et pour aggraver le problème, regex utilise la barre oblique inverse comme une évasion aussi. Donc, pour détecter une fuite avec grep ou sous ou vous gsub besoin de quadrupler les antislashs

 gsub("\\\\", "/", pathname)
# [1] "C:/Users/mhermans/somefile.csv"

Vous aviez besoin de doublement « double » anti-slash. Le premier de chaque couple de \ 's est à signaler à la machine grep que ce qui vient ensuite est un littéral.

Considérez:

 nchar("\\A")
#  returns `[1] 2`

Si le fichier E: \ Data de l'bordel.txt contient le texte suivant (sans les guillemets): C: \ Users \ mhermans \ somefile.csv

Vous pouvez obtenir un avertissement avec la déclaration suivante, mais il fonctionnera:

 texinp <- readLines("E:\\Data\\junk.txt")

Si le fichier E: \ Data de l'bordel.txt contient le texte suivant (avec les guillemets): "C: \ Users de les mhermans de la somefile.csv"

L'instruction readlines ci-dessus peut également vous donner un avertissement, mais contiendra maintenant:

"\" C: \ Users \ mhermans \ somefile.csv \ ""

Alors, pour obtenir ce que vous voulez, assurez-vous qu'il n'y a pas de guillemets dans le fichier entrant et l'utilisation:

 texinp <- suppressWarnings(readLines("E:\\Data\\junk.txt"))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top