1

我正在尝试将标准(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 字符向量?

4

2 回答 2

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 中。其余的都在磁盘上。

于 2014-02-20T16:07:43.907 回答
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.

于 2014-02-20T16:10:25.590 回答