如何在ffdf中创建POSIXct向量?

时间:2014-11-28 15:33:17

标签: eclipse r posixct ff

我已经环顾四周,似乎无法掌握这种情况。我在Eclipse中使用R.我试图导入的文件是700mb,大约15mil行和6列。由于我在加载时出现问题,因此我开始使用ff包。

library(ff)
FDF = read.csv.ffdf(file='C:\\Users\\William\\Desktop\\R Data\\GBPUSD.1986.2014.txt', header = FALSE, colClasses=c('factor','factor','numeric','numeric','numeric','numeric'), sep=',')
names(FDF)= c('Date','Time','Open','High','Low','Close')
#names the columns in the ffdf file
dim(FDF)
# produces dimensions of the file

然后我想创建一个POSIXct序列,稍后将根据导入的文件加入该序列。我试过了;

tm1 = seq(as.POSIXct("1986/12/1 00:00"), as.POSIXct("2014/09/04 23:59"),"mins")) 
tm1 = data.frame (DateTime=strftime(tm1,format='%Y.%m.%d %H:%M'))

然而R一直在崩溃。然后我测试了这是RStudio,并看到他们在向量上的约束。但它确实产生了正确的

dim(tm1)
names(tm1)

所以我回到Eclipse认为这与内存分配有关。我尝试了以下内容;

library(ff)
tm1 = as.ffdf(seq(as.POSIXct("1986/12/1 00:00"), as.POSIXct("2014/09/04 23:59"),"mins")) 
tm1 = as.ffdf(DateTime=strftime(tm1,format='%Y.%m.%d %H:%M'))
names(tm1) = c('DateTime')
dim(tm1)
names(tm1)

这给出了错误

没有适用于'as.ffdf'的方法适用于类“c('POSIXct','POSIXt')的对象”

我似乎无法解决这个问题。然后我试了......

library(ff)
tm1 = as.ff(seq(as.POSIXct("1986/12/1 00:00"), as.POSIXct("2014/09/04 23:59"),"mins")) 
tm1 = as.ff(DateTime=strftime(tm1,format='%Y.%m.%d %H:%M'))

生成输出日期,但格式不正确。除此之外,当...

dim(tm1)
names(tm1)

执行时它们都返回null。

问题

  1. 如何以上面要求的格式生成POSIXct seq?

1 个答案:

答案 0 :(得分:0)

我们最终会到达那里。

我认为问题是在创建完整向量期间可用的RAM。在这种情况下,我将矢量分解为3,将它们转换为ffdf格式以释放RAM,然后使用rbind将它们绑定在一起。

我相信,一旦创建了矢量格式化的问题是由于访问RAM。我每次尝试这个R都崩溃了。

即使我的机器下面的工作正在减慢(4gb)。我订购了更多内存,希望这能平滑未来的运营。

以下是工作代码;

library(ff)
library(ffbase)

tm1 = seq(from = as.POSIXct('1986-12-01 00:00'), to = as.POSIXct('2000-12-01 23:59'), by = 'min')
tm1 = data.frame(DateTime=strftime(tm1, format='%Y.%m.%d %H:%M'))
# create data frame within memory contrainst
tm1 = as.ffdf(tm1)
# converts to ffdf format 
memory.size()

tm2 = seq(from = as.POSIXct('2000-12-02 00:00'), to = as.POSIXct('2010-12-01 23:59'), by = 'min')
tm2 = data.frame(DateTime=strftime(tm2, format='%Y.%m.%d %H:%M'))
# create data frame within memory contrainst
tm2 = as.ffdf(tm2)
memory.size()

tm3 = seq(from = as.POSIXct('2010-12-2 00:00'), to = as.POSIXct('2014-09-04 23:59'), by = 'min')
tm3 = data.frame(DateTime=strftime(tm3, format='%Y.%m.%d %H:%M'))
memory.size()
tm3 = as.ffdf(tm3)
# converts to ffdf format 
memory.size()

tm4 = rbind(tm1, tm2, tm3)
# binds ffdf objects into one
dim(tm4)
# checks the row numbers