25

在 SPSS 中运行 R 插件时,我收到一个 Windows 路径字符串作为输入,例如

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

我想在后续的 R 代码中使用该路径,但是斜杠需要用正斜杠替换,否则 R 会将其解释为转义(例如“\U used without hex digits”错误)。

但是,我无法找到可以用正斜杠替换反斜杠或双重转义它们的函数。所有这些函数都假设这些字符被转义。

那么,有没有类似的东西:

>gsub('\\', '/', 'C:\Users\mhermans')
C:/Users/mhermans
4

4 回答 4

16

您可以尝试在 scan() 中使用“allowEscapes”参数

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

print(X)
[1] "C:\\Users\\mhermans\\somefile.csv"
于 2011-01-13T22:11:14.027 回答
5

首先,您需要将其分配给一个名称:

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

请注意,为了将其放入名称向量中,您需要将它们全部加倍,这提示了您如何使用正则表达式。实际上,如果您从文本文件中读取它,那么 R 将为您完成所有加倍操作。请注意,它并没有真正将反斜杠加倍。它被存储为单个反斜杠,但它是这样显示的,需要像这样从控制台输入。否则,R 解释器会尝试(并且经常失败)将其转换为特殊字符。为了使问题更加复杂,正则表达式也使用反斜杠作为转义符。因此,要使用 grep 或 sub 或 gsub 检测转义,您需要将反斜杠翻两番

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

您需要将反斜杠加倍“加倍”。每对 \'s 中的第一个是向 grep 机器发出信号,表明接下来是文字。

考虑:

 nchar("\\A")
#  returns `[1] 2`
于 2011-01-13T22:54:22.940 回答
4

从 2020 年 4 月推出的 4.0 版开始,R 提供了用于指定原始字符串的语法。示例中的字符串可以写成:

path <- r"(C:\Users\mhermans\somefile.csv)"

来自?Quotes

原始字符常量也可以使用类似于 C++ 中使用的语法:r"(...)" with ... 任何字符序列,除了它不能包含结束序列 )"。分隔符对 []和 {} 也可以使用,并且可以使用 R 代替 r。为了增加灵活性,可以在开始引号和开始分隔符之间放置多个破折号,只要在结束之间出现相同数量的破折号分隔符和结束引号。

于 2020-05-16T23:07:20.250 回答
1

如果文件 E:\Data\junk.txt 包含以下文本(不带引号):C:\Users\mhermans\somefile.csv

您可能会收到以下语句的警告,但它会起作用:

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

如果文件 E:\Data\junk.txt 包含以下文本(带引号):“C:\Users\mhermans\somefile.csv”

上面的 readlines 语句也可能会给你一个警告,但现在将包含:

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

因此,要获得您想要的内容,请确保传入文件中没有引号,并使用:

 texinp <- suppressWarnings(readLines("E:\\Data\\junk.txt"))
于 2011-01-14T01:06:12.793 回答