我正在主打包" 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"
不知怎的,我不确定是否解决这个问题,并想问你是否有任何想法。
非常感谢您提前付出的努力!
最佳,
马丁
答案 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}}