首页 > 解决方案 > 如何使用 lapply 将变量标题传递给 ggplot 函数?

问题描述

我正在使用 lapply 来加速数据探索。我正在一次为数字变量制作箱线图,我想将变量名称传递到图中。

我试图定义名称并通过它。

library(ggplot2)
library(mass)
data(Boston)

num_vars = which(sapply(Boston, is.numeric))
ggBox <-function(index) {
  X <- index
  X_name <- names(index)
  ggplot(Boston,aes("X",X)) + geom_boxplot() + ggtitle(X_name)
}

lapply(Boston[names(num_vars)],FUN=ggBox)

我已经尝试了不同的变体,它只是传递 X 或一个数值,没有名称。

标签: r

解决方案


lapply()只能将对象值传递给函数,并且不能包含其名称。

lapply(iris, FUN = names)

$Sepal.Length         $Sepal.Width         $Petal.Length
NULL                  NULL                 NULL

$Petal.Width          $Species
NULL                  NULL

当我将数据框的每一列传递给names(). 如果要同时使用值和名称,则需要设计一个二元函数。

我以iris数据集为例:

ggBox <- function(x, name) {
  ggplot(iris, aes("X", x)) + geom_boxplot() + ggtitle(name)
}

df <- iris[1:4]
name <- names(iris)[1:4]

以下 3 种方法是等效的:

mapply(FUN = ggBox, df, name, SIMPLIFY = F)

Map(f = ggBox, df, name)

purrr::map2(df, name, ggBox)

推荐阅读