用巢狀 foreach 迴圈觀察價格趨勢
股市以難以預測而聞名。你在一家投資公司任職,你的主管想看到以一週為視窗的股價趨勢。
你已取得自 2015 年以來 10 家科技公司的每日股價資料。團隊中的資料科學家已提供用來擬合迴歸模型的程式碼。你打算使用 foreach()、%:% 和 %dopar% 將這段程式碼平行化。
要迭代的欄數已存為工作環境中的 ncols,列數為 nrows。parallel、doParalel 和 foreach 套件已為你載入。叢集 cl 也已設定完成。你需要撰寫巢狀的 foreach() 迴圈。
本練習屬於課程
R 平行程式設計
練習說明
- 登錄要搭配
foreach迴圈使用的叢集。 - 指定一個 foreach 迴圈,對第 1 欄到第
ncols欄迭代,使用"cbind"收集結果,並使用巢狀運算子。 - 再指定一個 foreach 迴圈,對第 1 列到第
nrows列迭代,使用"c"收集結果,並使用 do-parallel 運算子。 - 當所有運算完成後,停止叢集。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Register the cluster to use with %dopar%
___
# Use foreach loop to iterate over columns one to ncol
moving_trend <- foreach(___, ___) %:%
# Iterate over rows one to nrows within each column
foreach(___, ___) %dopar% {
prices <- data[row:(row + 6), col]
if (any(is.na(prices))) NA
else {days <- 1:7
model <- lm(prices ~ days)
model$coefficients[2]}
}
# Stop cluster
___
print(paste("Total number of models fit:", sum(!is.na(moving_trend))))