У меня есть матрицы, хранящиеся в переменных, которые я создаю, если строки через assign( name, matrix(...) ) Теперь я хочу установить одно значение этой матрицы, указав ее имя, строку и столбец и новое значение. Я бы представил это так:

get(name, envir = my.env)[x,y] <- value

Или

assign(paste(name,"[",x,",",y,"]"),value, envir = my.env)

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

0
Abaddon666 28 Янв 2015 в 11:57

2 ответа

Лучший ответ

Обычно я бы использовал list, но вы можете работать с environment примерно таким же образом:

my.env <- new.env()
myname <- "mymat"
assign(myname, matrix(1:16, 4), envir = my.env)
my.env[[myname]][1, 1] <- 42
my.env[[myname]]
#     [,1] [,2] [,3] [,4]
#[1,]   42    5    9   13
#[2,]    2    6   10   14
#[3,]    3    7   11   15
#[4,]    4    8   12   16
2
Roland 28 Янв 2015 в 09:33

Попробуйте eval:

my.env <- new.env()
name = 'd'
x = y = 1
assign(name, matrix(1:4, 2), envir=my.env)
eval(parse(text=paste(name, '[', x, ',', y, '] = ', value)), envir=my.env)
my.env[[name]]
#      [,1] [,2]
# [1,]    0    3
# [2,]    2    4
0
cogitovita 28 Янв 2015 в 09:40