首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中,如何让update()找到在调用update()函数中创建的变量?

在R中,如何让update()找到在调用update()函数中创建的变量?
EN

Stack Overflow用户
提问于 2021-08-15 06:08:13
回答 1查看 71关注 0票数 1

我想调用update()来重新拟合函数中的模型。我希望将变量添加到函数中。但是,update()通常通过计算parent.frame()返回的环境中的call来工作。如何在搜索中插入局部变量,以便update能够找到它?

如果在控制台中执行此操作,则可以:

代码语言:javascript
复制
set.seed(8700)
x <- rnorm(10)
y <- rnorm(10)
z_global <- rnorm(10)
lm_out <- lm(y ~ x)
update(lm_out, . ~ . + z_global)

产出如下:

代码语言:javascript
复制
Call:
lm(formula = y ~ x + z_global)

Coefficients:
(Intercept)            x     z_global  
    0.08648      0.49040      0.18212  

然而,这正是我想要做的:

代码语言:javascript
复制
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)

它不起作用:

代码语言:javascript
复制
Error in eval(predvars, data, env) : object 'z_local' not found

我想这是因为update()评估了fitparent.frame()中的调用,这是tmpfct(lm_out)的调用环境,即全局环境。这里没有定义z_local

我试图在函数中插入一个环境,希望update()中的update()将是该函数的执行环境。然而,这也不起作用:

代码语言:javascript
复制
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)

错误消息是相同的:

代码语言:javascript
复制
Error in eval(predvars, data, env) : object 'z_local' not found

我应该如何修改代码,以便在计算调用时,update()可以找到在函数中创建的z_local

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-15 06:24:20

更新:OP的请求:

不使用z_local作为第二个参数:

代码语言:javascript
复制
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

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
Call:
lm(formula = y ~ x + z_local)

Coefficients:
(Intercept)            x      z_local  
    0.08648      0.49040      0.18212  
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68789112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档