我正在使用手写的邮政编码数据集。我已经加载了这样的数据集:
digits <- read.table("./zip.train",
quote = "",
comment.char = "",
stringsAsFactors = F)
然后我只得到那些:
ones <- digits[digits$V1 == 1, -1]
现在,在ones
我有442行,有256列。我需要将ones
中的每一行转换为16x16 matrix
。我认为我正在寻找的是16x16矩阵列表,就像这个问题中的那样:
How to create a list of matrix in R
但我尝试使用我的数据并且无法正常工作。
起初我尝试ones <- apply(ones, 1, matrix, nrow = 16, ncol = 16)
但是没有像我想象的那样工作。我也试过lapply
而没有运气。
答案 0 :(得分:4)
另一种方法是只更改矩阵的dim
。
考虑以下矩阵“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
我们希望从中创建一个三维数组,因此您可以将尺寸指定为“row”,“column”,“third-dimensional”。但是,由于矩阵是按列构造的,因此首先需要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
答案 1 :(得分:2)
尽管可能有简单的方法,但您可以尝试使用lapply
:
ones_matrix <- lapply(1:nrow(ones), function(i){matrix(ones[i, ], nrow=16)})