我有数百个需要在R中使用的矩阵,其中大多数都是45000x350左右.我想要做的是找到一个最佳的数据库软件选择和模式来存储数据,并能够从数据库调用矩阵的子集.这需要尽可能快地提取数据.
作为基础,这里的代码可以创建类似于我正在处理的5个矩阵:
if(!"zoo" %in% installed.packages()[,1]) { install.packages("zoo") }
require("zoo", quietly=TRUE)
numSymbols <- 45000
numVariables <- 5
rDatePattern <- "%d/%m/%Y"
startDate <- "31/12/1982"
endDate <- "30/09/2011"
startYearMonth <- as.yearmon(startDate,format=rDatePattern)
alphaNumeric <- c(1:9,toupper(letters))
numMonths <- (as.yearmon(endDate,format=rDatePattern)-startYearMonth)*12
numValues <- numSymbols*(numMonths+1)
dateVector <- sapply(1:(numMonths+1), function(x) {as.character(format(as.Date(startYearMonth+x*1/12,fraq=0)-1,rDatePattern))})
symbolNames <- sapply(1:numSymbols,function(x) {as.character(paste((sample(alphaNumeric,7)),collapse=""))})
for(i in 1:numVariables) {
assign(paste("Variable",i,sep="_"),matrix(sample(c(rnorm(numValues/2),rep(NA,numValues/2))),
nrow=numSymbols,
ncol=(numMonths+1),
dimnames=list(symbolNames,dateVector)))
}
Run Code Online (Sandbox Code Playgroud)
基本上所有的矩阵都有大约一半的值填充了双打和其余的NA.
# > ls()[grepl("Variable_",ls())]
# [1] "Variable_1" "Variable_2" "Variable_3" "Variable_4" "Variable_5"
# > dim(Variable_1)
# [1] 45000 346
# > Variable_1[1:10,1:3]
# 31/12/1982 31/01/1983 28/02/1983 …Run Code Online (Sandbox Code Playgroud) 前段时间我写了一个函数来填充时间序列矩阵,它根据所需的规范得到了NA值,并且在几个大约50000行,350列的矩阵上有其他用途.矩阵可以包含数字或字符值.主要的问题是修复矩阵很慢,我想我会评估一些专家如何更快地完成这项工作.
我想去rcpp或平行它可能会有所帮助,但我认为这可能是我的设计而不是R本身效率低下.我通常会对R中的所有内容进行处理,但由于缺少的值不遵循任何模式,我发现除了基于每行的矩阵之外没有其他方法.
需要调用该函数,以便它可以携带前向缺失值,并且还可以调用以快速填充最后一个已知值的最新值.
这是一个示例矩阵:
testMatrix <- structure(c(NA, NA, NA, 29.98, 66.89, NA, -12.78, -11.65, NA,
4.03, NA, NA, NA, 29.98, 66.89, NA, -12.78, -11.65, NA, NA, NA,
NA, NA, 29.98, 66.89, NA, -12.78, NA, NA, 4.76, NA, NA, NA, NA,
66.89, NA, -12.78, NA, NA, 4.76, NA, NA, NA, 29.98, 66.89, NA,
-12.78, NA, NA, 4.76, NA, NA, NA, 29.98, 66.89, NA, -12.78, NA,
NA, 4.39, NA, NA, NA, 29.98, 66.89, NA, -10.72, -11.65, NA, 4.39,
NA, NA, NA, 29.98, …Run Code Online (Sandbox Code Playgroud)