R中的功能调用问题
functional call issue in R
我正在尝试使用以下代码在 R 中使用 Weibull 生命周期分布计算成本率:
CR_age <- function(T,lambda,k,cpm,ccm)
{
cum <- function(T,lambda,k)
{
return(1 - exp((-T/lambda)^k))
}
survival <- function(T,lambda,k)
{
return(exp((-T/lambda)^k))
}
mean_cost <- ccm * cum(T,lambda,k) + cpm * survival(T,lambda,k)
cycle_length <- Vectorize(survival, "T")
mean_cycle_length <- integrate(cycle_length, 0, T)
costRate <- mean_cost / mean_cycle_length$value
return(costRate)
}
我调用函数
CR_age(2,0.1,1,3,1)
我收到来自 R 的警告:
Error in (function (T, lambda, k) :
argument "lambda" is missing, with no default
请问这种情况是什么原因?是我没有将 CR_age 中的参数 lambda 传递给函数 cum 和 survival 吗?
提前致谢
您需要在 Vectorize
和 integrate
函数
中提供函数 survival
的所有参数
CR_age <- function(Te,lambda,k,cpm,ccm)
{
cum <- function(Te,lambda,k)
{
return(1 - exp((-Te/lambda)^k))
}
survival <- function(Te,lambda,k)
{
return(exp((-Te/lambda)^k))
}
mean_cost <- ccm * cum(Te,lambda,k) + cpm * survival(Te,lambda,k)
cycle_length <- Vectorize(survival, vectorize.args =c("Te", "lambda", "k"))
mean_cycle_length <- integrate(cycle_length, 0, Te, lambda, k)
costRate <- mean_cost / mean_cycle_length$value
return(costRate)
}
CR_age(2,0.1,1,3,1)
[1] 10
您错过了 lambda
和 k
行 mean_cycle_length <- integrate(cycle_length, 0, T)
.
的参数
也许您应该将其更新为
mean_cycle_length <- integrate(function(x) cycle_length(x,lambda,k), 0, T)
然后你可以 运行 你的代码没有错误,即
> CR_age(2,0.1,1,3,1)
[1] 10
我正在尝试使用以下代码在 R 中使用 Weibull 生命周期分布计算成本率:
CR_age <- function(T,lambda,k,cpm,ccm)
{
cum <- function(T,lambda,k)
{
return(1 - exp((-T/lambda)^k))
}
survival <- function(T,lambda,k)
{
return(exp((-T/lambda)^k))
}
mean_cost <- ccm * cum(T,lambda,k) + cpm * survival(T,lambda,k)
cycle_length <- Vectorize(survival, "T")
mean_cycle_length <- integrate(cycle_length, 0, T)
costRate <- mean_cost / mean_cycle_length$value
return(costRate)
}
我调用函数
CR_age(2,0.1,1,3,1)
我收到来自 R 的警告:
Error in (function (T, lambda, k) :
argument "lambda" is missing, with no default
请问这种情况是什么原因?是我没有将 CR_age 中的参数 lambda 传递给函数 cum 和 survival 吗?
提前致谢
您需要在 Vectorize
和 integrate
函数
survival
的所有参数
CR_age <- function(Te,lambda,k,cpm,ccm)
{
cum <- function(Te,lambda,k)
{
return(1 - exp((-Te/lambda)^k))
}
survival <- function(Te,lambda,k)
{
return(exp((-Te/lambda)^k))
}
mean_cost <- ccm * cum(Te,lambda,k) + cpm * survival(Te,lambda,k)
cycle_length <- Vectorize(survival, vectorize.args =c("Te", "lambda", "k"))
mean_cycle_length <- integrate(cycle_length, 0, Te, lambda, k)
costRate <- mean_cost / mean_cycle_length$value
return(costRate)
}
CR_age(2,0.1,1,3,1)
[1] 10
您错过了 lambda
和 k
行 mean_cycle_length <- integrate(cycle_length, 0, T)
.
也许您应该将其更新为
mean_cycle_length <- integrate(function(x) cycle_length(x,lambda,k), 0, T)
然后你可以 运行 你的代码没有错误,即
> CR_age(2,0.1,1,3,1)
[1] 10