我试图了解Rmatch
和intersect
R之间的区别。两者都以不同的格式返回相同的输出。两者之间有功能上的区别吗?
match(names(set1), names(set2))
# [1] NA 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 11
intersect(names(set1), names(set2))
# [1] "Year" "ID"
match(a, b)
返回的整数向量length(a)
,i
第-个元素给出位置j
,使a[i] == b[j]
。NA
默认情况下为no_match生成(尽管您可以自定义)。
如果要获得与相同的结果intersect(a, b)
,请使用以下任一方法:
b[na.omit(match(a, b))]
a[na.omit(match(b, a))]
例子
a <- 1:5
b <- 2:6
b[na.omit(match(a, b))]
# [1] 2 3 4 5
a[na.omit(match(b, a))]
# [1] 2 3 4 5
我只是想知道两者之间是否还有其他区别。我自己就能理解结果。
然后我们阅读源代码
intersect
#function (x, y)
#{
# y <- as.vector(y)
# unique(y[match(as.vector(x), y, 0L)])
#}
原来intersect
是用match
!来写的!
哈哈,好像我忘unique
了外面的东西。Em,通过设置nomatch = 0L
我们也可以摆脱na.omit
。好吧,R core比我的猜测更有效。
跟进
我们也可以使用
a[a %in% b] ## need a `unique`, too
b[b %in% a] ## need a `unique`, too
但是,请继续阅读?match
。在“详细信息”中,我们可以看到如何"%in%"
定义:
"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0
因此,是的,所有内容都是使用编写的match
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句