2.Read Seurat object and Merge
load("/home/bioinfo/Documents/1-SS-STeps/4-Analysis_and_Robj_Marie/analyse juillet 2023/ObjetsR/L1.Robj")
load("/home/bioinfo/Documents/1-SS-STeps/4-Analysis_and_Robj_Marie/analyse juillet 2023/ObjetsR/L2.Robj")
load("/home/bioinfo/Documents/1-SS-STeps/4-Analysis_and_Robj_Marie/analyse juillet 2023/ObjetsR/L3_B.Robj")
load("/home/bioinfo/Documents/1-SS-STeps/4-Analysis_and_Robj_Marie/analyse juillet 2023/ObjetsR/L4_B.Robj")
load("/home/bioinfo/Documents/1-SS-STeps/4-Analysis_and_Robj_Marie/analyse juillet 2023/ObjetsR/L5.Robj")
load("/home/bioinfo/Documents/1-SS-STeps/4-Analysis_and_Robj_Marie/analyse juillet 2023/ObjetsR/L6.Robj")
load("/home/bioinfo/Documents/1-SS-STeps/4-Analysis_and_Robj_Marie/analyse juillet 2023/ObjetsR/L7.Robj")
load("/home/bioinfo/Documents/1-SS-STeps/4-Analysis_and_Robj_Marie/analyse juillet 2023/ObjetsR/PBMC.Robj")
load("/home/bioinfo/14-New_PBMC_INCLUSION/PBMC-10x/1-PBMC_10x/PBMC_10x.Robj")
# Rename the assay if necessary
DefaultAssay(SS_PBMC_10x) <- "RNA" # or whatever assay you are using
# Add nUMI column (if it doesn't exist)
if(!"nUMI" %in% colnames(SS_PBMC_10x@meta.data)) {
SS_PBMC_10x$nUMI <- SS_PBMC_10x$nCount_RNA
}
# Add nGene column (if it doesn't exist)
if(!"ngene" %in% colnames(SS_PBMC_10x@meta.data)) {
SS_PBMC_10x$ngene <- SS_PBMC_10x$nFeature_RNA
}
# Verify that the columns have been added
print(colnames(SS_PBMC_10x@meta.data))
[1] "orig.ident" "nCount_RNA"
[3] "nFeature_RNA" "percent.mt"
[5] "cell_line" "Patient_origin"
[7] "Patient_Immunophenotype" "condition_of_amplification_in_vivo"
[9] "culture_medium" "Stromal_cells"
[11] "Cell_line_Immunophenotype" "TP53_mutation"
[13] "TCRVB2" "CD3_M"
[15] "CD30_M" "CCR4_M"
[17] "CD162_BL" "CD26_BD"
[19] "CD7_M" "CLA_BD"
[21] "CD4_BD" "CCR7_M"
[23] "CD45RO_BD" "CD45RA_M"
[25] "age_at_diagnosis" "stage_diagnosis"
[27] "stage_analysis" "Treatments_analysis"
[29] "nUMI" "ngene"
# Check the names of loaded objects
ls() # This will show you all objects currently in your environment
[1] "L1" "L2" "L3_B" "L4_B" "L5" "L6"
[7] "L7" "PBMC" "SS_PBMC_10x"
3.Check Loaded Objects and Merge
# Adding dummy ADT assay if it doesn't exist
if (!"ADT" %in% names(SS_PBMC_10x)) {
# Create a matrix with 28 dummy features and columns matching cell barcodes
dummy_adt <- matrix(0, nrow = 28, ncol = ncol(SS_PBMC_10x))
# Assign row names as placeholder feature names
rownames(dummy_adt) <- paste0("Dummy_ADT_", 1:28)
# Assign column names using cell barcodes from the RNA assay
colnames(dummy_adt) <- colnames(SS_PBMC_10x)
# Add the dummy ADT assay to the Seurat object
SS_PBMC_10x[["ADT"]] <- CreateAssayObject(counts = dummy_adt)
}
Warning: Feature names cannot have underscores ('_'), replacing with dashes ('-')Warning: Feature names cannot have underscores ('_'), replacing with dashes ('-')
# Set the RNA assay as default
DefaultAssay(SS_PBMC_10x) <- "RNA"
# Normalize new PBMC-10x object before merging
SS_PBMC_10x <- NormalizeData(SS_PBMC_10x, normalization.method = "LogNormalize", scale.factor = 10000)
Normalizing layer: counts
Performing log-normalization
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
# Merge Seurat objects while retaining the ADT assay
All_samples_Merged_new <- merge(L1, y = c(L2, L3_B, L4_B, L5, L6, L7, PBMC, SS_PBMC_10x))
# Display summary of the merged object
All_samples_Merged_new
An object of class Seurat
36657 features across 59355 samples within 2 assays
Active assay: RNA (36601 features, 0 variable features)
18 layers present: counts.1, counts.2, counts.3, counts.4, counts.5, counts.6, counts.7, counts.8, counts.9, data.1, data.2, data.3, data.4, data.5, data.6, data.7, data.8, data.9
1 other assay present: ADT
All_samples_Merged_10x <- JoinLayers(All_samples_Merged_new)
All_samples_Merged_10x
An object of class Seurat
36657 features across 59355 samples within 2 assays
Active assay: RNA (36601 features, 0 variable features)
2 layers present: data, counts
1 other assay present: ADT
print(dim(GetAssayData(All_samples_Merged_10x, layer = "counts")))
[1] 36601 59355
print(dim(GetAssayData(All_samples_Merged_10x, layer = "data")))
[1] 36601 59355
All_samples_Merged_10x$orig.ident[grepl("PBMC_10x", colnames(All_samples_Merged_10x))] <- "PBMC10x"
# Display summary of the merged object
print(All_samples_Merged_10x)
An object of class Seurat
36657 features across 59355 samples within 2 assays
Active assay: RNA (36601 features, 0 variable features)
2 layers present: data, counts
1 other assay present: ADT
LS0tCnRpdGxlOiAiTWVyZ2luZyBhbGwgb3VyIGNlbGwgbGluZXMgYW5kIGNvbnRyb2xzKFBCTUMtUEJNQzEweCkgaW50byBzaW5nbGUgc2V1cmF0IG9iamVjdC1Sb2JqIgphdXRob3I6IE5hc2lyIE1haG1vb2QgQWJiYXNpCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OgogICNybWRmb3JtYXRzOjpyZWFkdGhlZG93bgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jX2NvbGxhcHNlZDogdHJ1ZQotLS0KCiMgMS5sb2FkIGxpYnJhcmllcwpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KCmxpYnJhcnkoU2V1cmF0KQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeSh0aW55dGV4KQoKYGBgCgoKCiMgMi5SZWFkIFNldXJhdCBvYmplY3QgYW5kIE1lcmdlCmBgYHtyIHNldXJhdH0KCmxvYWQoIi9ob21lL2Jpb2luZm8vRG9jdW1lbnRzLzEtU1MtU1RlcHMvNC1BbmFseXNpc19hbmRfUm9ial9NYXJpZS9hbmFseXNlIGp1aWxsZXQgMjAyMy9PYmpldHNSL0wxLlJvYmoiKQpsb2FkKCIvaG9tZS9iaW9pbmZvL0RvY3VtZW50cy8xLVNTLVNUZXBzLzQtQW5hbHlzaXNfYW5kX1JvYmpfTWFyaWUvYW5hbHlzZSBqdWlsbGV0IDIwMjMvT2JqZXRzUi9MMi5Sb2JqIikKbG9hZCgiL2hvbWUvYmlvaW5mby9Eb2N1bWVudHMvMS1TUy1TVGVwcy80LUFuYWx5c2lzX2FuZF9Sb2JqX01hcmllL2FuYWx5c2UganVpbGxldCAyMDIzL09iamV0c1IvTDNfQi5Sb2JqIikKbG9hZCgiL2hvbWUvYmlvaW5mby9Eb2N1bWVudHMvMS1TUy1TVGVwcy80LUFuYWx5c2lzX2FuZF9Sb2JqX01hcmllL2FuYWx5c2UganVpbGxldCAyMDIzL09iamV0c1IvTDRfQi5Sb2JqIikKbG9hZCgiL2hvbWUvYmlvaW5mby9Eb2N1bWVudHMvMS1TUy1TVGVwcy80LUFuYWx5c2lzX2FuZF9Sb2JqX01hcmllL2FuYWx5c2UganVpbGxldCAyMDIzL09iamV0c1IvTDUuUm9iaiIpCmxvYWQoIi9ob21lL2Jpb2luZm8vRG9jdW1lbnRzLzEtU1MtU1RlcHMvNC1BbmFseXNpc19hbmRfUm9ial9NYXJpZS9hbmFseXNlIGp1aWxsZXQgMjAyMy9PYmpldHNSL0w2LlJvYmoiKQpsb2FkKCIvaG9tZS9iaW9pbmZvL0RvY3VtZW50cy8xLVNTLVNUZXBzLzQtQW5hbHlzaXNfYW5kX1JvYmpfTWFyaWUvYW5hbHlzZSBqdWlsbGV0IDIwMjMvT2JqZXRzUi9MNy5Sb2JqIikKbG9hZCgiL2hvbWUvYmlvaW5mby9Eb2N1bWVudHMvMS1TUy1TVGVwcy80LUFuYWx5c2lzX2FuZF9Sb2JqX01hcmllL2FuYWx5c2UganVpbGxldCAyMDIzL09iamV0c1IvUEJNQy5Sb2JqIikKbG9hZCgiL2hvbWUvYmlvaW5mby8xNC1OZXdfUEJNQ19JTkNMVVNJT04vUEJNQy0xMHgvMS1QQk1DXzEweC9QQk1DXzEweC5Sb2JqIikKCiMgUmVuYW1lIHRoZSBhc3NheSBpZiBuZWNlc3NhcnkKRGVmYXVsdEFzc2F5KFNTX1BCTUNfMTB4KSA8LSAiUk5BIiAgIyBvciB3aGF0ZXZlciBhc3NheSB5b3UgYXJlIHVzaW5nCgojIEFkZCBuVU1JIGNvbHVtbiAoaWYgaXQgZG9lc24ndCBleGlzdCkKaWYoISJuVU1JIiAlaW4lIGNvbG5hbWVzKFNTX1BCTUNfMTB4QG1ldGEuZGF0YSkpIHsKICBTU19QQk1DXzEweCRuVU1JIDwtIFNTX1BCTUNfMTB4JG5Db3VudF9STkEKfQoKIyBBZGQgbkdlbmUgY29sdW1uIChpZiBpdCBkb2Vzbid0IGV4aXN0KQppZighIm5nZW5lIiAlaW4lIGNvbG5hbWVzKFNTX1BCTUNfMTB4QG1ldGEuZGF0YSkpIHsKICBTU19QQk1DXzEweCRuZ2VuZSA8LSBTU19QQk1DXzEweCRuRmVhdHVyZV9STkEKfQoKIyBWZXJpZnkgdGhhdCB0aGUgY29sdW1ucyBoYXZlIGJlZW4gYWRkZWQKcHJpbnQoY29sbmFtZXMoU1NfUEJNQ18xMHhAbWV0YS5kYXRhKSkKCgojIENoZWNrIHRoZSBuYW1lcyBvZiBsb2FkZWQgb2JqZWN0cwpscygpICAjIFRoaXMgd2lsbCBzaG93IHlvdSBhbGwgb2JqZWN0cyBjdXJyZW50bHkgaW4geW91ciBlbnZpcm9ubWVudApgYGAKCiMgMy5DaGVjayBMb2FkZWQgT2JqZWN0cyBhbmQgTWVyZ2UKYGBge3IgVU1BUH0KCiMgQWRkaW5nIGR1bW15IEFEVCBhc3NheSBpZiBpdCBkb2Vzbid0IGV4aXN0CmlmICghIkFEVCIgJWluJSBuYW1lcyhTU19QQk1DXzEweCkpIHsKICAjIENyZWF0ZSBhIG1hdHJpeCB3aXRoIDI4IGR1bW15IGZlYXR1cmVzIGFuZCBjb2x1bW5zIG1hdGNoaW5nIGNlbGwgYmFyY29kZXMKICBkdW1teV9hZHQgPC0gbWF0cml4KDAsIG5yb3cgPSAyOCwgbmNvbCA9IG5jb2woU1NfUEJNQ18xMHgpKQogIAogICMgQXNzaWduIHJvdyBuYW1lcyBhcyBwbGFjZWhvbGRlciBmZWF0dXJlIG5hbWVzCiAgcm93bmFtZXMoZHVtbXlfYWR0KSA8LSBwYXN0ZTAoIkR1bW15X0FEVF8iLCAxOjI4KQogIAogICMgQXNzaWduIGNvbHVtbiBuYW1lcyB1c2luZyBjZWxsIGJhcmNvZGVzIGZyb20gdGhlIFJOQSBhc3NheQogIGNvbG5hbWVzKGR1bW15X2FkdCkgPC0gY29sbmFtZXMoU1NfUEJNQ18xMHgpCiAgCiAgIyBBZGQgdGhlIGR1bW15IEFEVCBhc3NheSB0byB0aGUgU2V1cmF0IG9iamVjdAogIFNTX1BCTUNfMTB4W1siQURUIl1dIDwtIENyZWF0ZUFzc2F5T2JqZWN0KGNvdW50cyA9IGR1bW15X2FkdCkKfQoKCiMgU2V0IHRoZSBSTkEgYXNzYXkgYXMgZGVmYXVsdApEZWZhdWx0QXNzYXkoU1NfUEJNQ18xMHgpIDwtICJSTkEiCgojIE5vcm1hbGl6ZSBuZXcgUEJNQy0xMHggb2JqZWN0IGJlZm9yZSBtZXJnaW5nClNTX1BCTUNfMTB4IDwtIE5vcm1hbGl6ZURhdGEoU1NfUEJNQ18xMHgsIG5vcm1hbGl6YXRpb24ubWV0aG9kID0gIkxvZ05vcm1hbGl6ZSIsIHNjYWxlLmZhY3RvciA9IDEwMDAwKQoKIyBNZXJnZSBTZXVyYXQgb2JqZWN0cyB3aGlsZSByZXRhaW5pbmcgdGhlIEFEVCBhc3NheQpBbGxfc2FtcGxlc19NZXJnZWRfbmV3IDwtIG1lcmdlKEwxLCB5ID0gYyhMMiwgTDNfQiwgTDRfQiwgTDUsIEw2LCBMNywgUEJNQywgU1NfUEJNQ18xMHgpKQoKIyBEaXNwbGF5IHN1bW1hcnkgb2YgdGhlIG1lcmdlZCBvYmplY3QKQWxsX3NhbXBsZXNfTWVyZ2VkX25ldwoKQWxsX3NhbXBsZXNfTWVyZ2VkXzEweCA8LSBKb2luTGF5ZXJzKEFsbF9zYW1wbGVzX01lcmdlZF9uZXcpCgpBbGxfc2FtcGxlc19NZXJnZWRfMTB4CgpwcmludChkaW0oR2V0QXNzYXlEYXRhKEFsbF9zYW1wbGVzX01lcmdlZF8xMHgsIGxheWVyID0gImNvdW50cyIpKSkKcHJpbnQoZGltKEdldEFzc2F5RGF0YShBbGxfc2FtcGxlc19NZXJnZWRfMTB4LCBsYXllciA9ICJkYXRhIikpKQoKCkFsbF9zYW1wbGVzX01lcmdlZF8xMHgkb3JpZy5pZGVudFtncmVwbCgiUEJNQ18xMHgiLCBjb2xuYW1lcyhBbGxfc2FtcGxlc19NZXJnZWRfMTB4KSldIDwtICJQQk1DMTB4IgoKIyBEaXNwbGF5IHN1bW1hcnkgb2YgdGhlIG1lcmdlZCBvYmplY3QKcHJpbnQoQWxsX3NhbXBsZXNfTWVyZ2VkXzEweCkKYGBgCgoKIyA0LlNhdmUgdGhlIFNldXJhdCBvYmplY3QgYXMgYW4gUm9iaiBmaWxlCmBgYHtyIHNhdmVvYmp9CgoKc2F2ZShBbGxfc2FtcGxlc19NZXJnZWRfMTB4LCBmaWxlID0iL2hvbWUvYmlvaW5mby8xNC1OZXdfUEJNQ19JTkNMVVNJT04vUEJNQy0xMHgvMi1NZXJnZV9PbGRfb2JqZWN0X3RvX1BCTUMtMTB4L1NTX21lcmdlZF9tYXJpZV9vYmpfd2l0aF9QQk1DXzEweF9maW5hbC5Sb2JqIikKCgpgYGAKCgoKCgoKCg==