No clojure você pode fazer isso:
(def x {:a 1 :b 2})
(def y (or (:c x) 111))
Em R você pode fazer assim:
x = list(a = 1, b = 2)
y = {
if ("c" %in% names(x)) {
x$c
} else {
111
}
}
Funciona, mas é muito menos elegante. Existe uma maneira melhor?
Respostas:
4 para resposta № 1Definido em dplyr
mas não exportado (https://github.com/hadley/dplyr/blob/master/R/utils.r#L81) é o operador
"%||%" <- function(x, y) if(is.null(x)) y else x
então você pode escrever
x$a %||% 1111
2 para resposta № 2
Isso alcança o mesmo resultado usando muito menos espaço:
x <- list(a = 1, b = 2)
y <- ifelse("c" %in% names(x), x$a, 111)