使用dplyr进行探索性绘图

Eti*_*rie 4 r plyr dplyr

我经常使用d_ply来制作探索性情节.

一个简单的例子:

require(plyr)

plot_species <- function(species_data){
  p <- qplot(data=species_data,
        x=Sepal.Length,
        y=Sepal.Width)
  print(p)

}

d_ply(.data=iris,
      .variables="Species",
      function(x)plot_species(x))
Run Code Online (Sandbox Code Playgroud)

它产生三个独立的地块,每个物种一个.

我想使用dplyr中的函数重现此行为.

这似乎需要在由summarize调用的函数中重新组装data.frame,这通常是不切实际的.

require(dplyr)

iris_by_species <- group_by(iris,Species)

plot_species <- function(Sepal.Length,Sepal.Width){

  species_data <- data.frame(Sepal.Length,Sepal.Width)

  p <- qplot(data=species_data,
             x=Sepal.Length,
             y=Sepal.Width)
  print(p)

}


summarise(iris_by_species, plot_species(Sepal.Length,Sepal.Width))
Run Code Online (Sandbox Code Playgroud)

可以将data.frame的某些部分传递给直接汇总调用的函数,而不是传递列吗?

aos*_*ith 7

我相信你可以使用do你使用的相同功能来完成这项任务d_ply.它将直接打印到绘图窗口,但如果使用命名参数,也会将结果保存为list结果data.frame(请参阅帮助页面,这基本上与使用相似dlply).我没有完全掌握所有do可以做的事情,但是如果我不使用命名参数,我会得到一条错误消息,但是这些图仍然会打印到绘图窗口(在RStudio中).

plot_species <- function(species_data){
  p <- qplot(data=species_data,
        x=Sepal.Length,
        y=Sepal.Width)
  print(p)

}

group_by(iris, Species) %>%
    do(plot = plot_species(.))
Run Code Online (Sandbox Code Playgroud)