intersect函数根据输入顺序返回不同的模式

时间:2014-10-25 01:34:52

标签: r

可能真正的问题是“任何人都应该关心”,但这里存在不一致之处:

intersect(c(),1:3)
integer(0)
intersect(1:3,c())
NULL

同样的事情发生在setdiff,但它有意义,因为setdiff被设计为相对于其两个输入不对称。 现在,从intersect的来源或多或少显而易见,因为即使两组的交集是对称的,算法也是不对称的。

我想问的是,当某些父函数依赖于输出模式时,这是否会导致代码乱码。

(背景:我收到用户的一些请求来修复package:vecsets的当前转速以正确处理空集输入,并且我想使输出与类,模式等相匹配。基础功能尽可能接近)。

1 个答案:

答案 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)