更快的方式在r中运行循环

时间:2016-02-08 14:25:45

标签: r loops

我有三个数据帧A,B和C.

A有18000行和18000列,B有150000行和5列。

我想用B填充A的元素。

循环需要很长时间。我怎样才能更快地运行这个循环?

A的例子

Entrez_Gene_Id 2324 34345 4345 1234 3453
1 Entrez_Gene_Id    0     0    0    0    0
2          23040    0     0    0    0    0
3           7249    0     0    0    0    0
4          64478    0     0    0    0    0
5           4928    0     0    0    0    0
6          58191    0     0    0    0    0

B

的例子
  head(B)
  V1 Gene1 Gene2      weight   newWeight
1  1  4171  4172  2.01676494 0.020420929
2  2  2237  5111 1.933298567 0.015300857
3  4   506   509 2.439170425 0.020577243
4  7  6635  6636 2.255316779 0.081088975
5  8  6133  6210 3.427969232 0.021132906
6 10 23521  6217 1.607247743 0.027792961   

这是我的代码:

B<- data.frame(lapply(C, as.character), stringsAsFactors=FALSE)

for(i in 1:nrow(B)){
  Rname=B[i,2]
  Cname=B[i,3]
  A[Rname,Cname]=B[i,5]
  print(i)
}

1 个答案:

答案 0 :(得分:1)

好像你试图用稀疏表示法填充矩阵的矩阵。您可以使用dgCMatrix包中的Matrix类来执行此操作:

library(Matrix)
b_mat <- sparseMatrix(i=B[,2],j=B[,3],x=B[,5])

这使得Matrix以稀疏格式出现。要转换为18,000 x 18,000格式:

as.data.frame(as.matrix(b_mat))

编辑:我建议您在此处留下as.data.frame来电,因为考虑到您拥有的列数,matrix更容易合作