2

簡単な質問は次のとおりです: 私の data.frame のどこでエラーが発生して適用されているかを見つける方法は?

詳細は次のとおりです。

野生で収集され、博物館に保管されている動物の地理データ (緯度/経度) を含む data.frame があります。このデータは、さまざまなソース (さまざまな美術館や、他の美術館からのリストを含むサイト) からのものです。動物は 1 つまたは複数の情報源に記載されている場合があり、四捨五入やタイプミスにより、同じ動物でも座標が異なる場合があります。私が望むのは、NAではなくすべての座標を各行から取得し、最大値から最小値を差し引いて、エラーの大きさを計算することです。小さなエラーは無視できますが、それ以外の場合はチェックする必要があります。

私は次のコードを使用しています:

#ALL is my data.frame with thousands of lines and about 100 columns
#ALL$LatDif will receive the differences in the coordinates for each row
#cLat <- c(18,21,46,54,63,77,85) # the columns with Latitudes from each museum
ALL$LatDif <- apply(ALL,1,function(x) if (any(!is.na(x[cLat]))) {max(x[cLat],na.rm=T)-min(x[cLat],na.rm=T)} else {NA})

それはうまくいくはずです。しかし、ある時点で次のように述べています。

Error in max(x[cLat], na.rm = T) - min(x[cLat], na.rm = T) : 
  non-numeric argument to binary operator

traceback() は私に与えます:

2: FUN(newX[, i], ...) at #1
1: apply(TUDO, 1, function(x) if (any(!is.na(x[cLat]))) {
       max(x[cLat], na.rm = T) - min(x[cLat], na.rm = T)
   } else {
       NA
   })

途中のどこかにキャラクターがいるようですが、どこにあるのかわかりません。is.character() は役に立ちませんでした。for を使用すると、非常に時間がかかります。何か助けてください。前もって感謝します!

4

2 に答える 2

5

使用してoptions(error=recover)ください。これにより、エラーが発生したときにブラウザー セッションが起動され、そのセッションで、エラーが発生している変数を確認できます。recoverフレームの選択を求められたら、最も深いものを選択します。次に入力xして、どの機能に問題があるかを確認します。

例えば:

R> df <-data.frame(a=c('1', '2', '3', "stop('STOP')", '4'))
R> options(error=recover)
R> apply(df, 1, function(x) eval(parse(text=x)))
# Error in eval(expr, envir, enclos) : STOP
# 
# Enter a frame number, or 0 to exit   
# 
# 1: apply(df, 1, function(x) eval(parse(text = x)))
# 2: #1: FUN(newX[, i], ...)
# 3: #1: eval(parse(text = x))
# 4: eval(expr, envir, enclos)
# 
Selection: 4
# Called from: stop("STOP")
Browse[1]> x
#              a 
# "stop('STOP')" 
于 2013-10-30T18:15:44.770 に答える
1

str(ALL)またはを見てくださいclass(ALL[cLat])。が参照する列は にcLatなると思いますcharacter。しかし、問題を再現するサンプル データが提供されていないため、確かなことはわかりません。

ただし、私が正しいと仮定すると、次のようにして問題のある値を整理できます。

ALL[is.na(as.numeric(ALL[cLat])),]
于 2013-10-30T18:09:35.090 に答える