我使用這段代碼。但它非常耗時。我怎麼能加快這一點。有任何幫助嗎?我該如何加快我的代碼(矩陣,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瓶頸的可能性有多大? –