簡単な質問は次のとおりです: 私の 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 を使用すると、非常に時間がかかります。何か助けてください。前もって感謝します!