5

複数のマトリックスを作成し、関数を介して取得した値を特定の行に自動的に割り当てたいと考えています。これまでに試したことの例を挙げます。

EXAMPLE1<-matrix(ncol=4, nrow=16)
EXAMPLE2<-matrix(ncol=4, nrow=16)
EXAMPLE3<-matrix(ncol=4, nrow=16)
EXAMPLE4<-matrix(ncol=4, nrow=16)


for(i in 1:16){
  for(j in 1:4){
    paste0("EXAMPLE",j, "[",i,",","]")<- c(1:4)
  }
}

for(i in 1:16){
  for(j in 1:4){
    get(paste0("EXAMPLE",j)[i,]<- c(1:4)
  }
}

しかし、「代入対象が非言語オブジェクトに展開されます」が返されます。だから私は試しました

for(i in 1:16){
  for(j in 1:4){
    assign(paste0("EXAMPLE",j, "[",i,",","]"), c(1:4))
  }
}

これはエラーを返しませんが、値は行列に書き込まれません。

最初は行列は空です

     [,1] [,2] [,3] [,4]
[1,]   NA   NA   NA   NA
[2,]   NA   NA   NA   NA
[3,]   NA   NA   NA   NA
[4,]   NA   NA   NA   NA

そして、1回のループが実行された後(i = 1)、すべてのEXAMPLE行列が1行埋められることを期待します(そして、ループが終了すると、EXAMPLE行列が数字でいっぱいになるように、2番目から2番目の行が埋められます)。

     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]   NA   NA   NA   NA
[3,]   NA   NA   NA   NA
[4,]   NA   NA   NA   NA

ポイントは、貼り付け関数でマトリックス名を渡すため、マトリックス行に値を割り当てる方法がわかりません。名前を文字列として配置したい場合、行列の特定の行に値を割り当てる方法は? どんな助けでも素晴らしいでしょう。ありがとう

...エディション... あまり明確でなくて申し訳ありません。前述したように、関数の結果 (たまたま行列と同じ数の列がある) を行列の行に書き込みたいと考えています。各行は、異なる観測に適用された関数から結果を取得します。複数の関数を同じ変数に適用したいので、異なる関数の結果に対していくつかの行列があります(列番号が異なり、名前が異なります)。マトリックスに番号を付けて名前を付けた方法は、結果を追跡して後で比較するのに最も簡単です。上記では、マトリックスの名前を文字列として指定しているため、マトリックスの行に値を割り当てることができないという問題の例を示しました (そうしないと、非常に多くの番号付けが必要になるため、そうします)。だから、一般的に私はできるようになりたいです

EXAMPLEj[i,]<-SomeFunctionResult

jは1から10またはその他の数字になります

そのため、 loop と を使用しpaste0("EXAMPLE", j)て行列の名前を生成し、 i を使用して、関数が使用する観測と結果を配置する行を示します。マトリックスは既に作成されていますが、結果をマトリックスの行に渡す方法が見つかりませんでした。

私はR(およびプログラミング)が初めてなので、これを解決するために可能な限り最悪の方法を選択した可能性があり、リストまたは配列の方がはるかに使いやすいでしょう。ご回答ありがとうございます。

4

3 に答える 3

2

個々の行列をリストに入れる:

EXAMPLE <- list(EXAMPLE1, EXAMPLE2, EXAMPLE3, EXAMPLE4)

次に、このリストの行列にインデックスでアクセスします。

for(i in 1:16){
  for(j in 1:4){
    EXAMPLE[[j]][i,] <- c(1:4)
  }
}

リストには名前を付けて、名前でアクセスすることもできます。

EXAMPLE <- list(EXAMPLE1=EXAMPLE1, EXAMPLE2=EXAMPLE2,
                EXAMPLE3=EXAMPLE3, EXAMPLE4=EXAMPLE4)
EXAMPLE[['EXAMPLE1']]
于 2013-04-16T19:59:37.193 に答える
0

2 つの行列の違いを示そうとしていますか?

> EXAMPLE2 <- matrix(ncol=4, nrow=16, sample(1:10, 4*16, replace=TRUE))

> EXAMPLE1 <- EXAMPLE2
> EXAMPLE1[3,4] <- 99

> diffs <- ifelse(EXAMPLE1!=EXAMPLE2, EXAMPLE1, "")
> diffs
      [,1] [,2] [,3] [,4]
 [1,] ""   ""   ""   ""  
 [2,] ""   ""   ""   ""  
 [3,] ""   ""   ""   "99"
 [4,] ""   ""   ""   ""  
 [5,] ""   ""   ""   ""  
 [6,] ""   ""   ""   ""  
 [7,] ""   ""   ""   ""  
 [8,] ""   ""   ""   ""  
 [9,] ""   ""   ""   ""  
[10,] ""   ""   ""   ""  
[11,] ""   ""   ""   ""  
[12,] ""   ""   ""   ""  
[13,] ""   ""   ""   ""  
[14,] ""   ""   ""   ""  
[15,] ""   ""   ""   ""  
[16,] ""   ""   ""   ""  

> print(diffs, quote=FALSE)
      [,1] [,2] [,3] [,4]
 [1,]                    
 [2,]                    
 [3,]                99  
 [4,]                    
 [5,]                    
 [6,]                    
 [7,]                    
 [8,]                    
 [9,]                    
[10,]                    
[11,]                    
[12,]                    
[13,]                    
[14,]                    
[15,]                    
[16,]                    
于 2014-10-25T08:44:14.187 に答える
0

さまざまなマトリックスを反復処理してから、指定されたマトリックスの各行を反復処理しようとしているようです。

タスクが反復である場合は、リストの使用を検討する必要があります。行列、配列を反復する場合は、

# create an array of 5 (five) 16x4 matricies: 
EXAMPLE <- array(dim=c(16, 4, 5))  # i changed your four examples to 5, to be clear

# Have a look at the 5 matricies: 
EXAMPLE

# TO SELECT A SINGLE MATRIX, SAY EXAMPLE2: 
EXAMPLE[,, 2]  # note the two commas

次に、ループを使用して反復したい場合(一般的にはお勧めしませんが、簡単です)

for (k in 1:5)  # again, using 5 to distinguish
  for (i in 1:16)
    EXAMPLE[i, , k] <- i* (1:4)

EXAMPLE

を使用することもできます。引数は、設定した寸法に対応しますapplyMARGIN(つまり、この場合MARGIN==1は、行、2列、および3特定の行列用です)

たとえば 、一度に 1 つずつ各行列にapply(EXAMPLE, MARGIN=3, FUN=someFunction) 関数を適用しますsomeFunctionkつまり、上記の-forループと同じように、各行列を反復処理しています。

したがって、上記の 2 つのネストされたループは、1 行のコードに入れることができます。

# note the empty [ ] to maintain array properties
EXAMPLE[ ] <- apply(EXAMPLE, 3, function(M) 1:ncol(M) %x% 1:nrow(M))

# have a look at the results
EXAMPLE
于 2013-04-16T20:17:23.087 に答える