美文网首页
小试牛刀——学会开Seurat函数“盲盒”

小试牛刀——学会开Seurat函数“盲盒”

作者: Bio_Infor | 来源:发表于2022-06-26 23:33 被阅读0次

    水有源,故其流不穷;木有根,故其生不穷。

    长期以来,我们的单细胞分析仅仅停留在调包套函数、……,这个过程会“蒙住”我们的眼睛,有些时候我们需要知道每个函数究竟在干什么才能够游刃有余,正如前述:水有源,故其流不穷;木有根,故其生不穷。一方面,这有利于我们的深入理解,另一方面也能给我们学习到优秀函数构建的机会。今天以PercentageFeatureSet()函数为例来进行分享。

    PercentageFeatureSet()函数

    不知道大家注意到没有,Seurat包里面的很多函数在对 SeuratObject 进行操作时,都是如下的格式:

    SeuratObject <- function(SeuratObject, operation...)
    

    简单来看就是函数对SeuratObject操作后产生的结果直接赋值给原SeuratObject。
    但是PercentageFeatureSet()函数似乎不是这样(以计算线粒体基因含量为例):

    SeuratObject[['percent.mt']] <- PercentageFeatureSet(SeuratObject, pattern = '^MT-')
    

    计算产生的结果是赋给了SeuratObject的metadata的新的一列。那么为什么会是这样?或者说PercentageFeatureSet()函数能用其它函数那样的调用格式来进行使用吗?这一切都要求我们知道PercentageFeatureSet()函数的具体内容。

    下面来看如何开函数盲盒,给大家提供两种方法:

    方法一:直接调用函数(不加参数)

    PercentageFeatureSet
    ############ following is the result ############
    function (object, pattern = NULL, features = NULL, col.name = NULL, 
        assay = NULL) 
    {
        assay <- assay %||% DefaultAssay(object = object)
        if (!is.null(x = features) && !is.null(x = pattern)) {
            warning("Both pattern and features provided. Pattern is being ignored.")
        }
        features <- features %||% grep(pattern = pattern, x = rownames(x = object[[assay]]), 
            value = TRUE)
        percent.featureset <- colSums(x = GetAssayData(object = object, 
            assay = assay, slot = "counts")[features, , drop = FALSE])/object[[paste0("nCount_", 
            assay)]] * 100
        if (!is.null(x = col.name)) {
            object <- AddMetaData(object = object, metadata = percent.featureset, 
                col.name = col.name)
            return(object)
        }
        return(percent.featureset)
    }
    <bytecode: 0x000002488cdb0de0>
    <environment: namespace:Seurat>
    

    通过这个方法我们成功的看到了这个函数的内部结构:

    • 首先关注这句percent.featureset <- colSums(x = GetAssayData(object = object, assay = assay, slot = "counts")[features, , drop = FALSE])/object[[paste0("nCount_", assay)]] * 100,它至少告诉我们两个信息:首先,percent.featureset是一个某些基因表达占比的数值向量;其次,这个数值是百分比,而不是小数。
    • 进一步关注这句:if (!is.null(x = col.name)) { object <- AddMetaData(object = object, metadata = percent.featureset, col.name = col.name) return(object) },这句的意思是,如果我们在调用PercentageFeatureSet()函数时添加了col.name参数时,这个函数就会返回一个SeuratObject,这里的col.name参数就是新的metadata列的列名。反之如果没有指定col.name,就只会返回一个percent.featureset的比例数值向量,自然需要我们指定metadata新列的信息。

    方法二:使用edit()函数

    edit(PercentageFeatureSet)
    

    执行这个语句后会出现一个新的小界面,你可以在看到这个函数的内部结构的同时,手动对该函数进行编辑。在这里不赘述了。

    通过上面的分析,实际上PercentageFeatureSet()函数的调用还可以用下面这种格式:
    SeuratObject <- PercentageFeatureSet(SeuratObject, pattern = '^MT-', col.name = 'percent.mt')
    
    今天又是摸鱼的一天!

    相关文章

      网友评论

          本文标题:小试牛刀——学会开Seurat函数“盲盒”

          本文链接:https://www.haomeiwen.com/subject/hcxnvrtx.html