可能真正的问题是“任何人都应该关心”,但这里存在不一致之处:
intersect(c(),1:3)
integer(0)
intersect(1:3,c())
NULL
同样的事情发生在setdiff
,但它有意义,因为setdiff
被设计为相对于其两个输入不对称。
现在,从intersect
的来源或多或少显而易见,因为即使两组的交集是对称的,算法也是不对称的。
我想问的是,当某些父函数依赖于输出模式时,这是否会导致代码乱码。
(背景:我收到用户的一些请求来修复package:vecsets
的当前转速以正确处理空集输入,并且我想使输出与类,模式等相匹配。基础功能尽可能接近)。
答案 0 :(得分:3)
来自?intersect
,文档似乎意味着相同的#34;模式"是必须的。 c()
是" NULL"。使用as.integer()
更改c()
的类似乎有效。
class(c())
# [1] "NULL"
class(1:3)
# [1] "integer"
class(as.integer(c()))
# [1] "integer"
intersect(c(1:3), as.integer(c()))
# integer(0)
intersect(as.integer(c()), c(1:3))
# integer(0)