Недавно я заметил, что вызов vcovCR()
(из пакета clubSandwich
) для объекта plm
(из пакета plm
) внутри функции не работает должным образом.
Простой пример для воссоздания моей находки приведен ниже.
example.plm <- function(some.data, linear.formula, cluster.variable){
require(plm)
require(clubSandwich)
model.output <- plm(formula = linear.formula, data = some.data, model = "within", index = cluster.variable)
vcovCR(model.output, cluster = some.data[, cluster.variable], type="CR1S")
}
Теперь мы запускаем функцию на знаменитых данных радужной оболочки.
example.plm(some.data = iris,
linear.formula = "Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width",
cluster.variable = "Species")
и в конечном итоге с сообщением об ошибке, которое гласит: Error in eval(mf$data, envir) : object 'some.data' not found
.
Однако запуск тех же вычислений, но не внутри функции, работает нормально:
require(clubSandwich)
model.output <- plm(formula = Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width, data = iris, model = "within", index = "Species")
vcovCR(model.output, cluster = iris[, "Species"], type="CR1S")
Я что-то упустил здесь? Почему функция может нормально работать вне другой функции, но не внутри нее? Чтобы еще больше запутать ситуацию, эта проблема не возникает при использовании объекта lm()
вместо объекта plm()
. Кроме того, если я уберу часть cluster = some.data[, cluster.variable]
из вызова vcovCR()
внутри функции, она тоже почему-то сработает.