R中的函数调用问题

R中的函数调用问题,r,maintenance,weibull,R,Maintenance,Weibull,我试图用威布尔寿命分布计算R中的成本率,代码如下: 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 * c

我试图用威布尔寿命分布计算R中的成本率,代码如下:


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)
}
我收到R的警告说:

Error in (function (T, lambda, k)  : 
  argument "lambda" is missing, with no default 
请问这件事的原因是什么?是不是我没有把克吕时代的lambda的论点传给函数cum和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)

CR\u age对于行
mean\u cycle\u length,您错过了参数
lambda
k
,我想您可能应该使用
integrate(函数(x)cycle\u length(x,lambda,k),0,T)
对生存进行矢量化,但不为其他参数提供默认值。在下一行中,当您尝试集成时,它对lambda(或k)没有任何用处
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)
mean_cycle_length <- integrate(function(x) cycle_length(x,lambda,k), 0, T)
> CR_age(2,0.1,1,3,1)
[1] 10