r - 如何在 R 中使用“'try”来跳过 for 循环中的错误
问题描述
每个人。
我想问一些有关如何避免 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 元素。这样循环就结束了。
有人可以帮我使用“尝试”来跳过这个错误吗?因为我在做模拟,所以我可以跳过这个错误并进行下一个模拟。非常感谢。
解决方案
如果您收到错误消息,我认为您可以使用该tryCatch
功能。您可以尝试以下方法:
theta <- tryCatch({ as.vector(t(theta))+t(ginv(Amatrix)%*%as.matrix(B)) },
error = function(e){ next })
推荐阅读
- python - 导入绘图功能时阻止 Tkinter 打开第二个窗口
- android - 仅在首次使用应用程序时打开 TapTarget
- python - 生成 5 个不重复整数的列表
- python - 如何从 Anaconda 5.2(使用 python 3.6.6)升级到 Anaconda 5.3(使用 python 3.7)
- typescript - 通过主要版本更新包依赖项是否需要包本身的主要版本提升?
- javascript - javascript 创建或设计单例类的好方法
- django - django 事件,日期可用=True,在 event.date 上使可用=False。日期是今天
- javascript - React event.target 仅针对一个输入元素未定义
- java - web.xml 第一行代码中的 XML 问题
- python - 具有混合数据类型(文本、数字、分类)的 Python scikit-learn 分类