2012-04-09 66 views
7

轉義字符,造成了很大的麻煩在R,就證明了前面的問題:從字符串中移除轉義字符,或者「我怎樣才能獲得 的方式?」

  1. Change the values in a column
  2. Can R paste() output "\"?
  3. Replacing escaped double quotes by double quotes in R
  4. How to gsub('%', '\%', ... in R?

許多這些以前的問題可能是簡化爲「我如何得到\我的方式」的特殊情況?

有沒有簡單的方法來做到這一點?

例如,我找不到任何參數gsub將從以下刪除所有轉義:

test <- c('\01', '\\001') 
+0

'\ 0'就是空字符串。 R在幾個版本中不允許使用字符串。你使用哪個版本的R? – 2012-04-09 16:46:56

+0

@Josh:2.14。有沒有辦法從「\ 0」中提取「0」? – 2012-04-09 16:48:17

+0

只是要清楚:你想刪除「\?」的所有實例。其中「\」是字面意思,「?」是指任何單個字符?或者你只是想剝奪「\」的所有實例,除非它是「\\」?我仍然會使用正則表達式構建'[\\] {1,}'。編輯:嘿,甚至解析器的編輯在這裏弄亂了逃跑:-( – 2012-04-09 16:58:14

回答

8

這裏的困難是"\1",雖然它的印有兩個字形,實際上是,R中的觀點一個字符。而事實上,這是非常相同的字符作爲"\001""\01"

nchar("\1") 
# [1] 1 
nchar("\001") 
# [1] 1 
identical("\1", "\001") 
# [1] TRUE 

所以,你一般可以刪除所有這樣的反斜槓:

(test <- c("\\hi\\", "\n", "\t", "\\1", "\1", "\01", "\001")) 
# [1] "\\hi\\" "\n"  "\t"  "\\1" "\001" "\001" "\001" 
eval(parse(text=gsub("\\", "", deparse(test), fixed=TRUE))) 
# [1] "hi" "n" "t" "1" "001" "001" "001" 

但是,正如你所看到的,"\1","\01"\001"將全部呈現爲001,(因爲對於R,它們都只是"\001"的不同名稱)。


EDIT:爲了瞭解更多關於轉義序列使用"\",並且在各種各樣的字符,可以使用它們來表示(包括由Joshua烏爾裏希在註釋上述禁止NUL串) ,參見R語言定義的this section

1

我剛剛面對同樣的問題 - 如果你想要任何\ x其中x是一個字符,那麼我不知道如何,我希望我知道,但要解決它的具體轉義序列。說\ n那麼您可以在我的情況下做

new = gsub("\n","",old,fixed=T) 

,我只用了\ n

相關問題