r - 如果使用严格的不等式,为什么 ifelse 返回一个 1 的向量?
问题描述
我意识到由于使用ifelse和严格的不等式比较,我的代码给出了意想不到的结果:
library(tidyverse)
df <- tibble(a = seq(-10,10)) %>%
mutate( b = ifelse( (a<-3) , 1, 0) ) %>%
mutate( c = ifelse( (a<=-3) , 1, 0) )
df
这使
> df
# A tibble: 21 x 3
a b c
<int> <dbl> <dbl>
1 -10 1 1
2 -9 1 1
3 -8 1 1
4 -7 1 1
5 -6 1 1
6 -5 1 1
7 -4 1 1
8 -3 1 1
9 -2 1 0
10 -1 1 0
... with 11 more rows
b 是一个向量,我的理解是 <- 被视为赋值而不是比较,但如果是这种情况,我不明白为什么代码被悄悄地评估而不是吐出错误。
谢谢你的帮助,
Ĵ
解决方案
问题是您使用的是赋值运算符<-
而不是比较运算符< -
。你只需要再增加一个空间。比较两个版本:
library(tidyverse)
tibble(a = seq(-10,10)) %>%
mutate(b_compare = ifelse(a < -3 , 1, 0),
b_assign = ifelse(a<-3, 1, 0))
#> # A tibble: 21 x 3
#> a b_compare b_assign
#> <int> <dbl> <dbl>
#> 1 -10 1 1
#> 2 -9 1 1
#> 3 -8 1 1
#> 4 -7 1 1
#> 5 -6 1 1
#> 6 -5 1 1
#> 7 -4 1 1
#> 8 -3 0 1
#> 9 -2 0 1
#> 10 -1 0 1
#> # … with 11 more rows
当您使用赋值运算符时,<-
实际上是在做相当于ifelse(3, 1, 0)
ifelse()
TRUE
as.logical(3)
ifelse(3, 1, 0)
#> [1] 1
如果你dplyr::if_else()
改用它,它会返回一个错误:
dplyr::if_else(3, 1, 0)
#> Error: `condition` must be a logical vector, not a double vector
推荐阅读
- python - Python再次循环遍历列表
- node.js - 将简单的 Express 应用部署到 Azure 应用服务
- swift - 如何检测 NSWindow 是否被拖动?
- perl - 使用子例程时出现错误“变量不会保持共享”
- docker - 无法解析 Traefik 中的 URL 出现错误 404
- java - 设置时间戳对象 + 1 小时
- java - ThreadPoolExecutor 新线程
- php - 未使用 laravel 迁移创建外键
- mysql - 我怎么能在mysql中选择*中的一列除外
- amazon-web-services - 在 Spring Boot 应用程序上修复有关 AWS sdk 中未使用属性的 IntelliJ IDEA 警告的正确方法