2015-06-05 609 views
0

我有一個1000行的數據幀。我想要循環的代碼非常簡單 - 我只想將列4中的所有值都大寫。我想這樣做,如果任何行中有錯誤,我希望它跳過該行並繼續行的其餘部分。R:For循環跳過如果錯誤/ tryCatch

我寫這段代碼:

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或某種如果是錯誤的。

在此先感謝!

+0

你期待什麼錯誤?我只需要'Total_Data_2 [,4] = toupper(Total_Data_2 [,4])',不需要循環。 – Gregor

+0

我在一些行中有一些特殊字符。這會導致錯誤。 – user4918087

+0

那些特殊字符是什麼? – user227710

回答

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])) 

因爲你不需要做任何事情。如果失敗,循環將繼續愉快。

所有這一切說,我不得不說我有點困惑於你的錯誤和無法以矢量化的方式做到這一點。