2011-09-29 136 views
-1

我想生成分數i (0:36)頻率j。我想j循環是隨機數字。我做的是:雙循環隨機抽樣

j<-1:70 
for(i in 0:36) { 
    for (j in 1:sample(j)) { 
    print(i,j) 
    } 
} 

但我得到了錯誤。我應該把sample(j,1, replacement=TRUE)而不是隻是sample(j)? 謝謝

+1

你收到了什麼錯誤信息? – 2011-09-29 20:25:21

回答

1

嘗試

for(i in 0:36) { 
  for(k in 1:sample(70, 1)) { 
    print(c(i,k)) 
  } 
} 
+0

但是,'print(i,k)'的意思是「用k個有效數字打印我」。你是不是指'print(c(i,k))'? –

+0

哎呀是啊抓到一個錯誤,但不是其他人... – Karl

+0

是的,你的代碼工作。數字表達式有23個元素:僅第一個使用 2:In 1:sample(j): 數值表達式有17個元素:只有第一個使用了 – user634455

2

如果我理解正確的話,你想從一個到70倍(隨機選擇的次數來複制值)複製在i每個元素。

i <- 0:36 
j <- 1:70 

#number of times to replicate each i 
times <- sample(j, length(i), replace=FALSE) 
result <- rep(i, times) 

是否使用替代= FALSE或不取決於你希望如何完成採樣(如更換=每個j被選擇最多一次假保證。

2

如果你想有一個隨機號,你應該使用runif,具有最小/最大控制範圍。您也可以使用sample,但那麼最好使用sample.int(max, 1)

j<-70 
for(i in 0:36) { 
    for (k in 1:runif(1,1,j)) { 
    cat(i,k, "\n") 
    } 
} 

然後內環不應該覆蓋j(其壽ld是一個常量) - 所以我將循環變量重命名爲k。 ...和print不打印這樣的多個參數 - 但是cat呢!