无法计算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

相关内容

  • 没有找到相关文章

最新更新