R 使用变量名作为Lappy的绘图标题

R 使用变量名作为Lappy的绘图标题,r,lapply,R,Lapply,我需要显示1-3个图表,我希望图表的标题基于使用的变量名 我可以在下面按照我的意愿来实现这一点: 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

我需要显示1-3个图表,我希望图表的标题基于使用的变量名

我可以在下面按照我的意愿来实现这一点:

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)
库(网格)
图书馆(GG2)
图书馆(gridExtra)

a1关于来自
lappy
的变量名,您是对的。因此,在这种情况下,
deparse
策略不是一个好策略。但是,由于您使传递标题变得非常容易,因此您可以使用
Map
而不是
lappy

graphs_list <- Map(make_graph, mget(sample_list), sample_list)
do.call("grid.arrange", graphs_list)

graphs\u列表精彩绝伦!我发誓我每天都学习一个新函数,我简直不敢相信它会那么容易:)@user3564760和
Map
基本上是
mapply
,默认情况下不会简化结果。因此它与lappy密切相关,它只允许您迭代多个参数以传递给函数
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)
graphs_list <- Map(make_graph, mget(sample_list), sample_list)
do.call("grid.arrange", graphs_list)