Заменить матрицу в списке, используя логическое выражение - PullRequest
0 голосов
/ 12 февраля 2020

Предположим, у вас есть список матриц 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

Однако, это приводит к предупреждению, и замена не происходит:

Warning message:
In mat.list[replace] = C :
  number of items to replace is not a multiple of replacement length

В некотором смысле, это было неожиданно, по крайней мере, для меня. Я подозреваю, что комбинация логического вектора и списков, вероятно, не идеальна здесь? Можем ли мы сделать эту работу, используя логический вектор той же длины, что и список, содержащий элементы?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

Вы можете попробовать подходы замены как ниже

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

или

mat.list[[which(replace)]] <- C
1 голос
/ 12 февраля 2020
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

Кстати, не используйте T и F в своем коде, иначе кто-то сделает это с вами:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...