Как да присвоите една стойност на конкретен запис в матрица, където матрицата трябва да бъде извикана с име на променлива

Имам следния проблем: Имам огромен списък от матрици с уникални имена, които споделят едно и също измерение. Изчислявам някои стойности, които сега искам да присвоя на определен матричен индекс, напр. [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), би било по-добре да има много отделни, вместо един, който е xxx пъти по-голям от вече големия. Но предполагам, че няма значение. Благодаря за отговора.   -  person Eric    schedule 13.06.2013
comment
@JoshuaUlrich: matlist е обектът на списъка, но има ли начин с get() или assign() да „извика“ променливата от списък с низове? Просто съм любопитен. Благодаря за отговора.   -  person Eric    schedule 13.06.2013


Отговори (2)


Използвайте get:

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