Если вы знакомы с SAS, то знаете, что отсутствующие значения считаются -inf
, поэтому для такого выражения:
If a < 2 then c=1 ;
else c= 5;
Где отсутствует «а»; c будет присвоено значение 1, потому что логическое выражение "a < 2" будет "Истина". Обратите внимание, что мой вопрос касается результата логического выражения. Меня не волнует "с".
Я хотел бы получить то же самое в R, но результатом логического выражения будет «NA»:
<-NA
а < 2
[1] NA
Как я могу изменить вывод этого логического выражения на «Истина»?
Я знаю, что могу это сделать:
output < ifelse( is.na(a), False, a <2)
Но я ищу что-то простое. Любые идеи?
4 ответа
Просто для удовольствия, и я абсолютно не рекомендую этот подход:
Ops.sas <- function (e1, e2) {
comparison <- switch(.Generic, `<` = , `>` = , `==` = , `!=` = ,
`<=` = , `>=` = TRUE, FALSE)
if (comparison) {
e1[is.na(e1)] <- -Inf
e2[is.na(e2)] <- -Inf
}
NextMethod(.Generic)
}
И сейчас:
> foo <- structure(c(NA, 2,3,2, NA), class = "sas")
> bar <- structure(c(2,3,2, NA, NA), class = "sas")
> foo < bar
[1] TRUE TRUE FALSE FALSE FALSE
> foo <= bar
[1] TRUE TRUE FALSE FALSE TRUE
> foo == bar
[1] FALSE FALSE FALSE FALSE TRUE
> foo != bar
[1] TRUE TRUE TRUE TRUE FALSE
> foo > bar
[1] FALSE FALSE TRUE TRUE FALSE
> foo >= bar
[1] FALSE FALSE TRUE TRUE TRUE
if(is.na(a) | a < 2){
c=1
} else {
c=2
}
Я думаю, что самый простой способ — просто добавить новое условие в свой тест. В R символ |
означает ИЛИ.
Вы можете использовать тот факт, что NA
является логическим объектом.
(a < 2) | is.na(a)
Я думаю, вам придется изменить значения в a
, например, так
a <- c(NA, 1, 3, 4, NA)
a
#> [1] NA 1 3 4 NA
a < 2
#> [1] NA TRUE FALSE FALSE NA
a[is.na(a)] <- -Inf
a < 2
#> [1] TRUE TRUE FALSE FALSE TRUE
Создано 4 февраля 2022 г. с помощью пакета reprex (v2.0.1)
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.