簡體   English   中英

如何糾正一個簡單的 function:獲取錯誤替換長度為零

[英]How to correct a simple function: getting error replacement has length zero

我正在嘗試使用負二項式后代分布來模擬品牌推廣過程。 當我運行單個分支進程時,代碼工作正常。 當我將它包裝在 function 中並使用“復制” function 來模擬許多分支過程時,它會產生錯誤:“替換長度為零”

我是 SAS 轉換所以相對較新的 R 功能並尋求幫助,希望這是一個簡單的修復。 並且隨時歡迎任何改進建議。 先感謝您!

#######
#Single NB Branching Process with 20 generations
n<-20 #20 generations
r0<-0.9 
k<-0.25

#initialize list of population size at generation n
Z<-1
#Initiate with one index case generation 0
Z[0] <- 1
#Cluster size a generation 1
Z[1] <- rnbinom(Z[0], k,r0)
for (i in 2:n)
{
  if(Z[i-1]==0) {Z[i]=0} else 
  {
    x<-rnbinom(Z[i-1], k,r0) 
    Z[i]<- sum(x)
  }
}
print(Z)

######################
#Wrap in a function and replicate 300 times
nbbp<-function(n, r0, k)
{
  #initialize list of population size at generation n
  Z<-1
  #Initiate with one index case generation 0
  Z[0] <- 1
  #Cluster size a generation 1
  Z[1] <- rnbinom(Z[0], k,r0)
  for (i in 2:N)
  {
    if(Z[i-1]==0) {Z[i]=0} else 
    {
      x<-rnbinom(Z[i-1], k,r0) 
      Z[i]<- sum(x)
    }
  }
}
ds<-replicate(100,nbbp(20,0.9,0.25))
#Returns: Error in Z[1] <- rnbinom(Z[0], k, r0) : replacement has length zero

在您的獨立代碼中,您有

for (i in 2:n)

而在 function 你有

for (i in 2:N)

(注意大寫 N)。 我想N被定義為您工作區中的某些東西,但不是您想要的。 如果將其更改為n ,它會起作用嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM