我有一个包含后引号的字符串,这会破坏连接函数。如果您尝试使用反向标记连接,则连接函数不喜欢这样:
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")
我不知道为什么反引号导致连接函数中断,但是如何将字符串替换为不具有非法字符?
答案 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"