无法评估 r 中的对象

Can not evaluate an object in r

我有一个模型。

library(dlnm)
library(splines)
data(chicagoNMMAPS)

cb1.pm <- crossbasis(chicagoNMMAPS$pm10, lag=15, argvar=list(fun="lin"),
                     arglag=list(fun="poly",degree=4))


model1 <- glm(death ~ cb1.pm + ns(time, 7*14) + dow,
              family=quasipoisson(), chicagoNMMAPS)

pred1.pm1 <- crosspred(cb1.pm, model1, bylag=0.2, cumul=TRUE)

我想用字符向量来调用对象cb1.pm所以我试了一下。

# use character vector

i = 'pm'

cb1.var = paste0('cb1.', i) %>% get()

model2 <- glm(death ~ cb1.var + ns(time, 7*14) + dow,
              family=quasipoisson(), chicagoNMMAPS)


pred1.pm2 <- crosspred(cb1.pm, model2, bylag=0.2, cumul=TRUE) # Error occur here 

identical(cb1.pm, cb1.var) # TRUE

结果identical(cb1.pm, cb1.var)TURE,但是 为什么这两个变量不能相互替代?

非常感谢任何帮助!

问题是 crosspred 使用非标准评估从您的调用中提取第一个参数的名称,并尝试将其与 model2 中的变量匹配。它使用 grep 执行此操作。由于您在模型中使用 cb1.var 作为名称,因此 crosspred 函数找不到任何包含字符串“cb1.pm”的系数并抛出错误。

解决这个问题的方法是确保 cb1.var 保留为符号,并在构建模型之前替换 cb1.pm。这也更有效,因为您不需要复制整个 cb1.pm 数据:

i = 'pm'

cb1.var = paste0('cb1.', i)

form <- as.formula(paste("death ~", cb1.var, "+  ns(time, 7*14) + dow"))

model2 <- glm(form, family = quasipoisson(), chicagoNMMAPS)

pred1.pm2 <- crosspred(cb1.pm, model2, bylag = 0.2, cumul=TRUE) 

我们不再收到警告,我们可以确认我们拥有正确的模型:

identical(pred1.pm1, pred1.pm2)
#> [1] TRUE