Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在积分和映射中使用tryCatch_R_Integral_Mapply - Fatal编程技术网

在积分和映射中使用tryCatch

在积分和映射中使用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,"

我有日期(考试):

在下面的代码中,对于每个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,"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