【发布时间】:2013-03-03 16:13:56
【问题描述】:
我正在尝试使用apply/mapply/lapply/sapply 或任何其他方式来矢量化我的嵌套 for 循环代码以减少运行时间。我的代码如下:
for (i in 1:dim){
for (j in i:dim){
if(mydist.fake[i,j] != d.hat.fake[i,j]){
if((mydist.fake[i,j]/d.hat.fake[i,j] > 1.5)|(d.hat.fake[i,j]/mydist.fake[i,j]>1.5)){
data1 = cbind(rowNames[i],rowNames[j], mydist.fake[i,j], d.hat.fake[i,j], 1)
colnames(data1) = NULL
row.names(data1) = NULL
data = rbind(data, data1)
}else{
data1 = cbind(rowNames[i],rowNames[j], mydist.fake[i,j], d.hat.fake[i,j], 0)
colnames(data1) = NULL
row.names(data1) = NULL
data = rbind(data, data1)
}
}
}
}
write.table(data, file = "fakeTest.txt", sep ="\t", col.names = FALSE, row.names = FALSE)
- rowNames 是所有数据点的行名向量
-
data是一个数据框 -
mydist.fake和d.hat.fake是距离矩阵(对角线为零,上下三角形的值相同),因此对下三角形的横向感兴趣(也保留对角线的值)。 - 两个矩阵的维度相同。
我面临的主要问题是j 循环的矢量化,其中j 被初始化为i。
【问题讨论】:
-
欢迎堆栈溢出。 Reproducible examples 是要走的路。在您的示例中,
rowNames是什么? -
这类问题确实需要样本数据。
标签: r vectorization apply sapply