【发布时间】:2016-11-21 04:33:08
【问题描述】:
我对 R 中的迭代缺乏经验,并希望在我在网站中实施一些分析时加快流程。
我发现了一个非常有用的教程,它允许我遍历一个矩阵,挑选出高于某个阈值 (>0.01) 的标准数据,然后用这些值渗透三个向量:“源、目标和 corr”,最终使一个组织良好的数据框。
source=c()
target=c()
corr<-c()
g1<-rownames(adj_mat)[1:dim(adj_mat)[1]]
g2<-g1
for(gene in g1){
for(gen in g2){
if(adj_mat[gene,gen]>0.01){
source<-c(source,gene)
target<-c(target,gen)
corr<-c(corr,adj_mat[gene,gen])
}
}
}
network<-data.frame(source,target,corr)
虽然这对于维度为 1000、500 的小矩阵非常有用,但对于维度为 10000、700...的小矩阵,它需要大量的时间。
矩阵来自一个文件,每次都会上传到网站并在网站中读取,所以我无法适应“来源等”。对象大小与矩阵大小一致,因为每个新上传的文件的大小都不同。
谁能告诉我在 R 中是否有更有效的方法来做到这一点?
【问题讨论】:
-
变量
m是什么?我建议使用索引进行迭代(for(i in 1:nrow(adj_mat))),并且正如@Paul Hiemstra 指出的那样,预分配。例如:source -
抱歉我已经纠正了这个错误