R中是否有某种东西(包或基本习语)就像在Scala和其他语言中找到的选项一样(有关详细信息,请参阅标记可选)。具体来说,我正在寻找以下功能的一些对象:
我确定选项中还有许多其他不错的特性,但我还没有完全认识到这些特点,因为我对这个成语比较新。任何能够提供超过上述功能的答案都会获得奖励积分,特别是如果可以很好地描述其他功能的话。
答案 0 :(得分:0)
我尝试使用R6类(下面)编写一个糟糕的替代品。任何效果更好或与R更具惯用性的东西都将非常感激。
library(R6)
Option <- R6Class("Option",
public = list(
initialize = function(value=NULL) {
self$value <- value
}
,get = function() {
return(self$value)
}
,set = function(value) {
self$value <- value
return(value)
}
,getOrElse = function(...) {
if(self$isDefined()) {
return(self$value)
} else {
return(eval(...))
}
}
,isDefined = function() {
return(!all(is.null(self$value)) && !all(is.na(self$value)))
}
, value = NULL
)
,private = list()
,active = list()
) #end Option
示例:
bob <- Option$new()
bob$isDefined() == FALSE
bob$getOrElse("a") == "a"
bob$getOrElse({Sys.sleep(2);"b"})=="b"
bob$set(value = "a")
bob$isDefined() == TRUE
bob$getOrElse({Sys.sleep(2);"b"})=="a"