我的想法是创建一组函数(ggplot2),这些函数是某种层次结构的,用于创建和编辑绘图。因此,将有一个函数首先定义网格,另一个函数绘制数据,其他几个函数添加可选的数据/线/多边形。
这是一个小工作示例,应该澄清我的担忧:
# a first function that creates the grid and background and
# manipulates some data
plot.func <- function() {
a <<- 1
b <<- c(1,2,3,4)
z <<- 0:15
gg <<- ggplot(data=data, aes(x=height, y=weight)) +
geom_point()
return(gg)
}
# functions that add something to the plot working with
# objects defined in another functions
add.vline <- function(height) {
d <<- a+b
gg <<- gg + geom_vline(xintercept=height)
return(gg)
}
add.hline <- function(weight) {
e <<- z-d
gg <<- gg + geom_hline(yintercept=weight)
return(gg)
}
plot.func()
add.vline(60)
add.hline(154)
你看到我(必须?)与<<-
合作很多,因为每个函数只能在他自己的(临时?)环境中运行。为了共享每个函数必须访问的对象,我使用<<-
使这些对象可以全局使用。
我很确定,有一种正确(和更好)的方式。也许甚至可能我的方法完全错误但我没有找到另一种解决方案。
更新:以下是我希望如何使用style
等参数来影响以下功能的示例:
plot.func <- function(style) {
style <<- style
gg <- ggplot(data=data, aes(x=height, y=weight)) +
geom_point()
return(gg)
}
add.vline <- function(style, height) {
if (style == 0) {
gg <- gg + geom_vline(xintercept=height, col=red)
} else {
gg <- gg + geom_vline(xintercept=height, col=red)
}
return(gg)
}
gg <- plot.func(0)
add.vline(gg, 65)