在clojure中你可以这样做:
(def x {:a 1 :b 2})
(def y (or (:c x) 111))
在R中你可以这样做:
x = list(a = 1, b = 2)
y = {
if ("c" %in% names(x)) {
x$c
} else {
111
}
}
它有效,但远不如优雅。还有更好的方法吗?
答案 0 :(得分:4)
在dplyr
中定义但未导出(https://github.com/hadley/dplyr/blob/master/R/utils.r#L81)是运算符
"%||%" <- function(x, y) if(is.null(x)) y else x
然后你可以写它
x$a %||% 1111
答案 1 :(得分:2)
使用更少的空间实现相同的结果:
x <- list(a = 1, b = 2)
y <- ifelse("c" %in% names(x), x$a, 111)