lexical scope - passing model parameters to R's predict() function robustly -


i trying use r fit linear model , make predictions. model includes constant side parameters not in data frame. here's simplified version of i'm doing:

dat <- data.frame(x=1:5,y=3*(1:5)) b <- 1 mdl <- lm(y~i(b*x),data=dat) 

unfortunately model object suffers dangerous scoping issue: lm() not save b part of mdl, when predict() called, has reach environment b defined. thus, if subsequent code changes value of b, predict value change too:

y1 <- predict(mdl,newdata=data.frame(x=3)) # y1 == 9 b <- 5 y2 <- predict(mdl,newdata=data.frame(x=3)) # y2 == 45 

how can force predict() use original b value instead of changed one? alternatively, there way control predict() looks variable, can ensure gets desired value? in practice cannot include b part of newdata data frame, because in application, b vector of parameters not have same size data frame of new observations.

please note have simplified relative actual use case, need robust general solution , not ad-hoc hacking.

eval(substitute value quoted expression

mdl <- eval(substitute(lm(y~i(b*x),data=dat), list(b=b)))  mdl # call: # lm(formula = y ~ i(1 * x), data = dat) # ... 

Comments

Popular posts from this blog

dns - How To Use Custom Nameserver On Free Cloudflare? -

python - Pygame screen.blit not working -

c# - Web API response xml language -