【发布时间】:2017-06-12 11:24:29
【问题描述】:
我使用此代码。但这非常耗时。我怎么能更快呢。有什么可以帮忙的吗?
veri=replicate(1000, sim.VSS(ncases=3000, nvariables=20, nfactors=1, meanloading=0.5,dichot=1,cut=0))
#save date set
for (i in 1:1000){
write.csv(veri[,,i], paste("v_30002005d_", i, ".csv", sep=""))
}
#read csvs
files<- lapply(1:1000, function(x) { read.csv(paste0("v_30002005d_", x, ".csv"))}[,2:21])
formula<- function(a){
sapply(1:nrow(a), function(x) sapply(1:ncol(a),
function (y) {{ifelse((as.matrix(rowMeans(a)))[x,]+as.matrix(colMeans(a))[y]>=1 , a[x,y]+as.matrix(item.exam(a)$Item.Rel.woi)[y,],a[x,y])}})
)}
new_mat=sapply(1:1000, function(z){t(formula(files[[z]]))})
【问题讨论】:
-
哪部分慢?您是否尝试过分析代码以找到瓶颈?通过并行运行代码可以改进读/写。
-
在写第三点之前,我想问一下:rowMeans 和 colMeans 需要矩阵对象吗?它们被创建为一维向量对象,除非您将它们转换为矩阵并且对矩阵进行子集化比对向量进行子集化效率低得多。
-
@RomanLuštrik,并行读/写遇到 I/O 瓶颈的可能性有多大?
-
@RomanLuštrik new_mat 太慢了
-
实际上我想使用矩阵,因为在数据集中 (3000(row)x20(col)) 我计算 rowmeans 和 colmeans。然后如果这个总和大于 1,我添加项目可靠性这个值(例如 1+项目可靠性)。如果我使用矢量,我无法执行此过程。
标签: r time simulation lapply sapply