【问题标题】:Character vectors as ff objects in R字符向量作为 R 中的 ff 对象
【发布时间】:2014-02-20 15:08:21
【问题描述】:

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

【问题讨论】:

    标签: r vector character bigdata ff


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这行得通。一个相关的后续行动:虽然在 read.csv.ffdf() 我可以用与下面类似的方式定义 colClasses 而没有问题,as.ffdf() 返回一个错误:` > as.ffdf(data.frame( a=letters[1 :5],b=1:5), colClasses = c('factor', 'numeric')) `。为什么?
    • 因为colClasses 不是可以提供给as.ffdf 的参数。参见as.ffdf的文档:?as.ffdf
    • 这意味着当你退出,开始一个新的会话并加载 ffdf 时,因子水平都丢失了?
    • 不,因子水平是您 ffsave 或 ffdfsave ffdf 时保存的内容的一部分。当您加载 ffdf 时,您的因子级别进入 RAM,实际数据(对于这些是整数的因子)不在 RAM 中,而是保留在磁盘上。因此,您的 RAM 使用量仅限于因子水平。
    【解决方案2】:

    只需在您的变量上调用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 支持整数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-21
      • 2021-06-02
      • 1970-01-01
      • 2014-08-19
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      相关资源
      最近更新 更多