/ / Valor padrão ao buscar de uma lista em R - r, clojure

Valor padrão ao buscar de uma lista em R - r, clojure

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 № 1

Definido 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)