我使用这段代码。但它非常耗时。我怎么能加快这一点。有任何帮助吗?我该如何加快我的代码(矩阵,sapply,lapply)
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瓶颈的可能性有多大? –