Применить функцию n-раз;используя вывод last в качестве ввода next - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу применить функцию к входу, чтобы получить вывод.Затем я хочу использовать этот вывод в качестве входных данных для следующего шага и применить ту же функцию, которая использовалась на предыдущем шаге.Я хочу повторить так 100 раз.Например:

eq <- function (x) x^3 -2
eq0 <- eq(2)
eq1 <- eq(eq0)
.
.
.
eq100 <- eq(eq99)

Может кто-нибудь предложить решение.Спасибо!

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Мы можем использовать что-то вроде while loop

eq <- function (x) x + 1
i <- 1             #Index to count loop
n <- 2             #Starting value
while(i <= 10) {   #Check the condition, change this to 100 for your case
  eq1 <- eq(n)     #Call the function
  n <- eq1         #Store the new value into a variable to use it in next iteration
  i = i + 1        #Increase the counter
  print(n)         #Print the value
}


#[1] 3
#[1] 4
#[1] 5
#[1] 6
#[1] 7
#[1] 8
#[1] 9
#[1] 10
#[1] 11
#[1] 12

PS - я изменил функцию, чтобы упростить ее, поскольку первоначальная функция перешла на Inf сразу после нескольких итераций.

0 голосов
/ 03 декабря 2018

Просто сохраните результат в той же переменной, в которой вы запускаете функцию.

a=2
eq=function(x){
  x^3-1
}
for (i in 1:10){
a=eq(a)

print(a)
}
[1] 7
[1] 342
[1] 40001687
[1] 6.40081e+22
[1] 2.622435e+68
[1] 1.803492e+205
[1] Inf
[1] Inf
[1] Inf
[1] Inf
0 голосов
/ 03 декабря 2018

Вот рекурсивный способ.

recur <- function(FUN = eq, x, n){
  if(n > 0) {
    x <- recur(FUN, FUN(x), n - 1)
  }
  x
}

recur(eq, 2, 100)
#[1] Inf

И нерекурсивный.

iter <- function(FUN = eq, x, n){
  for(i in seq_len(n)) x <- FUN(x)
  x
}

iter(eq, 2, 100)
#[1] Inf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...