如何将一组数字随机分配给R中的矩阵

时间:2017-12-21 11:47:17

标签: r matrix

我需要分配固定数字,让我们随机地对矩阵说" x"," y"," z"等等。我怎样才能做到这一点?我确实搜索了它,但他们都解释了如何用随机数制作矩阵。但我的数字并不是随机的。我知道在矩阵中我想要什么数字,我不知道如何将它们随机分配到我的矩阵中。我无法为此编写任何代码行,以便将其更正。

这是一个例子。假设我有数字1和1.2。我想生成一个20 * 10矩阵,其元素从1和1.2中随机选择。示例矩阵如下所示:

1    1     1.2  1
1.2  1     1.2  1.2
1    1.2   1    1.2
1    1.2   1    1

每个数字应至少在每行出现一次。

非常感谢

1 个答案:

答案 0 :(得分:4)

解决方案

t(replicate(20, sample(c(1, 1.2, sample(c(1, 1.2), 8, replace = TRUE)))))

解释

sample(c(1, 1.2, sample(c(1, 1.2), 8, replace = TRUE)))

创建一个随机排序的10个样本,确保其中一个元素为1,其中一个元素为1.2,另外8个将从1和1.2中随机选择。

t(replicate(20, sample(c(1, 1.2, sample(c(1, 1.2), 8, replace = TRUE)))))

这样做20次并将答案转换为你喜欢的尺寸。

更新

在收到其他评论后,您似乎需要完成两件事:

  1. 创建一个随机填充x值的n×m矩阵,其约束条件是结果矩阵的每一行至少包含一次x的所有元素。
  2. 创建一个随机填充x值的n×m矩阵,但约束条件是结果矩阵的每一行都有多个唯一值。
  3. 所以,在这一点上,我建议创建函数:

    f1 <- function(x, n, m) {
        N <- length(x)
        if ( N > m ) {
            stop('x is longer than the number of columns requested.', call. = FALSE)
        }
        return(t(replicate(n, sample(c(x, sample(x, m - N, replace = TRUE))))))
    }
    
    f2 <- function(x, n, m) {
        if ( length(unique(x)) == 1 ) {
            stop('x has only one unique element.', call. = FALSE)
        }
        result <- t(replicate(n, sample(x, m, replace = TRUE)))
        while ( any(apply(result, 1, function(x) length(unique(result)) == 1)) ) {
            result <- t(replicate(n, sample(x, m, replace = TRUE)))
        }
        return(result)
    }
    

    (如果我是你,我也会给这些功能提供更多信息的名字)。

    f1()完成了我的原始答案(对应于上面的数字1)对于任意xnmf2()完成新请求(对应上面的数字2);但是,请注意,可能有更好的方法来完成此任务,这种方法(while循环)可能会花费任意时间,具体取决于xn,{的值{1}}和机会。以下是函数的示例调用:

    m