Ошибка в `rownames <-` (` * tmp * `, value = colnames (countData)): попытка установить 'rownames' для объекта без измерений - PullRequest
0 голосов
/ 17 апреля 2020

Я нашел один и тот же вопрос без какого-либо полезного ответа, так как автор не предоставил свои файлы. Я использую библиотеку DESeq2, следуя инструкции 3.2 Начиная с счетных матриц . У меня есть мои countdata и coldata, импортированные из файлов CSV. Я понимаю, что файл countdata может быть проблемой, но я не понимаю, в чем именно проблема.

Мой код:

library(DESeq2)

NGS <- read.csv2(paste0(datadir,"/CLN3_NGS_orig.csv"), header = T,stringsAsFactors = F)
Sinfo <- read.csv2(paste0(datadir,"/Sampleinfo.csv"), header = T,stringsAsFactors = F)
head(NGS)
head(Sinfo)

coldata <- DataFrame(Sinfo)
coldata <- lapply(coldata, as.factor)
coldata

lapply(NGSnum, class)
NGSnum <- data.frame(NGS[1], apply(NGS[2:13],2, as.numeric))
NGSFull <- DESeqDataSetFromMatrix(
countData = NGSnum,
colData = coldata,
design = ~ Genotype + Treatment)
NGSFull

NGS$Genotype <- relevel(NGSFull$Genotype, "WT")

deseqNGS <- DESeq(NGS)
res <- results(deseqNGS)
res

Моя ошибка после аппликации DESeqDataSetFromMatrix:

Error in `rownames<-`(`*tmp*`, value = colnames(countData)) : 
  attempt to set 'rownames' on an object with no dimensions

Мои файлы coldata и countdata на pastebin: coldata & countdata

Кстати, мои countdata содержат стенограммы, иногда несколько стенограмм (ENST) соответствуют один ген (ENSG). Может ли DESeq2 разобраться со мной и дать мне только вывод с генами? Легко преобразовать транскрипты в гены, но сложнее сделать одну позицию из нескольких.

Заранее спасибо, Кася

1 Ответ

0 голосов
/ 17 апреля 2020

Как правило, вопросам Bioconductor будет уделено гораздо больше внимания на сайте поддержки Bioconductor ссылка здесь . Тем не менее, я могу попытаться дать несколько советов. Ошибка, которую вы получаете, заключается в том, что ваша coldata - это список, а не объект DataFrame.

coldata <- lapply(coldata, as.factor)

создает список для каждого столбца. Есть также несколько других проблем, которые я рассмотрел в коде ниже. Наиболее важно, что NGSnum должен быть целочисленной матрицей. Многие матрицы подсчета RNAseq на самом деле являются числами с плавающей запятой (или удваиваются в R), но это происходит из-за алгоритма, присваивающего вероятности для прочтений, которые могли быть получены из нескольких генов. То, что я сделал, это округлил значения, чтобы превратить их в целые числа.

library(DESeq2)

NGS <- read.csv2("Countdata10.csv", header = TRUE, stringsAsFactors = FALSE)
Sinfo <- read.csv2(paste0("Sampleinfo.csv"), header = TRUE, stringsAsFactors = FALSE)

coldata <- DataFrame(apply(X = Sinfo, MARGIN = 2, FUN = as.factor)) # use apply instead of apply

NGSnum <- apply(X = NGS[,-1], MARGIN = 2, FUN = as.numeric)
NGSnum <- apply(X = NGSnum, MARGIN = 2, FUN = round)
rownames(NGSnum) <- NGS$Transcript
NGSFull <- DESeqDataSetFromMatrix(
  countData = NGSnum,
  colData = coldata,
  design = ~ Genotype + Treatment)

NGSFull$Genotype <- relevel(NGSFull$Genotype, "WT")

deseqNGS <- DESeq(NGSFull)
res <- results(deseqNGS)
res
...