我需要对数据集进行一些操作,但是我的r脚本(如下所示)运行非常缓慢。数据集是一个dataframe,尺寸为: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")
非常感谢。
如果不确切了解您要在此处实现的目标,很难说该怎么办。但我会尽力的。
首先,您可以将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
不必增长(将原始框架的内容复制到一个大一个对象然后删除原始对象的对象)该对象即可添加另一个元素。