load libraries————————————
1. Load and Subset Normal CD4 T Cells
All_samples_Merged <- readRDS("../All_samples_Merged_Benchmarked_05-11-2025.rds")
Idents(All_samples_Merged) <- "orig.ident"
table(All_samples_Merged@active.ident)
L1 L2 L3 L4 L5 L6 L7 CD4T_lab CD4T_10x
5825 5935 6428 6006 6022 5148 5331 5106 3504
2. Create the annotation summary table
library(dplyr)
library(tidyr)
library(purrr)
methods <- c(
"predicted.id", #scPred
"predicted.celltype.l2", # Azimuth (l2 prediction)
"singler.immune", # Example of other annotation methods like SingleR
"Prediction", #STCAT
"scATOMIC_annotation" #scATOMIC
)
annotation_summary <- map_dfr(methods, function(m) {
df <- All_samples_Merged@meta.data
df %>%
group_by(orig.ident, label = .data[[m]]) %>%
summarise(n = n(), .groups = "drop") %>%
group_by(orig.ident) %>%
slice_max(n, n = 1, with_ties = FALSE) %>%
mutate(method = m)
})
# Set the order of methods
annotation_summary$method <- factor(annotation_summary$method, levels = methods)
head(annotation_summary)
# Should show columns: orig.ident | label | n | method
LS0tCnRpdGxlOiAiQmVuY2htYXJrIGNlbGwgUHJlZGljdGlvbiBNZXRob2RzLTUtMDExLTIwMjUtdGFibGUiCmF1dGhvcjogTmFzaXIgTWFobW9vZCBBYmJhc2kKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiAgI3JtZGZvcm1hdHM6OnJlYWR0aGVkb3duCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0b2NfY29sbGFwc2VkOiB0cnVlCi0tLQoKCiMjIGxvYWQgbGlicmFyaWVzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQoKICAgIGxpYnJhcnkoU2V1cmF0KQogICAgbGlicmFyeShkcGx5cikKICAgIGxpYnJhcnkocGF0Y2h3b3JrKQogICAgbGlicmFyeShnZ3Bsb3QyKQogICAgbGlicmFyeShwaGVhdG1hcCkKICAgIGxpYnJhcnkoc2NQcmVkKQogICAgbGlicmFyeShjZWxsZGV4KQogICAgbGlicmFyeShTaW5nbGVSKQogICAgbGlicmFyeShyZW1vdGVzKQogICAgbGlicmFyeShwcmVzdG8pCiAgICBsaWJyYXJ5KFNldXJhdERpc2spCiAgICBsaWJyYXJ5KFNldXJhdERhdGEpCiAgICBsaWJyYXJ5KEF6aW11dGgpCgpgYGAKCgoKCiMgMS4gTG9hZCBhbmQgU3Vic2V0IE5vcm1hbCBDRDQgVCBDZWxscwpgYGB7ciBsb2FkU2V1cmF0fQoKQWxsX3NhbXBsZXNfTWVyZ2VkIDwtIHJlYWRSRFMoIi4uL0FsbF9zYW1wbGVzX01lcmdlZF9CZW5jaG1hcmtlZF8wNS0xMS0yMDI1LnJkcyIpCgpJZGVudHMoQWxsX3NhbXBsZXNfTWVyZ2VkKSA8LSAib3JpZy5pZGVudCIKdGFibGUoQWxsX3NhbXBsZXNfTWVyZ2VkQGFjdGl2ZS5pZGVudCkKCmBgYAoKCgojIDIuIENyZWF0ZSB0aGUgYW5ub3RhdGlvbiBzdW1tYXJ5IHRhYmxlCmBgYHtyfQoKbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5cikKbGlicmFyeShwdXJycikKCm1ldGhvZHMgPC0gYygKICAicHJlZGljdGVkLmlkIiwgICAgICAgICAgICAgI3NjUHJlZAogICJwcmVkaWN0ZWQuY2VsbHR5cGUubDIiLCAgICAjIEF6aW11dGggKGwyIHByZWRpY3Rpb24pCiAgInNpbmdsZXIuaW1tdW5lIiwgICAgICAgICAgICMgRXhhbXBsZSBvZiBvdGhlciBhbm5vdGF0aW9uIG1ldGhvZHMgbGlrZSBTaW5nbGVSCiAgIlByZWRpY3Rpb24iLCAgICAgICAgICAgICAgICNTVENBVAogICJzY0FUT01JQ19hbm5vdGF0aW9uIiAgICAgICNzY0FUT01JQwogICkKCmFubm90YXRpb25fc3VtbWFyeSA8LSBtYXBfZGZyKG1ldGhvZHMsIGZ1bmN0aW9uKG0pIHsKICBkZiA8LSBBbGxfc2FtcGxlc19NZXJnZWRAbWV0YS5kYXRhCiAgZGYgJT4lCiAgICBncm91cF9ieShvcmlnLmlkZW50LCBsYWJlbCA9IC5kYXRhW1ttXV0pICU+JQogICAgc3VtbWFyaXNlKG4gPSBuKCksIC5ncm91cHMgPSAiZHJvcCIpICU+JQogICAgZ3JvdXBfYnkob3JpZy5pZGVudCkgJT4lCiAgICBzbGljZV9tYXgobiwgbiA9IDEsIHdpdGhfdGllcyA9IEZBTFNFKSAlPiUKICAgIG11dGF0ZShtZXRob2QgPSBtKQp9KQoKCgojIFNldCB0aGUgb3JkZXIgb2YgbWV0aG9kcwphbm5vdGF0aW9uX3N1bW1hcnkkbWV0aG9kIDwtIGZhY3Rvcihhbm5vdGF0aW9uX3N1bW1hcnkkbWV0aG9kLCBsZXZlbHMgPSBtZXRob2RzKQoKaGVhZChhbm5vdGF0aW9uX3N1bW1hcnkpCiMgU2hvdWxkIHNob3cgY29sdW1uczogb3JpZy5pZGVudCB8IGxhYmVsIHwgbiB8IG1ldGhvZApgYGAKCgojIDMuIENvbnZlcnQgdG8gbWF0cml4IGZvcm1hdCBmb3IgcGxvdHRpbmcKYGBge3J9CmxpYnJhcnkodGlkeXIpCmxpYnJhcnkoZ2dwbG90MikKCmFubm90YXRpb25fbWF0cml4IDwtIGFubm90YXRpb25fc3VtbWFyeSAlPiUKICBzZWxlY3QobWV0aG9kLCBvcmlnLmlkZW50LCBsYWJlbCkgJT4lCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IG9yaWcuaWRlbnQsIHZhbHVlc19mcm9tID0gbGFiZWwpCgojIFJlbmFtZSBtZXRob2RzIGZvciB0aGUgcGxvdAphbm5vdGF0aW9uX3N1bW1hcnkgPC0gYW5ub3RhdGlvbl9zdW1tYXJ5ICU+JQogIG11dGF0ZShtZXRob2QgPSByZWNvZGUobWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgInByZWRpY3RlZC5pZCIgPSAic2NQcmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJwcmVkaWN0ZWQuY2VsbHR5cGUubDIiID0gIkF6aW11dGgubDIiLAogICAgICAgICAgICAgICAgICAgICAgICAgInNpbmdsZXIuaW1tdW5lIiA9ICJTaW5nbGVSKEltbXVuZSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIlByZWRpY3Rpb24iID0gIlNUQ0FUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJzY0FUT01JQ19hbm5vdGF0aW9uIiA9ICJzY0FUT01JQyIpKQoKIyBTYXZlIHRoZSBhbm5vdGF0aW9uIHN1bW1hcnkgdGFibGUgdG8gYSBDU1YgZmlsZSBmb3IgZnVydGhlciBhbmFseXNpcwoKd3JpdGUuY3N2KGFubm90YXRpb25fc3VtbWFyeSwgImFubm90YXRpb25fc3VtbWFyeV90YWJsZS5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKCgpgYGAKCgoK