如何通过索引从DataFrame创建列列表并批量绘制直方图?
解决R语言按列索引循环绘制直方图的问题
错误原因
你代码里的vars=iris[1:3]是直接提取了前三列的数据集,不是列索引。当lapply遍历这个对象时,传给hist函数的var参数是每一列的数值向量,而.data[[var]]要求用字符串(列名)或整数(列索引)来子集数据,因此触发报错。
解决方案:用整数列索引实现循环绘图
直接定义整数型的列索引向量,修改函数调用逻辑即可:
library(datasets) library(ggplot2) library(dplyr) data(iris) # 定义目标列的整数索引(这里取前三列) target_cols <- 1:3 # 定义绘图函数,接收列索引参数 hist_plot <- function(data, col_idx){ p <- data %>% ggplot(aes(x = .data[[col_idx]], group = 1)) + geom_histogram(bins = 10) + theme_classic() return(p) } # 循环生成所有直方图 plot_list <- lapply(target_cols, FUN = hist_plot, data = iris) # 查看生成的所有图 plot_list
补充:从列子集提取列名的方式
如果习惯先通过列范围筛选目标列,也可以提取对应列名再循环,同样能实现需求:
# 先筛选目标列,再提取列名 target_cols <- colnames(iris[1:3]) hist_plot <- function(data, col_name){ p <- data %>% ggplot(aes(x = .data[[col_name]], group = 1)) + geom_histogram(bins = 10) + theme_classic() return(p) } plot_list <- lapply(target_cols, FUN = hist_plot, data = iris)
内容的提问来源于stack exchange,提问作者DaniH
相关产品推荐
相关产品推荐

