2017-06-19 13 views
0

私はRを初めて使用しており、現在forループを作成することを学んでいます。ループ用に複数の行列を作成する

私は何をしたい、このような類似した構造を持つ6つの行列を作成することです(唯一の違いは、その行「」行列の数によって異なりますです):

matrix1<- matrix(nrow=5, ncol=5, dimnames= list(c("a", "b", "c", "d", "e") 

for(i in 1:5){ 
matrix1[1,]= 1 
matrix1[2,]= round(rpois(5,1), digits=0) 
matrix1[3,]= round(rpois(5,1), digits= 0) 
matrix1[4,]= round(rnorm(5, 50, 25), digits= 0) 
matrix1[5,]= round(rnorm(5, 50, 25), digits= 0) 
} 

は、任意の効率的な方法がありますこれを個別に行う代わりにforループを使用しますか?

また、NA値で満たされた6つの5 * 5行列を作成し、その後にこれらの値を希望値で満たすことも考えましたが、その方法はわかりません。

あなたが私を助けることができたらとてもいいですね! ありがとう!

+3

が '' lapply(values_for_x、楽しさ)を行い、その後、行列を作るためにX ' 'の機能を書きますか? 'matrix1'、' matrix2'などの名前に行列の数を埋め込むよりも、行列のリストを持つほうがよいことに注意してください。 – Frank

+0

しかし、この関数はどのように記述しますか?あなたは私に例を与えることができますか? –

+0

'fun < - function(x){your_code_here_over_multiple_lines}'中括弧の中に上記のようにコードを書くことができます。関数引数( 'x'など)を使用して、あなたが望むように行が異なります。 – Frank

答えて

0

forループは不要であり、コードなしで実行されます。 Rでは、forループは、各ループごとに1から5まで(あなたの場合には)反復する一時的なオブジェクトを許可します。ルーピングを利用するには、iを使用する必要があります。あなたの現在のforループは実際には自分自身を5回上書きします。

ここには、リストに6つの行列を作成するループがあります。ここでは、iを使用して、リスト内に新しい要素(行列)を作成するだけでなく、最初の行を数値行列と異なるように設定することもできます。

# First it is good to initialize an object that you will iterate over 
lists <- vector("list", 6) # initialize to save time 

for(i in 1:6){ 
    # create a new matrix and set all values in it to be i 
    lists[[i]] <- matrix(i, nrow = 5, ncol = 5, dimnames= list(c("a", "b", "c", "d", "e") 
)) 
    # change the remaining rows 
    lists[[i]]["b",] <- round(rpois(5,1), digits = 0) 
    lists[[i]]["c",] <- round(rpois(5,1), digits = 0) 
    lists[[i]]["d",] <- round(rnorm(5, 50, 25), digits= 0) 
    lists[[i]]["e",] <- round(rnorm(5, 50, 25), digits= 0) 
} 

# Properly name your lists 
names(lists) <- paste0("Matrix",1:6) 

# Now you can call the lists individually with 
lists$Matrix1 

# Or send them all to your environment with 
list2env(lists, env = .GlobalEnv) 

このことができますなら、私を知ってみましょうか、それ以上の質問がある場合〜

関連する問題