r - 为什么 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
不会,因此返回的重复元素与任一输入向量中的重复元素一样多(不是它们的输入之和。)简而言之,vunion
与vintersect(x,y) + vsetdiff(x,y) + vsetdiff(y,x)
.
确实,您必须仔细阅读。我已经强调了重要的部分。问题不在于字符向量与数字向量,而在于元素是否在同一个向量中重复。在以下示例中考虑 p1 与 p2。from 的结果将具有与orvunion
一样多的 a ,因此我们期望第一部分有 1 个“a”,第二部分有两个 a;两次我们都期望只有 1 个“b”: p
q
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"
推荐阅读
- python - Azure IoTHub python sdkv2 连接问题
- html - HTML 和 CSS 的大小调整和内容丢失问题
- python - 尝试通过 zeep (Python) 访问 API 时与错误 xsd 类型相关的错误消息
- javascript - 位置 0 处的 JSON 中的意外标记
- javascript - Docusaurus V2 问题渲染
- ios - FreshChat iOS 构建失败
- qiskit - 寄存器的幅度编码到辅助
- php - 如何在 Symfony 5.3 phpunit 测试中访问私有服务?
- javascript - printJS 无效的 HTML 元素 ID
- html - 尝试将数据从 .ts 导入 html