Aan de slagGa gratis aan de slag

Geneste foreach-lussen voor prijstrends

De beurs staat bekend om zijn onvoorspelbare gedrag. Je werkt bij een investeringsbedrijf en je baas wil de trends in aandelenkoersen over een venster van één week zien.

Je hebt de gegevens verzameld van dagelijkse aandelenkoersen voor tien techbedrijven sinds 2015. De Data Scientist in je team heeft code aangeleverd om regressiemodellen te fitten. Jij wilt deze code paralleliseren met foreach(), %:% en %dopar%.

Het totale aantal kolommen om over te itereren is in je werkruimte opgeslagen als ncols, en het aantal rijen als nrows. De pakketten parallel, doParalel en foreach zijn voor je geladen. Het cluster cl is opgezet. Jij moet de geneste foreach()-lussen schrijven.

Deze oefening maakt deel uit van de cursus

Parallel programmeren in R

Cursus bekijken

Oefeninstructies

  • Registreer het cluster om te gebruiken met foreach-lussen.
  • Specificeer een foreach-lus om te itereren over kolommen één tot en met ncols, verzamel de resultaten met "cbind", en gebruik de nesting-operator.
  • Specificeer nog een foreach-lus om te itereren over rijen één tot en met nrows, verzamel de resultaten met "c", en gebruik de do-parallel-operator.
  • Stop het cluster wanneer alle berekeningen klaar zijn.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# 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))))
Code bewerken en uitvoeren