我经常使用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的某些部分传递给直接汇总调用的函数,而不是传递列吗?
我相信你可以使用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)