Как создать имя матрицы, объединяющее строку и переменные? (В R) - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть вектор со значениями, которые я хочу включить в первую строку матрицы, которая будет заполнена в двух следующих циклах for, поэтому будет три цикла for.Я уже пробовал cat и paste, но безуспешно.

Поэтому моя проблема заключается в вставке значения v1 с именем матрицы cart_, таким образом, имя будет cart_1 (когдаv1 равен 1)

for (v1 in 1:5){
  cart_ <- matrix(0,n_mes,n_simu)
  cart_  < -capital_inicial[v1,1]

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Хорошей практикой является использование именованного списка:

cart <- list()
for (v1 in 1:5){
  cart[[paste0("cart_", v1)]] <- matrix(0,3,3)
}

Вы можете получить доступ к cart_1 с помощью:

cart[["cart_1"]]

Создание n объекта cart_1 to cart_n не является хорошей практикой. Один объект, содержащий вас n объектов, лучше. Если у вас есть 2 последовательных цикла разного размера, объект, который вам не нужен, может остаться.

0 голосов
/ 12 апреля 2019

Это на самом деле вопрос 7.21 в R FAQ (https://cran.r -project.org / doc / FAQ / R-FAQ.html # Как я могу превратить строку в в-variable_003f

Самая важная часть этого ответа близка к концу, где указано, что списком часто проще пользоваться. @Clemsang привел пример использования списка в цикле for.

Использование списка вместо глобальных переменных значительно снижает вероятность того, что вы случайно перепишете другую переменную, и упростит работу с вашими результатами. Если вы хотите что-то сделать с каждой из ваших новых матриц, то выможете просто ссылаться на них в цикле, аналогичном тому, как они были созданы, вместо того, чтобы беспокоиться о get (или использовать lapply или sapply, чтобы сделать это еще проще), и если вы хотите скопировать / сохранить / удалить / и т. д.... со всеми матрицами у вас есть один объект для работы вместо необходимости повторения цикла.

В приведенном выше примере основным результатом цикла является выполнение нескольких назначений. В этом случае это часто прощеа также Лучше использовать lapply или связанную функцию вместо явного цикла.Например:

garage <- lapply( 1:5, function(v1) {
                        matrix( rnorm(v1^2, 10, 3), v1, v1)
                       } )
names(garage) <- sprintf("cart_%d", 1:5)
garage[["cart_3"]]
tmpvar <- "cart_5"
garage[[tmpvar]]

sapply(garage, det)

rm(garage)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...