【问题标题】:Index matrix with randomly sampled columns具有随机采样列的索引矩阵
【发布时间】:2015-09-26 15:48:39
【问题描述】:

我正在尝试用来自 1:whatever 的样本填充索引矩阵的列,无论使用 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

【问题讨论】:

    标签: r matrix indexing


    【解决方案1】:

    只需使用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)。

    【讨论】:

    • 就像我说的,我不能那样做。这是我简化后放在这个网站上的一个更大问题的一部分。它必须在 for 循环中完成。
    • @pretzelman 我不认为你明白我说的。再读一遍(也许我的编辑会增加一些清晰度)。
    • 哦,我明白了。谢谢!如果我还想将每列的样本保持在 1:12 之间,但假设我想填充 1000 多列怎么办?我会使用 sample(12, i, replace=TRUE)
    • @pretzelman sample 的第一个参数是要从中绘制的集合,第二个参数是要绘制的项目数。学习阅读帮助页面并使用命名参数以避免将来出现此类混淆。
    • @pretzelman 在这种情况下,您应该放弃循环。 matrix(sample(12, 12*ncols, TRUE), nrow = 12)
    猜你喜欢
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多