Search
Question: DESeqDataSetFromTximport: Error in checkSlotAssignment
3
gravatar for JWCarlson
17 months ago by
JWCarlson70
JWCarlson70 wrote:

I'm wrestling with tximport/DESeq2. I've create a small experiment dataset of 2 paired end fastq, generated counts with salmon, and successfully read them in with tximport (or so I think). "files" is my list of 2 quant.sf files. tx2gene is the obvious.

> txi <- tximport(files, type = "salmon", tx2gene = tx2gene)
> sampleTable
            tissue
sample1 young_leaf
sample2      roots

 

> dds <- DESeqDataSetFromTximport(txi, sampleTable, ~tissue)
Error in checkSlotAssignment(object, name, value) : 
  assignment of an object of class "NULL" is not valid for slot 'NAMES' in an object of class "DESeqDataSet"; is(value, "characterORNULL") is not TRUE

I've just recently installed R 3.4.0 and have update all packages. I see that there was some changes in S4 of renaming characterORNULL to character_OR_NULL; is this the issue?

Thanks

> sessionInfo()
R version 3.4.0 (2017-04-21)
Platform: x86_64-pc-linux-gnu (64-bit)

Matrix products: default
BLAS: /global/u1/j/jcarlson/local/lib64/R/lib/libRblas.so
LAPACK: /global/u1/j/jcarlson/local/lib64/R/lib/libRlapack.so

locale:
[1] C

attached base packages:
[1] parallel  stats4    stats     graphics  grDevices utils     datasets 
[8] methods   base     

other attached packages:
 [1] tximport_1.4.0             DESeq2_1.16.0             
 [3] SummarizedExperiment_1.6.0 DelayedArray_0.2.0        
 [5] matrixStats_0.52.2         Biobase_2.36.0            
 [7] GenomicRanges_1.28.0       GenomeInfoDb_1.12.0       
 [9] IRanges_2.10.0             S4Vectors_0.14.0          
[11] BiocGenerics_0.22.0       

loaded via a namespace (and not attached):
 [1] genefilter_1.58.0       locfit_1.5-9.1          splines_3.4.0          
 [4] lattice_0.20-35         colorspace_1.3-2        htmltools_0.3.6        
 [7] base64enc_0.1-3         survival_2.41-3         XML_3.98-1.6           
[10] foreign_0.8-68          DBI_0.6-1               BiocParallel_1.10.0    
[13] RColorBrewer_1.1-2      GenomeInfoDbData_0.99.0 plyr_1.8.4             
[16] stringr_1.2.0           zlibbioc_1.22.0         munsell_0.4.3          
[19] gtable_0.2.0            htmlwidgets_0.8         memoise_1.1.0          
[22] latticeExtra_0.6-28     knitr_1.15.1            geneplotter_1.54.0     
[25] AnnotationDbi_1.38.0    htmlTable_1.9           Rcpp_0.12.10           
[28] acepack_1.4.1           xtable_1.8-2            scales_0.4.1           
[31] backports_1.0.5         checkmate_1.8.2         Hmisc_4.0-3            
[34] annotate_1.54.0         XVector_0.16.0          gridExtra_2.2.1        
[37] rjson_0.2.15            ggplot2_2.2.1           digest_0.6.12          
[40] stringi_1.1.5           grid_3.4.0              tools_3.4.0            
[43] bitops_1.0-6            magrittr_1.5            RSQLite_1.1-2          
[46] lazyeval_0.2.0          RCurl_1.95-4.8          tibble_1.3.0           
[49] Formula_1.2-1           cluster_2.0.6           Matrix_1.2-10          
[52] data.table_1.10.4       rpart_4.1-11            nnet_7.3-12            
[55] compiler_3.4.0         
ADD COMMENTlink modified 17 months ago • written 17 months ago by JWCarlson70
1

Hi Michael,

Thanks for the response.

biocLite() looks clean:

