我有单词列表,我从下面的代码中得到。
tags_vector <- unlist(tags_used)
此列表中的某些字符串最后有省略号,我想删除它。在这里,我打印此列表的第5个元素及其类
tags_vector[5]
#[1] "#b…"
class(tags_vector[5])
#[1] "character"
我正在尝试使用gsub
从第5个元素中删除省略号,使用代码,
gsub("[…]", "", tags_vector[5])
#[1] "#b…"
此代码不起作用,我将“#b ...”作为输出。但是在相同的代码中,当我直接放置第5个元素的值时,它可以正常工作,如下所示,
gsub("[…]", "", "#b…")
#[1] "#b"
我甚至尝试将tags_vector[5]
的值放在变量x1
中,并尝试在gsub()
代码中使用它,但它仍然不起作用。
答案 0 :(得分:0)
这可能是Unicode问题。在R(工作室)中,并非所有角色都是平等创造的。
我试图创建一个可重现的例子:
# create the ellipsis from the definition (similar to your tags_used)
> ell_def <- rawToChar(as.raw(c('0xE2','0x80','0xA6'))) # from the unicode definition here: http://www.fileformat.info/info/unicode/char/2026/index.htm
> Encoding(ell_def) <- 'UTF-8'
> ell_def
[1] "…"
> Encoding(ell_def)
[1] "UTF-8"
# create the ellipsis from text (similar to your string)
> ell_text <- '…'
> ell_text
[1] "…"
> Encoding(ell_text)
[1] "latin1"
# show that you can get strange results
> gsub(ell_text,'',ell_def)
[1] "…"
此示例的可重现性可能取决于您的区域设置。在我的情况下,我在Windows-1252中工作,因为您无法在Windows中将语言环境设置为UTF-8。根据{{3}},&#34; R允许ASCII,UTF-8和您平台的原生编码中的字符串和平共存&#34;。如上例所示,这有时会产生相反的结果。
基本上,您看到的输出看起来相同,但不是字节级别。
如果我在R终端中运行此示例,我会得到类似的结果,但显然,它将省略号显示为点:&#34;。&#34;。
您的示例的快速修复是在您的gsub中使用省略号定义。 E.g:
gsub(ell_def,'',tags_vector[5])