【发布时间】:2015-08-16 23:23:00
【问题描述】:
我正在尝试使用 R 来拟合线性模型并进行预测。我的模型包括一些不在数据框中的常量边参数。这是我正在做的简化版本:
dat <- data.frame(x=1:5,y=3*(1:5))
b <- 1
mdl <- lm(y~I(b*x),data=dat)
不幸的是,模型对象现在遇到了一个危险的作用域问题:lm() 不会将b 保存为mdl 的一部分,因此当调用predict() 时,它必须回到@987654326 所在的环境中@ 已定义。因此,如果后续代码改变b的值,预测值也会改变:
y1 <- predict(mdl,newdata=data.frame(x=3)) # y1 == 9
b <- 5
y2 <- predict(mdl,newdata=data.frame(x=3)) # y2 == 45
如何强制predict() 使用原始b 值而不是更改后的值?或者,是否有某种方法可以控制predict() 查找变量的位置,以便我可以确保它获得所需的值?在实践中,我不能将b 作为newdata 数据框的一部分,因为在我的应用程序中,b 是一个参数向量,其大小与新观察的数据框不同。
请注意,相对于我的实际用例,我已经大大简化了这一点,因此我需要一个强大的通用解决方案,而不仅仅是临时黑客。
【问题讨论】:
标签: r lexical-scope dynamic-scope