lapply没有迭代R中的列表

时间:2017-10-13 19:58:10

标签: r lapply strsplit

我有一个字符串列表,其中一些字符串中有重复。例如:

   [[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 ="")然后调用拆分对象上的唯一函数。如果我选择列表中的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?

1 个答案:

答案 0 :(得分:0)

您可以尝试:

lapply(f, function(x) unique(unlist(strsplit(x, " "))))
#output
[[1]]
[1] "gr"  "gal"

[[2]]
[1] "gr"  "gal"

[[3]]
[1] "gr"  "gal" "ir"  "ol" 

[[4]]
[1] "gr"  "gal"

[[5]]
[1] "gr"  "gal"

其中f是你的清单。

不需要像for循环那样迭代