RStudio 和惰性求值
RStudio and Lazy Evaluation
我正在维护包 "hdm",我遇到了以下问题。
以下代码 运行s 在纯 R 中,在 RStudio 中用于 运行,但不再是:
library(hdm)
attach(GrowthData)
fmla= "Outcome ~ ."
fmla.y= "Outcome ~ . - gdpsh465 "
rY= rlasso(fmla.y, data =GrowthData)
错误信息:
Error in exists("homoscedastic", where = penalty) : object 'n' not
found
如果在函数 rlasso 中没有指定惩罚,则默认设置包含变量 "n",x 的样本大小,稍后对其进行评估。
n 是通过惰性评估获得的,似乎在 RStudio 中找不到正确的环境。
这里出现错误,问题是penalty中包含n,不知道
if (!exists("homoscedastic", where = penalty)) penalty$homoscedastic = "FALSE"
不知道怎么解决这个问题,想问问大家有什么想法。
非常感谢您提前的努力!
最佳,
马丁
当x
是字符object时,问题出现是因为n
在调用rlasso.formula
的环境中没有定义,即rlasso.character()
,或其 parents。大致情况如下:
test <- function(x, ...) {
UseMethod("test")
}
test.character <- function(x, pen = list(alpha = n)) {
test.formula(x, pen = pen)
}
test.formula <- function(x, pen = list(alpha = n)) {
n <- 2
test.default(x, pen)
}
test.default <- function(x, pen = list(alpha = n)) {
n <- 3
exists("alpha", where = pen)
}
test("y ~ x")
# Error in exists("alpha", where = pen) : object 'n' not found
test(y ~ x)
# [1] TRUE
test(123)
# [1] TRUE
解决方法是在调用 formula
方法时不指定 pen
,如果在调用 character
方法时未定义它:
test.character <- function(x, pen = list(alpha = n)) {
if (missing(pen))
test.formula(x)
else
test.formula(x, pen = pen)
}
test("y ~ x")
# [1] TRUE
我正在维护包 "hdm",我遇到了以下问题。 以下代码 运行s 在纯 R 中,在 RStudio 中用于 运行,但不再是:
library(hdm)
attach(GrowthData)
fmla= "Outcome ~ ."
fmla.y= "Outcome ~ . - gdpsh465 "
rY= rlasso(fmla.y, data =GrowthData)
错误信息:
Error in exists("homoscedastic", where = penalty) : object 'n' not found
如果在函数 rlasso 中没有指定惩罚,则默认设置包含变量 "n",x 的样本大小,稍后对其进行评估。 n 是通过惰性评估获得的,似乎在 RStudio 中找不到正确的环境。
这里出现错误,问题是penalty中包含n,不知道
if (!exists("homoscedastic", where = penalty)) penalty$homoscedastic = "FALSE"
不知道怎么解决这个问题,想问问大家有什么想法。
非常感谢您提前的努力!
最佳,
马丁
当x
是字符object时,问题出现是因为n
在调用rlasso.formula
的环境中没有定义,即rlasso.character()
,或其 parents。大致情况如下:
test <- function(x, ...) {
UseMethod("test")
}
test.character <- function(x, pen = list(alpha = n)) {
test.formula(x, pen = pen)
}
test.formula <- function(x, pen = list(alpha = n)) {
n <- 2
test.default(x, pen)
}
test.default <- function(x, pen = list(alpha = n)) {
n <- 3
exists("alpha", where = pen)
}
test("y ~ x")
# Error in exists("alpha", where = pen) : object 'n' not found
test(y ~ x)
# [1] TRUE
test(123)
# [1] TRUE
解决方法是在调用 formula
方法时不指定 pen
,如果在调用 character
方法时未定义它:
test.character <- function(x, pen = list(alpha = n)) {
if (missing(pen))
test.formula(x)
else
test.formula(x, pen = pen)
}
test("y ~ x")
# [1] TRUE