当一行数据出错时,apply函数停止运行

时间:2014-06-12 16:26:45

标签: r apply

我正在使用apply函数为我的每一行数据执行一个函数。我发现如果一行数据触发错误,我就不会得到结果。我想知道是否有办法让apply函数为该有问题的行提供错误或NA但仍然为其他行运行。

1 个答案:

答案 0 :(得分:2)

您需要将应用的函数包装在tryCatch中,如果失败将返回NA。

如果x小于零,则停止:

> foo = function(x){if(x<0)stop("Zerrored");sqrt(x)}

试试吧

> apply(matrix(0:5),1,foo)
[1] 0.000000 1.000000 1.414214 1.732051 2.000000 2.236068

> apply(matrix(-2:5),1,foo)
Error in FUN(newX[, i], ...) : Zerrored

织补。换入tryCatch

> tryfoo=function(x){tryCatch(foo(x),error=function(e){NA})}
> apply(matrix(-2:5),1,tryfoo)
[1]       NA       NA 0.000000 1.000000 1.414214 1.732051 2.000000 2.236068

作品!

如果函数错误,您可能需要发出警告:

> tryfoo=function(x){tryCatch(foo(x),error=function(e){warning("Zerrored");NA})}
> apply(matrix(-2:5),1,tryfoo)
[1]       NA       NA 0.000000 1.000000 1.414214 1.732051 2.000000 2.236068
Warning messages:
1: In value[[3L]](cond) : Zerrored
2: In value[[3L]](cond) : Zerrored

同样,它不会停止申请。