ループから離れて適用ステートメントに移行することで、R に精通しようとしています。データフレームのリストがあり、出力もデータフレームのリストにしたいので、lapplyは正しいもののように聞こえます。以下のコードは (一時的に) 動作し、 gmt パッケージの geodist() 関数を使用して、行の緯度と経度と、その前の行の緯度と経度の間のメートル単位の距離を見つけます。問題は、ベクトル化された関数で前に行を呼び出す方法がわからないことです (以下では j-1 を使用しています)。これはそれほど難しいことではないと思いますが、私はベクトルに比較的慣れていません。apply と lapply に関する多くの投稿とドキュメントを読みましたが、よくわかりません。
サンプルデータ:
lat <- c(32.87707, 32.87708, 32.87694, 32.87726, 32.87469)
lon <- c(-117.2386, -117.2334, -117.2378, -117.2356, -117.2329)
coords <- data.frame(cbind(lat, lon))
conList <- list(coords, coords, coords, coords)
tripDists <- list()
for (i in 1:length(conList)) {
for (j in 2:nrow(conList[[i]])) {
tripDists[[i]][j] <- geodist(conList[[i]][j,"lat"], conList[[i]][j,"lon"], conList[[i]]$lat[j-1], conList[[i]]$lon[j-1], units="km")*1000
}
}
疑似コードでは次のようになります。
lapply(conList, geodist(x,y,m,z, units="km"), m= x-1, z=y-1)