字符向量作为R中的ff对象

时间:2014-02-20 15:08:22

标签: r vector character bigdata ff

我正在尝试将标准(RAM)字符向量转换为ff对象(向量)。下面的代码返回错误:

> 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矢量吗?

2 个答案:

答案 0 :(得分: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中。所有其余的都在磁盘上。

答案 1 :(得分: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支持整数。