2016-06-13 53 views
1

所以我正在運行一個優化問題,並試圖在每個時間點添加函數到一個情節。我可以繪製函數,但我有變量存儲,似乎r不會評估函數,直到它呈現它。這很難解釋,但我有一個簡單的例子來說明它。ggplot是否將動態函數用於統計函數?

data = data.frame(x = runif(20, -10, 10), y = runif(20, -10,10)) 
p <- ggplot(data, aes(x = x, y =y)) 
slope = 0.5 
yoff = 1 
p <- p + stat_function(fun = function(x) slope*x+yoff) 
slope = 1 
yoff = -1 
p <- p + stat_function(fun = function(x) slope*x+yoff) 
p 

而我想要的是當我將函數添加到圖形時,圖形上有兩條斜線和y軸截距。

回答

0

如果你有很多人,做的功能列表:

make_fun <- function(slope,yoff) {slope; yoff; function(x) x*slope + yoff} 
> l <- mapply(FUN = make_fun,slope = 1:2,yoff = 3:4) 
> l[[1]](1) 
[1] 4 
> l[[2]](1) 
[1] 6 
0

函數在使用時進行評估,因此它在渲染時存在。 你可以爲你的參數有不同的功能:

p <- ggplot(data, aes(x = x, y =y)) 
slope1 = 0.5 
yoff1 = 1 
p <- p + stat_function(fun = function(x) slope1*x+yoff1) 
slope2 = 1 
yoff2 = -1 
p <- p + stat_function(fun = function(x) slope2*x+yoff2) 
0

在ggplot許多參數不計算,直到該地塊實際呈現。在這裏,我們可以將slopeyoff值作爲參數賦值給函數,然後通過args=參數傳遞值,而這個參數是先前評估過的。

library(ggplot2) 
data = data.frame(x = runif(20, -10, 10), y = runif(20, -10,10)) 
p <- ggplot(data, aes(x = x, y =y)) 
slope = 0.5 
yoff = 1 
p <- p + stat_function(fun = function(x, slope, yoff) slope*x+yoff, args=list(slope=slope, yoff=yoff)) 
slope = 1 
yoff = -1 
p <- p + stat_function(fun = function(x, slope, yoff) slope*x+yoff, args=list(slope=slope, yoff=yoff)) 
p