我有一个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
提前感谢!!
虽然我不认为这一定是最好的解决方案,但它确实直接回答了您的问题(简化为可重复性):
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]))
因为你不需要做任何其他事情。如果失败,循环将继续顺利进行。
说了这么多,我不得不说我对你的错误和无法用矢量化的方式做这件事有点困惑