如何在R中使用“'try”来跳过for循环中的错误

时间:2019-02-27 17:09:23

标签: r loops

每个人。

我想问一些有关如何避免for循环中可能出现错误消息的问题。我正在运行仿真,并且在某些重复中可能会出现错误,这将导致崩溃并停止整个过程,我想要的是简单地自动继续进行下一个迭代,并从结果中丢弃“不好的”重复。

The code is as below.

    >    for(j in 1:100){ 
    > p<-YHatMulti(theta,X)   
    >  z=dim(p)[1] 
    >  A[[1,1]]<-matrix(apply(apply(cbind(p,X,((1+m-1):(z+m-1))),1,function(x){-x[1]*(1-x[1])*x[3:6]%*%t(x[3:6])*lambda^(((z+m-1)-x[7])/(1000-1)^r)}),1,sum),4,4)
    > A[[2,2]]<-matrix(apply(apply(cbind(p,X,((1+m-1):(z+m-1))),1,function(x){-x[2]*(1-x[2])*x[3:6]%*%t(x[3:6])*lambda^(((z+m-1)-x[7])/(1000-1)^r)}),1,sum),4,4)
    > A[[1,2]]<-matrix(apply(apply(cbind(p,X,((1+m-1):(z+m-1))),1,function(x){x[1]*(x[2])*x[3:6]%*%t(x[3:6])*lambda^(((z+m-1)-x[7])/(1000-1)^r)}),1,sum),4,4)
    > A[[2,1]]<-A[[1,2]]                                                    
    > A_rows<-lapply(1:2,bind_A_row)   Amatrix<-do.call(cbind,A_rows)  
    > Amatrix[is.na(Amatrix)]<-0  
    > B<--apply(cbind(t(sweep(t(X),2,YMat[,1]-p[,1],'*')),t(sweep(t(X),2,YMat[,2]-p[,2],'*')))*(lambda^(((z+m-1)-(1+m-1):(z+m-1))/1000^r)),2,sum)
    > B<-as.matrix(B)   B[is.na(B)]<-0   
    > #B<-B+t(Amatrix%*%(as.matrix(as.vector(t(theta)))))
    >  theta<-as.vector(t(theta))+t(ginv(Amatrix)%*%as.matrix(B))  
    > theta<-matrix(data = theta, ncol= ncol(X), nrow  = typeY-1, byrow =
    > TRUE) 
     }

最后三行使用“ ginv”。我发现有时矩阵B将具有NA元素。因此,循环将结束。

有人可以帮助我使用“ try”跳过此错误吗?由于我正在进行仿真,因此可以跳过此错误并进行下一个仿真。非常感谢。

1 个答案:

答案 0 :(得分:0)

如果收到错误消息,我认为您可以使用tryCatch函数。您可以尝试以下操作:

theta <- tryCatch({ as.vector(t(theta))+t(ginv(Amatrix)%*%as.matrix(B)) },
                    error = function(e){ next })