【问题标题】:R for loop overwriting variable dataR for循环覆盖变量数据
【发布时间】:2019-01-28 21:37:59
【问题描述】:

我正在尝试使用 for 循环为数据框中的每一列创建一个 ggplot。我对此很陌生,所以我的方法在这里可能非常错误。

我写了一个函数来创建 ggplot:

create_scatter <- function(df, x, y) {
  ggplot(df, aes(x, y)) + 
    geom_point() + 
    xlab(name) + 
    ylab("quality")
}

还有一个 for 循环按名称遍历 Dataframe 列(以获取列的名称以供以后使用),然后获取列的内容以用于绘图功能。

for (name in names(whiteWines)) {
  for (column in whiteWines[name]) {
    assign(paste0(name, "_scatter"), 
           create_scatter(whiteWines, column, whiteWines$quality))
  }
}

使用assign(),我可以从列名动态创建一个变量名,并将 ggplot 的结果分配给它。

然后我使用 grid.arrange 将结果图排列在 3 x 4 网格中。

grid.arrange(fixed.acidity_scatter, 
             volatile.acidity_scatter, 
             citric.acid_scatter, 
             residual.sugar_scatter, 
             chlorides_scatter, 
             free.sulfur.dioxide_scatter, 
             total.sulfur.dioxide_scatter, 
             density_scatter, 
             pH_scatter, 
             sulphates_scatter, 
             alcohol_scatter,
             layout_matrix = rbind(c(1,2,3), c(4,5,6), c(7,8,9), c(10,11,12)))

执行时会创建所有散点图,但它们都包含循环中最后一个散点图的数据。

Undesired Results

如果我将 assign 语句包装在 print() 语句中,那么我确实会在网格中得到所需的结果,但每个单独的图也会被打印出来。

Desired Results

Dataset

【问题讨论】:

  • 您是否有什么特别的原因不是简单地重塑数据然后使用分面?
  • 您可以分享数据以便人们帮助复制您的问题吗?
  • 我真的很陌生。对R不太了解,只是想通过这个过程进行逻辑思考。我肯定会看一看。谢谢!
  • 添加了数据集的链接。

标签: r ggplot2


【解决方案1】:

您可能正在寻找类似的东西:

library(readr)
library(tidyr)
library(dplyr)
library(ggplot2)

ww <- read_delim(file = "~/Downloads/winequality-white.csv",delim = ";")

ww_long <- ww %>%
    gather(key = measure,value = value,`fixed acidity`:`alcohol`)

ggplot(data = ww_long,aes(x = quality,y = value)) + 
    facet_wrap(~measure,scales = "free_y") + 
    geom_point()

R 有一些工具对初学者来说很有吸引力,因为他们通过解决问题来思考问题。其中有assign()get()eval(parse(text = ))。通常情况下,使用这些的解决方案会导致比解决的问题更多的问题;通常有更好的方法,但需要更深入地挖掘 R 中“正常”的做事方式。

【讨论】:

  • 谢谢@joran!这正是我正在寻找的。更简洁的代码和更快的糊状。
【解决方案2】:

以下是数据的变量 “固定酸度”;“挥发性酸度”;“柠檬酸”;“残糖”;“氯化物”;“游离二氧化硫”;“总二氧化硫”;“密度”;“pH”;“硫酸盐”;“酒精” ";"质量"

以下是示例行 7;0.27;0.36;20.7;0.045;45;170;1.001;3;0.45;8.8;6
6.3;0.3;0.34;1.6;0.049;14;132;0.994;3.3;0.49;9.5;6
8.1;0.28;0.4;6.9;0.05;30;97;0.9951;3.26;0.44;10.1;6 7.2;0.23;0.32;8.5;0.058;47;186;0.9956;3.19;0.4;9.9;6
7.2;0.23;0.32;8.5;0.058;47;186;0.9956;3.19;0.4;9.9;6
8.1;0.28;0.4;6.9;0.05;30;97;0.9951;3.26;0.44;10.1;6 6.2;0.32;0.16;7;0.045;30;136;0.9949;3.18;0.47;9.6;6 7;0.27;0.36;20.7;0.045;45;170;1.001;3;0.45;8.8;6
6.3;0.3;0.34;1.6;0.049;14;132;0.994;3.3;0.49;9.5;6
8.1;0.22;0.43;1.5;0.044;28;129;0.9938;3.22;0.45;11;6 全部形成excel表格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2016-07-17
    相关资源
    最近更新 更多