2016-03-24 10 views
1

私は手書き郵便番号データセットを使って作業しています。私はこのようなデータセットをロードしていますdata.frameの各行をマトリックスにするように変更する

digits <- read.table("./zip.train", 
        quote   = "", 
        comment.char  = "", 
        stringsAsFactors = F) 

その後、私は唯一のものを得る:

ones <- digits[digits$V1 == 1, -1] 

今、onesに私は256列で、442行を持っています。 onesの各行を16x16 matrixに変換する必要があります。私は私が探していますが、この問題のもののような16×16行列のリストだと思う:

How to create a list of matrix in R

しかし、私は私のデータをしようと、動作しませんでした。

最初に私はones <- apply(ones, 1, matrix, nrow = 16, ncol = 16)を試しましたが、私はそれが思ったように動作していません。私も運がないとlapplyを試しました。

+1

サンプルデータと望ましい出力が役立ちます。 – coffeinjunky

答えて

2

おそらく簡単な方法がありますが、あなたはlapplyで試すことができます。

ones_matrix <- lapply(1:nrow(ones), function(i){matrix(ones[i, ], nrow=16)}) 
+1

Args!、ありがとう、私は何時間も努力してきました。私は決してこのような解決策を考えなかったでしょう。 – elbaulp

+1

:-)それはあなたが「つぶれない」のを助けたことを嬉しく思います:-) – Cath

4

代替は自分の行列のdim Sを変更することです。

次の行列「M」検討:我々は、このから三次元配列を作成しようとしているので、あなたが「、「行」、「列」として三次元の大きさを指定することができ

M <- matrix(1:12, ncol = 4) 
M 
#  [,1] [,2] [,3] [,4] 
# [1,] 1 4 7 10 
# [2,] 2 5 8 11 
# [3,] 3 6 9 12 

を"ただし、行列は列で構成されているため、まず寸法を変更する前にtを転置する必要があります。

`dim<-`(t(M), c(2, 2, nrow(M))) 
# , , 1 
# 
#  [,1] [,2] 
# [1,] 1 7 
# [2,] 4 10 
# 
# , , 2 
# 
#  [,1] [,2] 
# [1,] 2 8 
# [2,] 5 11 
# 
# , , 3 
# 
#  [,1] [,2] 
# [1,] 3 9 
# [2,] 6 12 
+0

リストの良い代替手段、よりスマートな方法:-) – Cath

関連する問題