【发布时间】:2013-03-09 01:34:57
【问题描述】:
我有一个数字向量列表,我想将它们组合成一个向量。但我无法做到这一点。该列表可以有一个跨列表元素共有的元素。最终向量不应将它们添加两次。这是一个例子:
>lst
`1`
[1] 1 2
`2`
[2] 2 4 5
`3`
[3] 5 9 1
我想要这样的最终结果
>result
[1] 1 2 4 5 9 1
我尝试做以下事情,而不用担心重复:
>vec<-vector()
>sapply(lst, append,vec)
和
>vec<-vector()
>sapply(lst, c, vec)
他们都没有工作。有人可以帮我解决这个问题吗?
谢谢。
【问题讨论】:
-
谢谢@JoshO'Brien。但这不会删除重复的值。
-
@joran 我怀疑
unique是否足够细粒度;unique可以很容易地删除 adjacent 列表组件之间的超过 1 个公共元素。注意unique(unlist(lst))不会给出 OP 想要的。 -
您是说您不希望任何重复的值彼此相邻吗?或者你是说如果一个向量的结尾与下一个向量的开头匹配,你只是不想重复一个元素?提供更多示例可能会有所帮助...
-
@JoshO'Brien
unique()将删除 OP 声称应该在输出中的1s 之一。 -
这行得通,但我不确定如果它在列表元素中有重复值是否行不通:
unique(do.call(c, lst))。根据@MatthewLundberg 的福音,rle(do.call(c, lst))$values。根据我的基准,Matthew 的解决方案更快。
标签: r list vector append sapply