首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在slotname @data中从seuratobject中筛选基因?

如何在slotname @data中从seuratobject中筛选基因?
EN

Stack Overflow用户
提问于 2018-01-10 22:40:01
回答 2查看 5.5K关注 0票数 1

我正在使用一个名为"Seurat“的R包进行单细胞RNA-Seq分析,我试图从插槽名'data‘中删除seuratobject (s4类)中的几个基因。这个对象中还有几个插槽,它们存储与插槽‘数据’相关联的信息。插槽‘数据’在行中有基因名,在列中有单元ID,其基因的表达值对应于矩阵中的每个单元。我希望根据唯一的基因名称删除整行,但在对象中保留结果。

示例:

代码语言:javascript
复制
       Cell1 Cell2 Cell3  
GeneA2    5    9    2     
GeneA     3    1    0  
GeneA1    2    1    3  

我要删除矩阵中的行GeneA。

我试过以下几点,但都有错误:-

代码语言:javascript
复制
object<-SubsetRow(object@data, "GeneA", invert = TRUE)

代码语言:javascript
复制
GeneA<-grep(pattern = "^GeneA$", x = rownames(x = object@data), value = TRUE)
object@data<- object@data[!GeneA,]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-11 17:26:53

让我们假设您使用的是与装载了Seurat包的os的pbmc_small数据对象类似的东西。查看?SubsetRow帮助页面上的示例:

代码语言:javascript
复制
# Installing the package:Seurat does install quite a few additonal packages
library(Seurat)
cd_genes <- SubsetRow(data = pbmc_small@raw.data, code = 'CD')
str(cd_genes)
#=================
Formal class 'dgTMatrix' [package "Matrix"] with 6 slots
  ..@ i       : int [1:209] 0 5 6 9 5 8 9 10 15 5 ...
  ..@ j       : int [1:209] 0 0 0 0 1 1 1 1 1 2 ...
  ..@ Dim     : int [1:2] 16 80
  ..@ Dimnames:List of 2
  .. ..$ : chr [1:16] "CD79B" "CD79A" "CD19" "CD180" ...
  .. ..$ : chr [1:80] "ATGCCAGAACGACT" "CATGGCCTGTGCAT" "GAACCTGATGAACC" "TGACTGGATTCTCA" ...
  ..@ x       : num [1:209] 1 4 1 2 4 2 2 1 1 4 ...
  ..@ factors : list()
 #===========
rownames(x = cd_genes@data)

行名中的错误(x= cd_genes@data):没有"dgTMatrix“类对象的名称”数据“槽

因此,该对象中没有@数据槽。

相反,只需在cd_genes上使用行名:

代码语言:javascript
复制
rownames(x = cd_genes)
 [1] "CD79B"   "CD79A"   "CD19"    "CD180"   "CD200"   "CD3D"    "CD2"     "CCDC104" "CD3E"   
[10] "CD7"     "CD8A"    "CD14"    "CD1C"    "CD68"    "CD9"     "CD247"  

因此,这将从该对象中移除名称"CD200“:

代码语言:javascript
复制
> object<-SubsetRow(pbmc_small@raw.data, code="^CD200$", invert = TRUE)
> str(object)
Formal class 'dgTMatrix' [package "Matrix"] with 6 slots
  ..@ i       : int [1:4453] 1 5 8 11 22 29 32 33 35 37 ...
  ..@ j       : int [1:4453] 0 0 0 0 0 0 0 0 0 0 ...
  ..@ Dim     : int [1:2] 229 80
  ..@ Dimnames:List of 2
  .. ..$ : chr [1:229] "MS4A1" "CD79B" "CD79A" "HLA-DRA" ...
  .. ..$ : chr [1:80] "ATGCCAGAACGACT" "CATGGCCTGTGCAT" "GAACCTGATGAACC" "TGACTGGATTCTCA" ...
  ..@ x       : num [1:4453] 1 1 3 1 1 4 1 5 1 1 ...
  ..@ factors : list()
> "CD200" %in% rownames(object)
[1] FALSE
> "CD200" %in% rownames(pbmc_small@raw.data)
[1] TRUE

data-named在Seurat-objects中有一个插槽,但是一旦提取了它,该对象中就不再有data-slot:

代码语言:javascript
复制
slotNames(pbmc_small)
 [1] "raw.data"     "data"         "scale.data"   "var.genes"    "is.expr"      "ident"       
 [7] "meta.data"    "project.name" "dr"           "assay"        "hvg.info"     "imputed"     
[13] "cell.names"   "cluster.tree" "snn"          "calc.params"  "kmeans"       "spatial"     
[19] "misc"         "version"  

 slotNames(pbmc_small@data)
[1] "i"        "p"        "Dim"      "Dimnames" "x"        "factors" 

基于评论,似乎沟通的问题是不完整的。如果问题是如何修改现有的槽值,那么只需使用@<-,如下所示:

代码语言:javascript
复制
pbmc_small2 <- pbmc_small
pbmc_small2@data <- SubsetRow(data = pbmc_small@data, code = 'CD')

不过,我不确定它是否安全。@data插槽的尺寸现在与@raw.data插槽的尺寸不同,其他特性可能不匹配,尽管我对这个结构还不太了解。使用S4对象的安全方法是依赖包创建者提供的函数,而不是像插槽这样低级的东西。很明显,他们希望你能够从稀疏矩阵中得到子集,但是他们是否希望你把它们分配回插槽还不太清楚。

票数 3
EN

Stack Overflow用户

发布于 2019-10-16 09:29:31

试试下面的命令?

keep= c(!rownames(object) %in% c("GeneA")) object <- subset(x = object,features =c(1:(dim(object)[1]))[keep])

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48197261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档