Как зациклить функцию на основе результата предыдущей итерации - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть функция линейного плато.Я хочу, чтобы функция исключала значения y, меньшие 10% от достигнутого максимума (имеется в виду значение y для плато), и выполняла итерацию до тех пор, пока не произойдет никаких изменений (т. Е. Не будут найдены значения более 10% от максимума).

Вот пример:

#create data 
x=c(1:7,1:7)
y=c(2,10,21,27,35,33,35,2,9,20,28,32,30,31)
df<-data.frame(x,y)
plot(x,y)

#create linear-plateau function
#a and b are intercept and slope for x<c, and c is the breakpoint
lp <-function(x, a, b, c){
  ifelse(x > c, a + b * c, a + b * x)
  }

#fit the model
fit1=nls(y ~ lp(x, a, b, c), data = df, start = list(a = 0, b = 10, c = 5))

> coef(fit1)
        a         b         c 
-7.000000  8.750000  4.533333 

Максимальное значение y (означающее значение y для плато) достигается при x=c и может быть рассчитано как ymax=a+b*c.

Вопрос:
Как сделать так, чтобы функция исключала значения, меньшие 10% от максимума, и выполняла итерацию до тех пор, пока не наблюдаются изменения?

...