почему функция Write.fcs в пакете Flowcore портит мой файл FCS - PullRequest
1 голос
/ 04 мая 2019

Я анализирую файлы FCS из эксперимента CyTOF с использованием пакета Flowcore.Когда я импортирую и экспортирую свои файлы FCS, используя read.FCS и write.FCS, я обнаруживаю, что эти функции повредили мой файл FCS, и все каналы затронуты, и данные выглядят как tSNE на рисунке ниже (не то, что ожидается или имеет смысл).

Я использую R (ver.3.6), Rstudio (1.2.1335) и flowcore ver.3.9.Вот код, который я использовал:

library(flowCore)
#Import FCS file
myfilename<-"export_MIX_NT_Ungated_viSNE.fcs"   
myfile_fcs<-read.FCS(myfilename,
                  transformation="linearize", which.lines=NULL, 
                  alter.names=FALSE, column.pattern=NULL)

#I plan to do some data analysis here in the final version before exporting below
#export the fcs file and rename it to T_+filename
write.FCS(myfile_fcs,paste("T_",keyword(myfile_fcs)$"$FIL",sep=""), what="numeric")

, и вот так выглядит оригинальный файл перед импортом в R

before

, и это то, чтоэкспортированный результат выглядит как после экспорта

after

Вот файл, который мы использовали для этого кода: ссылка для размещения файла примера

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

@ csugai, спасибо за ваш ответ. Аргумент truncate_max_range = FALSE в функции read.flowSet привлек мое внимание, поэтому я включил его в свою функцию read.FCS, и это устранило проблему! Хотя я не совсем понял другие части вашего кода, которые привели к бин-данным.

0 голосов
/ 06 мая 2019

Я изучил вашу проблему и сначала скептически относился к трансформации read.fcs. Просматривая ваш файл примера, я также вижу, что уже есть столбцы для вашего исходного (полного графика) графика tsne, поэтому я предполагаю, что flowjo переписывает значения tsne после того, как вы прочитали / записали его в R. Так как Flowcore, как правило, более целенаправленный в сторону потоковых данных, а не cytof, я взял несколько кусочков этой прогулки по Bioc2017, хотя и пересоздал преобразования, которые, кажется, работают лучше, хотя я не уверен, как flowjo будет обрабатывать данные сейчас. Если вы собираетесь выполнять больше работы с данными, то теперь мы имеем их на доступном низком уровне, поэтому вы можете делать все, что захотите. Вот мой код.

fcs_raw <- read.flowSet("~/Downloads/export_MIX_NT_Ungated_viSNE.fcs", transformation = FALSE, 
                    truncate_max_range = FALSE)
fcs <- fsApply(fcs_raw, function(x, cofactor = 5){
  expr <- exprs(x)
  expr <- asinh(expr[,] / cofactor)
  exprs(x) <- expr
  x
})

expr <- fsApply(fcs, exprs)

library(matrixStats)
rng <- colQuantiles(expr, probs = c(0.01, 0.99))
expr01 <- t((t(expr) - rng[, 1]) / (rng[, 2] - rng[, 1]))
expr01[expr01 < 0] <- 0
expr01[expr01 > 1] <- 1


expr01
summary(expr01)

Имейте в виду, что это портит ваши исходные номера столбцов tSNE, поэтому, если бы они были важны для вас, я бы прочитал набор потоков, сделал копию этих столбцов и продолжил анализ данных в коде. Если у вас есть вопросы или анализ будущих данных, свяжитесь со мной напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...