我正在使用xts并在循环中加载100到1000个文件。每个文件的行数在50k到300k之间。我在Windows 7 64位上使用最新版本的R 2.15.1。我在使用R版本2.14.X的Ubuntu Linux上遇到了同样的问题。
以下代码会定期崩溃R:
library(xts)
N <- 1e6
for(i in 1:1000) {
allTimes <- Sys.time()-N:1
x <- NULL
x <- xts(,allTimes)
sampTimes <- allTimes[seq(1,length(allTimes),by=2)]
y <- merge(xts(seq_along(sampTimes), sampTimes), allTimes)
y <- na.locf(y)
y <- to.period(y, 'seconds', 10)
index(y) <- index(to.period(x, 'seconds', 10))
}
答案 0 :(得分:4)
这是answered on R-devel。问题是在零宽度xts对象上调用to.period
将返回随机存储器位置的OHLC数据。例如:
library(xts)
x <- xts(,Sys.time()-10:1)
y <- to.period(x)
y
# x.Open x.High x.Low x.Close
# 2012-07-23 15:47:30 4.25426e-314 2.36246e-300 1.428936e-316 1.428936e-316
由于聚合“无数据”没有意义,我修补to.period
在零宽度/长度对象(R-Forge上的版本690)上运行时抛出错误。
不是在零宽度对象上运行to.period
,而是创建一个充满1的临时xts对象,并在其上运行to.period
。这适用于当前在CRAN上的xts。
library(xts)
N <- 1e6
for(i in 1:100) {
allTimes <- Sys.time()-N:1
x <- NULL
x <- xts(,allTimes)
sampTimes <- allTimes[seq(1,length(allTimes),by=2)]
y <- merge(xts(seq_along(sampTimes), sampTimes), allTimes)
y <- na.locf(y)
y <- to.period(y, 'seconds', 10)
tmp <- xts(rep(1,length(allTimes)), allTimes)
index(y) <- index(to.period(tmp, 'seconds', 10))
}