从R中的列表中获取时的默认值

时间:2015-07-17 15:56:34

标签: r clojure

在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
    }
}

它有效,但远不如优雅。还有更好的方法吗?

2 个答案:

答案 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)