intersect函数根据输入顺序返回不同的模式
也许真正的问题是“是否有人在乎”,但矛盾之处在于:intersect函数根据输入顺序返回不同的模式,r,R,也许真正的问题是“是否有人在乎”,但矛盾之处在于: intersect(c(),1:3) integer(0) intersect(1:3,c()) NULL 同样的事情也发生在setdiff上,但这是有意义的,因为setdiff被设计为相对于其两个输入是不对称的。 现在,从intersect的源代码中或多或少可以看出为什么会发生这种情况,因为算法是不对称的,即使两个集合的交集是对称的 我想问题是,当某个父函数依赖于输出模式时,这是否会导致代码混乱 (背景:我收到一些用户的请求,要求修复当前版
intersect(c(),1:3)
integer(0)
intersect(1:3,c())
NULL
同样的事情也发生在setdiff
上,但这是有意义的,因为setdiff
被设计为相对于其两个输入是不对称的。
现在,从intersect
的源代码中或多或少可以看出为什么会发生这种情况,因为算法是不对称的,即使两个集合的交集是对称的
我想问题是,当某个父函数依赖于输出模式时,这是否会导致代码混乱
(背景:我收到一些用户的请求,要求修复当前版本的
package:vecsets
,以正确处理空集输入,我希望使输出尽可能与基本函数的类、模式等匹配) 从?intersect
,文档似乎暗示需要相同“模式”的向量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)