Fånga modelleringsfel
Förväntad livslängd vid födseln är ett viktigt mått på befolkningens hälsa.
Du arbetar som konsult inom folkhälsoforskning. Din uppdragsgivare vill veta hur mycket livslängden ökar för varje dollar som spenderas på sjukvård. Du har samlat in data om förväntad livslängd (i år) för alla länder och deras respektive sjukvårdsutgifter per capita, från 2001 till 2021. Den anlitade statistikern har skrivit kod för att anpassa regressionsmodeller till varje lands data. Det finns dock saknade värden i datan som orsakar fel vid modellanpassningen.
Du har en lista med dataramar i din arbetsmiljö, ls_df, där varje element innehåller data för ett givet land. Du planerar att parallellisera med parLapply() och använda tryCatch() för att fånga fel. Paketet parallel har redan laddats åt dig.
Den här övningen är en del av kursen
Parallell programmering i R
Övningsinstruktioner
- Ange en funktion till argumentet error. Funktionen ska ta ett argument,
e, och användapaste()för att placera strängen"Error!"föree. - Redigera
fit_lm()så att den kontrollerar ommodelär en teckensträng som innehåller felmeddelandet. - Skapa ett kluster med sex kärnor.
- Applicera
fit_lm()på listanls_dfparallellt med hjälp avparLapply().
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
fit_lm <- function (df) {
model <- tryCatch(lm(life_expectancy ~ health_exp_per_capita, data = df),
# Supply a function that pastes "Error!" and one argument, e
error = ___)
# If model is character (error) return model else return model coefficient
if (___) return(model)
else return(coef(model)[2])
}
# Make a cluster of six cores
cluster <- ___(___)
# Apply fit_lm in parallel to ls_df using cluster
ls_mod <- parLapply(___, ___, ___)
stopCluster(cluster)
print(paste(sum(sapply(ls_mod, is.numeric)), "models fit and", sum(sapply(ls_mod, is.character)), "errors caught!"))