嘗試使用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/")