R TryCatch无法与lapply一起使用

时间:2018-07-31 11:21:49

标签: r

我正在尝试使用$user_id = $request->user_id; $role_id = $request->role_id; $module_id = $request->module_id; $permission_id = $request->permission_id; $user = User::find($user_id); $user->permissions()->sync($permission_id); 将函数应用于文件列表(我对数据帧进行了一些操作,然后编写了图)。问题是,如果该函数引发文件错误

  

(无法对数据框进行计算)

,迭代停止。

我在函数中都使用了tryCatch

lapply

ee = function(i){return(tryCatch(..., error=function(e) NULL))}

lapply

,但是无论哪种情况,我都会继续检测到错误,并停止迭代。任何想法?谢谢。

2 个答案:

答案 0 :(得分:0)

像这样定义ee

ee <- function (i) {
  return(tryCatch(....., error=function(e) NULL))
}

然后以这种方式调用

lapply(list.files(path), ee)

答案 1 :(得分:0)

我相信您的第一个示例原则上应该可以工作,但不了解您对那里的椭圆所做的事情。

这是一个简单的最小示例:

foo <- function(x) {
  if (x == 6) stop("no 6 for you")
  x
}

l <- list(1, 5, 6, 10)

lapply(l, foo)
# Error in FUN(X[[i]], ...) : no 6 for you 

bar <- function(x) tryCatch(foo(x), error = function(e) e)
lapply(l, bar)
#[[1]]
#[1] 1
#
#[[2]]
#[1] 5
#
#[[3]]
#<simpleError in foo(x): no 6 for you>
#  
#[[4]]
#[1] 10

baz <- function(x) tryCatch({
  if (x == 6) stop("no 6 for you")
  x
}, error = function(e) e)
lapply(l, baz)
#also works