2016-09-02 6 views
0

は、私は2列によって行列Xの列のリストと呼ばれるlist_of_matrices_by2私はall_pairs行列内のすべての私の行列をスタックしたいなぜ私のマトリックスの行がリストですか? R

list_of_matrices_by2[1:3] 
[[1]] 
[,1] [,2] 
[1,] "7204" "d" 
[2,] "7204" "a" 

[[2]] 
[,1] [,2] 
[1,] "2032" "b" 
[2,] "2032" "e" 
[3,] "2032" "a" 

[[3]] 
[,1] [,2] 
[1,] "802" "d" 
[2,] "802" "b" 

を得たので、私はいくつかの理由について、この

all_pairs=do.call(rbind,list_of_matrices_by2) 
all_pairs[1:10] 
[,1] [,2] 
[1,] "7204" "d" 
[2,] "7204" "a" 
[3,] "2032" "b" 
[4,] "2032" "e" 
[5,] "2032" "a" 
[6,] "802" "d" 
[7,] "802" "b" 
[8,] "4674" "c" 
[9,] "4674" "a" 
[10,] "3886" "b" 
class(all_pairs) 
[1] "matrix" 

をしました、私はこの行列の行をクラス行列にする必要があります。しかし、行列の行はRの行列であるので、それは問題ではありません。しかし、いいえ!

all_pairs[1,] 
[[1]] 
[1] "7204" 

[[2]] 
[1] "d 

ここに私の質問があります: 1)これはなぜですか?どのように行列の行がリストになる可能性がありますか? 2)それを機能させるにはどうすればよいですか?つまり、行列の各行が行列でなければならないのですか?

答えて

2

私はあなたのlist_of_matrices_by2が似ていることを確信しています:

x <- list(matrix(list("7204","7204","d","a"), ncol = 2), 
      matrix(list("2032","2032","2032","b","e","a"), ncol = 2), 
      matrix(list("802","802","d","b"), ncol = 2)) 

#[[1]] 
#  [,1] [,2] 
#[1,] "7204" "d" 
#[2,] "7204" "a" 

#[[2]] 
#  [,1] [,2] 
#[1,] "2032" "b" 
#[2,] "2032" "e" 
#[3,] "2032" "a" 

#[[3]] 
#  [,1] [,2] 
#[1,] "802" "d" 
#[2,] "802" "b" 

unlist(lapply(x, class)) 
# [1] "matrix" "matrix" "matrix" 

unlist(lapply(x, mode)) 
# [1] "list" "list" "list" 

ですから、行列を持っていますが、それは代わりに、数値のリストの行列ではありません。あなたはいつものようにrbindを実行することができます。

y <- do.call(rbind, x) 
#  [,1] [,2] 
#[1,] "7204" "d" 
#[2,] "7204" "a" 
#[3,] "2032" "b" 
#[4,] "2032" "e" 
#[5,] "2032" "a" 
#[6,] "802" "d" 
#[7,] "802" "b" 

それは、まだ「リスト」モードを持つクラス「行列」を持っています。あなたが最初の行を抽出するときにリストを取得する理由は次のとおりです。

y[1, ] 
#[[1]] 
#[1] "7204" 

#[[2]] 
#[1] "d" 

私はあなたがそれらの行列を得る方法がわかりません。生成プロセスを制御することができれば、数値の行列で終わることが良いでしょう。

x <- lapply(x, function (u) matrix(unlist(u), ncol = 2)) 
unlist(lapply(x, mode)) 
# [1] "character" "character" "character" 

が次にあなたが

do.call(rbind, x) 

関連の操作を行うことができます:あなたはそれを制御することができない場合は、手動で以下のようにそれらを変換必要

  1. Why is this matrix not numeric?
  2. How to create a matrix of lists?
+0

をビルドし('、私はあなたが推測するに私の行列のすべての値の

all_pairs=do.call(rbind,list_of_matrices_by2) 

抽出'sapply'を意味しますか? – Frank

+0

Ok。リンクをありがとうございます。私はそれでは納得できません。 'sapply(DF、f)'は私が今直面している '' f''( ''モード ''クラス ''を含む) – Frank

+0

lil tipのためのok thx @ Zheyuan Li 私はついにそれを作ったが、私はまず私の行列のすべての値を抽出し、抽出された値から新しい行列を構築しなければならなかった。なぜ正確に取得しないでくださいが、それは動作します。 –

0

私はついに解決策を見つけました。

リマインダーベクトル

extracted_values=unlist(as.vector(t(all_pairs))) 

lapply非公開に( `することにより、新たな行列

all_pairs_new=t(matrix(data = extracted_values,nrow = 2,ncol = 10000)) 
関連する問題