无法评估 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
我有一个模型。
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