我创建了一个For循环,以将不同的模型应用于许多变量:
my_data <- read.xlsx("phyla.xlsx")
start_variables <- 6
variables <- variable.names(my_data)
variables <- variables[-c(1:(start_variables-1))]
#make a list of data frame for each variable
DF.ls <- list()
for (i in start_variables:length(my_data)){
DF.ls[[i]] <- data.frame(Sample_ID=my_data$Sample_ID,Genotype=my_data$Genotype,
Substrate=my_data$Substrate, y=my_data[[i]])
}
DF.ls <- DF.ls[-1]; DF.ls <- DF.ls[-1]; DF.ls <- DF.ls[-1]; DF.ls <- DF.ls[-1]; DF.ls <- DF.ls[-1]
#model1
model1.ls <- list()
for (i in 1:length(DF.ls)){
model1.ls[[i]] <- gls(y~Substrate+Genotype+Substrate:Genotype, data=DF.ls[[i]])
}
AIC_model1_ls <- list()
for (i in 1:length(model1.ls)){
AIC_model1_ls[[i]] <- AIC(summary(model1.ls[[i]]))
}
AIC_model1 = unlist(AIC_model1_ls)
AIC_model1 = rbind(AIC_model1)
#model2
model2.ls <- list()
for (i in 1:length(DF.ls)){
model2.ls[[i]] <- gls(y~Substrate+Genotype+Substrate:Genotype, weights=varIdent(form=~1|Substrate), data=DF.ls[[i]])
}
AIC_model2_ls <- list()
for (i in 1:length(model2.ls)){
AIC_model2_ls[[i]] <- AIC(summary(model2.ls[[i]]))
}
AIC_model2 = unlist(AIC_model2_ls)
AIC_model2 = rbind(AIC_model2)
这可能不是最好的方法,但是它可以正常工作,除非有些处理方法为零。
所以我的问题是当零为零时会发生此错误:
gls(y〜底物+基因型+底物:基因型,权重= varIdent(形式=〜1 |:错误收敛(8))中的错误
我希望我的For循环在发生此错误而不是什么都没有的情况下将NA放入列表中。我怎样才能做到这一点?
您可以使用该try
功能。这将捕获一个错误而不会停止您的程序。这是一个示例,因为您没有提供可复制的示例:
# This model will fail since we have not assigned values to x and y
model <- try(lm(x ~ y), silent = TRUE)
# However check the output
model
> model
[1] "Error in eval(predvars, data, env) : object 'x' not found\n"
attr(,"class")
[1] "try-error"
attr(,"condition")
<simpleError in eval(predvars, data, env): object 'x' not found>
如果您通过有效的尝试,就会发现您将获得正确的结果
model <- try(lm(wt~ mpg, data = mtcars))
model
> model
Call:
lm(formula = wt ~ mpg, data = mtcars)
Coefficients:
(Intercept) mpg
6.0473 -0.1409
因此,考虑到这一点,您可以扩展代码以执行以下操作:
fit <- try(gls(y~Substrate+Genotype+Substrate:Genotype, weights=varIdent(form=~1|Substrate), data=DF.ls[[i]]), silent = TRUE)
if(class(fit)=="try-error"){
model1.ls[[i]] <- NA
} else {
model1.ls[[i]] <- fit
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句