3 回答
TA贡献1826条经验 获得超6个赞
问题是向量回收。
您的第一行完全符合您的期望。它检查什么的元素df$time都在c(0.5, 3),并返回它们的值。
您的第二行比较棘手。实际上等于
df[df$time == rep(c(0.5,3), length.out=nrow(df)),]
看到这一点,让我们看看使用vector会发生什么rep(0.5, 10):
rep(0.5, 10) == c(0.5, 3)
[1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
查看它如何返回每个奇数值。本质上它与向量匹配0.5c(0.5, 3, 0.5, 3, 0.5...)
您可以操纵向量以这种方式不产生匹配项。取向量rep(c(3, 0.5), 5):
rep(c(3, 0.5), 5) == c(0.5, 3)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
他们都是假的。您将每0.5匹配3,反之亦然。
TA贡献1893条经验 获得超10个赞
在
df$time == c(0.5,3)
第c(0.5,3)一个以的形式广播df$time,即c(0.5,3,0.5,3,0.5,3,0.5,3,0.5,3)。然后,将两个向量逐个元素进行比较。
另一方面,
df$time %in% c(0.5,3)
检查的每个元素是否df$time属于集合{0.5, 3}。
TA贡献1865条经验 获得超7个赞
这是一个老话题,但是我在任何地方都没有看到这个答案,它可能与某些人有关。
两者之间的另一个区别是对NA(丢失值)的处理。
NA == NA
[1] NA
NA %in% c(NA)
[1] TRUE
- 3 回答
- 0 关注
- 827 浏览
添加回答
举报