如果晶格在功能上

时间:2018-09-28 10:05:32

标签: r

我正在尝试创建一个在变量处于不同范围时返回不同值的函数。

    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 :(得分:2)

在定义的函数中,循环完成后返回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)

答案 1 :(得分:1)

首先,您将 $ 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)
}