R 子集矩阵:在保持矩阵维数不变的情况下,将一个二进制矩阵映射到一个定性矩阵上1s而不是0s

R 子集矩阵:在保持矩阵维数不变的情况下,将一个二进制矩阵映射到一个定性矩阵上1s而不是0s,r,matrix,map,nested-lists,R,Matrix,Map,Nested Lists,假设我有两个列表,一个是二进制的,另一个是定量的。列表中的顺序很重要。我想将二元矩阵映射到它的定性对应项上,同时创建一个新的列表,其中包含相同数量的嵌套矩阵和相同维度。这些矩阵将是其定性对应矩阵的子集;其中二进制矩阵中有1 # dummy data dat1 <- c(0,1,0,1,1,0,0,0,1,0,0,0,1,1,0,1) mat1 <- matrix(dat1, ncol=4, nrow=4, byrow=T) dat2 <- c(1,1,0,1,0,0,1,1

假设我有两个列表,一个是二进制的,另一个是定量的。列表中的顺序很重要。我想将二元矩阵映射到它的定性对应项上,同时创建一个新的列表,其中包含相同数量的嵌套矩阵和相同维度。这些矩阵将是其定性对应矩阵的子集;其中二进制矩阵中有1

# dummy data

dat1 <- c(0,1,0,1,1,0,0,0,1,0,0,0,1,1,0,1)
mat1 <- matrix(dat1, ncol=4, nrow=4, byrow=T)

dat2 <- c(1,1,0,1,0,0,1,1,0,1,0,1,0,1,0,0)
mat2 <- matrix(dat1, ncol=4, nrow=4, byrow=T)

lsMat1 <- list(mat1, mat2)

dat3 <- c(0.3,0.1,0.6,0.3,0.9,0.1,0.1,0.3,0.6,0.2,0.7,0.8,0.4,0.1,0.4,0.5)
mat3 <- matrix(dat3, ncol=4, nrow=4, byrow=T)

dat4 <- c(0.5,0.3,0.6,0.8,0.1,0.4,0.5,0.1,0.5,0.1,0.0,0.1,0.4,0.6,0.0,0.8)
mat4 <- matrix(dat4, ncol=4, nrow=4, byrow=T)

lsMat2 <- list(mat3, mat4)

如果您有任何建议,我们将不胜感激,谢谢

我假设您上面提供的输出不正确。由于二进制矩阵中有0和1,并且只希望保留1的值,因此可以使用简单的元素乘法。您可以使用

Map(`*`, lsMat1, lsMat2)
返回

[[1]]
     [,1] [,2] [,3] [,4]
[1,]  0.0  0.1    0  0.3
[2,]  0.9  0.0    0  0.0
[3,]  0.6  0.0    0  0.0
[4,]  0.4  0.1    0  0.5

[[2]]
     [,1] [,2] [,3] [,4]
[1,]  0.0  0.3    0  0.8
[2,]  0.1  0.0    0  0.0
[3,]  0.5  0.0    0  0.0
[4,]  0.4  0.6    0  0.8

考虑到lsMat1中两个矩阵的第三列都是0,这似乎更正确。

如果我理解了这个问题,我会进行元素矩阵乘法。我不熟悉您发布的语法,但在MATLAB中:

mat1.*mat3

现在,二进制矩阵中所有为零的元素将保持为零,所有为一的元素将成为定性矩阵中的值


希望有帮助

此所需的“新”列表是否为您提供的上述测试数据的正确值?根据你的定义,它似乎不正确。欢迎评论。是的,这是我的想法,但因为我是手工做的,所以可能是我引入了错误。我会检查并更正的。谢谢,正是我想要的。对不起,我的例子中有错。
[[1]]
     [,1] [,2] [,3] [,4]
[1,]  0.0  0.1    0  0.3
[2,]  0.9  0.0    0  0.0
[3,]  0.6  0.0    0  0.0
[4,]  0.4  0.1    0  0.5

[[2]]
     [,1] [,2] [,3] [,4]
[1,]  0.0  0.3    0  0.8
[2,]  0.1  0.0    0  0.0
[3,]  0.5  0.0    0  0.0
[4,]  0.4  0.6    0  0.8