R用于循环覆盖变量数据

时间:2019-01-28 21:38:00

标签: r ggplot2

我正在尝试使用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

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

Desired Results

Dataset

2 个答案:

答案 0 :(得分:0)

您可能正在寻找更多类似这样的东西:

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中的“正常”工作方式。

答案 1 :(得分:0)

以下是数据的变量 “固定酸度”;“挥发性酸度”;“柠檬酸”;“残糖”;“氯化物”;“游离二氧化硫”;“总二氧化硫”;“密度”;“ 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表格。