【问题标题】:Data Structures for Creating BIG Data in R在 R 中创建大数据的数据结构
【发布时间】:2013-06-14 16:12:18
【问题描述】:

我正在用 R 语言编写基因水平分析脚本,我必须处理大量数据。

我最初的想法是创建一个超级列表结构,即列表中的一组列表。本质上结构是

#12.8 mins
list[[1:8]][[1:1000]][[1:6]][[1:1000]] 

这是巨大的,纯粹设置数据结构需要超过 12 分钟。简化此过程,在设置 1:8 列表的一个值时,我可以将其缩短到大约 1.6 分钟,所以基本上......

#1.6 mins
list[[1:1]][[1:1000]][[1:6]][[1:1000]] 

通常,我会在需要时即时创建结构,但是,我分配的是 1:1000 步骤,这意味着,我不知道它们会以哪个顺序返回。

是否有任何其他软件包可以处理此级别数据的创建? 我可以在我的方法中使用任何更有效的数据结构吗?

如果这看起来完全是错误的方法,我深表歉意,但这是我第一次在 R 中处理大数据。

【问题讨论】:

    标签: r data-structures bigdata


    【解决方案1】:

    请注意,列表是向量,并且与任何其他向量一样,它们可以具有dim 属性。

    l <- vector("list", 8 * 1000 * 6 * 1000)
    dim(l) <- c(8, 1000, 6, 1000)
    

    这实际上是瞬时的。您可以使用[[ 访问各个元素,例如l[[1, 2, 3, 4]]

    【讨论】:

    • 太棒了,这是即时的,并创建了我需要的数据结构。
    【解决方案2】:

    另一种策略是创建一个向量和一个分区,例如,表示

    list(1:4, 5:7)
    

    作为

    l = list(data=1:7, partition=c(4, 7))
    

    然后可以进行矢量化计算,例如,

    logl = list(data=log(l$data), partition = l$partition)
    

    和其他聪明的东西。这避免了创建复杂的列表和暗示的迭代。这种方法在Bioconductor IRanges*List 类中正式化。

    > library(IRanges)
    > l <- NumericList(1:4, 5:7)
    > l
    NumericList of length 2
    [[1]] 1 2 3 4
    [[2]] 5 6 7
    > log(l)
    NumericList of length 2
    [[1]] 0 0.693147180559945 1.09861228866811 1.38629436111989
    [[2]] 1.6094379124341 1.79175946922805 1.94591014905531
    

    处理这些数据的一个习惯用法是先unlist,然后转换,然后relistunlistrelist 都很便宜,所以上面的长手版本是 relist(log(unlist(l)), l)

    根据您的数据结构,DataFrame 类可能是合适的,例如,以下可以像 data.frame(子集等)一样进行操作,但包含 *List 元素。

    > DataFrame(Sample=c("A", "B"), VariableA=l, LogA=log(l))
    DataFrame with 2 rows and 3 columns
           Sample     VariableA                                              LogA
      <character> <NumericList>                                     <NumericList>
    1           A     1,2,3,...          0,0.693147180559945,1.09861228866811,...
    2           B         5,6,7 1.6094379124341,1.79175946922805,1.94591014905531
    

    对于染色体上基因(或其他特征)坐标至关重要的基因组数据,GenomicRanges 包和 GRanges / GRangesList 类是合适的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 2015-05-13
      相关资源
      最近更新 更多