gpt4 book ai didi

r - 对 "=="运算符行为的解释

转载 作者:行者123 更新时间:2023-12-04 10:24:27 25 4
gpt4 key购买 nike

在以下非常简单的示例中,我无法理解“==”运算符的行为。

A <- c(10, 20, 10, 10, 20, 30)
B <- c(40, 50, 60, 70, 80, 90)

df <- data.frame(A, B)

df[df$A == c(10,20), ] # it returns 3 lines instead of 5
df[df$A %in% c(10,20), ] # it works properly and returns 5 lines

在此先谢谢大家。

最佳答案

要了解正在发生的事情,您必须了解数据帧结构和回收规则。数据框只是一个向量列表。

> unclass(df)
$A
[1] 10 20 10 10 20 30

$B
[1] 50 60 50 40 70 80

attr(,"row.names")
[1] 1 2 3 4 5 6

如果你在 R 中比较两个不同长度的向量,较短的向量是 recycled .在你的情况下 df$A == c(10,20)相当于:
> c(10, 20, 10, 10, 20, 30) == c(10, 20, 10, 20, 10, 20)
[1] TRUE TRUE TRUE FALSE FALSE FALSE


> df[c(TRUE, TRUE, TRUE, FALSE, FALSE, FALSE), ]
A B
1 10 50
2 20 60
3 10 50

来自 %in% documentation :

%in% returns a logical vector indicating if there is a match or not for its left operand


> df$A %in% c(10,20)
[1] TRUE TRUE TRUE TRUE TRUE FALSE


> df[c(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE), ]
A B
1 10 50
2 20 60
3 10 50
4 10 40
5 20 70

关于r - 对 "=="运算符行为的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31149659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com