2017-01-16 68 views
0
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) 

我正在处理一些空气污染数据,并希望运行线性回归函数并总结系数。我有以下代码上面,但我得到这个错误:线性回归功能故障

Error in parse(text = x, keep.source = FALSE) : :1:269: unexpected '$'

任何想法我可以解决这个问题?

+0

'pollutants_3'由什么组成?我也想'lapply(c(null,full),...)'应该可以工作 –

+0

你的'full'变量是一个长度为1的字符向量。那么,为什么你要使用'lapply'呢? – Istrel

+0

@Istrel再次看,它的长度大于1. –

回答

0

您最后的污染物是'$GC_NO2_09'。请注意迷路$标志。

但正如我在评论中所说,我强烈建议不要在这里使用字符串。通过as.name将字符串转换为R标识符,直接从R对象构建公式。

您可以通过使用Reducecall将名称列表合并为一个和。例如为:

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) 

对于位的背景,这里使用字符串颠覆了类型系统和由无类型字符串替换适当的,不同的类型。这被称为stringly typing,它是一种反模式,因为它隐藏了错误。你的问题就是这样一个错误的例子。

+0

感谢你们的帮助......我现在在光明中 – Dee