Написание функции с оператором if, которая выполняется, когда оператор имеет значение NULL или строковый эквивалент - PullRequest
1 голос
/ 08 октября 2019

Я хотел бы иметь оператор if, который выполняется, когда оператор имеет значение NULL или строковый эквивалент:

somefun <- function (number1, number2, type=NULL) {
if (is.null(type) | type == "sum") {
    print(number1+number2)
    } else if (type == "product") {
    print(number1*number2)
    }}
# So that the two following lines lead to the same result

somefun(1,4)
somefun(1,4,type="sum")

Первый, однако, дает ошибку:

Error in if (is.null(type) | type == "sum") { : 
  argument is of length zero

Какмне написать синтаксис?

1 Ответ

3 голосов
/ 08 октября 2019

Это один из тех случаев, когда вам нужно использовать || сверх |

somefun <- function (number1, number2, type=NULL) {
if (is.null(type) || type == "sum") {
    print(number1+number2)
    } else if (type == "product") {
    print(number1*number2)
    }
}


> somefun(1,4,type="sum")
[1] 5
> somefun(1,4,type=NULL)
[1] 5
> somefun(1,4)
[1] 5

Если я могу сделать предложение, хотя:

somefun2 <- function (number1, number2, type=NULL){
    if(is.null(type)){
        type <- "sum"
    }
    switch(type,
           "sum" = number1 + number2,
           "product" = number1 * number2
    )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...