R中的while循环存在一些问题

时间:2018-07-19 15:15:13

标签: function indexing while-loop rows

我有以下数据集:

user1


 latitude longitude utc_timestamp
1  18.12495 -67.08680    1504227574
2  18.12495 -67.08680    1504231174
3  18.12495 -67.08680    1504234775
4  18.12495 -67.08680    1504238376
5  18.12495 -67.08680    1504242642
6  18.12495 -67.08680    1504247305
7  18.12497 -67.08683    1504251880
8  18.12495 -67.08680    1504255783
9  18.10904 -67.06777    1504271521
10 18.12547 -67.08758    1504281423
11 18.12495 -67.08680    1504285025
12 18.12495 -67.08680    1504289327
13 18.12495 -67.08680    1504293647
14 18.12470 -67.08648    1504299483

并且我创建了一个函数来评估每对行以检测停留点。

StayPoint_Detection <- function(file, distThres = 200, timeThres = 30*60) {
    SP <- data.frame(longitude=double(),
                     latitude = double(),
                     arvT = integer(),
                     levT = integer(),
                     stringsAsFactors = FALSE)

    pointNum <- nrow(file)
    i = 1
    while (i < pointNum-1) {
      j <- i + 1
      while (j < pointNum) {
        dist <- getDistance(file[i,"longitude"], file[i, "latitude"],
                            file[j,"longitude"], file[j, "latitude"])
        if (dist > distThres) {
          ti <- file[i,"utc_timestamp"]
          tj <- file[j, "utc_timestamp"]
          deltaT <- tj - ti

          if (deltaT > timeThres) {
            Scoords <- computMeanCoord(file[i:j,c("latitude", "longitude")])
            SP <- rbind(SP, setNames(as.list(c(Scoords[2], Scoords[1],
                                               ti, tj)),
                                     names(SP)))
          }
          break
        }
        else
          j <- j + 1 
      }
     i <- j 
    }
   return(SP) 
  }

我遇到的问题是该函数未评估每一对。在我显示的数据集中,我手动评估了每一对,而第8-9和9-10行是具有停留点的行,相反,我得到了以下结果:

SP1
  longitude  latitude       arvT       levT
1  18.12318 -67.08469 1504227574 1504271521
2  18.11726 -67.07767 1504271521 1504281423

第二行对9-10的结果正确,但是第一行是不正确的,因为该函数在应计算8-9的情况下对1-9行进行了计算。我对循环不是很好,我想知道我可能做错了什么。同样,我想评估每对行。谢谢!

0 个答案:

没有答案