> biocLite()
BioC_mirror: https://bioconductor.org
Using Bioconductor 3.5 (BiocInstaller 1.26.0), R 3.4.0 (2017-04-21).

For a brief time, I thought my problem was that I was no pulling in tximportData. But adding that did not help.

Should I be concerned that the Class is -none- in the DESeqDataSet?

> summary(txi)
                    Length Class  Mode
abundance           72698  -none- numeric
counts              72698  -none- numeric
length              72698  -none- numeric
countsFromAbundance     1  -none- character

The error message almost makes sense if it's happening from trying to act on a null class.

ADD REPLYlink written 17 months ago by JWCarlson70

Incidentally, I see that makeExampleDESeqDataSet() also returns the same error for me

> dds = makeExampleDESeqDataSet()
Error in checkSlotAssignment(object, name, value) : assignment of an object of class "NULL" is not valid for slot 'NAMES' in an object of class "DESeqDataSet"; is(value, "characterORNULL") is not TRUE

 

ADD REPLYlink written 17 months ago by JWCarlson70

That's useful for debugging, isolating the problem to DESeq2 or its depends. Can you call traceback() after the error and post here?

ADD REPLYlink written 17 months ago by Michael Love19k

sure!

> dds=makeExampleDESeqDataSet()
Error in checkSlotAssignment(object, name, value) :
  assignment of an object of class "NULL" is not valid for slot 'NAMES' in an object of class "DESeqDataSet"; is(value, "characterORNULL") is not TRUE
> traceback()
11: stop(gettextf("assignment of an object of class %s is not valid for slot %s in an object of class %s; is(value, \"%s\") is not TRUE",
        dQuote(valueClass), sQuote(name), dQuote(cl), slotClass),
        domain = NA)
10: checkSlotAssignment(object, name, value)
9: `slot<-`(`*tmp*`, what, value = slot(value, what))
8: asMethod(object, Class, value)
7: `as<-`(`*tmp*`, Classi, value = obj)
6: initialize(value, ...)
5: initialize(value, ...)
4: new("DESeqDataSet", se, design = design)
3: DESeqDataSet(se, design = design, ignoreRank)
2: DESeqDataSetFromMatrix(countData = countData, colData = colData,
       design = design, rowRanges = rowRanges)
1: makeExampleDESeqDataSet()

 

ADD REPLYlink modified 17 months ago • written 17 months ago by JWCarlson70
1
so this does not look right.

> showClass("DESeqDataSet")
Class "DESeqDataSet" [package "DESeq2"]

Slots:
<lines deleted>
Name:                      assays                      NAMES
Class:                     Assays            characterORNULL
<more lines deleted>
> showClass("RangedSummarizedExperiment")
Class "RangedSummarizedExperiment" [package "SummarizedExperiment"]

Slots:
<lines deleted>

Name:                      assays                      NAMES
Class:                     Assays          character_OR_NULL
<and so on>

RangedSummarizedExperiment has character_OR_NULL and DESeq2 has characterORNULL. I thought the latter was obsolete. This is also the one that shows up in the error message.

 

ADD REPLYlink written 17 months ago by JWCarlson70

I'm starting to get more suspicious of the change in the S4Vectors package. Renaming characterORNULL to character_OR_NULL happened in 0.14.0 9 days ago.

What is your version of S4Vectors?

ADD REPLYlink written 17 months ago by JWCarlson70

Does BiocInstaller::biocValid() point to any problems?

ADD REPLYlink written 17 months ago by Martin Morgan ♦♦ 22k

@JWCarlson found the workaround.. (he hit the 5-post limit)

