R Запись функции для ввода равна целому числу, но для ввода возможно NA - PullRequest
0 голосов
/ 08 марта 2019

Я хочу написать функцию, Определить, что вход равен 1, но входные данные могут включать (NA NULL).

> equals1 <- function(x){
+   return(x==1)
+ }

> equals1(1)
[1] TRUE
> equals1(Inf)
[1] FALSE
> equals1(NA)
[1] NA
> equals1(NULL)
logical(0)
> equals1(NaN)
[1] NA

Я хочу это следующим образом:

equals1<-function(x){
   if(is.null(x)){
     return(FALSE)
     }else if(is.na(x)){
       return(FALSE)
     }else{return(x==1)}
}
c(equals1(1),equals1(Inf),equals1(NA),equals1(NULL),equals1(NaN))
# [1]  TRUE FALSE FALSE FALSE FALSE

Есть ли простая функция? Спасибо!

Ответы [ 2 ]

3 голосов
/ 08 марта 2019

identical может сделать это.

identical(1, 1)
#> [1] TRUE
identical(1, Inf)
#> [1] FALSE
identical(1, NA)
#> [1] FALSE
identical(1, NULL)
#> [1] FALSE
identical(1, NaN)
#> [1] FALSE

Создано в 2019-03-08 пакетом Представить (v0.2.1)


Вы можете написать простую оболочку, например, такую:

equals1 <- function(x)identical(x, 1)

c(equals1(1),equals1(Inf),equals1(NA),equals1(NULL),equals1(NaN))
#> [1]  TRUE FALSE FALSE FALSE FALSE

Создано в 2019-03-08 пакетом prex (v0.2.1)

0 голосов
/ 08 марта 2019

в соответствии Числовая сложность сравнения в R Эта функция может сделать это легко.обратите внимание, что идентичные (tan (pi / 4), 1) возвращает false.

    identical(tan(pi/4),1)
    #[1] FALSE
    eq<-function(x,y){
    isTRUE(all.equal(x, y))
    }
    eq(tan(pi/4),1)
    #[1] TRUE
    eq(3,1)
   #[1] FALSE
     eq(NA,1)
   #[1] FALSE
    eq(1, NaN)
   #[1] FALSE
    eq(1,1)
   #[1] TRUE
    eq(Inf,1)
  #[1] FALSE
    eq(NA,1)
  #[1] FALSE
    eq(NULL,1)
   #[1] FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...