2012-04-09 33 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

相关问题