我正在尝试创建一个在变量处于不同范围时返回不同值的函数。
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?
答案 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)
}