我试图在一个网络驱动器上在R中设置一个工作目录。所以驱动器没有初始化。该路径与此类似(尽管我不能直接发布一个示例)
\\NETWORK_DRIVE\DataFolder\YourFolder 使用Quote命令r"()",我将文件夹路径放入函数中,如下所示。
r"(\\NETWORK_DRIVE\DataFolder\YourFolder)" 并得到以下输出。

太棒了!这正是我想要的。所以我决定把两个功能结合起来:
setwd(r"(\\NETWORK_DRIVE\DataFolder\YourFolder)")但随之而来的是奇怪的行为。
正确地将实际工作目录变为
//NETWORK_DRIVE/DataFolder/YourFolder问题是您何时从这里使用命令getwd()。然后,您将得到以下信息:
\\\\NETWORK_DRIVE/DataFolder/YourFolder虽然它是无害的。除非您再次将此字符串复制/粘贴到r"()"命令中,并重置您的工作目录,否则请再次使用getwd()。然后,您将得到一个更长的字符串,像这样。

我并不完全相信这是字符串字面意思的行为。如果您无意中对这种类型的命令进行编码,这会很快地创建一个无限循环。有谁知道为什么r"()"命令会很好地粘贴到字符串中,给出正确的路径,但是当使用getwd()时,它会粘贴带有正斜杠的网络驱动器,然后以单个反斜杠作为其余部分的开始?我希望这种行为在逻辑上是:
请参阅文字正斜杠,用双正斜杠替换(以避免转义字符)?我是不是理解错了什么?
发布于 2022-08-20 08:27:27
您所看到的行为是完全正确的,并且与原始字符串文本无关,无论如何,- the与任何其他字符串完全相同。
为了让自己相信这一点,你可以做两个实验:
setwd("\\NETWORK_DRIVE\DataFolder\YourFolder")
(readLines(“networkpath.txt”))
…显然,在文件networkpath.txt中,您不能转义反斜杠.
在所有三种情况下(原始字符串文本、常规字符串文本、从文件中读取的字符串),setwd调用成功,随后调用message(getwd())将显示以下输出:
\\NETWORK_DRIVE/DataFolder/YourFolder…因此R将路径分隔符转换为正斜杠(这有点烦人,但完全有效!)但否则会保留这条路。
当然,当您调用getwd()并将结果直接显示在终端上时,R(无论是好是坏)向您展示了离开的R字符串文字的向量表示,而不是字符串的内容,因此,您可以获得以下结果
[1] "\\\\NETWORK_DRIVE/DataFolder/YourFolder"但这与setwd无关,也与原始字符串文本无关--这正是R对交互控制台上显示的每个值所做的事情。
在此之后,关于你的具体问题:
是无害的,尽管它是无害的。除非再次将此字符串复制/粘贴到
r"()"命令中,否则,
好的,首先,r"(…)"不是“命令”,就像"…"不是命令,或者# …不是命令一样。什么都不会被执行。这是语法。这仅仅是用代码编写字符串文字的一种方式。
其次,为什么要将常规字符串文字复制并粘贴到代码中,并将其转换为原始字符串文本?它已经正确逃脱了。通过在它周围添加r"()",您将添加一个更高级别的转义(因为这就是原始字符串文本所做的具体操作)。当然,这会改变字符串的值。--而且,为了明确起见,这再次与setwd或getwd无关。如果您打印原始字符串文本本身的值,然后复制并粘贴它,您将得到完全相同的行为。
https://stackoverflow.com/questions/73421112
复制相似问题