【发布时间】:2017-10-13 19:58:09
【问题描述】:
我有一个字符串列表,其中一些字符串中有重复。例如:
[[1]]
[1] "gr gal gr gal"
[[2]]
[1] "gr gal"
[[3]]
[1] "gr gal ir ol"
[[4]]
[1] "gr gal gr gal"
[[5]]
[1] "gr gal"
我想要的输出是:
[[1]]
[1] "gr gal"
[[2]]
[1] "gr gal"
[[3]]
[1] "gr gal ir ol"
[[4]]
[1] "gr gal"
[[5]]
[1] "gr gal"
从字符串中删除重复的位置。
我的计划是调用 strsplit(x, split = " ") 然后调用 split 对象上的 unique 函数。如果我选择列表中的 1 个成员,我的代码可以正常工作:
> strsplit(pathmd1[[76]], split = " ")
[[1]]
[1] "gr" "gal" "gr" "gal"
> splittest <- strsplit(pathmd1[[76]], split = " ")
> unique(unlist(splittest))
[1] "gr" "gal"
但是,当我使用这些函数使用 lapply 时,会引发错误
pathmd2 <- lapply(1:length(pathmd1), function(i) strsplit(pathmd1[[i]],
split = " "))
pathmd <- lapply(1:length(pathmd2), function(i) unique(pathmd2[[i]])
unexpected symbol
77: pathmd2 <- lapply(1:length(pathmd1), function(i)
strsplit(pathmd1[[i]], split = " ")
78: pathmd
^
为什么函数不能与 lapply 一起使用?
【问题讨论】:
-
我认为您收到了显示的错误,因为您在该示例中的
strsplit调用末尾忘记了“)” -
缺少的尾随括号位于
pathmd <- ...命令的末尾,而不是strsplit命令的末尾。 -
strsplit 给出一个列表输出,即使传递一个字符串。考虑将您的列表重新转换为字符向量。 strsplit 的输出将采用预期的格式。然后调用很简单:
lapply(strsplit(charVec, ' '), unique). -
谢谢大家。所有这些技巧都有帮助!