Три логических оператора в R - PullRequest
0 голосов
/ 26 июня 2018

Я хотел бы проверить три логических оператора в R в одной строке. То есть я хочу, чтобы значение Y1 стало 1, если x1 или x3 меньше 0,05 или x2 меньше 0,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?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018
Y1 <- as.numeric(x1 <0.05 | x2 < 0.1 | x3 <0.05)

Заключение вашего утверждения в as.numeric возвращает 1, если TRUE, и 0, если FALSE

0 голосов
/ 26 июня 2018

Функция 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
...