1

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

1 回答 1

2

试试这个:

tripDists <- lapply(conList, with, {
    geodist(tail(lat,-1), tail(lon,-1), head(lat,-1), head(lon,-1), units="km")*1000
})
于 2013-09-24T23:41:02.660 回答