为什么vecsets软件包的vunion功能中的多个选项不适用于字符向量?

时间:2018-09-01 04:32:27

标签: r

当我运行代码时:

library(vecsets)
p <- c("a","b")
q <- c( "a")
vunion(p,q, multiple = TRUE)

我得到结果:

[1] "a" "b"

但是我希望结果是

vunion(p,q, multiple = TRUE)
[1] "a" "b" "a"

我也不理解vesect包示例中提供的结果。该示例显示:

x <- c(1:5,3,3,3,2,NA,NA)
y <- c(2:5,4,3,NA)

vunion(x,y,multiple=TRUE) 
[1]  2  3  3  4  5 NA  1  3  3  2 NA  4

但是如果我们检查

length(x)+length(y); length(vunion(x,y))
[1] 18
[1] 12

我们得到不同的长度,但是我认为它们应该相同。请注意,例如5只出现一次。

这是怎么回事?有人可以解释吗?

1 个答案:

答案 0 :(得分:0)

我认为vecset软件包文档(link)很好地描述了此行为:

  

base::union函数根据代数集理论删除重复项。 vunion不会,因此返回与任一输入向量(而不是其输入的总和)中一样多的重复元素。简而言之,{{1 }}与vunion相同。

确实,您必须仔细阅读。我已经强调了重要的部分。问题不在于字符向量与数字向量,而在于元素是否在同一向量内重复。在以下示例中考虑p1与p2。 vintersect(x,y) + vsetdiff(x,y) + vsetdiff(y,x)的结果与 vunionp的a一样多,因此我们期望在第一部分中有1个“ a”,而在a中有两个a。第二部分;两次我们都期望只有1个“ b”:

q