2014-02-20 30 views
1

我想將標準(RAM)字符向量轉換爲ff對象(向量)。下面的代碼返回一個錯誤:作爲FF中的對象的字符向量R

> as.ff(c('a', 'b')) 
Error in ff(initdata = initdata, length = length, levels = levels, ordered = ordered,: 
vmode 'character' not implemented 

這個線程(https://stackoverflow.com/questions/17744525/r-difficulties-facing-with-read-csv-ffdf-physicalmode-and-virtualmode)表明,FF對象不可言,唯一因素接受字符。儘管如此,下面不工作:

> as.ff(c('a', 'b'), vmode = 'factor') 
Error in ff(initdata = initdata, length = length, levels = levels, ordered = ordered,: 
vmode 'factor' not implemented 

下面的列表中不包括「因素」:

.vimplemented 
boolean logical  quad nibble  byte  ubyte  short ushort 
TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE 
integer single double complex  raw character 
TRUE  TRUE  TRUE  FALSE  TRUE  FALSE 

因此,它是不可能的創建人物的ff載體?

回答

3

確實,在ff中,沒有實現純字符向量。因素是。由於c('a','b')是一個字符,它將無法將其轉換爲ff。但當然可以將因子轉換爲ff。

require(ff) 
class(c('a', 'b')) 
[1] "character" 
class(factor(c('a', 'b'))) 
[1] "factor" 
as.ff(factor(c('a', 'b'))) 
ff (open) integer length=2 (2) levels: a b 
[1] [2] 
    a b 
class(as.ff(factor(c('a', 'b')))) 
[1] "ff_vector" "ff" 

還指出因子水平在RAM中。其餘的都在磁盤上。

+0

謝謝,這是有效的。一個相關的後續:在read.csv.ffdf()中,我可以以類似於下面的方式定義colClasses而不會出現問題,'as.ffdf()'返回一個錯誤:'> as.ffdf(data.frame(a =字母[1:5],b = 1:5),colClasses = c('factor','numeric'))'。爲什麼? – Audrey

+0

,因爲'colClasses'不是可以提供給'as.ffdf'的參數。請參閱'as.ffdf'的文檔:'?as.ffdf' – jwijffels

+0

這意味着當您退出時,開始一個新會話並加載ffdf,因素級別全部丟失? – qed

1

只需撥打factor您的變量:

as.ff(factor(c('a', 'b'))) 
ff (open) integer length=2 (2) levels: a b 
[1] [2] 
    a b 

內部,因素是整數,

storage.mode(factor(c('a', 'b'))) 
[1] "integer" 

levels屬性映射到字符表示。如您所述,整數由ff支持。