variables.null.model <- paste('utalter', 'lcsex', 'utcigreg', 'utbmi', 'month', sep = '+')
variables.full.model <- paste('utalter', 'lcsex', 'utcigreg', 'utbmi', 'month', 'ltedyrs','occ_status', 'marital_status', 'social_cat','GC_linc125_07', 'GC_linc250_07', 'GC_linc500_07', 'GC_linc1000_07', 'GC_linc5000_07', 'GC_pop500_08','utalkkon', 'activity', 'utpyrs', 'cvd', 'utmstati', 'utmfibra', 'utantihy', 'utmeddia', 'utmadins','utwhrat','ul_choln', sep='+')
pollutants_3 <- c('GC_PM10_09', 'GC_PM25_09', 'GC_Coarse_09', 'GC_BS25_09', 'GC_NOX_09', '$GC_NO2_09')
null <- paste(variables.null.model, pollutants_3, sep='+')
full <- paste(variables.full.model, pollutants_3, sep='+')
fun.model.summary <- function(x) {
formula <- as.formula(paste("log_sfrp5 ~", x))
lm <- lm(formula, data = kalonji.na )
coef(summary(lm))
}
lm.summary <- lapply(full, fun.model.summary)
我正在研究一些空气污染数据,并希望运行线性回归函数并总结系数。我上面的代码如下,但是我收到了这个错误:
解析时出错(text = x,keep.source = FALSE): :1:269:意外的'$'
我有什么想法可以解决这个问题吗?
答案 0 :(得分:0)
您的最后一种污染物是'$GC_NO2_09'
。请注意迷路$
符号。
但正如我在评论中所说,我强烈建议不要在这里使用字符串 1 。通过as.name
将字符串转换为R标识符,直接从R对象构造公式。
您可以使用Reduce
和call
将名单列表合并为一笔。 E.g:
make_addition = function (lhs, rhs)
call('+', lhs, rhs)
variables_null_model = c('utalter', 'lcsex', 'utcigreg', 'utbmi', 'month')
interaction_terms_full_model = Reduce(make_addition, lapply(variables_null_model, as.name))
fun_model_summary = function (x) {
formula = call('~', quote(log_sfrp5), call('+', interaction_terms_full_model, as.name(x)))
lm = lm(formula, data = kalonji_na)
coef(summary(lm))
}
lm_summary = lapply(pollutants_3, fun_model_summary)
1 对于一些背景知识,在这里使用字符串会颠覆类型系统,并用无类型字符串替换正确的,不同的类型。这被称为stringly typing,它是一种反模式,因为它隐藏了错误。你的问题是这种错误的一个例子。