我有一个名为"data_ts"的大型xts
时间序列文件。绘制
plot(data_ts)
一切都很好。当{t1,t2}
在边界内时,我也可以绘制子集:
plot(data_ts[t1:t2))
然而,有了5个子集,我试图使用列表理解(在R中由libary(comprehenr)
促进;顺便说一句,g(...) %=% c(...)
是由library(tidytidbits)
促进的类似Python的元组分配(将它们收集在一个列表中(…是的,我来自Python…(:
data_csv <- read.csv("timeseries.csv", header=TRUE)
segm_csv <- read.csv("ts_segments.csv", header=TRUE)
data_ts <- xts(data_csv$Max.Pressure, order.by=as.POSIXct(data_csv$Datetime))
data_ts_idx <- index(data_ts)
data_ts_segm <- to_list(for (i in 1:5)
{
g(m, n) %=% c(segm_csv[i,1], segm_csv[i,2])
g(t1,t2) %=% c(data_ts_idx[m], data_ts_idx[n])
print(str_interp("period segment ${i}: ${t1} - ${t2}", list(i=i,t1=t1,t2=t2)))
data_ts[m:n]
}
)
然后,当试图绘制时间序列段时,会发生以下情况:
> plot(data_ts_segm[1])
Error in xy.coords(x, y, xlabel, ylabel, log) :
'x' is a list, but does not have components 'x' and 'y'
>
显然,R的to_list()
不能像Python的list()
那样工作:存储在其中的对象发生了一些事情。问题:如何为xts
对象的集合编制索引?
(记录中,两个对象的结构相同:
> str(data_ts_segm[1])
List of 1
$ :An ‘xts’ object on 2021-01-01 00:10:54/2021-01-22 02:59:07 containing:
Data: num [1:618, 1] 75.5 71.9 73.5 73.8 73.8 ...
Indexed by objects of class: [POSIXct,POSIXt] TZ:
xts Attributes:
NULL
> str(data_ts[1:n])
An ‘xts’ object on 2021-01-01 00:10:54/2021-01-22 02:59:07 containing:
Data: num [1:618, 1] 75.5 71.9 73.5 73.8 73.8 ...
Indexed by objects of class: [POSIXct,POSIXt] TZ:
xts Attributes:
NULL
)
我刚刚发现问题是我误解了R的列表结构,这很有效:plot(data_ts_segm[[1]])
(即嵌套索引(。R的列表本质上是2D结构;事实上,与Python不同。