R语言strsplit拆分后调用unique未正确去重单词的问题解决
问题根因
R中strsplit()函数的返回值是列表结构,哪怕只传入1个待拆分字符串,返回结果也是长度为1的列表,列表的第一个元素才是拆分完成的单词向量。
原代码直接用c()包裹strsplit()的返回结果,本质拿到的还是那个长度为1的列表,此时调用unique()只会判断列表层级的元素是否重复——整个单词向量作为列表的单个元素,自然不会被判定为重复,根本不会触发向量内部的单词去重逻辑,所以返回结果和拆分后的原始内容完全一致,没有去重效果。
修正方案
只需要把strsplit()返回的列表转换为普通字符向量,再执行去重即可。推荐用unlist()处理列表,兼容单字符串、多字符串向量的输入场景:
a = "an apple is an apple" word <- function(a){ # unlist将列表拍平为字符向量,支持多个输入字符串的拆分去重 words <- unlist(strsplit(a, split = " ")) return(unique(words)) } # 执行函数 word(a)
运行上述代码会直接返回去重后的字符向量:
[1] "an" "apple" "is"
如果需要得到预期中单引号包裹、逗号分隔的输出格式,可以额外加一步字符串拼接:
paste0("'", word(a), "'", collapse = ",")
运行后输出结果为:
[1] "'an','apple','is'"
内容的提问来源于stack exchange,提问作者muralee_xo
相关产品推荐
相关产品推荐

