2011-09-29 96 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呢!