这篇短文将介绍创建方法包装器的原因和要遵循的约定。方法包装器是一种微妙地改变来自其他库的函数行为的方法。CellBench要求一个步骤中的所有方法都接受相同类型的输入并产生相同类型的输出,对于执行相同任务的不同库的函数通常不是这样,因此有必要编写代码来“包装”这些方法以符合我们的要求。
包装器的示例可以在以下Github存储库中找到
对于在CellBench中使用的包装器有一些要求:
类()
,也要小心返回原始计数与规范化计数相比的方法。为了保证包装器的灵活性和兼容性,建议遵循以下约定:
包装器应该只需要一个参数,额外的参数应该设置为合理的默认值,如果绝对需要更多的非默认参数,那么包装器应该将一个列表作为其第一个参数。
#包装器的通用框架包装器<- function(sce,…){stopifnot(is(sce, " singlecel实验"))res <- method_function(sce,…)return(res)}
我们可以编写一个简单的包装器DrImpute ()
:
#一个可能的包装实现drimpute_wrapper <- function(sce,…){#包装只接受singlecel实验或矩阵类型对象stopifnot(is(sce,“singlecel实验”))expr <- singlecel实验::normcounts(sce) expr_processed <- DrImpute::preprocessSC(expr) logcounts(sce) <- DrImpute::DrImpute(expr_processed,…)return(sce)}
传入的参数...
将会传递给DrImpute ()
.有时显式地命名我们可能想要更改的参数,或者限制我们允许更改的参数,以保证更好的一致性。
#另一种可能的实现# DrImpute的默认ks是10:15,我们可以使用5:15的robustness drimpute_wrapper <- function(sce, ks = 5:15, method = c("mean", "med")) {stopifnot(is(sce, " singlecel实验实验"))expr <- singlecel实验实验::normcounts(sce) expr_processed <- DrImpute::preprocessSC(expr) method <- match.arg(method) logcounts(sce) <- DrImpute::DrImpute(expr_processed, ks = ks, method = method) return(sce)}
然后我们可以改变这些包装在飞行使用purrr:部分()
Imputation_method <- fn_list(dr_impute_mean = purrr::partial(drimpute_wrapper, method = "mean"), dr_impute_median = purrr::partial(drimpute_wrapper, method = "med"))
方法的包装器应该SingleCellExperiment
并返回SingleCellExperiments
结果存储在相应的槽中化验
,colData
或rowData
.如果计算结果不能很好地适合这些槽,它们应该放在适当的属性中元数据
.