The DESeq2 package will need to be tweaked to account for the latest change in S4Vectors.
Creating the class definitions:
setClassUnion("characterORNULL", c("character", "NULL”))
setClassUnion(“DataTableORNULL", c(“DataTable", "NULL”))
These were defined in the old S4Vectors but not in the latest version.

ADD REPLYlink written 17 months ago by Avinash S40

That is not the right solution. The slot NAMES comes from SummarizedExperiment; does SummarizedExperiment::SummarizedExperiment() work? Does getClass("SummarizedExperiment") show character_or_NULL ? Are there two versions of SummarizedExperiment installed, maybe tested with

> sum(dir(.libPaths()) == "SummarizedExperiment") != 1
[1] FALSE
ADD REPLYlink written 17 months ago by Martin Morgan ♦♦ 22k
1

Thanks Martin for helping to dive into this.

I just updated all Bioc packages on my machine and DESeq2 builds and passes CHECK as it does on Bioc servers.

ADD REPLYlink written 17 months ago by Michael Love19k

I recognize that my setClassUnion call is a hack. It's a workaround until this gets sorted out and something to convince me that this really is the issue.

In answer to your questions, the constructor works and it shows character_OR_NULL. (As does RangedSummarizedExperiment; DESeqDataSet show NAMES is characterORNULL). And it looks like I have only 1 version installed.

> SummarizedExperiment::SummarizedExperiment()
class: SummarizedExperiment
dim: 0 0
metadata(0):
assays(0):
rownames: NULL
rowData names(0):
colnames: NULL
colData names(0):
> getClass("SummarizedExperiment")
Class "SummarizedExperiment" [package "SummarizedExperiment"]

Slots:

Name:            colData            assays             NAMES   elementMetadata
Class:         DataFrame            Assays character_OR_NULL         DataFrame

Name:           metadata
Class:              list

Extends:
Class "Vector", directly
Class "Annotated", by class "Vector", distance 2

Known Subclasses:
Class "RangedSummarizedExperiment", directly, with explicit coerce

> sum(dir(.libPaths()) == "SummarizedExperiment")
[1] 1
ADD REPLYlink modified 17 months ago • written 17 months ago by JWCarlson70

Here is what I get for the NAMES slot of DESeqDataSet today. I don't believe that the version bump in SummarizedExperiment is relevant. 

> library(DESeq2)
> library(tximport)
> testthat::test_file("~/bioc/DESeq2/DESeq2/tests/testthat/test_tximport.R")
tximport: .

DONE ===========================================================================

> showClass("DESeqDataSet")
Class "DESeqDataSet" [package "DESeq2"]

Slots:

Name:                      design         dispersionFunction
Class:                    formula                   function

Name:                   rowRanges                    colData
Class: GenomicRangesORGRangesList                  DataFrame

Name:                      assays                      NAMES
Class:                     Assays          character_OR_NULL

Name:             elementMetadata                   metadata
Class:                  DataFrame                       list

Extends:
Class "RangedSummarizedExperiment", directly
Class "SummarizedExperiment", by class "RangedSummarizedExperiment", distance 2
Class "Vector", by class "RangedSummarizedExperiment", distance 3
Class "Annotated", by class "RangedSummarizedExperiment", distance 4

> sessionInfo()
R version 3.4.0 (2017-04-21)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: OS X El Capitan 10.11.6

Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] parallel  stats4    stats     graphics  grDevices datasets  utils
[8] methods   base

other attached packages:
 [1] readr_1.1.0                tximportData_1.4.0
 [3] tximport_1.4.0             DESeq2_1.16.0
 [5] SummarizedExperiment_1.6.1 DelayedArray_0.2.0
 [7] matrixStats_0.52.2         Biobase_2.36.1
 [9] GenomicRanges_1.28.1       GenomeInfoDb_1.12.0
[11] IRanges_2.10.0             S4Vectors_0.14.0
[13] BiocGenerics_0.22.0        BiocInstaller_1.26.0
[15] testthat_1.0.2             devtools_1.12.0

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.10            locfit_1.5-9.1          lattice_0.20-35
 [4] digest_0.6.12           R6_2.2.0                plyr_1.8.4
 [7] backports_1.0.5         acepack_1.4.1           RSQLite_1.1-2
[10] ggplot2_2.2.1           zlibbioc_1.22.0         lazyeval_0.2.0
[13] data.table_1.10.4       annotate_1.54.0         rpart_4.1-11
[16] Matrix_1.2-10           checkmate_1.8.2         splines_3.4.0
[19] BiocParallel_1.10.1     geneplotter_1.54.0      stringr_1.2.0
[22] foreign_0.8-68          htmlwidgets_0.8         RCurl_1.95-4.8
[25] munsell_0.4.3           compiler_3.4.0          base64enc_0.1-3
[28] htmltools_0.3.6         nnet_7.3-12             tibble_1.3.0
[31] gridExtra_2.2.1         htmlTable_1.9           GenomeInfoDbData_0.99.0
[34] Hmisc_4.0-3             XML_3.98-1.6            crayon_1.3.2
[37] withr_1.0.2             bitops_1.0-6            grid_3.4.0
[40] xtable_1.8-2            gtable_0.2.0            DBI_0.6-1
[43] magrittr_1.5            scales_0.4.1            stringi_1.1.5
[46] XVector_0.16.0          genefilter_1.58.0       latticeExtra_0.6-28
[49] Formula_1.2-1           rjson_0.2.15            RColorBrewer_1.1-2
[52] tools_3.4.0             hms_0.3                 survival_2.41-3
[55] AnnotationDbi_1.38.0    colorspace_1.3-2        cluster_2.0.6
[58] memoise_1.1.0           knitr_1.15.1
ADD REPLYlink written 17 months ago by Michael Love19k
0
gravatar for Michael Love
17 months ago by
Michael Love19k
United States
Michael Love19k wrote:

Can you run biocLite() once again to grab any changes since the release?

The DESeqDataSetFromTximport example is working fine on the Bioc machines and on mine:

https://bioconductor.org/packages/release/bioc/vignettes/tximport/inst/doc/tximport.html#deseq2

ADD COMMENTlink written 17 months ago by Michael Love19k

Thanks for your work on this Michael.

This is what I upgraded:

> biocLite()
BioC_mirror: https://bioconductor.org
Using Bioconductor 3.5 (BiocInstaller 1.26.0), R 3.4.0 (2017-04-21).
Old packages: 'Biobase', 'BiocParallel', 'GenomicRanges',
  'SummarizedExperiment'

I updated all. If I take out my setClassUnion hack, I still see:

> dds = DESeqDataSetFromTximport(txi, sampleTable, ~ tissue)
Error in checkSlotAssignment(object, name, value) : 
  assignment of an object of class "NULL" is not valid for slot 'NAMES' in an object of class "DESeqDataSet"; is(value, "characterORNULL") is not TRUE

It still works with my hack in place.

 

 

ADD REPLYlink written 17 months ago by JWCarlson70

I'm kind of baffled. It seems like there is an older version of some packages sneaking in, but I don't know how or why.

ADD REPLYlink written 17 months ago by Michael Love19k

Yes. It's a strange thing. When I look at showClass("DESeqDataSet"), NAMES is charcterORNULL. But your results show that it is character_OR_NULL.

I agree that from all appearances, my initialization of DESeqDataSet looks like it's pulling in an older version of S4Vectors. I've stepped through the initialization of DESeqDataSet and it looks to me that NAMES in S4Vectors inside the initialization of DESeqDataSet is characterORNULL. But I cannot find where that is done. I'll look some more and see if I can find it.

ADD REPLYlink written 17 months ago by JWCarlson70

I had this issue. Turns out I had the new version installed on my machine as the root user but an older version of DESeq2 and BioCinstaller in my ~/R/x86_64-pc-linux-gnu-library/3.4. Manually removed the packages from my users local R library and reran bioClite() then it worked.

ADD REPLYlink written 13 months ago by craigmonger10
Please log in to add an answer.

Help
Access

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 2.2.0
Traffic: 246 users visited in the last hour