Я не уверен, полностью ли я понял намерение ОП, но это то, что я хотел бы сделать.
Вместо создания 25 матриц в глобальной среде я бы сохранял все матрицы в списке (lom
aka список матриц ), где они могут обрабатываться как индивидуально, так и в целом с помощью lapply()
:
FactorsNumber <- 8
lom <- lapply(24:48, function(i) matrix(NA, ncol = FactorsNumber, nrow = i))
names(lom) <- sprintf("ReturnMat_InSampleL%02i", seq_along(lom))
str(lom)
List of 25
$ ReturnMat_InSampleL01: logi [1:24, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL02: logi [1:25, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL03: logi [1:26, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL04: logi [1:27, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL05: logi [1:28, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL06: logi [1:29, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL07: logi [1:30, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL08: logi [1:31, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL09: logi [1:32, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL10: logi [1:33, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL11: logi [1:34, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL12: logi [1:35, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL13: logi [1:36, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL14: logi [1:37, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL15: logi [1:38, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL16: logi [1:39, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL17: logi [1:40, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL18: logi [1:41, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL19: logi [1:42, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL20: logi [1:43, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL21: logi [1:44, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL22: logi [1:45, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL23: logi [1:46, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL24: logi [1:47, 1:8] NA NA NA NA NA NA ...
$ ReturnMat_InSampleL25: logi [1:48, 1:8] NA NA NA NA NA NA ...
Обратите внимание, что матрицы имеют различное количество строк, но все 8 столбцов соответствуют запросу.
Оператор
names(lom) <- sprintf("ReturnMat_InSampleL%02i", seq_along(lom))
называет матрицы в списке по отдельности.
Вот некоторые хитрости при работе со списком матриц.
Любые изменения создают новый объект. Вы должны убедиться, что результат хранится надлежащим образом. Обратите внимание на разницу между:
lom <- lapply(24:48, function(i) matrix(i, ncol = FactorsNumber, nrow = i))
str(lom)
List of 25
$ : int [1:24, 1:8] 24 24 24 24 24 24 24 24 24 24 ...
$ : int [1:25, 1:8] 25 25 25 25 25 25 25 25 25 25 ...
$ : int [1:26, 1:8] 26 26 26 26 26 26 26 26 26 26 ...
$ : int [1:27, 1:8] 27 27 27 27 27 27 27 27 27 27 ...
...
lom[] <- lapply(24:48, function(i) matrix(i, ncol = FactorsNumber, nrow = i))
str(lom)
List of 25
$ ReturnMat_InSampleL01: int [1:24, 1:8] 24 24 24 24 24 24 24 24 24 24 ...
$ ReturnMat_InSampleL02: int [1:25, 1:8] 25 25 25 25 25 25 25 25 25 25 ...
$ ReturnMat_InSampleL03: int [1:26, 1:8] 26 26 26 26 26 26 26 26 26 26 ...
$ ReturnMat_InSampleL04: int [1:27, 1:8] 27 27 27 27 27 27 27 27 27 27 ...
...
Назначение lom[]
заменило содержимое отдельных элементов, сохранив таким образом имена элементов вместо создания совершенно нового объекта.
При обновлении матричных элементов обязательно возвращайте полную матрицу:
lom[] <- lapply(lom, function(m) {
m[1, 1] <- m[1, 1] *10
return(m)
})
str(lom)
List of 25
$ ReturnMat_InSampleL01: num [1:24, 1:8] 240 24 24 24 24 24 24 24 24 24 ...
$ ReturnMat_InSampleL02: num [1:25, 1:8] 250 25 25 25 25 25 25 25 25 25 ...
$ ReturnMat_InSampleL03: num [1:26, 1:8] 260 26 26 26 26 26 26 26 26 26 ...
$ ReturnMat_InSampleL04: num [1:27, 1:8] 270 27 27 27 27 27 27 27 27 27 ...
...
Обновление ячейка определенной матрицы:
lom$ReturnMat_InSampleL01[1, 1] <- lom$ReturnMat_InSampleL01[1, 1] + 2
str(lom)
List of 25
$ ReturnMat_InSampleL01: num [1:24, 1:8] 242 24 24 24 24 24 24 24 24 24 ...
$ ReturnMat_InSampleL02: num [1:25, 1:8] 250 25 25 25 25 25 25 25 25 25 ...
$ ReturnMat_InSampleL03: num [1:26, 1:8] 260 26 26 26 26 26 26 26 26 26 ...
$ ReturnMat_InSampleL04: num [1:27, 1:8] 270 27 27 27 27 27 27 27 27 27 ...
...