为什么 vecsets 包的 vunion 函数中的多个选项不适用于字符向量?



当我运行代码时:

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 只出现一次。

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

我认为vecset包文档(链接(很好地描述了这种行为:

base::union函数删除每个代数集合论的重复项。vunion不会,因此返回与任一输入向量中一样多的重复元素(而不是其输入的总和(。简而言之,vunionvintersect(x,y) + vsetdiff(x,y) + vsetdiff(y,x)相同。

不过,您必须仔细阅读。 我已经强调了重要的部分。 问题不在于字符向量与数字向量,而在于元素是否在同一向量中重复。 在以下示例中考虑 p1 与 p2。vunion的结果将具有pq一样多的 a,因此我们期望第一部分中有 1 个"a",第二部分有两个 a;两次我们只期望 1 个"b":

library(vecsets)
q <- c("a", "b")
p1 <- c("a", "b")
vunion(p1, q, multiple = TRUE)
[1] "a" "b" 
p2 <- c("a", "a", "b")
vunion(p2, q, multiple = TRUE)
[1] "a" "b" "a"

最新更新