在R中处理非常大的向量

时间:2017-04-26 04:35:53

标签: r

我正在处理R中的一些大数据:

我有一个正态分布随机数的向量,长度约为6400 * 50000,我需要对这个向量中的每4个元素求和,得到一个较小的元素。

在R中有没有有效的方法呢?

我的想法到现在为止:

  1. 使用ncol = 10的矩阵并使用apply函数 - 因为矩阵太大而失败;
  2. 尝试paralell和foreach包但尚无进展;
  3. 示例代码:

    library(parallel)
    library(RcppZiggurat)
    library(doParallel)
    library(foreach)
    
    coreNums<-detectCores()
    N1=6400
    M=4
    N2=N1/M
    cl<-makeCluster(getOption("cl.cores", coreNums))
    registerDoParallel(cl)
    vector1<-zrnorm(N1*K)
    vector2=foreach(i=1:(N2*K)) %dopar% {sum(vector1[M*(i-1)+1:M*i])}
    vector2=unlist(vector)
    

1 个答案:

答案 0 :(得分:2)

我认为bottom是您正在寻找的功能。

colSums

在我看来,这个任务对于并行化来说太简单了。 另外,我对矩阵大小没有任何问题。

如果您想使用更少的内存,以下代码在vector1 = rnorm(1000*50000) dim(vector1) = c(10, length(vector1)/10) vector2 = colSums(vector1) 中的10,000个值的部分内容中执行相同操作。

vector1