绘图功能在lapply期间不会获取名称

Mat*_* W. 4 r ggplot2 lapply

我试图允许lapply访问我正在喂它的情节列表的名称.我看过其他一些看似非常相似的帖子,但仍不确定如何将列表的名称向量传递给它.

require(mlbench)
require(gridExtra)
require(dplyr)
require(ggplot2)

data(Soybean)

dfs <- lapply(Soybean, function(x) data.frame(table(x, exclude = NULL)))

display_charts <- function(x){
  ggplot(data.frame(x) %>% select(x = 1, y = 2), aes(x = x, y = y)) + 
    geom_col(col = 'red',
             fill = 'green',
             alpha = 0.3) +
    labs(title = names(x),
         x = names(x),
         y = 'Frequency')
}

all_charts <- lapply(dfs, display_charts)

n <- length(all_charts)
nCol <- floor(sqrt(n))
do.call("grid.arrange", c(all_charts, ncol=nCol))
Run Code Online (Sandbox Code Playgroud)

我试图通过调整lapply函数来调整display_charts函数来接受一个name参数,然后替换names(x)name,然后创建一个名为的向量nms <- names(dfs),然后做,seq_along(dfs), display_charts, x = dfs, nm = nms但它不起作用.

此图为数据集生成6x6频率图的网格,但我希望标题为图的每个名称.我觉得这样看着我的脸,我看不到它.

PoG*_*bas 5

而不是使用lapply遍历dfs长度的迭代列表,如果它与:

# Replaced `all_charts <- lapply(dfs, display_charts)` with:
all_charts <- lapply(seq_along(dfs), function(i) display_charts(dfs[i]))
Run Code Online (Sandbox Code Playgroud)

并且ggplotdisplay_charts()功能使用中输入,x[[1]]因为它仍然是一个列表:

display_charts <- function(x) {
  library(ggplot2)
  ggplot(x[[1]] %>% select(x = 1, y = 2), aes(x = x, y = y)) + 
    geom_col(col = 'red',
             fill = 'green',
             alpha = 0.3) +
    labs(title = names(x),
         x = names(x),
         y = 'Frequency')
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 我喜欢在这样的情况下迭代`names(dfs)`,相同的概念只是另一个角度 (2认同)