取可变长度的样品

时间:2016-07-12 16:42:02

标签: r loops random

ns<-c(1,5,20,50,100,1000,10000)
Final<-rep(0,7)
second<-rep(0,10000)
for(i in length(ns)) {
second<-sample(1:1000,ns[i],replace=TRUE)
second[second==0]<-NA
Final[i]<- sd(second,na.rm=FALSE)
}

ns是我想要采用的不同采样长度。我创建了空向量Finalsecond来存储我的循环值。

我遇到了Final返回大多数0值的问题,所以在考虑了一点之后我决定从每个循环中删除second的所有零值。但在运行此代码后,它没有帮助:

> Final
[1]   0.000   0.000   0.000   0.000   0.000   0.000 288.569

现在我被卡住了。因为当我读取我的代码时,它似乎非常清楚:在给定 i 循环的情况下,从ns的[i]对应的单位数量的1:1000中取样。然后取出包含样本的向量的非零值的标准偏差,并将其存储在另一个向量Final中。

1 个答案:

答案 0 :(得分:2)

这里的主要问题是for循环:

for(i in length(ns)) {

表达式length(ns)返回一个数字,它是向量ns的长度,即7。因此,循环只会用i=7执行一次。

循环向量的最佳方法是使用seq_along()

for (i in seq_along(ns)) {

还要注意表达式

rep(0,N)

可以替换为

double(N)

因为新双向量的默认元素值为零。这种形式也更加惯用,因为它表达了构建一个稍后要使用的新向量的意图。