![](/img/trans.png)
[英]Escaping a backslash with a backslash in R produces 2 backslashes in a string, not 1
[英]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.