Álv*_*gas 2 combinations loops r matrix dataframe
假设我有矩阵d,它是二维(列)采样过程的两种不同实现(行)的结果。我想开发一个函数,从这个原始矩阵中创建完全对立的绘图。
c1 <- c(0.1, 0.6);c2 <- c(0.3, 0.8);d <- rbind(c1,c2)
# [,1] [,2]
# c1 0.1 0.6
# c2 0.3 0.8
Run Code Online (Sandbox Code Playgroud)
也就是说,例如,对于第一个实现(c(0.1, 0.6)),我想获得这个随机绘制在二维上的镜像,它生成了(2^2)如下 4 种可能的组合:
d1_anthi = matrix(
c( d[1,1] , d[1,2],
1 - d[1,1], d[1,2],
d[1,1] , 1 - d[1,2],
1 - d[1,1], 1 - d[1,2]), nrow=2,ncol=4)
t(d1_anthi)
# [,1] [,2]
# [1,] 0.1 0.6
# [2,] 0.9 0.6
# [3,] 0.1 0.4
# [4,] 0.9 0.4
Run Code Online (Sandbox Code Playgroud)
类似地,对于第二种,实现结果如下:
d2_anthi = matrix(
c( d[2,1] , d[2,2],
1 - d[2,1], d[2,2],
d[2,1] , 1 - d[2,2],
1 - d[2,1], 1 - d[2,2]), nrow=2, ncol=4)
t(d2_anthi)
# [,1] [,2]
# [1,] 0.3 0.8
# [2,] 0.7 0.8
# [3,] 0.3 0.2
# [4,] 0.7 0.2
Run Code Online (Sandbox Code Playgroud)
因此,我想要锁定的对象是这样的:
anthi_draws <- rbind(t(d1_anthi),t(d2_anthi))
# [,1] [,2]
# [1,] 0.1 0.6 <- original first realization
# [2,] 0.9 0.6
# [3,] 0.1 0.4
# [4,] 0.9 0.4
# [5,] 0.3 0.8 <- original second realization
# [6,] 0.7 0.8
# [7,] 0.3 0.2
# [8,] 0.7 0.2
Run Code Online (Sandbox Code Playgroud)
最后,我想创建一个函数,给定一个随机数矩阵,该函数能够创建这个对偶抽奖的扩展矩阵。比如下图中我在三个维度进行了采样,那么每次原始抽奖的总抽奖次数就是2^3 = 8。
特别是,我在创建取决于原始采样(矩阵列)尺寸的完整组合时遇到问题。我本来打算使用它expand.grid(),但无法使用它创建完整的组合。欢迎任何有关创建此类功能的提示或帮助。先感谢您。
你可以试试这个
do.call(
rbind,
apply(
d,
1,
function(x) {
expand.grid(data.frame(rbind(x, 1 - x)))
}
)
)
Run Code Online (Sandbox Code Playgroud)
这使
X1 X2
c1.1 0.1 0.6
c1.2 0.9 0.6
c1.3 0.1 0.4
c1.4 0.9 0.4
c2.1 0.3 0.8
c2.2 0.7 0.8
c2.3 0.3 0.2
c2.4 0.7 0.2
Run Code Online (Sandbox Code Playgroud)