我需要为矩阵随机分配固定数字,即“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
每个数字应至少在每行中出现一次。
非常感谢
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
,m
和机会的值。以下是函数的示例调用:
set.seed(1234)
x <- c(1, 1.2)
f1(x, 20, 10)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1.2 1.2 1.2 1.2 1.2 1.0 1.2 1.0 1.0 1.0
[2,] 1.0 1.0 1.0 1.0 1.0 1.2 1.0 1.0 1.0 1.2
[3,] 1.0 1.2 1.2 1.2 1.2 1.2 1.0 1.0 1.2 1.0
[4,] 1.2 1.0 1.2 1.0 1.2 1.0 1.2 1.2 1.0 1.0
[5,] 1.2 1.0 1.2 1.2 1.0 1.0 1.2 1.0 1.0 1.0
[6,] 1.2 1.0 1.0 1.0 1.2 1.0 1.2 1.0 1.0 1.0
[7,] 1.2 1.0 1.0 1.0 1.2 1.2 1.0 1.0 1.0 1.2
[8,] 1.0 1.0 1.2 1.0 1.2 1.2 1.0 1.0 1.0 1.2
[9,] 1.0 1.2 1.2 1.2 1.2 1.2 1.0 1.2 1.0 1.0
[10,] 1.0 1.2 1.2 1.0 1.0 1.0 1.2 1.0 1.0 1.0
[11,] 1.0 1.2 1.0 1.2 1.0 1.2 1.2 1.0 1.2 1.0
[12,] 1.2 1.2 1.2 1.0 1.2 1.2 1.0 1.2 1.2 1.2
[13,] 1.2 1.0 1.0 1.2 1.2 1.0 1.2 1.0 1.0 1.0
[14,] 1.2 1.0 1.2 1.0 1.2 1.0 1.0 1.0 1.2 1.0
[15,] 1.2 1.0 1.0 1.2 1.2 1.2 1.0 1.0 1.0 1.0
[16,] 1.0 1.2 1.2 1.2 1.2 1.0 1.2 1.0 1.0 1.2
[17,] 1.2 1.2 1.0 1.2 1.2 1.2 1.0 1.2 1.2 1.0
[18,] 1.2 1.0 1.0 1.0 1.2 1.2 1.0 1.2 1.2 1.2
[19,] 1.2 1.2 1.0 1.0 1.2 1.0 1.2 1.2 1.0 1.0
[20,] 1.2 1.0 1.2 1.0 1.0 1.2 1.0 1.2 1.0 1.2
x <- c(1, 1.2, 1.4, 1.6, 1.8, 2, 2.2, 2.4, 2.6, 2.8, 3)
f2(x, 20, 10)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1.0 2.2 2.0 1.6 2.8 3.0 2.4 1.4 2.8 2.4
[2,] 3.0 1.4 2.8 2.0 1.6 1.8 2.6 1.2 1.8 2.4
[3,] 1.6 1.4 1.0 1.2 1.4 1.2 2.4 1.4 3.0 3.0
[4,] 2.4 2.6 2.6 2.4 1.2 3.0 2.2 2.0 1.0 1.8
[5,] 2.4 1.8 2.6 2.6 2.2 1.4 2.6 1.2 2.2 1.8
[6,] 2.6 2.6 3.0 1.4 2.8 1.8 2.0 2.6 1.2 1.8
[7,] 2.4 2.8 1.6 1.2 3.0 1.4 1.0 1.8 1.6 1.6
[8,] 2.4 2.6 1.8 3.0 1.4 2.4 1.8 3.0 2.6 2.2
[9,] 2.6 2.8 2.6 2.0 3.0 2.2 2.8 2.2 2.2 1.0
[10,] 1.4 2.6 3.0 3.0 2.6 2.4 1.4 2.2 2.2 1.0
[11,] 1.8 2.8 1.8 2.0 1.2 1.4 2.2 1.8 2.2 2.2
[12,] 1.2 1.6 1.0 3.0 1.8 3.0 2.0 2.0 2.4 1.2
[13,] 2.0 2.2 2.4 1.8 1.2 1.0 2.6 2.4 2.6 1.2
[14,] 2.2 2.6 3.0 1.6 2.4 1.6 2.2 1.0 2.2 2.2
[15,] 2.4 2.6 2.8 1.0 2.4 2.8 2.6 2.8 1.2 2.6
[16,] 1.6 3.0 3.0 2.2 1.2 2.6 2.2 1.0 2.4 1.6
[17,] 2.8 1.4 1.6 3.0 2.2 2.6 1.0 1.0 2.2 1.4
[18,] 1.4 2.2 1.8 2.6 1.2 3.0 2.4 2.4 2.6 2.0
[19,] 1.8 2.2 3.0 1.4 2.6 1.8 2.8 2.8 3.0 3.0
[20,] 1.4 1.4 2.6 1.2 2.8 3.0 2.0 1.0 2.2 2.8