R: Как использовать выходные данные текущей функции в этой функции - PullRequest
0 голосов
/ 19 февраля 2020

Я пишу функцию R, используя if & else if. См. Код ниже:

i_ti_12 <- function(x){
  if (x <= 44)
  {ti = exp(-13.2238 + 0.152568*x)}
  else if (x >= 49)
  {ti = -0.01245109 + 0.000315605*x}
  else (x > 44 & x < 49)
  {ti = (x-44)*(i_ti_12(49))/(49-44) + (49-x)*(i_ti_12(44))/(49-44)}
  return(ti)
}

Я хочу использовать вывод этой функции, i_ti_12(49) внутри этой функции, но приведенный выше код не работает. Вывод:

> i_ti_12(49)
Error: C stack usage  7974292 is too close to the limit

Простое решение - просто заменить i_ti_12(49) на -0.01245109 + 0.000315605*49, но это неочевидный способ решения и может не работать в сложных случаях.

Итак, я действительно хочу узнать и узнать, существуют ли четкие способы сделать это? Я имею в виду, как и в приведенном выше простом примере, написать условную функцию, используя выходные данные одного условия в этой функции. Любая помощь высоко ценится.

1 Ответ

2 голосов
/ 19 февраля 2020

За вашим последним else следует условие (x > 44 & x < 49), которое на самом деле неверно. Если у вас есть (x > 44 & x < 49), это означает, что вы выполните это утверждение, а ti = (x-44)*(i_ti_12(49))/(49-44) + (49-x)*(i_ti_12(44))/(49-44) является чем-то независимым от вашей структуры if-else.

В этом случае, когда вы вызываете i_ti_12(49), ваша функция не знает, когда следует прекратить рекурсию, поскольку вы не определили этот случай.

Вы можете попробовать код ниже:

i_ti_12 <- function(x){
  if (x <= 44)
  {ti = exp(-13.2238 + 0.152568*x)}
  else if (x >= 49)
  {ti = -0.01245109 + 0.000315605*x}
  else
  {ti = (x-44)*(i_ti_12(49))/(49-44) + (49-x)*(i_ti_12(44))/(49-44)}
  return(ti)
}

такой, что

> i_ti_12(49)
[1] 0.003013555
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...