→ koai:如果只有一個變數的話,sapply是可以取代你的for的! 你可以試 12/02 13:20
→ koai:下面這個例子 sapply(1:10,function(x){x^2}) 12/02 13:21
→ onionsteven:恩 這裡就是我求救的地方 我的變數有三個 XD 12/02 13:22
→ koai:在你的問題裡面, 應該是先算完idx <- f(a1,a2,a3)的值(向量) 12/02 13:22
→ koai:然後用 sapply(idx,function(x){...}) 12/02 13:23
→ koai:這樣子不知道有沒有幫到你... @@" 12/02 13:24
→ koai:如果還有問題,也許可以試著給一點範例資料,幫你做看看! 12/02 13:25
→ onionsteven:我試看看 @@ 謝謝 12/02 13:33
→ koai:sapply(1:10000,function(x){g(data[x,])}),g(*)你可以自己寫 12/02 13:40
→ koai:這應該是你想要做的事吧? @@" 12/02 13:40
→ obarisk:apply比for快...實驗看看吧!比較美倒是真的! 12/02 13:42
→ obarisk:注意到x是個物件,所以他不是一個值 12/02 13:44
推 Yukirin:apply族的函數本質不也就是for loop嗎 記得不會比較快 12/02 13:58
→ onionsteven:那如果我希望改進for迴圈的執行速度 能用甚麼樣的寫法 12/02 14:00
→ koai:vectorize... eg.N=1000000; data=matrix(rnorm(3*N),N,3) 12/02 14:29
→ koai:system.time( sapply(1:N,function(x){ data[x,1]^data[x,2]/ 12/02 14:30
→ koai:data[x,3] }) ); 12/02 14:31
→ koai:system.time(for(x in 1:N){data[x,1]^data[x,2]/data[x,3]}) 12/02 14:31
→ koai:system.time( test <- data[,1]^data[,2]/data[,3] ) 12/02 14:32
→ koai:你可以比較一下上面例子分別需要多少時間!! 12/02 14:32
→ onionsteven:好的 謝謝 12/02 14:49
→ gsuper:不要思考怎麼躲避回圈 應該要思考怎麼安排記憶體 12/02 17:04
→ gsuper:比方說暫時用不到的的變數移除等 12/02 17:05
→ onionsteven:請問意思是 執行的時候 變數越少越好嗎? 12/02 17:33
推 Wush978:除了vectorize之外都沒有什麼好語法可以顯著提升速度 12/02 21:50
推 Wush978:但是透過電腦的硬體和適當的R 套件,可以顯著提升速度 12/02 21:51
→ Wush978:但是這個是case by case 的狀況,所以建議可以詳細給code 12/02 21:51