【问题标题】:Issue with for loop and list generationfor循环和列表生成问题
【发布时间】:2021-11-07 21:08:50
【问题描述】:

这可能是一个简单的问题,但我正在努力解决它。我正在尝试使用 for 循环为数据框中的每一列生成密度图。我可以从列名创建一个列表,但是当我尝试使用该列表时,我无法生成我的密度图。


df1 <- as.data.frame(mtcars)

list <- colnames(df1[1:11])

for (i in list){
    ggdensity(df1$i)
}



【问题讨论】:

    标签: r list for-loop ggplot2


    【解决方案1】:

    下面的代码有效,但ggdensity 不会在没有函数的情况下在循环内打印绘图。

    library(ggplot2)
    library(ggpubr)
    
    list <- colnames(mtcars)
    
    for (i in list){
      ggdensity(mtcars[,i]) 
    }
    

    tidyverse 可能对您有所帮助的解决方案

    mtcars %>% 
      pivot_longer(cols = everything()) %>% 
      ggplot(aes(value))+
      geom_density()+
      facet_wrap(~name,scales = "free")
    

    【讨论】:

    • 可能需要注意的是,在使用$-subsetting 时,$ 之后的部分被解释为字符串。在 OP 情况下,这会导致 NULL,因为 mtcars 中没有名为 i 的列。确实使用[]-subsetting 解决了这个问题。
    • @MartijnVanAttekum 我尝试使用 for (i in list){ ggdensity(mtcars$[i]) } 但这也没有解决这个问题。知道为什么会这样吗?
    • @ViniciusFelix 如果我使用类似ggdensity(df1$carb)ggdensity(df1[,1] 的代码该代码适用于单个图,但在放入 for 循环时无效,所以虽然 tidyverse 示例是一个很棒的解决方法,但我仍然不明白为什么此响应中的两个示例在 for 循环中不起作用
    • @Patchhr33 子集应该只是mtcars[,i] @ViniciusFelix 也这样做,但正如他也指出的那样,使用for 循环将计算图,但不打印它们。
    猜你喜欢
    • 1970-01-01
    • 2020-05-19
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多