2
我想参数化ggplot2
绘图创建的一系列函数以减少冗余。下面我有它没有参数化函数的样子(和工作),我尝试这样做。使参数化函数返回一个函数来评估
我试图捕获和传递参数值在功能markvline()
geom_vline()
和geom_text()
,但我想打电话给markvline()
内嵌在qplot()
功能并返回geom_vline() + geom_text()
作为参数,使他们能够得到评估,并做与第一部分所做的相同。
我假设我需要理解quote/eval /替代一点点,但我不会在这一点上。任何帮助表示赞赏,我将如何构造markvline()
等同于调用geom_vline() + geom_text()
,并填写参数。
library(ggplot2)
## This works
## Making labeled vertical lines at 5 and 6
qplot(Sepal.Length, Sepal.Width, data=iris) +
geom_vline(xintercept=5, color="red", size=1) +
geom_text(x=5, y=4, label="5", hjust=0) +
geom_vline(xintercept=6, color="red", size=1) +
geom_text(x=6, y=4, label="6", hjust=0)
## I would like to parameterize these two statements
markvline <- function(e) {
geom_vline(xintercept=e, color="red", size=1) +
geom_text(x=e, y=4, label=as.character(e), hjust=0)}
## ... but this does not work
qplot(Sepal.Length, Sepal.Width, data=iris) +
markvline(5) +
markvline(6)
列表是不错的选择,但你并不需要独立添加元素,只是'qplot(Sepal.Length,萼片。宽度,数据=虹膜)+ markvline(5)+ markvline(6)' – HubertL
谢谢!这个告诉我的事情之一(以及我的例子中返回的一些错误代码)是我可以按照评估返回单个函数(列表为你),但是我不能*将它们与'+ '在我的功能里面。这暗示'geom_vline()'和'geom_text()'不会与'+'单独相互结合,但需要折叠到'qplot()'返回的任何对象中。这是一个很好的领导! – mpettis
谢谢。这比我想象的要容易。我将编辑我的答案 –