尝试使用Chord这个R包去除双细胞时,发现以下报错:
chord(seu=test1,doubletrate=0.008,overkill=T,outname="./03_chord/")Warning message in is.na(seu):
“is.na() applied to non-(list or vector) of type 'S4'”
Error in as.matrix(seu@assays$RNA@counts): no slot of name "counts" for this object of class "Assay5"
Traceback:
- creatSCE(seu = seu)
- as.matrix(seu@assays$RNA@counts)
- .handleSimpleError(function (cnd)
. {
. watcherpush(cnd)
. switch(on_error, continue = invokeRestart("eval_continue"),
. stop = invokeRestart("eval_stop"), error = NULL)
. }, "no slot of name "counts" for this object of class "Assay5"",
. base::quote(as.matrix(seu@assaysRNA@counts是V4版本的assay,对于V5的assay来说不适用,因此,修改方法如下:
===============================================
获取原始函数
original_creatSCE <- Chord:::creatSCE
创建新的函数体
new_body <- body(original_creatSCE)
new_body
{
require(SingleCellExperiment)
我们着重修改seu@assays$RNA@counts为GetAssayData(seu, assay = "RNA", layer = "counts")即可
counts_data <- as.matrix(seu@assays$RNA@counts)
col <- seu@meta.data
sce <- SingleCellExperiment(assays = list(counts = counts_data),
colData = col)
return(sce)
}
创建新的函数体
new_creatSCE <- function(seu) {
require(SingleCellExperiment)
counts_data <- as.matrix(GetAssayData(seu, assay = "RNA", layer = "counts"))
col <- seu[[]] # 这是获取meta.data的新方法
sce <- SingleCellExperiment(
assays = list(counts = counts_data),
colData = col
)
return(sce)
}
将新函数赋值给包的命名空间
assignInNamespace("creatSCE", new_creatSCE, ns = "Chord")
重新运行
chord(seu=test1,doubletrate=0.008,overkill=T,outname="./03_chord/")