【问题标题】:function with vector R - argument is of length zero带有向量 R 的函数 - 参数的长度为零
【发布时间】:2021-03-18 16:08:44
【问题描述】:

写了这个函数lockdown_func(beta.hat_func)

第一件事是:我收到一个错误“参数长度为零”。 第二件事是:当我在没有日期索引的情况下计算它时,它不会改变它应该改变的值,输出向量包含每个索引的相同值。

date= c(seq(from=30, to=165))
beta.hat_func <- c(rep(x = beta.hat, times = 135))
beta.hat <- beta0[which.min(SSE)]


#implement function for modeling
lockdown_func <- function(beta.hat_func,l){
  h=beta.hat_func
  {
    for(i in 1:length(h))
      if(date[i]>60 | date[i]<110){
        beta.hat_func[i]=beta.hat_func[i]*exp(-l*(date[i]-date[i-1]))
    }else{
    beta.hat_func[i]=beta.hat_func[i]
    }
  return(h)  
  }
}

lockdown_func(beta.hat_func,0.03)

【问题讨论】:

  • 你能通过定义datebeta.hat 来让我们重现这个吗?
  • 当然!刚刚添加它们,beta.hat 是 SSE 估计的结果,是一个值。

标签: r function vector


【解决方案1】:

几个cmets:

  • 您的意思是应用 AND 而不是 OR 来获得 60 到 110 之间的日期范围?这将是 date[i]&gt;60 &amp;&amp; date[i]&lt;110(如果您正在计算长度为 1 的逻辑值,最好使用双 &amp;&amp;
  • 因为你没有,i=1 满足条件,所以date[i-1] 将引用date[0],这是一个长度为 0 的向量。

你可能想要这样的东西:

l_dates <- date>60 & date<110  ## single-& here for vectorized operation
beta.hat_func[l_dates] <- beta.hat_func[l_dates]*exp(-l*diff(date)[l_dates])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2022-08-10
    • 2017-11-29
    • 1970-01-01
    • 2020-12-06
    相关资源
    最近更新 更多