2015-08-18 60 views
2

因此,我是R編程新手,所以我甚至不知道這是否可行。我有50個矩陣(50,000行10列)我試圖填充蒙特卡洛模擬。我創建了一個循環中的所有矩陣和他們是所謂的mCMatrix1mCMatrix2如何迭代/循環遍歷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×10矩陣的任何值你想要的,並返回一個長度列表50 – rawr

回答

0

R在list和data.frames上運行,這與其他方法有點不同你的最簡單的方法是創建的矩陣名稱的列表,並遍歷列表。

RAWR的方法是最簡單也可能是最有效的。

然後你只需mlist [n]的訪問,n爲你想要的矩陣

如果你想要一個完整的數據框架方法,它稍微複雜一點,但它提供了一個數據選項卡樂與指數,而不是矩陣

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