Вложенные циклы foreach для анализа ценовых трендов
Фондовый рынок известен своей непредсказуемостью. Вы работаете в инвестиционной компании, и ваш руководитель хочет видеть тренды цен на акции в скользящем окне длиной в одну неделю.
Вы получили данные о ежедневных ценах акций десяти технологических компаний начиная с 2015 года. Специалист по данным в вашей команде предоставил код для подгонки регрессионных моделей. Вы планируете распараллелить этот код с помощью foreach(), %:% и %dopar%.
Общее количество столбцов для итерации сохранено в рабочем пространстве как ncols, количество строк — как nrows. Пакеты parallel, doParalel и foreach уже загружены. Кластер cl создан. Вам нужно написать вложенные циклы foreach().
Это упражнение является частью курса
Параллельное программирование на R
Инструкции к упражнению
- Зарегистрируйте кластер для использования в циклах
foreach. - Задайте цикл foreach для итерации по столбцам от одного до
ncols, соберите результаты с помощью"cbind"и используйте оператор вложения. - Задайте ещё один цикл foreach для итерации по строкам от одного до
nrows, соберите результаты с помощью"c"и используйте оператор параллельного выполнения. - Остановите кластер после завершения всех вычислений.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# 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))))