我正在制作一个包含许多相似元素的ggplot。为了帮助我设计了一个生成单个元素的函数,我计划重用它。例如
reusable.element = function(gg, params){
x = some.calculation(params)
y = some.calculation(params)
gg + geom_line(aes(x,y))
}
gg = ggplot()
gg = reusable.element(gg, params1)
gg = reusable.element(gg, params2)
print(gg)
然而,R抱怨说它找不到
x
.
尽我所能确定这似乎是由于懒惰的评估。R正在尝试评估
十
只有在打印绘图时。例如:
x1 = c(1,1)
y1 = c(1,2)
p = ggplot() + geom_point(aes(x1,y1))
x1 = c(1)
y1 = c(3)
p = p + geom_point(aes(x1,y1))
p
只生成一个点的绘图,因为
x1 = c(1)
重写
x1 = c(1,1)
.
我知道我可以通过分配不同的变量名来解决这个问题。例如:
x1 = c(1,1)
y1 = c(1,2)
p = ggplot() + geom_point(aes(eval(x1),eval(y1)))
x2 = c(1)
y2 = c(3)
p = p + geom_point(aes(x2,y2))
p
(产生3个点的计划图)。但这将大大降低生成单个plot元素的任何函数的效率。