提前为一个有点模糊的帖子道歉 - 我正在阅读机密数据,无法共享数据本身或访问它的确切方法。
我正在编写一个 R 函数来从给定设备 ( ) 的 PI Web API 中检索两个时间戳 ( start_time
& ) 之间的一些实验数据。在某些情况下,我可能想要检索多达 100,000 行,但每个 API 调用最多返回 1000 行数据。观察的间隔不相等,因此并不总是知道要为给定的and检索多少行。end_time
webid
start_time
end_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_time
和webid
(设备) 数据的函数,并且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 陷入无限循环。关于我在这里缺少什么的任何想法?