1
我在如何對存儲在列表中的xts對象進行子集化時遇到問題。 子集應基於行索引發生。背景是我想將80/20隨機分成訓練和測試集。 下面是一個例子:根據行索引列表對xts列表進行子集設置
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
是包含拆分每個XTS在80/20的基礎對象作爲每createDataPartition
功能從caret
包行號列表:
# 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,])
它沒有。
這適用於「靜態」矢量(按照here):
trainIndex.simple <- seq(1,50,by=3)
lapply(series, function(x) x[trainIndex.simple,])
而且這部作品一個列表元素
series$A[trainIndex$A[[1]],]
但是,如何在應用上的行索引列表xts對象列表? This post可能會有所幫助,但我不能把它翻譯成我的問題...
任何提示是非常感謝!
謝謝@ '約書亞烏爾裏希',這也解決了我的問題。我意識到子類化元素的類型有什麼不同:'createDataPartition'用行索引創建一個數值向量,而你的解決方案創建一個邏輯向量(TRUE/FALSE) - 這似乎很重要。 – Stephan
@Stephan:無論'trainIndex'是數字還是邏輯都不重要。你可以通過任何一個子類來對子對象進行分類你可以通過'lapply(trainIndex,which)'來轉換我的'trainIndex',當你使用它創建'series.test'時,你會得到相同的結果。 –