2016-06-13 2 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 

И то, что я хочу, это две линии на графике с наклоном и у-перехвата, что я имел, когда я добавил функцию на графику.

ответ

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 не оцененную пока участок фактически не оказаны. Здесь мы можем сделать аргументы значенийи yoff, а затем передать значения через параметр 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 
Смежные вопросы