我在R中运行模拟,在 for 循环中运行。在循环的每个步骤中,我尝试使用 VGAM 包的 vglm 函数来拟合beta二项分布:
vglm(data ~ 1, betabinomial)
然而,对于我生成的一些数据,beta二项模型不适合,函数崩溃。因为它崩溃了,R退出循环并停止。我想简单地转到循环中的下一步。我知道函数 tryCatch 但在我的情况下未能使用它。 目前,我的代码如下(注意 for 循环嵌套在另一个 for 循环中):
for (i in 1:nsimu) {
## Some code to generate Pos and Neg
data <- cbind(Pos,Neg)
if (sum(Pos)==0) {
##Go to next step
}
else {
vglm(data ~ 1, betabinomial)
}
}
非常感谢您的任何帮助或建议。
斯特凡
答案 0 :(得分:6)
您可以使用next
跳过for
循环中的步骤:
R> for (i in 1:5) { if (i==2) next(); print(i)}
[1] 1
[1] 3
[1] 4
[1] 5
答案 1 :(得分:3)
你为什么不这样做
if (sum(Pos) > 0)
vglm(data ~ 1, betabinomial)
根据设计,如果条件被评估TRUE
,则R仅在下一个换行符上运行代码。总是最好使用花括号{}
来包装表达式以避免歧义,并且如果else
Pos==0
条件来评估其他表达式
if (sum(Pos) > 0){
vglm(data ~ 1, betabinomial)
} else {
do something else
}