Чтобы улучшить мое R-программирование и упростить мой код, я пытаюсь заменить 'для' l oop на 'lapply', 'map' или подобный вариант. Я хочу выполнить функцию, используя 2-минутные интервалы времени из моих данных временных рядов. Когда я пытаюсь передать только подмножество данных, используя один из функционалов, «map» или «lapply», я получаю «ошибка индекса за пределами границ». Есть идеи?
library(lubridate)
library(purrr)
library(stats)
library(xts)
# Set up the time series data
t <- ymd_hms("2020-01-01 08:00:00","2020-01-01 08:01:00","2020-01-01 08:02:00", "2020-01-01 08:03:00")
tsData <- as.xts(1:4,order.by=(t))
# Set up the summary time periods; in this case every 2 minutes
timeSlots <- seq(from=t[1],to=t[length(t)],by=120)
# Make sure it also summarizes the last period
lastTime <- stats::time(tsData[nrow(tsData)])
# The next 4 lines iterate through the time series and print a summary for each 2 minute time period;
# This is the loop I want to replace with 'map'
for (i in 1:(length(timeSlots))) {
if (i < length(timeSlots)) {
print (summary (tsData[paste(timeSlots[i],'/',(timeSlots[i+1]-1),sep='')]))
}
# This makes sure the last subset includes the last observation
else print (summary (tsData[paste(timeSlots[i],'/',lastTime,sep='')]))
}
# This next statement gets a subscript out of bounds error
lapply (timeSlots, function(x) summary(tsData[x:x+1]))
# This next statement gets a subscript out of bounds error
map (timeSlots,function(x) summary(tsData[x:x+1]))