Правильное место для этого вопроса - на сайте поддержки Bioconductor .Лучше привести воспроизводимый пример, который отражает суть проблемы;создание воспроизводимого примера часто помогает определить причину проблемы.
library(Biobase)
exprs <- matrix(0, nrow=5, ncol=3,
dimnames=list(letters[1:5], LETTERS[1:3]))
pData <- data.frame(id=c("foo", "bar", "baz"),
row.names=c("x", "y", "z"))
phenoData <- AnnotatedDataFrame(data=pData)
, что приводит к
> ExpressionSet(exprs, phenoData=phenoData)
Error in validObject(.Object) :
invalid class "ExpressionSet" object: sampleNames differ between assayData and
phenoData
Проблема заключается в том, что colname
из exprs
(т. е.названия образцов в эксперименте) отличаются от row.names
из pData
(т. е. описание образцов)
> row.names(pData)
[1] "x" "y" "z"
> colnames(exprs)
[1] "A" "B" "C"
, и решение состоит в том, чтобы сделать их одинаковыми
> colnames(exprs) <- row.names(pData)
> eset <- ExpressionSet(exprs, phenoData=phenoData)
> eset
ExpressionSet (storageMode: lockedEnvironment)
assayData: 5 features, 3 samples
element names: exprs
protocolData: none
phenoData
sampleNames: x y z
varLabels: id
varMetadata: labelDescription
featureData: none
experimentData: use 'experimentData(object)'
Annotation:
Дополнительные элементы могут быть добавлены в существующий ExpressionSet с помощью assayDataReplace()
, например,
> assayDataElement(eset, "foo") <- sqrt(exprs)
> eset
ExpressionSet (storageMode: lockedEnvironment)
assayData: 5 features, 3 samples
element names: exprs, foo
protocolData: none
phenoData
sampleNames: x y z
varLabels: id
varMetadata: labelDescription
featureData: none
experimentData: use 'experimentData(object)'
Annotation:
или с самого начала
> env = new.env()
> env$exprs = exprs
> env$sqrt = sqrt(exprs)
> lockEnvironment(env)
> ExpressionSet(env, pData=pData)
ExpressionSet (storageMode: environment)
assayData: 5 features, 3 samples
element names: exprs, sqrt
protocolData: none
phenoData: none
featureData: none
experimentData: use 'experimentData(object)'
Annotation: