我想调用update()来重新拟合函数中的模型。我希望将变量添加到函数中。但是,update()通常通过计算parent.frame()返回的环境中的call来工作。如何在搜索中插入局部变量,以便update能够找到它?
如果在控制台中执行此操作,则可以:
set.seed(8700)
x <- rnorm(10)
y <- rnorm(10)
z_global <- rnorm(10)
lm_out <- lm(y ~ x)
update(lm_out, . ~ . + z_global)产出如下:
Call:
lm(formula = y ~ x + z_global)
Coefficients:
(Intercept) x z_global
0.08648 0.49040 0.18212 然而,这正是我想要做的:
set.seed(8700)
x <- rnorm(10)
y <- rnorm(10)
lm_out <- lm(y ~ x)
tmpfct <- function(fit) {
z_local <- rnorm(10)
update(fit, . ~ . + z_local)
}
tmpfct(lm_out)它不起作用:
Error in eval(predvars, data, env) : object 'z_local' not found我想这是因为update()评估了fit在parent.frame()中的调用,这是tmpfct(lm_out)的调用环境,即全局环境。这里没有定义z_local。
我试图在函数中插入一个环境,希望update()中的update()将是该函数的执行环境。然而,这也不起作用:
set.seed(8700)
x <- rnorm(10)
y <- rnorm(10)
lm_out <- lm(y ~ x)
tmpfct <- function(fit) {
z_local <- rnorm(10)
tmp_env <- new.env(environment())
eval(update(fit, . ~ . + z_local), envir = tmp_env)
}
tmpfct(lm_out)错误消息是相同的:
Error in eval(predvars, data, env) : object 'z_local' not found我应该如何修改代码,以便在计算调用时,update()可以找到在函数中创建的z_local?
发布于 2021-08-15 06:24:20
更新:OP的请求:
不使用z_local作为第二个参数:
set.seed(8700)
x <- rnorm(10)
y <- rnorm(10)
lm_out <- lm(y ~ x)
tmpfct <- function(fit) {
update(fit, . ~ . + rnorm(10))
}
tmpfct(lm_out)第一个答案:,您错过了第二个参数z_local
set.seed(8700)
x <- rnorm(10)
y <- rnorm(10)
lm_out <- lm(y ~ x)
tmpfct <- function(fit, z_local) {
z_local <- rnorm(10)
update(fit, . ~ . + z_local)
}
tmpfct(lm_out)输出:
Call:
lm(formula = y ~ x + z_local)
Coefficients:
(Intercept) x z_local
0.08648 0.49040 0.18212 https://stackoverflow.com/questions/68789112
复制相似问题