r - 如何使用 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 或一个数值,没有名称。
解决方案
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)
推荐阅读
- c# - 映射网络驱动器 Windows 服务
- php - 更大的多维数组上的 Foreach 循环
- javascript - 方法 setInterval 在服务器开发和集成中正常工作,但在服务器质量上工作一次
- javascript - 如何在html的输入字段中显示当前日期?
- android - 解析失败:Landroid/arch/core/executor/AppToolkitTaskExecutor
- primefaces - JSF ViewScoped bean 未实例化
- c# - 如何将 Unity Display 对话框的输出更改为特定的 Gameobject?
- wpf - Interaction.Triggers 数据模板列 WPF
- linux - 打开终端,运行命令,稍后返回 SAME 终端并执行另一个命令
- java - 未找到处理 Intent 的 Activity { act=android.intent.action.OPEN_DOCUMENT cat=[android.intent.category.OPENABLE] typ=/* }