1

を使用するのは好きですplyrが、基礎となるデータが特定できないエラーをスローすることがあります。

たとえば、次の場合にエラーをスローする合計関数を作成しましたx == 8

df <- data.frame(x = rep(1:10,3), y = runif(30))

ddply(df,
      .(x),
      function (z) { 
        if(z$x[1] == 8) {
          stop("There's an error somewhere.")
        }
        return(sum(z$y))
        })

エラーの原因がわからないふりをして、エラーの原因となったデータの行を報告する方法はありますか?

4

2 に答える 2

4

使用例を次に示しtryCatchます。

set.seed(1)
df <- data.frame(x = rep(1:10,3), y = runif(30))

f = function (z) { 
        if(z$x[1] == 8) {
          stop("There's an error somewhere.")
        }
        return(sum(z$y))
    }

ddply(df, .(x), function(z) {
         tryCatch(f(z), error = function(e) {
              print("offending block is"); print(z)
         })
     })

#[1] "offending block is"
#  x         y
#1 8 0.6607978
#2 8 0.9919061
#3 8 0.3823880
#Error in list_to_dataframe(res, attr(.data, "split_labels")) : 
#  Results must be all atomic, or all data frames
于 2013-07-12T23:18:22.027 に答える