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 吗?

提前致谢

您需要在 Vectorizeintegrate 函数

中提供函数 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

您错过了 lambdakmean_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