1

我在 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)
    } 
} 

非常感谢您的任何帮助或建议。

斯蒂芬妮

4

2 回答 2

6

您可以使用next跳过for循环中的步骤:

R> for (i in 1:5) { if (i==2) next(); print(i)}
[1] 1
[1] 3
[1] 4
[1] 5
于 2013-06-14T08:39:59.117 回答
3

你为什么不做

if (sum(Pos) > 0) 
  vglm(data ~ 1, betabinomial)

按照设计,如果条件被评估,R 只会在下一个换行符上运行代码TRUE。始终最好使用花括号{}来包装表达式以避免歧义,并且您可以添加一个else条件来评估其他表达式,如果Pos==0

if (sum(Pos) > 0){
  vglm(data ~ 1, betabinomial)
} else {
  do something else
}
于 2013-06-14T08:42:18.790 回答