【问题标题】:R Error - "object of type 'closure' is not subsettable"R 错误 - “‘闭包’类型的对象不是子集”
【发布时间】:2015-03-12 16:10:15
【问题描述】:

我正在尝试设计一个简单的函数来根据生产的 n 个单位返回利润。

我使用以下代码根据一些给定的参数运行 1000 次需求模拟:

nsims=1000
sim.demand=rep(NA,nsims)
  for(i in 1:nsims){
  sim.demand[i]=rnorm(12, 12000, sd=3496.752) 
}

然后我将利润函数定义为生产 n 个单位的函数:

profit <- function(n)
 for(i in 1:1000){
   if(sim.demand[i]<=n) 
     profit[i]=-100000-(80*n)+100*sim.demand[i]+30*(n-sim.demand[i]) else
     profit[i]=-100000-(80*n)+100*n
}

例如,当我尝试查找 10000 单位的利润时,我输入了利润 (10000)。但我不断收到以下错误:

Error in profit[i] = -1e+05 - (80 * n) + 100 * n : 
object of type 'closure' is not subsettable

想法?提前致谢!

【问题讨论】:

  • 你得到这个是因为profit 中没有对象(即,你可以'子集这个)。你想做什么?
  • 我正在尝试为利润建模。 100000 美元的固定成本,80 美元的可变成本,100 美元的销售价格,所有未售出产品的残值 30 美元。我正在尝试创建函数,以便我可以编写“利润(10000)”,如果我要在这些参数下生产 10000 个单位,它将返回利润

标签: r


【解决方案1】:

您正在调用利润[i],其中利润是一个函数,并且您不想对函数进行子集化。我不完全确定您想做什么,但我认为您想创建一个新变量以在函数末尾返回。所以,像:

profit <- function(n){
  return_profit<-rep(NA, 1000)
  for(i in 1:1000){
    if(sim.demand[i]<=n) {
      return_profit[i]=-100000-(80*n)+100*sim.demand[i]+30*(n-sim.demand[i])
    } 
    else{
      return_profit[i]=-100000-(80*n)+100*n
    }
  }
  return_profit
}

?

【讨论】:

  • 这非常有效!谢谢!我试图投票赞成这个答案,但我需要更多的声誉。感谢所有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 2023-03-27
  • 2019-10-18
  • 1970-01-01
相关资源
最近更新 更多