连接包含反引号字符R的字符串

时间:2016-08-12 13:30:38

标签: r

我有一个包含后引号的字符串,这会破坏连接函数。如果您尝试使用反向标记连接,则连接函数不喜欢这样:

a <- c(`table`, `chair`, `desk`)
Error: object 'chair' not found

所以我可以创建变量:

bad.string <- "`table`, `chair`, `desk`"
a <- gsub("`", "", bad.string)

这给出了一个字符串"table, chair, desk".

那应该是:

good.object <- c("table", "chair", "couch", "lamp", "stool")

我不知道为什么反引号导致连接函数中断,但是如何将字符串替换为不具有非法字符?

2 个答案:

答案 0 :(得分:2)

尝试:

good.string <- trimws(unlist(strsplit(gsub("`", "", bad.string), ",")))

此处gsub()用于删除反引号,strsplit将单个字符串转换为字符串列表,其中原始字符串中的逗号表示分隔,unlist()转换列表将字符串转换为字符串向量,trimws()删除尾随或前导空格。

答案 1 :(得分:1)

quotes上的文档中,后标记保留用于非标准变量名称,例如

`the dog` <- 1:5
`the dog`
# [1] 1 2 3 4 5

因此,当您尝试使用连接时,R没有做错任何事情。它查看c()中的所有变量并尝试查找它们,从而导致错误。

如果这是你写的矢量,只需用单引号或双引号复制替换所有反引号。

如果以某种方式在R中生成,则将整个内容作为字符串输出,然后使用gsub()eval(parse())

eval(parse(text = gsub('\`',"\'","c(`table`, `chair`, `desk`)")))
[1] "table" "chair" "desk" 

编辑:对于bad.string

的新示例

你必须通过双引号替换所有后面的刻度,然后你可以通过read.csv()读取它。虽然因为它返回了一个行向量,但是我们将它转​​置为返回一个列向量

bad_string <- "`table`, `chair`, `desk`"
okay_string <- gsub('\`','\"',bad.string)

okay_string
# [1] "\"table\", \"chair\", \"desk\""
t(read.csv(text = okay_string,header=FALSE, strip.white = TRUE))
#       [,1]   
# V1 "table"
# V2 "chair"
# V3 "desk"