如何将ffdf应用于非原子数据帧?

hub*_*rth 0 r bigdata dataframe

很多帖子(比如这个)都声称这个ff软件包优于,bigmemory因为它可以处理具有原子和非原子组件的对象,但是如何?例如:

UNIT <- c(100,100, 200, 200, 200, 200, 200, 300, 300, 300,300)
STATUS <- c('ACTIVE','INACTIVE','ACTIVE','ACTIVE','INACTIVE','ACTIVE','INACTIVE','ACTIVE',
        'ACTIVE','ACTIVE','INACTIVE') 
TERMINATED <- as.Date(c('1999-07-06','2008-12-05','2000-08-18','2000-08-18','2000-08-18',
                    '2008-08-18','2008-08-18','2006-09-19','2006-09-19','2006-09-19',
                    '1999-03-15')) 
START <- as.Date(c('2007-04-23','2008-12-06','2004-06-01','2007-02-01','2008-04-19',
               '2010-11-29','2010-12-30','2007-10-29','2008-02-05','2008-06-30',
               '2009-02-07'))
STOP <- as.Date(c('2008-12-05','2012-12-31','2007-01-31','2008-04-18','2010-11-28',
              '2010-12-29','2012-12-31','2008-02-04','2008-06-29','2009-02-06',
              '2012-12-31'))
TEST <- data.frame(UNIT,STATUS,TERMINATED,START,STOP)
TEST                   

#install.packages('ff')            
library('ff')            
TEST2 <- ffdf(TEST)            
Error in ffdf(TEST) : ffdf components must be atomic ff objects
Run Code Online (Sandbox Code Playgroud)

我能做些什么来完成这项工作?

小智 5

运用

TEST2 <- as.ffdf(TEST)   
Run Code Online (Sandbox Code Playgroud)

代替

TEST2 <- ffdf(TEST)   
Run Code Online (Sandbox Code Playgroud)

将工作.

说明: as.ffdf将data.frame转换为ffdf.如果您确实想ffdf直接使用,则需要提供原子ff向量,如错误消息所示.对于上面的例子,这将是

ffdf(UNIT = as.ff(UNIT), STATUS = as.ff(as.factor(STATUS)), TERMINATED = as.ff(TERMINATED), START = as.ff(START), STOP = as.ff(STOP))
Run Code Online (Sandbox Code Playgroud)

请参阅?as.ffdf或?ffdf,ff包的一部分.

在现实生活中,您的数据将来自其他来源,如csv或SQL源,而不是来自R中已有的data.frame.请参阅包ETLUtils,以便轻松地将SQL中的数据转换为ff.