2014-02-20 4 views
1

Я пытаюсь преобразовать вектор символа стандарта (ОЗУ) в объект 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) предполагает, что ФФ объекты не принимает символы на всех, только факторы. Тем не менее, ниже не работает:

> 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 

Так это вообще возможно создать Ф.Ф. вектор символов?

ответ

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" 

Отметьте также, что уровни факторов находятся в ОЗУ. Все остальное находится на диске.

+0

Спасибо, что работает. Соответствующее продолжение: while в 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.

Смежные вопросы