【问题标题】:Three logical operators in RR中的三个逻辑运算符
【发布时间】:2018-06-26 10:37:53
【问题描述】:

我想在同一行中检查 R 中的三个逻辑运算符。也就是说,如果 x1 x3 小于 0.05 x2 小于 0.1

,我希望 Y1 变为 1
if (x1 <0.05 | x2 < 0.1 | x3 <0.05) {  
    Y1 <- 1 
  } 

但是,R 给了我以下错误信息:

## Warning in if (x1 < 0.05 | x2 < 0.1 | x3 < 0.05) {: the condition has length > 1 and only the first element will be used

为什么 R 会给我一条错误消息?如果这是一个问题,我如何在不使用两个 if 语句的情况下解决这个问题?

【问题讨论】:

  • x1、x2 和 x3 可能是长度 > 1 的向量,对吧?您可能应该使用矢量化的ifelse() 函数。
  • 请通过提供x1x2x3y1 的示例使错误可重现。
  • 如果条件不满足,Y1应该是什么。

标签: r if-statement logical-operators


【解决方案1】:

ifelse() 函数可能就是您正在寻找的功能

set.seed(1)
x1 <- runif(1000, 0,1)
x2 <- runif(1000, 0,1)
x3 <- runif(1000, 0,1)

y1 <- ifelse(x1 <0.05 | x2 < 0.1 | x3 <0.05, 1, NA)
y1[1:20]
[1] NA NA NA NA NA  1 NA NA NA NA  1 NA  1 NA  1 NA NA  1 NA NA

【讨论】:

    【解决方案2】:
    Y1 <- as.numeric(x1 <0.05 | x2 < 0.1 | x3 <0.05)
    

    使用as.numeric 包装您的语句返回一个1 如果TRUE 和一个0 如果FALSE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 2011-11-29
      • 2021-11-18
      • 2018-09-26
      相关资源
      最近更新 更多