Skip to content

multicore and AnnotaionDBI (bioconductor) problem

2 messages · Morten Hansen, Steve Weston

#
I am trying to use mclapply from package multicore on a Bioconductor function, but I get an error with the function mget from library AnnotationDbi.

When I run the following code:

	# You need to install Biobase from http://www.bioconductor.org
	require( Biobase )
	require( hgu95av2.db )
	
	getSymbol <- function ( x ) {
		return( AnnotationDbi::mget( x , hgu95av2SYMBOL ) )
	}	

	x <- list( "36090_at" , "38785_at" )

	mclapply( x , getSymbol )

I get this error:

[[1]]
[1] "Error in sqliteExecStatement(con, statement, bind.data) : \n  RS-DBI driver: (invalid dbManager handle)\n"

[[2]]
[1] "Error in sqliteExecStatement(con, statement, bind.data) : \n  RS-DBI driver: (invalid dbManager handle)\n"

It work fine with lapply instead of mclapply:

[[1]]
[[1]]$`36090_at`
[1] "TBL2"


[[2]]
[[2]]$`38785_at`
[1] "MUC1"

This could of course be a problem in the AnnotationDbi::mget function, but it looks like multicore is having some problem with RS-DBI driver.

Any suggestions?

Regards -

Morten Hansen
MD, Ph.D. student
ICMM
Panum Institute
Blegdamsvej 3B
DK-2200 Copenhagen N
#
The problem appears to be that the child processes that are forked
by the mclapply function are not able to use the database connection
that they inherited from their parent.  You need to figure out some
way for the child processes to create their own database connection
after they are created.  I'm not sure of the best strategy for doing
that in your case.  You could do some kind of test in the getSymbol
function, or use the lower level functions in the multicore package
instead of mclapply, but there might be a better option that I'm not
aware of.

- Steve
On Fri, Aug 21, 2009 at 4:24 AM, Morten Hansen<mhansen at sund.ku.dk> wrote: