如何提高我的 R 代码的处理时间

how to improve the processing time of my R code

我需要对数据集进行一些操作,但我的 script (shown below) is running really slow. The data set is a 具有维度:58347 x 41350。我尝试首先 运行 下面的 R 脚本在一个更小的数据集 (58347 x 5)我花了一个小时来处理它。我想处理实际数据集会花费更长的时间。 你们知道有什么方法可以让它 运行 更快吗?

请看下面我的代码:

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")

非常感谢。

如果不确切了解您要在此实现的目标,就很难说要做什么。不过我会努力的。

首先,您可以将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 就不必增长(将原始帧的内容复制到一个大一个单位的对象中,然后删除原始对象)对象来添加另一个元素。