将引用 class 与活动绑定一起使用时求值嵌套太深
Evaluation nested too deeply when using reference class with active binding
可重现的例子:
bed2_RC <- methods::setRefClass(
"bed2",
fields = list(
.fam = "data.frame",
#### Active bindings
fam = function() {
if (ncol(.self$.fam) == 0) {
.self$.fam <- datasets::iris
}
.self$.fam
},
nrow = function() print(nrow(.self$fam))
)
)
bed2 <- function() new(Class = "bed2")
bed2()
错误信息:
Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
Error during wrapup: evaluation nested too deeply: infinite recursion / options(expressions=)?
我不明白为什么这里会发生无限循环。
嗯,当使用 nrow(.self$fam)
时,它实际上试图调用活动绑定 $nrow()
,而不是基函数。替换为 base::nrow(.self$fam)
按预期工作。
可重现的例子:
bed2_RC <- methods::setRefClass(
"bed2",
fields = list(
.fam = "data.frame",
#### Active bindings
fam = function() {
if (ncol(.self$.fam) == 0) {
.self$.fam <- datasets::iris
}
.self$.fam
},
nrow = function() print(nrow(.self$fam))
)
)
bed2 <- function() new(Class = "bed2")
bed2()
错误信息:
Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
Error during wrapup: evaluation nested too deeply: infinite recursion / options(expressions=)?
我不明白为什么这里会发生无限循环。
嗯,当使用 nrow(.self$fam)
时,它实际上试图调用活动绑定 $nrow()
,而不是基函数。替换为 base::nrow(.self$fam)
按预期工作。