使用循环拟合不同自变量的线性回归模型及R代码报错求解
错误原因
- 取列方式不符合lm要求:R中使用单中括号
[]提取数据框列时,返回的是单列数据框(本质为list类型),而lm()的公式要求传入向量类型的变量,因此触发类型报错。 append()函数用法错误:R的append()不会原地修改原向量,而是返回拼接后的新向量,你没有将返回值赋值给原存储向量,循环结束后结果不会被保存。- 补充注意:你需要提前初始化两个空向量用来存储结果,否则循环中调用
append()时会找不到对象报错。
循环实现的修正代码
# 第一步:初始化空存储向量 coeff_value_vector <- c() RCs_sign_vector <- c() # 第二步:循环拟合单变量回归 for (x in 1:7) { # 动态构造回归公式,直接调用数据框内的列,避免类型错误 fit <- lm( formula = reformulate(names(FAA_unique_with_duration_filtered)[x], response = "distance"), data = FAA_unique_with_duration_filtered ) # 提取非截距项系数 current_coef <- coef(fit)[2] # 拼接结果到存储向量,必须赋值回原对象 coeff_value_vector <- append(coeff_value_vector, current_coef) RCs_sign_vector <- append(RCs_sign_vector, sign(current_coef)) }
更简洁的向量化实现(无需显式循环)
如果追求代码简洁性,可以用sapply()批量处理,执行效率也更高:
# 提取前7列作为自变量集 predictors <- FAA_unique_with_duration_filtered[, 1:7] # 批量拟合模型提取非截距项系数 coeff_value_vector <- sapply(predictors, function(col) { coef(lm(FAA_unique_with_duration_filtered$distance ~ col))[2] }) # 直接生成符号向量 RCs_sign_vector <- sign(coeff_value_vector)
内容的提问来源于stack exchange,提问作者yash471994
相关产品推荐
相关产品推荐

