R随机选择矩阵单元格和循环
R Random Selection of Matrix Cells and Loop
我有两个 3x3 矩阵,我想从每一行中随机 select 一个项目(两个矩阵中的相同对应项目)并将这些 'selected' 值记录在一个新矩阵中。
从那里我想重复这个过程 5 次,每次都添加到矩阵中,这样最后我就有了一个随机 selected 值的 3x10 矩阵。
我将尝试说明我的意思:
我有 2 个矩阵 A 和 B。
> A = matrix( c(4,7,1,9,4,2,1,3,9), nrow = 3, ncol = 3)
> A
[,1] [,2] [,3]
[1,] 4 9 1
[2,] 7 4 3
[3,] 1 2 9
> B = matrix( c(2, 4, 3, 1, 5, 7, 4, 3, 2), nrow=3, ncol=3)
> B
[,1] [,2] [,3]
[1,] 2 1 4
[2,] 4 5 3
[3,] 3 7 2
然后我想随机 select 一个介于 1 和 3 之间的整数(因为每个矩阵中有 3 列)
> random <- sample(1:3, length)
> random
[1] 1 3 2
因为数字是 1,3 和 2,我想从矩阵 A 和 B 中创建第 1 行的第一个元素、第 2 行的第 3 个元素和第 3 行的第 2 个元素的向量.这就是新的矩阵C.
> C = matrix(c(4,3,2,2,3,7), nrow = 3, ncol = 2)
> C
[,1] [,2]
[1,] 4 2
[2,] 3 3
[3,] 2 7
在此之后,我想循环该过程 5 次,每次都将生成的矩阵添加到现有“C”矩阵的一侧。
我是 R 的初学者,所以我的问题是:如何结合随机 selection 和循环来创建所需的结果?非常感谢任何帮助或建议,谢谢。
(我想以更大的规模重新创建它)
你可以试试
M <- cbind(c(t(A)), c(t(B)))
fnc <- function(){
n <- nrow(A)
ind <- sample(n) + (1:n-1)*n
M[ind, ]
}
set.seed(0)
do.call(cbind, lapply(1:5, function(i)fnc()))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 1 4 9 1 1 4 9 1 4 2
# [2,] 7 4 3 3 4 5 7 4 4 5
# [3,] 2 7 1 3 1 3 9 2 9 2
我有两个 3x3 矩阵,我想从每一行中随机 select 一个项目(两个矩阵中的相同对应项目)并将这些 'selected' 值记录在一个新矩阵中。
从那里我想重复这个过程 5 次,每次都添加到矩阵中,这样最后我就有了一个随机 selected 值的 3x10 矩阵。
我将尝试说明我的意思:
我有 2 个矩阵 A 和 B。
> A = matrix( c(4,7,1,9,4,2,1,3,9), nrow = 3, ncol = 3)
> A
[,1] [,2] [,3]
[1,] 4 9 1
[2,] 7 4 3
[3,] 1 2 9
> B = matrix( c(2, 4, 3, 1, 5, 7, 4, 3, 2), nrow=3, ncol=3)
> B
[,1] [,2] [,3]
[1,] 2 1 4
[2,] 4 5 3
[3,] 3 7 2
然后我想随机 select 一个介于 1 和 3 之间的整数(因为每个矩阵中有 3 列)
> random <- sample(1:3, length)
> random
[1] 1 3 2
因为数字是 1,3 和 2,我想从矩阵 A 和 B 中创建第 1 行的第一个元素、第 2 行的第 3 个元素和第 3 行的第 2 个元素的向量.这就是新的矩阵C.
> C = matrix(c(4,3,2,2,3,7), nrow = 3, ncol = 2)
> C
[,1] [,2]
[1,] 4 2
[2,] 3 3
[3,] 2 7
在此之后,我想循环该过程 5 次,每次都将生成的矩阵添加到现有“C”矩阵的一侧。
我是 R 的初学者,所以我的问题是:如何结合随机 selection 和循环来创建所需的结果?非常感谢任何帮助或建议,谢谢。
(我想以更大的规模重新创建它)
你可以试试
M <- cbind(c(t(A)), c(t(B)))
fnc <- function(){
n <- nrow(A)
ind <- sample(n) + (1:n-1)*n
M[ind, ]
}
set.seed(0)
do.call(cbind, lapply(1:5, function(i)fnc()))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 1 4 9 1 1 4 9 1 4 2
# [2,] 7 4 3 3 4 5 7 4 4 5
# [3,] 2 7 1 3 1 3 9 2 9 2