Как присвоить одно значение определенному элементу матрицы, где матрица должна вызываться с именем переменной

У меня следующая проблема: у меня есть огромный список матриц с уникальными именами, которые имеют одно и то же измерение. Я вычисляю некоторые значения, которые я теперь хочу присвоить определенному матричному индексу, например. [3,4]. Поскольку у меня так много матриц, я создал список с именами, которые должны быть у этих матриц, а затем я использовал assign() для создания всех этих матриц (пусто). Теперь я хотел бы вызвать отдельные матрицы с именем переменной, чтобы присвоить разные значения определенным элементам матрицы. Я знаю только команды assign() and eval(parse()), но заставить их работать не удалось. Я пробовал несколько вещей без успеха:

assign(x=MatrixNameList[i][3,4],value=z)

assign(x=MatrixNameList[i],value=z)[3,4]

eval(parse(text=MatrixNameList[i]))[3,4]<-z

assign(x=eval(parse(text=MatrixNameList[i]))[3,4] ,value=z)

Поэтому мне интересно, есть ли возможность для того, что я хочу сделать. Структура моего кода представляет собой простой цикл:

Matrix1 <- Matrix2 <- matrix(nrow=3,ncol=4)
MatrixNameList <- c('Matrix1', 'Matrix2')
for (i in 1:length(MatrixNameList)){
z <- calculatedValue <- 4 # different for the single matrices
assign... ?
eval(parse... ?
}

Я надеюсь, что смог ясно указать на мою проблему. Заранее спасибо, Эрик


person Eric    schedule 12.06.2013    source источник
comment
Если вы взяли на себя труд поместить имена ваших матриц в список, вы должны просто поместить сами матрицы в список (что вы действительно должны были сделать в первую очередь). Тогда ваша задача будет тривиальной.   -  person joran    schedule 12.06.2013
comment
У вас нет огромного списка матриц. Если бы у вас был огромный список матриц, lapply(matlist, function(m) {m[3,4] <- z; m}) был бы решением.   -  person Joshua Ulrich    schedule 12.06.2013
comment
@joran: я создаю имена матриц с помощью paste(); Я предположил, что когда объект становится очень большим (предположим, что матрица 10000*10000), было бы лучше иметь много отдельных объектов вместо одного, который в ххх раз превышает размер уже большого. Но я думаю, это не имеет значения. Спасибо за ответ.   -  person Eric    schedule 13.06.2013
comment
@JoshuaUlrich: matlist - это объект списка, но есть ли способ с помощью get () или assign () «вызвать» переменную из списка со строками? Просто любопытно. Спасибо за ответ.   -  person Eric    schedule 13.06.2013


Ответы (2)


Используйте 1_:

get(MatrixNameList[1])  # retrieves matrix called "Matrix1"

Однако вам лучше собрать все эти матрицы в один объект. Что-то вроде этого должно помочь вам начать.

Matrices <- lapply(MatrixNameList, get)
person Hong Ooi    schedule 12.06.2013

Вы можете присвоить значения следующим образом:

MatrixList <- list(Matrix1, Matrix2)
names(MatrixList) <- MatrixNameList

MatrixList[[1]][2,3] <- 4
# OR:
MatrixList$Matrix1[2,3] <- 4
person Thomas    schedule 12.06.2013