[BioC] Restoring TranscriptDb object crashes R-session

Martin Morgan mtmorgan at fhcrc.org
Sat Dec 3 19:27:31 CET 2011


On 12/03/2011 07:44 AM, Halian Vilela wrote:
> Hi guys, this week I've managed to construct a TranscripDb object from the
> gene database I was using for analysis, and for my surprise every time I
> try to use the saved txdb data my Rsession crashes!
>
> When I generate a fresh object using the makeTranscriptDb() function
> everything works flawlessly, but whenever I save the object (with save() or
> when the object is within a saved workspace) and try to reload it then R

Hi Halian --

As you've discovered the right thing to do is to use saveFeatures / 
loadFeatures.

The problem is that the object contains a connection to the SQLite data 
base, and that connection is not being saved and restored correctly. In 
some ways it can't always be saved and restored, e.g., if between R 
sessions you were to change the location where the data base were 
stored. So I think the base expectation is 'it won't work to save() / 
load()'.

At the same time it shouldn't crash your R session. I think the problem 
is lower in the hierarchy, e.g.,

   library(RSQLite)
   m <- dbDriver("SQLite")
   con <- dbConnect(m, dbname = tempfile())
   data(USArrests)
   dbWriteTable(con, "USArrests", USArrests)

   ## read on an expired connection segfaults
   dbDisconnect(con)
   dbReadTable(con, "USArrests")

I'll bring this to the attention of the RSQLite maintainer.

Thanks for the report.

Martin


> crashes. I'm using the Rstudio IDE, so it realy crashes and exit the
> program. If I try to use it in the command line interface, then I get the
> following traceback:
>
> ##################################### TRACEBACK
> #########################################
>> txdb
> TranscriptDb object:
>
> Traceback:
>   1: .Call("RS_SQLite_exec", conId, statement, bind.data, PACKAGE =
> .SQLitePkgName)
>   2: sqliteExecStatement(con, statement, bind.data)
>   3: sqliteQuickSQL(conn, statement, ...)
>   4: dbGetQuery(con, paste("SELECT * from", name))
>   5: dbGetQuery(con, paste("SELECT * from", name))
>   6: doTryCatch(return(expr), name, parentenv, handler)
>   7: tryCatchOne(expr, names, parentenv, handlers[[1L]])
>   8: tryCatchList(expr, classes, parentenv, handlers)
>   9: tryCatch(expr, error = function(e) {    call<- conditionCall(e)    if
> (!is.null(call)) {        if (identical(call[[1L]], quote(doTryCatch)))
>          call<- sys.call(-4L)        dcall<- deparse(call)[1L]
>   prefix<- paste("Error in",
> dcall, ": ")        LONG<- 75L        msg<- conditionMessage(e)        sm
> <- strsplit(msg, "\n")[[1L]]        w<- 14L + nchar(dcall, type = "w") +
> nchar(sm[1L], type = "w")        if (is.na(w))             w<- 14L +
> nchar(dcall, type = "b") + nch
> ar(sm[1L],                 type = "b")        if (w>  LONG)
> prefix<- paste(prefix, "\n  ", sep = "")    }    else prefix<- "Error : "
>     msg<- paste(prefix, conditionMessage(e), "\n", sep = "")
>   .Internal(seterrmessage(msg[1L]))    i
> f (!silent&&  identical(getOption("show.error.messages"),         TRUE)) {
>         cat(msg, file = stderr())        .Internal(printDeferredWarnings())
>     }    invisible(structure(msg, class = "try-error", condition = e))})
> 10: try(dbGetQuery(con, paste("SELECT * from", name)))
> 11: sqliteReadTable(conn, name, ...)
> 12: is(object, Cl)
> 13: is(object, Cl)
> 14: .valueClassTest(standardGeneric("dbReadTable"), "data.frame",
> "dbReadTable")
> 15: dbReadTable(dbConn(x), "metadata")
> 16: .local(x, ...)
> 17: metadata(object)
> 18: metadata(object)
> 19: function (object) standardGeneric("show")(<S4 object of class
> "TranscriptDb">)
> 20: function (object) standardGeneric("show")(<S4 object of class
> "TranscriptDb">)
> Error in sqliteExecStatement(con, statement, bind.data) :
>    caught access violation - continue with care
> Error in sqliteReadTable(conn, name, ...) : could not find table metadata
> ######################################## TRACEBACK END
> ############################################
>
> So what's may be going on ? I've already checked my versions, all
> Bioconductor packages are up to date, and as I said, it works without any
> errors if I just recreate the object. But this approach is very clumbersome
> because I'm using multiple machines so I have to share data constantly
> between them, the ideal approach would be being able to save the object and
> use it.
>
> Oh, it alse works if I use saveFeatures() to dump and then use
> loadFeatures() to recover, but I still thinks it's not as practical because
> I'll never get a totally functional workspace I one of the objects crashes
> my session and I have to reload it every time I want to use it.
>
> Thanks a lot,
> Halian
>
>> sessionInfo()
> R version 2.14.0 (2011-10-31)
> Platform: x86_64-pc-mingw32/x64 (64-bit)
>
> locale:
> [1] LC_COLLATE=Portuguese_Brazil.1252  LC_CTYPE=Portuguese_Brazil.1252
> [3] LC_MONETARY=Portuguese_Brazil.1252 LC_NUMERIC=C
> [5] LC_TIME=Portuguese_Brazil.1252
>
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods   base
>
> other attached packages:
> [1] GenomicFeatures_1.6.4 AnnotationDbi_1.16.5  Biobase_2.14.0
> [4] GenomicRanges_1.6.4   IRanges_1.12.3
>
> loaded via a namespace (and not attached):
>   [1] biomaRt_2.10.0     Biostrings_2.22.0  BSgenome_1.22.0    DBI_0.2-5
>   [5] RCurl_1.7-0.1      RSQLite_0.10.0     rtracklayer_1.14.4 tools_2.14.0
>   [9] XML_3.4-2.2        zlibbioc_1.0.0
>
> 	[[alternative HTML version deleted]]
>
> _______________________________________________
> Bioconductor mailing list
> Bioconductor at r-project.org
> https://stat.ethz.ch/mailman/listinfo/bioconductor
> Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor


-- 
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109

Location: M1-B861
Telephone: 206 667-2793



More information about the Bioconductor mailing list