具有随机采样列的索引矩阵

时间:2015-09-26 15:48:39

标签: r matrix indexing

我试图用1中的样本填充索引矩阵的列:无论使用for循环。这样做的目的是引导编码问题。我遇到的问题是,一旦for循环达到不是行长度的倍数,for循环就不会正确运行。出于某种原因,它认为我希望每列中的数字表示相等。我如何让它停下来?

index.mat=matrix(NA,nr=12,nc=10,byrow=FALSE)
for(i in 1:5)
{
  index.mat[,i] <- sample(1:i, i, replace=TRUE)
  print(index.mat)
}

将打印

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    1    1    2    1   NA   NA   NA   NA   NA    NA
 [2,]    1    1    2    4   NA   NA   NA   NA   NA    NA
 [3,]    1    1    2    1   NA   NA   NA   NA   NA    NA
 [4,]    1    1    2    2   NA   NA   NA   NA   NA    NA
 [5,]    1    1    2    1   NA   NA   NA   NA   NA    NA
 [6,]    1    1    2    4   NA   NA   NA   NA   NA    NA
 [7,]    1    1    2    1   NA   NA   NA   NA   NA    NA
 [8,]    1    1    2    2   NA   NA   NA   NA   NA    NA
 [9,]    1    1    2    1   NA   NA   NA   NA   NA    NA
[10,]    1    1    2    4   NA   NA   NA   NA   NA    NA
[11,]    1    1    2    1   NA   NA   NA   NA   NA    NA
[12,]    1    1    2    2   NA   NA   NA   NA   NA    NA

作为给出错误之前的最终矩阵

Error in index.mat[, i] <- sample(1:i, i, replace = TRUE) : 
  number of items to replace is not a multiple of replacement length

1 个答案:

答案 0 :(得分:0)

只需使用sample(i, size = 12, replace = TRUE)

您的LHS是index.mat[,i],其长度为12。

您的RHS为sample(1:i, i, replace = TRUE),其长度为i

本质上,R会在长度不匹配时回收RHS - 这意味着,当i=2时,您的RHS长度为2,并且只会重复6次匹配LHS长度12。

在这种特殊情况下,如果RHS长度不是LHS长度的除数,则会出现错误 - 首先发生错误,您猜对了i=5(从1,2,3开始) ,4和12均匀划分。)