【发布时间】:2017-02-05 07:27:19
【问题描述】:
setdiff(c("a","c"),c("a","b","c","d"))
#character(0)
这段代码应该返回一个c("b","d")的向量,有什么问题?
【问题讨论】:
-
其他方式...
setdiff(c("a","b","c","d"), c("a", "c"))
标签: r set-difference
setdiff(c("a","c"),c("a","b","c","d"))
#character(0)
这段代码应该返回一个c("b","d")的向量,有什么问题?
【问题讨论】:
setdiff(c("a","b","c","d"), c("a", "c"))
标签: r set-difference
setdiff 是不对称的,正如帮助页面警告的那样(虽然很微妙)。
这如你所愿,
> setdiff(c("a","b","c","d"),c("a","c"))
[1] "b" "d"
一个简单的函数可以以任何方式工作,
setdiff2 <- function(x,y){
d1 <- setdiff(x,y)
d2 <- setdiff(y,x)
if(length(d2) > length(d1))
return(d2)
else
return(d1)
}
> setdiff2(c("a","c"), c("a","b","c","d"))
[1] "b" "d"
【讨论】:
setdiff2 对我来说看起来非常违反直觉,并且绝对不是对称的:setdiff2(c('a','b'),c('b','c')) 在交换参数时返回'a',即setdiff2(c('b','c'),c('a','b')),给我们'c'。跨度>