如何改善我的R代码的处理时间

问题描述 投票:0回答:1

我需要对数据集进行一些操作,但是我的脚本(如下所示)运行非常缓慢。数据集是一个,尺寸为:58347 x41350。我尝试首先在一个较小的数据集(58347 x 5)上运行以下R脚本,并且花了一个小时来处理它。我想这将花费更长的时间来处理实际的数据集。 你们知道让它更快运行的任何方法吗?

请在下面查看我的代码:

library("LoomExperiment")
dataset<-import("WongAdultRetina homo_sapiens 2019-11-08 16.13.loom")
m<-assay(dataset)
colsums<-colSums(m)
result<-data.frame()
  for(i in seq_len(nrow(m))){
    if(i%%500==0){
      print(paste("i =",i))
    }
    for(j in seq_len(ncol(m))){
      if(colsums[j]== 0){
        result[i,j]<- 0
      }
      else {
        result[i,j]<-(m[i,j]*2000)/colsums[j]
      }
    }
  }
save(result,file="resultlocal.rda")

非常感谢。

r performance dataframe for-loop bioconductor
1个回答
0
投票

如果不确切了解您要在此处实现的目标,很难说该怎么办。但我会尽力的。

首先,您可以将data.frame替换为data.table。根据我的经验,使用它们的速度更快。

第二,您可以创建具有指定大小的result data.frame。例如,看起来它将始终具有nrow(m) by ncol(m)的大小。因此,result = as.data.frame(matrix(nrow = nrow(m), ncol = ncol(m)))。当然,您也可以随时将其替换为data.table。指定data.frame的大小将为对象分配足够的内存。这样,R不必增长(将原始框架的内容复制到一个大一个对象然后删除原始对象的对象)该对象即可添加另一个元素。

© www.soinside.com 2019 - 2024. All rights reserved.