2015-08-18 3 views
2

Итак, я новичок в программировании в R, поэтому я даже не знаю, возможно ли это сделать. У меня есть 50 матриц (50 000 строк на 10 столбцов), которые я пытаюсь заполнить для моделирования Монте-Карло. Я создал все матрицы в цикле, и они называются mCMatrix1, mCMatrix2 и т.д.Как перебирать/перебирать несколько пронумерованных переменных в R

Я хочу, чтобы заполнить матрицы в цикле, что-то на этот счет:

for (i in 50){ 
for (j in 50000){ 
    num <- mu + tR %*% rnorm(10) # returns a 10 row, 1 column matrix 
    mCMatrixC"i"[]= num[,1] # basically rotates the matrix to fill in the first row 
} 
} 

, где я могу как-то программный код знать, что ему нужно заполнить mCMatrix1, затем mCMatrix2, вплоть до 50-й матрицы. Для пользователей STATA я помню, что вы могли бы перебирать переменные с помощью v = forval (диапазон значений), mCMatrix`v '. (Это было какое-то время, поскольку я использовал STATA, поэтому синтаксис, вероятно, не прав, но это было что-то в этом роде.

+0

как вы используете J? было бы лучше сохранить их в списке, а не иметь более 50 объектов в вашем рабочем пространстве, например 'mlist <- replicate (50, list (matrix (rnorm (50000 * 10), ncol = 10)))' where 'replicate 'представляет собой цикл, создающий матрицу 50000 x 10 любых значений, которые вы хотите, и возвращающий список длины 50 – rawr

ответ

0

R работает с списками и data.frames, которые немного отличаются от других методов . Ваш самый простой способ создать список из имен матричных и итерацию по списку.

подход RAWR является самым простым и, вероятно, наиболее эффективным.

Тогда вы просто открыть его mlist [п], п быть матрицу, которую вы хотите.

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

library(dplyr) 
yourData <- data.frame() 

for (k in 1:50) { 
    yourData <- yourData %>% 
    rbind((as.data.frame(matrix(rnorm(50000 * 10), nrow=50000, ncol=10))) %>%  
    mutate(Run = k)) 
} 

Таким образом, вы можете получить доступ к нему, как

yourData %>% filter(Run = n) 
+3

. Я не думаю, что вы протестировали это вообще – rawr

+0

В первый раз я этого не сделал. –

0

Вы можете создать список матриц для более легкого доступа и доступа к нему, используя следующее. Я не уверен в работе матрицы, которую вы делаете в цикле, поэтому я выбрал случайную матрицу в качестве примера.

> list_matrices = c() 
> for (i in 1:10) { list_matrices[[i]] = matrix(rnorm(9), nrow=3)} 
> list_matrices[[1]] 
      [,1]  [,2]  [,3] 
[1,] -0.09855292 0.2665513 0.72873888 
[2,] -0.03005994 -0.4834303 -1.12356622 
[3,] 0.98443875 0.5895932 0.07072777 
0

Если проблема ядра заключается в создании новых (пронумерованные) имен переменных и присвоить им значение, то я думаю, что вы можете использовать этот подход:

for(i in 1:3) 
{ 
n<- sprintf("matr%d",i) 
print(n) 
assign(x=n,value = i) 
} 
matr1 
matr2 
matr3 
Смежные вопросы