dplyr+;magrittr+;qplot=没有绘图?
我想使用dplyr+;magrittr+;qplot=没有绘图?,r,ggplot2,dplyr,magrittr,R,Ggplot2,Dplyr,Magrittr,我想使用qplot(ggplot2),然后使用magrittr转发数据: 这项工作: mtcars %>% qplot(mpg, cyl, data=.) 这会产生一个错误: mtcars %>% qplot(mpg, cyl, data=.) %>% summarise(mean(mpg)) 而这些只会产生汇总统计数据: mtcars %T>% qplot(mpg, cyl, data=.) %>% summarise(mean(mpg)) mtcars %&
qplot
(ggplot2),然后使用magrittr
转发数据:
这项工作:
mtcars %>% qplot(mpg, cyl, data=.)
这会产生一个错误:
mtcars %>% qplot(mpg, cyl, data=.) %>% summarise(mean(mpg))
而这些只会产生汇总统计数据:
mtcars %T>% qplot(mpg, cyl, data=.) %>% summarise(mean(mpg))
mtcars %>% {qplot(mpg, cyl, data=.); .} %>% summarise(mean(mpg))
mtcars %T>% {qplot(mpg, cyl, data=.)} %>% summarise(mean(mpg))
有什么问题?我已经找到了解决方案,但它没有帮助,正如您从所附代码中看到的。所有ggplot2函数都返回一个表示绘图的对象-要查看它,您需要打印它。这通常在控制台中工作时自动发生,但需要在函数或链中显式显示 我能想到的最优雅的解决方案是:
library("ggplot2")
library("magrittr")
library("dplyr")
echo <- function(x) {
print(x)
x
}
mtcars %>%
{echo(qplot(mpg, cyl, data = .))} %>%
summarise(mean(mpg))
库(“ggplot2”)
图书馆(“magrittr”)
图书馆(“dplyr”)
回声%
{echo(qplot(mpg,cyl,data=)}%>%
总结(平均值(mpg))
似乎应该有更好的方法。这对我来说似乎更干净,因为它不需要使用
%T>%
(这会使管道更难重新排列和读取),也不需要在表达式周围使用{}
,以避免将对象传递到那里。我不确定传递对象并忽略它会有多大的危害
我从未使用过%T>%
T恤,因为我不想打印或打印。而且我从来都不想打印/打印被管道传输的对象本身(通常是一个大数据集)。所以我从不使用%T>%
library("ggplot2")
library("dplyr")
pap = function(pass, to_print = NULL, side_effect = NULL) {
if( !is.null(to_print)) {
if (is.function(to_print)) {
print(to_print(pass))
} else {
print(to_print)
}
}
side_effect
invisible(pass)
}
mtcars %>%
pap(summary) %>%
pap(side_effect = plot(.)) %>%
pap(qplot(mpg, cyl, data = .)) %>%
summarise(mean(mpg))
我通常不会在管道中使用绘图作为副作用,因此上述解决方案最适合我(需要“额外键入”副作用绘图)。我希望能够自动消除这些预期场景(例如plot vs.qplot)之间的歧义,但尚未找到可靠的方法。您似乎正在传递ggplot对象。可以在ggplot对象中应用摘要吗?但是
%T>%
或%>%{f(.;.}
不随结果对象移动,而是返回输入对象(请参见:)。关于:mtcars%%>%{print(qplot(mpg,cyl,data=);。}%>%summary(mean(mpg))
?这就是你想要的吗?可能与:是的!问题是:为什么没有打印就不能工作?谢谢!它确实需要更好的解决方案,因为您鼓励将magrittr
、dplyr
和ggplot2
相结合,如果您必须使用这种技巧使绘图工作正常,magritr
1.5%T>$
的效果较差。@Tim这个例子对我来说似乎是被迫的,因为通常绘图是管道中的最后一件事。实际上,这是现实生活中的一件事(简化):获取数据->绘图摘要->分组并重新排列->计算一些统计数据等。
在本例中,绘图的作用是进行初步数据检查。简单一点:mtcars%T>%{print(qplot(mpg,cyl,data=)}%>%summary(mean(mpg))
或者mtcars%T>%{摘要(,平均值(mpg))%>%print;}%>%qplot(mpg,cyl,data=)
。后者更符合@hadley关于将绘图保留在管道末端的评论。我向magritr软件包提交了一个功能请求,类似于%g>%,这可能会更容易。