簡體   English   中英

在 R 中的字符串或路徑中轉義反斜杠 (\\)

[英]Escaping backslash (\) in string or paths in R

Windows 使用反斜杠\\復制路徑,R 不接受。 所以,我想編寫一個將\\轉換為/的函數。 例如:

chartr0 <- function(foo) chartr('\','\\/',foo)

然后使用chartr0作為...

source(chartr0('E:\RStuff\test.r'))

但是chartr0不起作用。 我想,我無法逃脫/ 我想在許多其他場合逃避/可能很重要。

此外,是否可以避免每次都使用chartr0 ,而是通過在R中創建一個調用chartr0的環境或使用某種臨時使用(如使用options自動轉換所有路徑

R 4.0.0 開始,您可以使用r"(...)"將路徑寫為原始字符串常量,從而避免了轉義:

r"(E:\RStuff\test.r)"
# [1] "E:\\RStuff\\test.r"

有一種新的語法用於指定類似於 C++ 中使用的原始字符常量的語法: r"(...)" with ...任何不包含序列)"字符序列。這使得編寫包含反斜杠的字符串更容易或單引號和雙引號。有關更多詳細信息,請參閱?Quotes

您的基本問題是,R 會在除幾個小寫字母、反斜線本身、引號或用於輸入八進制、十六進制或 Unicode 序列的一些約定之外的任何字符之前看到單個反斜杠時,立即發出錯誤信號。 那是因為解釋器將反斜杠視為“逃避”通常的字符翻譯並做其他事情的消息。 如果您想在字符元素中使用單個反斜杠,則需要鍵入 2 個反斜杠。 這將創建一個反斜杠:

nchar("\\")
#[1] 1

_Intro_to_R_ 的“字符向量”部分說:

"字符字符串使用匹配的雙 (") 或單 (') 引號輸入,但使用雙引號(或有時不帶引號)打印。 他們使用 C 風格的轉義序列,使用 \\ 作為轉義字符,所以 \\ 被輸入並打印為 \\,並且在雙引號內“被輸入為 \\”。 其他有用的轉義序列是 \\n、換行符、\\t、制表符和 \\b、退格符——請參閱 ?Quotes 以獲取完整列表。”

 ?Quotes
chartr0 <- function(foo) chartr('\\','/',foo)
chartr0('E:\\RStuff\\test.r')

你不能寫 E:\\Rxxxx,因為 R 認為 R 被轉義了。

問題是代碼中的每個正斜杠和反斜杠都被錯誤地轉義,導致使用無效字符串或錯誤字符串。 您需要閱讀哪些字符需要轉義以及如何轉義。 查看以下鏈接中的轉義序列列表。 此處未列出的任何內容(例如正斜杠)均按字面處理,不需要任何轉義。

http://cran.r-project.org/doc/manuals/R-lang.html#Literal-constants

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM