назначить dimname для списка матриц в R - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть новый список матриц, для которых их (пропущенные) dimnames должны быть заменены dimnames предыдущего списка матриц.Мне нужно было бы сделать это через цикл (for loop, apply, ...), так как число матриц в списке является переменным.

Пример данных:

new_list <- list(
    matrix1=matrix(
        sample(20,24,T),
        6
    ),
    matrix2=matrix(
        sample(20,24,T),
        6
    ),
    matrix3=matrix(
        sample(20,24,T),
        6
    )
)

old_list <- list(
    matrix1=matrix(
        sample(10,24,T),
        6,
        dimnames=list(sprintf("Row_%d", 1:6), sprintf("Col_%d", 1:4))
    ),
    matrix2=matrix(
        sample(10,24,T),
        6,
        dimnames=list(sprintf("Row_%d", 1:6), sprintf("Col_%d", 5:8))
    ),
    matrix3=matrix(
        sample(10,24,T),
        6,
        dimnames=list(sprintf("Row_%d", 1:6), sprintf("Col_%d", 9:12))
    )
)

new_list
$matrix1
     [,1] [,2] [,3] [,4]
[1,]    2   18    2    5
[2,]   17   20   12    4
[3,]    5    9   18    4
[4,]   15   13    5   20
[5,]    7   13   10   13
[6,]   14    7    6   12

$matrix2
     [,1] [,2] [,3] [,4]
[1,]   16    6   16    7
[2,]   17   10    6   13
[3,]    9    9   18   14
[4,]    7    7    7   19
[5,]   19   20   13    9
[6,]   12   20   13   18

$matrix3
     [,1] [,2] [,3] [,4]
[1,]    3   14   15   10
[2,]    9   18   15   15
[3,]    4   13   20    2
[4,]   15   10    2    6
[5,]   15    9    1    1
[6,]    5   20    9   18

old_list
$matrix1
      Col_1 Col_2 Col_3 Col_4
Row_1     2     4     3     5
Row_2     6     8     1     3
Row_3     5     1     9    10
Row_4     2     8     8     7
Row_5     5     8     8     8
Row_6    10     5     9     8

$matrix2
      Col_5 Col_6 Col_7 Col_8
Row_1     9     4     6     4
Row_2     1     1     4     1
Row_3     5     6     1     7
Row_4     9    10     2    10
Row_5     4     9     1     6
Row_6    10     2     9     7

$matrix3
      Col_9 Col_10 Col_11 Col_12
Row_1     2      8     10      2
Row_2     4     10      3      3
Row_3     8      8      6      5
Row_4     2      8      8      3
Row_5     4      7     10      8
Row_6     9      9      9      2

Вручную это будетвыглядит так:

dimnames(new_list$matrix1) = dimnames(old_list$matrix1)
dimnames(new_list$matrix2) = dimnames(old_list$matrix2)
dimnames(new_list$matrix3) = dimnames(old_list$matrix3)

Я попробовал следующее, но он возвращает ошибку:

for(i in names(old_list)){
   assign("My_NewList", paste0("new_list$", i))
   assign("My_OldList", paste0("old_list$", i))

   dimnames(get("My_NewList")) = dimnames(get("My_OldList"))
}

Error in dimnames(get("My_NNewList")) = dimnames(get("My_OldList")) :
  target of assignment expands to non-language object

1 Ответ

0 голосов
/ 27 ноября 2018

Мы можем использовать Map для выполнения задания

Map(function(x, y) {dimnames(x) <- dimnames(y); x}, new_list, old_list)
...