Je dois afficher entre 1-3 graphiques, et je veux que les titres des graphiques soient basés sur le nom de la variable utilisée.Utiliser le nom de variable comme titre de parcelle avec lapplication
Je peux obtenir que cela fonctionne comme je veux ci-dessous:
library(grid)
library(ggplot2)
library(gridExtra)
a1 <- sample(1:100)
a2 <- sample(1:100)
a3 <- sample(1:100)
make_graph <- function(x, y=deparse(substitute(x))){
time <- 1:100
dfp <- data.frame(time, x)
ggplot(dfp, aes(x=time, y=x)) + geom_point() +
ggtitle(y)
}
g1 <- make_graph(a1)
g2 <- make_graph(a2)
g3 <- make_graph(a3)
grid.arrange(g1,g2,g3)
Mais cela devient inefficace quand je dois inclure des instructions conditionnelles s'il y a seulement 1 ou 2 échantillons (soit seulement a1, ou a1 & a2).
j'ai eu tout à travailler ci-dessous, à l'exception des titres corrects:
library(grid)
library(ggplot2)
library(gridExtra)
a1 <- sample(1:100)
a2 <- sample(1:100)
a3 <- sample(1:100)
sample_list <- paste0("a", seq_len(3))
make_graph <- function(x, y=deparse(substitute(x))){
time <- 1:100
dfp <- data.frame(time, x)
ggplot(dfp, aes(x=time, y=x)) + geom_point() +
ggtitle(y)
}
graphs_list <- lapply(mget(sample_list), make_graph)
do.call("grid.arrange", graphs_list)
Avec le code ci-dessus je reçois la fonctionnalité correcte, mais Deparse() dans make_graph() semble avoir des problèmes, Je suppose en raison d'être appelé avec lapply. Donc, au lieu des titres que j'avais dans l'exemple initial ("a1", "a2", "a3"), j'ai plutôt "X [[1L]]", "X [[2L]]", "X [[ 3L]] ".
J'ai aussi essayé de modifier la fonction lapply, mais cela ne me donne le premier « titre » dans la liste:
sample_list <- paste0("a", seq_len(3))
make_graph <- function(x, y){
time <- 1:100
dfp <- data.frame(time, x)
ggplot(dfp, aes(x=time, y=x)) + geom_point() +
ggtitle(y)
}
graphs_list <- lapply(mget(sample_list), make_graph, y=sample_list)
do.call("grid.arrange", graphs_list)
Je ne suis pas sûr de la meilleure approche pour accomplir ce que je suis essayant de faire ici. Merci pour toute aide.
Brilliant! Je jure que j'apprends une nouvelle fonction tous les jours, je ne peux pas croire que c'était si facile :) – user3564760
@ user3564760 Et 'Map' est fondamentalement' mapply' qui par défaut ne simplifie pas le résultat. Donc, il est étroitement lié à 'lapply' il vous permet juste d'itérer sur plusieurs paramètres pour passer à la fonction – MrFlick