许多帖子(such as 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
我可以做些什么来完成这项工作?
答案 0 :(得分: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。
答案 1 :(得分:1)
我试图在调用ff
之前将TEST data.frame的列强制转换为ffdf
个对象,但这不起作用。这是使用read.csv.ffdf
的解决方法:
write.csv(TEST,file='test.csv')
TEST.ffd <- read.csv.ffdf(file='test.csv')