使用逻辑表达式替换列表中的矩阵

时间:2020-02-12 13:23:20

标签: r

假设您有一个矩阵列表@Bean public static PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } A

B

,并且您想使用逻辑向量将列表中的某些矩阵替换为列表中的矩阵A <- matrix(0,3,3) B <- matrix(0,3,3) mat.list <- list(A,B) 。我的尝试如下:

C

但是,这将导致警告并且没有替换发生:

replace <- c(T,F)   #logical vector for replacement
C <- matrix(1,3,3)  #replacement matrix
mat.list[replace] <- mat.list #my attempt

某种程度上,这是意外的,至少对我而言。我怀疑逻辑向量和列表的组合在这里可能并不理想?我们可以使用与列表中包含元素的长度相同的逻辑向量来完成这项工作吗?

2 个答案:

答案 0 :(得分:2)

您可以尝试以下替代方法

mat.list[replace] <- list(C)

mat.list[[which(replace)]] <- C

答案 1 :(得分:1)

A <- matrix(0,3,3)
B <- matrix(0,3,3)
mat.list <- list(A,B)
mat.list
#> [[1]]
#>      [,1] [,2] [,3]
#> [1,]    0    0    0
#> [2,]    0    0    0
#> [3,]    0    0    0
#> 
#> [[2]]
#>      [,1] [,2] [,3]
#> [1,]    0    0    0
#> [2,]    0    0    0
#> [3,]    0    0    0

replace <- c(TRUE, FALSE)  
C <- matrix(1,3,3)  
mat.list[which(replace)] <- list(C)

mat.list
#> [[1]]
#>      [,1] [,2] [,3]
#> [1,]    1    1    1
#> [2,]    1    1    1
#> [3,]    1    1    1
#> 
#> [[2]]
#>      [,1] [,2] [,3]
#> [1,]    0    0    0
#> [2,]    0    0    0
#> [3,]    0    0    0

顺便说一句,不要在您的代码中使用TF,否则有人会对您这样做:

T <- FALSE
F <- TRUE
A <- matrix(0,3,3)
B <- matrix(0,3,3)
mat.list <- list(A,B)
mat.list
#> [[1]]
#>      [,1] [,2] [,3]
#> [1,]    0    0    0
#> [2,]    0    0    0
#> [3,]    0    0    0
#> 
#> [[2]]
#>      [,1] [,2] [,3]
#> [1,]    0    0    0
#> [2,]    0    0    0
#> [3,]    0    0    0

replace <- c(T,F)  
C <- matrix(1,3,3)  
mat.list[which(replace)] <- list(C)

mat.list
#> [[1]]
#>      [,1] [,2] [,3]
#> [1,]    0    0    0
#> [2,]    0    0    0
#> [3,]    0    0    0
#> 
#> [[2]]
#>      [,1] [,2] [,3]
#> [1,]    1    1    1
#> [2,]    1    1    1
#> [3,]    1    1    1
相关问题