克服在 R 中添加 dgRMatrix 的 dimnames 的错误

Overcome error adding dimnames of dgRMatrix in R

我有一个 dgRMatrix 如下;

str(ann.mini$layers['spliced'])
List of 1
 $ spliced:Formal class 'dgRMatrix' [package "Matrix"] with 6 slots
  .. ..@ p       : int [1:14663] 0 809 1245 1730 2550 3061 3825 4464 6114 6458 ...
  .. ..@ j       : int [1:11655258] 133 185 245 287 320 427 467 580 598 649 ...
  .. ..@ Dim     : int [1:2] 14662 55414
  .. ..@ Dimnames:List of 2
  .. .. ..$ : NULL
  .. .. ..$ : NULL
  .. ..@ x       : num [1:11655258] 1 1 1 3 1 1 5 1 1 1 ...
  .. ..@ factors : list()

如您所见,两个 Dimnames 都是空的。我尝试通过以下方式将 Dimnames 添加到此 dgRMatrix;

dimnames(ann.mini$layers['spliced'])<-list(rownames(ann.mini$X), colnames(ann.mini$X))

但我收到以下错误消息;

Error in dimnames(ann.mini$layers["spliced"]) <- list(rownames(ann.mini$X),  : 
  'dimnames' applied to non-array 

rownames() 和 colname() 的长度与相关 dgRMatrix 的维度匹配;

> length(colnames(ann.mini$X))
[1] 55414
> length(rownames(ann.mini$X))
[1] 14662

矩阵的str,"X"是;

str(ann.mini$X)
Formal class 'dgRMatrix' [package "Matrix"] with 6 slots
  ..@ p       : int [1:14663] 0 809 1245 1730 2550 3061 3825 4464 6114 6458 ...
  ..@ j       : int [1:11655258] 133 185 245 287 320 427 467 580 598 649 ...
  ..@ Dim     : int [1:2] 14662 55414
  ..@ Dimnames:List of 2
  .. ..$ : chr [1:14662] "AAACCCAAGCCTTTGA" "AAACCCAAGCGGATCA" "AAACCCACACCATATG" "AAACCCACACCTGCAG" ...
  .. .. ..- attr(*, "name")= chr "barcode"
  .. ..$ : chr [1:55414] "ENSMUSG00000102628.2" "ENSMUSG00000100595.2" "ENSMUSG00000097426.2" "ENSMUSG00000104478.2" ...
  .. .. ..- attr(*, "name")= chr "gene_id"
  ..@ x       : num [1:11655258] 1 1 1 3 1 1 5 1 1 1 ...
  ..@ factors : list()

基本上,我想在 dGrMatrix 中创建完全相同的 Dimname,在“拼接”dgRMatrix 中创建“X”。我真的很感激任何指点。

您似乎混淆了子集运算符 [ 和元素运算符 [[ann.mini$layers["spliced"] 是一个列表,其第一个元素是 dgRMatrix。该列表不是矩阵,因此您不能给它一个 dimnames 属性。试试这个:

dimnames(ann.mini$layers[["spliced"]]) <- dimnames(ann.mini$X)

[[[ 之间的差异记录在 ?Extract 中。