无结果时如何将NA放入For循环的存储列表中

卡莱尔·莱奥(Karelle Rheault)

我创建了一个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将结果存储在for循环的列表中

如何将循环迭代结果存储到列表中?

如何将语句结果放入列表中?

如何将for循环的结果存储在R中的向量或列表中

Javascript - 如何将 for 循环的结果存储到变量中?

如何将For循环结果存储到XSLT变量中

如何将结果从for循环存储到数据框中

如何将循环的结果存储在矩阵中?

如何将“ for”循环中的回归结果存储在唯一名称下的列表中?

如何将Android Wifi扫描结果放入列表?

Python-如何将sqlite结果放入列表

如何将特定的用户选择放入循环列表中

如何将计算结果放入列表中?

循环时将变量存储在列表中

打印时如何将CSV文件中的学生姓名放入列表中

如何将 SQL 结果放入 VBA 中的变量中

如何将 BeautifulSoup 结果中的 URL 存储到列表,然后再存储到表

如何将for循环的每次迭代结果存储到Java中的数组中

如何将json的结果放入header中

如何将子过程的结果放入变量中

如何将查询结果放入任意大的数组中?

如何将选择查询的结果放入Postgresql中的函数

如何将查询结果放入变量中?

如何将仓库的分支放入新的存储库中?

如何将时间戳放入本地存储的阵列中?

Python如何将嵌套的for循环放入函数中?

如何将for循环结果存储为数组?

如何将嵌套的for循环的结果存储为python中的嵌套字典?

如何将存储在列表中的数据框的名称放入每个数据框的列名称中?