:ここ
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)}
は一例です。
cols <- 3; rows <- 3
m <- matrix(ncol = cols, nrow = rows)
Iは行列の各列の要素がランダム数のセットから を選択したいです。
set.seed(2)
set <- seq(ncol(m)-1L)
m[] <- sample(set, length(m), replace = T)
m
# [,1] [,2] [,3]
# [1,] 1 1 1
# [2,] 2 2 2
# [3,] 2 2 1
私は、各行に少なくとも1つの別の番号を持っていると思います。
rowRanges <- matrixStats::rowRanges(m)
(isSingle <- rowRanges[,2]-rowRanges[,1]==0)
# [1] TRUE TRUE FALSE
m[isSingle,1] <- vapply(rowRanges[isSingle, 1], function(x) set[set!=x][1], 0L)
m
# [,1] [,2] [,3]
# [1,] 2 1 1
# [2,] 1 2 2
# [3,] 2 2 1
か、あなたが選択する値を設定し、コラムたという点で割り当てをランダム化する場合:
vsample <- Vectorize(function(x) sample(set[set!=x], size = 1L), "x")
idx <- cbind(row=which(isSingle), col=sample(ncol(m), sum(isSingle), replace = TRUE))
mvals <- vsample(rowRanges[isSingle, 1])
m[idx] <- mvals
例では行番号4を見てください。すべての要素は4です。私はこれが起こることを望んでいません。私は少なくとも1つの要素が一列に異なるようにしたい。 – Fate