【问题标题】:How can I make multiple density plots from data inside a nested list如何从嵌套列表中的数据制作多个密度图
【发布时间】:2019-02-12 20:46:15
【问题描述】:

我有一个嵌套列表,其中包含 15 个数据集(也是列表),每个数据集都有 3 列,但行数可变(每列数千)。最后一个数据集的顶部在控制台中如下所示:

[[15]]
           Object.Number            Internal                      Membrane
1                0                 8.275335e+03                   2575.41042
2                2                 1.225267e+04                   5813.50000
3                3                 9.554725e+03                   2483.51172

我想制作一个 5x3 的密度图网格,使用 15 个数据集每一个的第二列中的值创建。

我认为我可以使用 lapply (myFiles, densityplot(args)) 执行此操作,但我找不到在 densityplot 的参数中引用该列的方法。

对于如何实现这一点的任何见解,我们将不胜感激。

【问题讨论】:

    标签: r nested-lists lattice density-plot


    【解决方案1】:

    我会使用dplyr::bind_rows 和参数.id 将所有data.frames 行绑定到一个data.frame;然后使用 ggplot2facet_wrap 在 3x5 网格布局中绘制密度。

    以下是使用mtcars 样本数据的示例:

    # Create sample data
    lst <- replicate(15, mtcars, simplify = F)
    
    # Plot
    library(tidyverse)
    bind_rows(lst, .id = "id") %>%
        mutate(id = factor(id, levels = as.character(1:15))) %>%
        ggplot(aes(mpg)) +
        geom_density() +
        facet_wrap(~ id, nrow = 3, ncol = 5)
    

    【讨论】:

      【解决方案2】:

      purrr 中,您可以使用~.x 的简写符号,例如:

      library(purrr)
      map(myFiles, ~ densityplot(.x[[2]]))
      

      【讨论】:

      • 这很有趣。我根本不知道 purrr,但我一定会调查的。这似乎是一种非常有效的方法。
      • 是的,使用.x~ 的语法简短而方便。然而,这与在lapplymap 中定义函数没有什么不同。所以map(myFiles, ~ densityplot(.x[[2]]))map(myFiles, function(x) densityplot(x[[2]])) 相同。后者又相当于lapply(myFiles, function(x) densityplot(x[[2]]))。你可以看看maplapplystackoverflow.com/questions/45101045/…之间的这个比较
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      相关资源
      最近更新 更多