为什么矩阵中的一行是列表?R
我得到了一个矩阵列表,X行乘2列,称为矩阵列表为什么矩阵中的一行是列表?R,r,list,matrix,do.call,R,List,Matrix,Do.call,我得到了一个矩阵列表,X行乘2列,称为矩阵列表 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" 我想把我所有的矩阵叠加在一个全对矩阵中,所以我这样做了
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
如下所示:
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"
它有“矩阵”类,但仍有“列表”模式。这就是为什么提取第一行时会得到一个列表:
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"
相关:
我确信您的
矩阵列表\u 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"
它有“矩阵”类,但仍有“列表”模式。这就是为什么提取第一行时会得到一个列表:
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"
相关:
好了,伙计们,我终于找到了解决办法 提醒
all_pairs=do.call(rbind,list_of_matrices_by2)
将矩阵的所有值提取到向量中
extracted_values=unlist(as.vector(t(all_pairs)))
建立新的矩阵
all_pairs_new=t(matrix(data = extracted_values,nrow = 2,ncol = 10000))
好了,伙计们,我终于找到了解决办法 提醒
all_pairs=do.call(rbind,list_of_matrices_by2)
将矩阵的所有值提取到向量中
extracted_values=unlist(as.vector(t(all_pairs)))
建立新的矩阵
all_pairs_new=t(matrix(data = extracted_values,nrow = 2,ncol = 10000))
通过
unlist(lappy(
),我猜你的意思是sapply
?好的。谢谢你的链接。但是我不相信它。sapply(DF,f)
对于我所面对的几乎任何f
都是即时的(当然包括模式和类
).ok thx对于lil tip@Zheyuan Li,我终于做到了,但我被迫首先提取矩阵堆栈中的所有值,然后根据这些提取的值构建一个新矩阵。不知道确切原因,但它是有效的。通过unlist(lappy(
,我猜你的意思是sapply
?好的。谢谢你的链接。不过我不相信它。sapply(DF,f)
对于我所面对的几乎任何f
都是即时的(当然包括模式
和类
).ok thx对于lil tip@Zheyuan Li,我终于做到了,但我被迫首先提取矩阵堆栈中的所有值,然后根据这些提取的值构建一个新矩阵。不知道确切原因,但它是有效的。