Я пытаюсь использовать функцию npreg()
из пакета np
в другой функции.Я столкнулся с ошибкой, связанной с окружением.
npreg()
- это функция для непараметрической регрессии.Я делаю оценки в два этапа, сначала я оцениваю полосу пропускания, используя npregbw()
, а затем я могу вызвать npreg()
на оценочной полосе пропускания, чтобы получить оценки регрессии.За пределами вызова функции я не сталкиваюсь с проблемами.Однако при вызове функции функция npreg()
не может работать с предполагаемой полосой пропускания.Представьте ниже:
x <- rnorm(20)
y <- 2*x + rnorm(20)
df <- data.frame(y, x)
pidtest <- function(outformula, data) {
# estimate conditional density of outcome
np_lower_bw <- np::npregbw(outformula, data = data)
np_lower <- np::npreg(np_lower_bw)
np_lower
}
pidtest(y~x, df)
#> Error in eval(predvars, data, env): invalid 'envir' argument of type 'closure'
Если я вызываю функцию только для оценки пропускной способности, проблема не возникает
pidtest <- function(outformula, data) {
# estimate conditional density of outcome
np_lower_bw <- np::npregbw(outformula, data = data)
# np_lower <- np::npreg(np_lower_bw)
# np_lower
np_lower_bw
}
pidtest(y~x, df)
#>
#> Regression Data (20 observations, 1 variable(s)):
#>
#> x
#> Bandwidth(s): 0.3770171
#>
#> Regression Type: Local-Constant
#> Bandwidth Selection Method: Least Squares Cross-Validation
#> Formula: y ~ x
#> Bandwidth Type: Fixed
#> Objective Function Value: 1.469502 (achieved on multistart 1)
#>
#> Continuous Kernel Type: Second-Order Gaussian
#> No. Continuous Explanatory Vars.: 1
Аналогично, вне вызова функции проблемы нет:
bws <- np::npregbw(y~x, df)
np::npreg(bws)
Regression Data: 20 training points, in 1 variable(s)
x
Bandwidth(s): 0.307494
Kernel Regression Estimator: Local-Constant
Bandwidth Type: Fixed
Continuous Kernel Type: Second-Order Gaussian
No. Continuous Explanatory Vars.: 1
Я не могу понять, почему эта ошибка возникает внутри моего вызова функции, и как ее обойти.Я хотел бы встроить эту оценку в функцию, которая выполняет другие функции, поэтому я стремлюсь найти способ заставить ее работать.