我需要分配固定数字,让我们随机地对矩阵说" 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
每个数字应至少在每行出现一次。
非常感谢
答案 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次并将答案转换为你喜欢的尺寸。
在收到其他评论后,您似乎需要完成两件事:
所以,在这一点上,我建议创建函数:
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)对于任意x
,n
和m
。 f2()
完成新请求(对应上面的数字2);但是,请注意,可能有更好的方法来完成此任务,这种方法(while
循环)可能会花费任意时间,具体取决于x
,n
,{的值{1}}和机会。以下是函数的示例调用:
m