2014-09-25 47 views
4

我經常使用d_ply來製作探險性地塊。將dplyr用於探索性地塊

一個小示例:

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)) 

哪產生三個獨立的曲線,每個物種。

我想使用dplyr中的函數重現此行爲。

這似乎要求重新彙總sumreze所調用的函數中的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)) 

能否data.frame的部分傳遞到通過總結直接調用,而不是傳遞列的功能?

回答

7

我相信你可以使用do來完成這個任務,這個功能與你在d_ply中使用的功能相同。它將直接打印到繪圖窗口,但如果使用命名參數(請參閱幫助頁面,這基本上類似於使用dlply),也會在結果data.frame內將圖形保存爲list。我沒有完全掌握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(.))