0

许多帖子(例如this)声称该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

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

4

2 回答 2

5

使用

TEST2 <- as.ffdf(TEST)   

代替

TEST2 <- ffdf(TEST)   

将工作。

说明: 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))

请参阅 ?as.ffdf 或 ?ffdf,它们是 ff 包的一部分。

在现实生活中,您的数据将来自其他来源,如 csv 或 SQL 来源,而不是来自 R 中已经存在的 data.frame。请参阅包ETLUtils以轻松将您的数据从 SQL 获取到 ff。

于 2013-04-03T20:22:40.723 回答
1

ff我试图在调用之前将TEST data.frame 的列强制为对象,ffdf但这不起作用。这里使用的解决方法read.csv.ffdf

write.csv(TEST,file='test.csv')
TEST.ffd <- read.csv.ffdf(file='test.csv')
于 2013-04-03T12:47:06.077 回答