在 R 中创建箱线图时,有没有办法迭代数据帧列表?

问题描述 投票:0回答:1

我在 R 中创建了这个函数,以便基于多个数据框中的同一列创建箱线图,存储在列表(dfs)中:

plotting <- function(dfs, name="pdf_name", column, names, colours, title="No_title"){
  pdf(name)
  boxplot(dfs[[1]][[column]], dfs[[2]][[column]], dfs[[3]][[column]], names=names, col=colours)
  title(title)
  boxplot(dfs[[1]][[column]], dfs[[2]][[column]], dfs[[3]][[column]], col=colours, names=names, outline=F) #without outliers
  title(paste(title, "without outliers"))
  dev.off()
}

我想缩短这段代码,并想知道是否有一种方法可以遍历我的数据帧列表中的所有数据帧,例如: dfs[[1:3]]?

r dataframe function boxplot
1个回答
1
投票

这是一个使用

diamonds
数据框的示例,仅关注与您的问题相关的代码元素。

首先,创建一些测试数据。

# Create some test data
dfList <- diamonds %>% group_by(color) %>% group_split()

将数据帧列表合并为一个长数据帧

testData <- dfList %>% bind_rows(.id="Source")

重写函数

plotting <- function(d, colName, groupName, title="Default title") {
  boxplot(as.formula(paste0(colName, " ~ ", groupName)), data=d)
  title(title)
  boxplot(as.formula(paste0(colName, " ~ ", groupName)), data=d, outline=FALSE)
  title(paste0(title, ": no outliers"))
}

使用功能

plotting(testData, "depth", "Source")

这给出了我认为具有所需形式的两个图。

[

diamonds
数据框是
ggplot2
包的一部分。]

© www.soinside.com 2019 - 2024. All rights reserved.