在积分和映射中使用tryCatch
我有日期(考试): 在下面的代码中,对于每个i(行号),积分函数(funit)使用来自列x1b1和x2b1或x1b0和x2b0的值加上其他四个变量:si、ho、bd和i1在积分和映射中使用tryCatch,r,integral,mapply,R,Integral,Mapply,我有日期(考试): 在下面的代码中,对于每个i(行号),积分函数(funit)使用来自列x1b1和x2b1或x1b0和x2b0的值加上其他四个变量:si、ho、bd和i1 kk<-data.frame( tryCatch( mapply( function(j1b1,j2b1,j1b0,j2b0){ (sapply(rowno, function(i){ funint(test[i,j1b1],test[i,j2b1],test[i,"si"],test[i,"ho"],test[i,"
kk<-data.frame(
tryCatch(
mapply(
function(j1b1,j2b1,j1b0,j2b0){
(sapply(rowno,
function(i){
funint(test[i,j1b1],test[i,j2b1],test[i,"si"],test[i,"ho"],test[i,"bd"],test[i,"i1"])-
funint(test[i,j1b0],test[i,j2b0],test[i,"si"],test[i,"ho"],test[i,"bd"],
test[i,"i1"])}))
},x1b1,x2b1,x1b0,x2b0),error=function(e) print("hello")))
test[i,"i1"])
}))},x1b1,x2b1,x1b0,x2b0))
names(kk)<-paste0("var")
我们将非常感谢您在这方面提供的任何帮助
注意:代码是有效的。我唯一的问题是如何跳过错误(当错误发生时返回NA),并使代码继续为其他行工作 我认为您只需要将
tryCatch
移动到循环中的更深处,以便它准确捕捉错误发生的位置
foo <- mapply(function(j1b1, j2b1, j1b0, j2b0) {
sapply(rowno, function(i) {
tryCatch({
funint(test[i,j1b1], test[i,j2b1], test[i,"si"],
test[i,"ho"], test[i,"bd"], test[i,"i1"]) -
funint(test[i,j1b0], test[i,j2b0], test[i,"si"],
test[i,"ho"], test[i,"bd"], test[i,"i1"])
}, error=function(e) NA)
})
}, x1b1, x2b1, x1b0, x2b0)
kk <- data.frame(foo)
names(kk) <- var
kk
## b e
## 1 601.2711 2578.3789
## 2 2046.8451 NA
## 3 2002.7819 NA
## 4 188.4013 354.9656
foo为了更容易理解,为什么不使用与列类似的方案为函数命名参数……谢谢您的建议。我现在已经更新了j1b1
表示列表中的变量x1b1
即以x1b1
开头的变量,j1b0
表示以x1b0
开头的变量。我实际上指的是您的funint函数和测试数据。frame。抱歉。我对其他四个参数(参数名称与列名相同)这样做了,但对前两个参数没有这样做。我被你的代码弄糊涂了。x1b1、x2b1、x1b0、x2b0
行应该出现两次吗?完美的解决方案。谢谢你@Aaron。
kk<-data.frame(
tryCatch(
mapply(
function(j1b1,j2b1,j1b0,j2b0){
(sapply(rowno,
function(i){
funint(test[i,j1b1],test[i,j2b1],test[i,"si"],test[i,"ho"],test[i,"bd"],test[i,"i1"])-
funint(test[i,j1b0],test[i,j2b0],test[i,"si"],test[i,"ho"],test[i,"bd"],
test[i,"i1"])}))
},x1b1,x2b1,x1b0,x2b0),error=function(e) print("hello")))
test[i,"i1"])
}))},x1b1,x2b1,x1b0,x2b0))
names(kk)<-paste0("var")
kk
b e
1 601.2711 2578.3789
2 NA NA
3 NA NA
2 188.4013 354.9656
foo <- mapply(function(j1b1, j2b1, j1b0, j2b0) {
sapply(rowno, function(i) {
tryCatch({
funint(test[i,j1b1], test[i,j2b1], test[i,"si"],
test[i,"ho"], test[i,"bd"], test[i,"i1"]) -
funint(test[i,j1b0], test[i,j2b0], test[i,"si"],
test[i,"ho"], test[i,"bd"], test[i,"i1"])
}, error=function(e) NA)
})
}, x1b1, x2b1, x1b0, x2b0)
kk <- data.frame(foo)
names(kk) <- var
kk
## b e
## 1 601.2711 2578.3789
## 2 2046.8451 NA
## 3 2002.7819 NA
## 4 188.4013 354.9656