R:对于循环跳过,如果错误/ tryCatch

时间:2015-06-05 16:18:08

标签: r

我有一个1000行的数据框。我想循环的代码非常简单 - 我只想让第4列中的所有值都为大写。我想要它,如果任何行中有错误,我希望它跳过该行并继续其余的行。

我已经写了这段代码:

for(i in 1:1000)
{
  tryCatch(toupper(Total_Data_2[i,4]), error = function(e) next)
}

但是,我收到错误:Error in value[[3L]](cond) : no loop for break/next, jumping to top level

有人可以帮我吗?我可以做一个tryCatch或某种if iserror。

提前致谢!!

1 个答案:

答案 0 :(得分:3)

虽然我认为这不一定是最好的解决方案,但它确实直接回答了您的问题(简化了再现性):

for(i in 1:10) {
  res <- try(if(i %% 2) stop("argh"))
  if(inherits(res, "try-error")) next
  cat(i, "\n")
}

只使用try代替tryCatch b / c,它更简单,不需要tryCatch功能。真的可以用于您的目的:

for(i in 1:10) try(my_val[i] <- my_fun(my_val[i]))

因为你不需要做任何其他事情。如果它失败了,循环将继续快乐。

所有这些都说,我不得不说我对你的错误以及无法以矢量化方式做到这一点感到有点困惑。