У меня есть матрицы, хранящиеся в переменных, которые я создаю, если строки через assign( name, matrix(...) )
Теперь я хочу установить одно значение этой матрицы, указав ее имя, строку и столбец и новое значение. Я бы представил это так:
get(name, envir = my.env)[x,y] <- value
Или
assign(paste(name,"[",x,",",y,"]"),value, envir = my.env)
Но оба варианта не работают. Есть ли хороший способ обратиться к этому конкретному полю матрицы? Мой текущий обходной путь - сначала сохранить матрицу в переменной, установить ее значение и вернуть матрицу исходную переменную. Мне кажется, здесь копируется матрица, так как это приводит к проблемам с памятью (матрица очень большая). Я, очевидно, предпочел бы другие решения
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
Попробуйте 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
Похожие вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат полностью. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.