用于在R中创建大数据的数据结构

用于在R中创建大数据的数据结构,r,data-structures,bigdata,R,Data Structures,Bigdata,我正在用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]] 通常,我会在需

我正在用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中处理大数据。

不同的策略是创建一个向量和一个分区,例如,表示

list(1:4, 5:7)
作为

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

logl = list(data=log(l$data), partition = l$partition)
和其他聪明的事情。这避免了创建复杂的列表以及由此产生的迭代。这种方法在包
*列表
类中正式化

> 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

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

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

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

l太棒了,这是即时的,创建了我需要的数据结构。
> 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
l <- vector("list", 8 * 1000 * 6 * 1000)
dim(l) <- c(8, 1000, 6, 1000)