R我们可以将基本为列表的矩阵转换为基本为字符向量的矩阵吗?

时间:2018-08-15 11:37:08

标签: r list matrix

矩阵是具有尺寸的向量,我可以创建一个矩阵

m = matrix(list(rep(character(0),4)),nrow = 2,ncol = 2)

必不可少的是具有尺寸的列表:

str(m)
List of 4
...
- attr(*, "dim")= int [1:2] 2 2

我想将此矩阵转换为类似的矩阵:

m = matrix(rep(character(0),4),nrow = 2,ncol = 2)

其必不可少的是具有以下特征的字符向量:

str(m)
chr [1:2, 1:2] NA NA NA NA

此转换至关重要,因为许多函数可以轻松处理向量并返回一个简单的向量,但是这些函数本身无法处理列表(除非您使用apply / lapply会为您提供列表结果,经过多次操作后,您将获得列表由另一个列表包裹)

1 个答案:

答案 0 :(得分:0)

实际上,我已经弄清楚了如何将列表矩阵转换为字符矩阵: 这是我的步骤:

#initialize
m = matrix(list(rep(character(0),4)),nrow = 2,ncol = 2)
#convert to dataframe to fortify its' 2 col 2 row shape
m = as.data.frame(m)
#unlist it and fill into the 2 col 2 row shape in data.frame
m[] = lapply(m,function(x){sapply(x,function(y)
{ifelse(length(y)==1,y,NA)})})
#convert it to matrix
m = as.matrix(m)

或更简单地说:

m2 = matrix(character(0),nrow = nrow(m),ncol = ncol(m))
m2[] = sapply(m,function(x){ifelse(length(x)==1,x,NA)})

唯一的问题是矩阵的字符(0)已更改为NA,我认为这是一个好主意,本质含义是相同的,对于NA,我们有更多的处理方式

@John Coleman的观点我也很难忘,一个问题可能有另一条简单的溶质路径,我自己也在考虑这个问题,如果我找到解决方案,我也会在这里发布。但是对于这个问题本身,就可以解决。