Если решетка в функции - PullRequest
       3

Если решетка в функции

0 голосов
/ 28 сентября 2018

Я пытаюсь создать функцию, которая возвращает разные значения, когда переменная находится в разных диапазонах.

    nhpp_lambda <- function(t) {
  for (t in 1:365) {
    if (t >= "1" && t <= "59")
      lambda = 20.83
    else if (t >= "60" && t <= "151") 
      lambda = 11.02
    else if (t >= "152" && t <= "243")
      lambda = 11.68
    else if (t >= "244" && t <= "334")
      lambda = 26.41
    else if (t >= "335" && t <= "365")
      lambda = 20.83
  }
  return(lambda)
}

Почему это не работает?он все равно просто всегда возвращает 20,83

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

В функции, которую вы определили, вы возвращаете значение lambda после того, как цикл завершился, и на последней итерации цикла значение всегда равно 20,83.Если вы удалите цикл, он будет работать, например,

nhpp_lambda <- function (t) {
    if (t >= 1 && t <= 59)
        lambda = 20.83
    else if (t >= 60 && t <= 151) 
        lambda = 11.02
    else if (t >= 152 && t <= 243)
        lambda = 11.68
    else if (t >= 244 && t <= 334)
        lambda = 26.41
    else if (t >= 335 && t <= 365)
        lambda = 20.83
    return(lambda)
}

nhpp_lambda(5)
nhpp_lambda(55)
nhpp_lambda(120)
nhpp_lambda(285)
nhpp_lambda(340)
0 голосов
/ 28 сентября 2018

Во-первых, вы берете $ t $ в качестве аргумента функции, но затем определяете $ t $ через цикл $ 1: 365 $ , так что $ t $ циклически повторяется.значения от $ 1,2, \ dots, 365 $ .Удалите цикл for (), он не имеет смысла.

Во-вторых, вы сравниваете число $ t $ со строками "1", "59" и т. Д.Уберите цитаты, вы должны сравнивать $ t $ с целыми числами, а не символами / строками.Вот правильный код

   nhpp_lambda <- function(t) {

    if (t >= 1 && t <= 59)
      lambda = 20.83
    else if (t >= 60 && t <= 151) 
      lambda = 11.02
    else if (t >= 152 && t <= 243)
      lambda = 11.68
    else if (t >= 244 && t <= 334)
      lambda = 26.41
    else if (t >= 335 && t <= 365)
      lambda = 20.83

  return(lambda)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...