假设我有一个字符串,我只希望句子中的唯一单词作为单独的元素
a = "an apple is an apple"
word <- function(a){
words<- c(strsplit(a,split = " "))
return(unique(words))
}
word(a)
返回
[[1]]
[1] "an" "apple" "is" "an" "apple"
我期望的输出是
'an','apple','is'
我做错了什么?非常感谢任何帮助
干杯!
问题是将strsplit(.)
包裹在c(.)
中并没有改变它仍然是一个列表
的事实,和 unique
将在列表级而不是单词级运行。
c(strsplit(rep(a, 2), "\\s+"))
# [[1]]
# [1] "an" "apple" "is" "an" "apple"
# [[2]]
# [1] "an" "apple" "is" "an" "apple"
unique(c(strsplit(rep(a, 2), "\\s+")))
# [[1]]
# [1] "an" "apple" "is" "an" "apple"
备选方案:
如果length(a)
总是1,那么也许
unique(strsplit(a, "\\s+")[[1]])
# [1] "an" "apple" "is"
如果 length(a)
可以是 2 或更多,并且您想要每个句子的唯一单词列表,那么
a2 <- c("an apple is an apple", "a pear is a pear", "an orange is an orange")
lapply(strsplit(a2, "\\s+"), unique)
# [[1]]
# [1] "an" "apple" "is"
# [[2]]
# [1] "a" "pear" "is"
# [[3]]
# [1] "an" "orange" "is"
(注意:这总是返回一个列表
,不管输入中的句子数量是多少。)
如果 length(a)
可以是 2 或更多,并且您希望在所有句子中有一个独特的词,那么
unique(unlist(strsplit(a2, "\\s+")))
# [1] "an" "apple" "is" "a" "pear" "orange"
(注意:当length(a)
为1时,此方法也能正常工作。)