我想知道为什么我的代码的第一个版本(pred
)工作正常,但第二个版本不能正常工作?
我知道问题在于使用g <- names(fit$model)[2]
在第二个版本中生成"hp"
而不是hp
。但我想知道如何让第二个版本像第一个版本一样正常工作吗?
library(rstanarm)
fit <- stan_glm(mpg ~ hp, data = mtcars)
pred <- posterior_predict(fit, newdata = data.frame(hp = 93)) # Works OK![FIRST Version]
g <- names(fit$model)[2]
pred <- posterior_predict(fit, newdata = data.frame(g = 93)) # Does not work! [SECOND Version]
答案 0 :(得分:1)
您需要将该数据列的名称设置为g
的值; setNames
将在一行中执行,否则您可以为新数据框创建临时变量并使用names
。
pred <- posterior_predict(fit, newdata = setNames(data.frame(tmp = 93), g))
或
tmp <- data.frame(tmp = 93)
names(tmp) <- g
pred <- posterior_predict(fit, newdata = tmp)
答案 1 :(得分:1)
如果我们使用tidyverse
方式,则可以使字符串对象指定(:=
)作为列名
library(dplyr)
tibble(!! g := 93) %>%
# or
# data_frame(!! g := 93) %>%
posterior_predict(fit, newdata = .)
- 用@ Aaron的方法检查答案
set.seed(24)
pred2 <- tibble(!! g := 93) %>%
posterior_predict(fit, newdata = .)
set.seed(24)
pred <- posterior_predict(fit, newdata = setNames(data.frame(tmp = 93), g))
identicalpred, pred2)
#[1] TRUE