2013-04-03 38 views
0

很多帖子(such as this)聲稱ff包優於bigmemory,因爲它可以處理包含原子和非原子組件的對象,但是如何呢?例如:如何將ffdf應用於非原子數據框?

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 

我該怎麼做才能做到這一點?

回答

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

我嘗試在調用ffdf之前強制將TEST data.frame的列設置爲ff對象,但這不起作用。這裏使用read.csv.ffdf解決方法:

write.csv(TEST,file='test.csv') 
TEST.ffd <- read.csv.ffdf(file='test.csv') 
相關問題