RStudio и Ленивая Оценка - PullRequest
0 голосов
/ 01 июня 2018

Я поддерживаю пакет "hdm" и столкнулся со следующей проблемой.Следующий код работает на обычном R и используется для запуска в RStudio, но больше не:

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

Сообщение об ошибке:

Ошибка в существующем («гомоскедастическое», где = штраф): объект 'n' не найден

Если в функции rlasso не указано наказание, по умолчанию устанавливается переменная «n», размер выборки x, который оценивается позже.n получает ленивая оценка, и кажется, что в RStudio правильная среда больше не найдена.

Ошибка возникает здесь, но проблема в том, что штраф содержит n, который не знает

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

Почему-то я не уверен, что решить эту проблему, и хотел бы спросить, есть ли у вас какие-либо идеи.

Большое спасибо за ваши усилия заранее!

Best,

Martin

1 Ответ

0 голосов
/ 01 июня 2018

Когда 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
...