Botao
Botao

Reputation: 1

function with if...else loop in R

Can someone tell me what is wrong with this function in R? The functions can work on a single input, but when I use a vector I get an error:

input_check3 <- function(x){
    if (is.finite(x)) {
        if (x %% 2 == 0){
            print(TRUE)
        } else {
            print(FALSE)
        }
    } else {
       NA
    }
}

data_for_e2 <- c(1, 2, 4, 5, 3)
input_check3(data_for_e2)

#> [1] FALSE
#>  Warning messages:
#>  1: In if (is.finite(x)) { : The length of the condition is greater than one, so only its first element can be used
#>  2: In if (x%%2 == 0) { : The length of the condition is greater than one, so only its first element can be used

Upvotes: 0

Views: 67

Answers (1)

Jon Spring
Jon Spring

Reputation: 66945

You could use ifelse, which is a vectorized function:

input_check3 <- function(x){
  ifelse(is.finite(x),
         x %% 2 == 0, # equiv to ifelse(x %% 2 == 0, TRUE, FALSE), thanks Martin Gal!
         NA)
}

Result

[1] FALSE  TRUE  TRUE FALSE FALSE

Upvotes: 1

Related Questions