克服在 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
中。
我有一个 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
中。