library(nycflights13) library(dplyr) library(ggplot2) library(Rcpp) # Question 1 # À partir du dataset mpg, trouvez la consommation moyenne sur autoroute (hwy) pour les voitures à transmission automatique et manuelle, en excluant les voitures dont le type de carburant est diesel. mpg %>% filter(fl != "d") %>% group_by(trans) %>% summarise(mean_hwy = mean(hwy, na.rm = TRUE)) # Question 2 # Utilisez les datasets flights et airlines du package nycflights13. Trouvez le nombre total de vols pour chaque compagnie aérienne (name dans airlines) pour les vols partant de l'aéroport JFK vers l'aéroport LAX en 2013. Vous pourrez utiliser la fonction inner_join() et la variable carrier pour fusionner les bases. inner_join(airlines, flights, by = "carrier") %>% filter(year == 2013, origin=="JFK", dest =="LAX") %>% group_by(name) %>% count() # Question 3 # Dans le dataset mpg, ajoutez une colonne efficiency calculée comme le rapport de la consommation sur autoroute (hwy) par la cylindrée (displ). Ensuite, pour chaque manufacturer, trouvez le véhicule le plus efficace (avec la plus grande valeur efficiency). Sélectionnez uniquement les colonnes manufacturer, model, efficiency. Vous pourrez utiliser la fonction slice_max(). mpg %>% mutate(efficiency = hwy / displ) %>% slice_max(efficiency, n = 1, by = "manufacturer") %>% select(manufacturer, model, efficiency) # Question 4 ggplot(mpg, aes(x = cty, y = hwy, color = class)) + geom_point() + geom_smooth(method = "lm", color = "blue") + labs( title = "City vs. Highway MPG", x = "City MPG", y = "Highway MPG", color = "Car Class" ) # Question 5 ggplot(mpg, aes(x = displ, y = hwy, color = factor(cyl))) + geom_point() + geom_smooth(method = "lm", se = FALSE) + labs( title = "Relation entre la cylindrée et la consommation sur autoroute", subtitle = "Chaque couleur représente un nombre différent de cylindres", x = "Cylindrée (litres)", y = "Consommation sur autoroute (miles par gallon)", color = "Nombre de cylindres" ) + theme_classic() # Question 6 # Écrivez une fonction C++ utilisant Rcpp qui prend en entrée un vecteur numérique R et deux seuils. La fonction doit modifier chaque élément du vecteur de la manière suivante : si un élément est inférieur au premier seuil, il doit être réduit de moitié ; si un élément est supérieur au second seuil, il doit être doublé. La fonction retourne le vecteur modifié. cppFunction(' NumericVector modify_vector(NumericVector vec, double threshold1, double threshold2) { int n = vec.size(); for (int i = 0; i < n; ++i) { if (vec[i] < threshold1) { vec[i] = vec[i] / 2.0; } else if (vec[i] > threshold2) { vec[i] = vec[i] * 2.0; } } return vec; } ') modify_vector(c(12,4,5,10,17,20),6,15) # Question 7 # Écrivez une fonction C++ utilisant Rcpp pour trier un vecteur numérique R en utilisant l'algorithme de tri par sélection. Cette méthode consiste à trouver le plus petit élément du vecteur et à le placer au début, puis à répéter cette opération pour la sous-liste restante jusqu'à ce que le vecteur soit entièrement trié. La fonction retourne le vecteur trié. cppFunction(' NumericVector sort(NumericVector vec) { int n = vec.size(); for (int i = 0; i < n - 1; ++i) { int min_idx = i; for (int j = i + 1; j < n; ++j) { if (vec[j] < vec[min_idx]) { min_idx = j; } } if (min_idx != i) { double temp = vec[i]; vec[i] = vec[min_idx]; vec[min_idx] = temp; } } return vec; } ') sort(c(29,10,14,37,15))