[英]R project: loop breaks after lm gives error
我想自动运行线性回归并保存结果。 R project生成的beta系数将在以后用作进一步计算的参数。
这是我的数据布局的一个示例:
id |x_2000|x_2001|x_2002|y_2000|y_2001|y_2002|z_2000|z_2001|z_2002
1 |20 |NA |6 |90 |NA |80 |54 |NA |10
2 |50 |NA |10 |50 |NA |50 |60 |NA |40
3 |4 |NA |1 |5 |NA |10 |30 |NA |120
x是值x,其后的数字表示年份。 相同的逻辑适用于其他变量y和z。
为了运行线性回归,我创建了一个循环。 我使用以下代码循环遍历变量并每年进行回归。
for (i in 2000:2002){
X_COLUMN <- c(paste0("x_",i))
Y_COLUMN <- c(paste0("y_",i))
Z_COLUMN <- c(paste0("z_",i))
result.lm <- lm(as.formula(paste("formula=",X_COLUMN,"~",Y_COLUMN,"+",Z_COLUMN,"-1")), data=data_for_regression)
b1 <- rbind(b1, c(x,i,coef(result.lm)[1]))
b2 <- rbind(b2, c(x,i,coef(result.lm)[2]))
}
对于2000年,一切工作正常,但是当循环持续到2001年时,它将达到NA值。 这将导致错误消息:
lm.fit(x,y,offset = offset,singular.ok = singular.ok,…)中的错误:0(非NA)
逻辑上,因为没有2001年的完整案例。结果是循环中断。 但是,我不想打破它,而是继续到明年。
任何想法如何解决这个问题?
如何使用try
语句
for (i in 2000:2002){
X_COLUMN <- c(paste0("x_",i))
Y_COLUMN <- c(paste0("y_",i))
Z_COLUMN <- c(paste0("z_",i))
try({
result.lm <- lm(as.formula(paste("formula=",X_COLUMN,"~",Y_COLUMN,"+",Z_COLUMN,"-1")), data=data_for_regression)
b1 <- rbind(b1, c(x,i,coef(result.lm)[1]))
b2 <- rbind(b2, c(x,i,coef(result.lm)[2]))
}, silent=T)
}
或tryCatch
for (i in 2000:2002){
X_COLUMN <- c(paste0("x_",i))
Y_COLUMN <- c(paste0("y_",i))
Z_COLUMN <- c(paste0("z_",i))
tryCatch({
result.lm <- lm(as.formula(paste("formula=",X_COLUMN,"~",Y_COLUMN,"+",Z_COLUMN,"-1")), data=data_for_regression)
b1 <- rbind(b1, c(x,i,coef(result.lm)[1]))
b2 <- rbind(b2, c(x,i,coef(result.lm)[2]))
}, error=function(e) {
b1 <- rbind(b1, c(x,i,NA))
b2 <- rbind(b2, c(x,i,NA))
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.