我试图通过从循环转向应用语句来变得更加精通 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)