0

提前为一个有点模糊的帖子道歉 - 我正在阅读机密数据,无法共享数据本身或访问它的确切方法。

我正在编写一个 R 函数来从给定设备 ( ) 的 PI Web API 中检索两个时间戳 ( start_time& ) 之间的一些实验数据。在某些情况下,我可能想要检索多达 100,000 行,但每个 API 调用最多返回 1000 行数据。观察的间隔不相等,因此并不总是知道要为给定的and检索多少行。end_timewebidstart_timeend_time

我目前的方法是使用while循环 - 下面的简化逻辑:

while(difftime(time1 = end_time, time2 = t1, units = hours) > 1){
  dat <- rbind(dat, PiRead(start_time = t1, end_time = end_time, webid = webid)
  t1 <- max(dat$time)
}

wherePiRead是返回给定start_time,end_timewebid(设备) 数据的函数,并且t1是从当前 API 调用中检索到的数据的最长时间。我总是在检索历史数据,1 小时的间隔是可以接受的。循环有效,while但我想做一个递归函数。

这是我到目前为止所拥有的:

recursiveRead <- function(start_time, end_time, webid){
  dat <- PiRead(start_time = start_time, end_time = end_time, webid = webid)
  if(abs(difftime(time1 = dat[, max(time)], time2 = end_time, units = 'hours'))) <= 1){
    return(dat)
  }else{
    cat(sprintf('\nDesired End Time: %s\tCurrent End Time: %s\n', end_time, dat[, max(time)]))
    return(rbind(dat, 
                 recursiveRead(start_time = dat[, max(time)], end_time = end_time, webid = webid)))
  }
  
}

执行时,两次打印到控制台(通过cat语句)是相同的,并且 R 陷入无限循环。关于我在这里缺少什么的任何想法?

4

0 回答 0