Предпосылка вашего вопроса (что a != NA
возврат NA неверен) на самом деле неверна.
NA буквально «недоступен». Не TRUE
или FALSE
, но неизвестно. Поэтому, если я спрошу вас, «неизвестное значение равно 1?» ваш ответ будет вполне обоснованным: «Неизвестно». Большинство логических операций со значением NA, таких как запрос, равен ли NA 1, возвращают NA (есть некоторые исключения, такие как очевидные is.na(NA)
или identical(NA, NA)
, как упомянуто в другом ответе).
Таким образом, если NA подключен к вашему исходному коду:
cond.var<-"a"
relation<-"!="
cond.value<-"NA"
a<-1
as.numeric(eval(parse(text=paste(cond.var, relation, cond.value, sep=""))))
... эта последняя команда должна фактически возвращать NA. Ваш код работает просто отлично.