RStudio和Lazy Evaluation

时间:2018-06-01 12:43:24

标签: r rstudio lazy-evaluation

我正在主打包" hdm"我遇到了以下问题。 以下代码在普通R中运行并用于在RStudio中运行,但不再是:

library(hdm)
attach(GrowthData)
fmla=  "Outcome ~ ."
fmla.y= "Outcome ~ . - gdpsh465 "
rY= rlasso(fmla.y, data =GrowthData)

错误讯息:

  

存在错误(" homoscedastic",where = penalty):object' n'不   结果

如果指定函数rlasso中没有惩罚,则默认设置它包含变量" n",x的样本大小,稍后进行评估。 n是通过延迟评估获得的,似乎在RStudio中找不到正确的环境。

此处发生错误,但问题是惩罚包含不知道的n

if (!exists("homoscedastic", where = penalty))  penalty$homoscedastic = "FALSE"

不知怎的,我不确定是否解决这个问题,并想问你是否有任何想法。

非常感谢您提前付出的努力!

最佳,

马丁

1 个答案:

答案 0 :(得分:1)

x是一个角色对象时,会出现问题,因为n未在调用rlasso.formula的环境中定义,即rlasso.character()或其父项。这大致是发生的事情:

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

如果在调用pen方法时未定义formula方法,则解决方法是不在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

{{1}}