根据行索引列表子集 xts 列表
Subsetting a list of xts based on list of row indexes
我正在努力解决如何对存储在列表中的 xts 对象进行子集化的问题。 子集化应基于行索引。背景是我想将对象随机 80/20 分成训练和测试集。
这是一个例子:
library(xts)
# Create a sample list with dummy data
series <- list(
A=xts(rnorm(n=200), as.Date("2015-01-01")+1:200),
B=xts(rnorm(n=50), as.Date("2015-04-01")+1:50)
)
注意:这些 xts 对象的长度是有意不同的。
trainIndex
是一个列表,其中包含根据 caret
包中的 createDataPartition
函数以 80/20 的比例拆分每个 xts 对象的行号:
# create am index of row numbers for splitting the dataset
library(caret)
trainIndex <- lapply(series, function(x) {createDataPartition(x, p=0.8)})
这就是我期待的工作:
series.test <- lapply(series, function(x) x[trainIndex,])
它没有。
这适用于 'static' 向量(根据 here):
trainIndex.simple <- seq(1,50,by=3)
lapply(series, function(x) x[trainIndex.simple,])
这适用于一个列表元素
series$A[trainIndex$A[[1]],]
但是如何将行索引列表应用于 xts 对象列表?
This post 可能会有所帮助,但我无法将其转化为我的问题...
非常感谢任何提示!
您需要使用同时循环遍历两个列表的函数。例如:mapply
,或 Map
(调用 mapply
):
set.seed(21)
trainIndex <- lapply(series, function(x)
sample(c(TRUE,FALSE), nrow(x), TRUE, c(0.8, 0.2)))
series.test <- mapply(function(x, i) x[i,], x=series, i=trainIndex)
series.test <- Map(function(x, i) x[i,], x=series, i=trainIndex)
我正在努力解决如何对存储在列表中的 xts 对象进行子集化的问题。 子集化应基于行索引。背景是我想将对象随机 80/20 分成训练和测试集。 这是一个例子:
library(xts)
# Create a sample list with dummy data
series <- list(
A=xts(rnorm(n=200), as.Date("2015-01-01")+1:200),
B=xts(rnorm(n=50), as.Date("2015-04-01")+1:50)
)
注意:这些 xts 对象的长度是有意不同的。
trainIndex
是一个列表,其中包含根据 caret
包中的 createDataPartition
函数以 80/20 的比例拆分每个 xts 对象的行号:
# create am index of row numbers for splitting the dataset
library(caret)
trainIndex <- lapply(series, function(x) {createDataPartition(x, p=0.8)})
这就是我期待的工作:
series.test <- lapply(series, function(x) x[trainIndex,])
它没有。
这适用于 'static' 向量(根据 here):
trainIndex.simple <- seq(1,50,by=3)
lapply(series, function(x) x[trainIndex.simple,])
这适用于一个列表元素
series$A[trainIndex$A[[1]],]
但是如何将行索引列表应用于 xts 对象列表? This post 可能会有所帮助,但我无法将其转化为我的问题...
非常感谢任何提示!
您需要使用同时循环遍历两个列表的函数。例如:mapply
,或 Map
(调用 mapply
):
set.seed(21)
trainIndex <- lapply(series, function(x)
sample(c(TRUE,FALSE), nrow(x), TRUE, c(0.8, 0.2)))
series.test <- mapply(function(x, i) x[i,], x=series, i=trainIndex)
series.test <- Map(function(x, i) x[i,], x=series, i=trainIndex)