55from matplotlib .colors import LinearSegmentedColormap
66from matplotlib import colors as mpcolors
77from collections import Counter
8+ import multiprocessing
89import rpy2 .robjects .packages as rpackages
910import rpy2 .robjects as robjects
1011from rpy2 .robjects import pandas2ri , r , numpy2ri , globalenv
@@ -16,7 +17,9 @@ def computeNClusters(counts, min_size=20):
1617 from the data using Scran::quickCluster"""
1718 pandas2ri .activate ()
1819 r_counts = pandas2ri .py2ri (counts .transpose ())
19- scran = RimportLibrary ("scran" )
20+ scran = RimportLibrary ("scran" )
21+ multicore = RimportLibrary ("BiocParallel" )
22+ multicore .register (multicore .MulticoreParam (multiprocessing .cpu_count ()- 1 ))
2023 as_matrix = r ["as.matrix" ]
2124 clusters = scran .quickCluster (as_matrix (r_counts ), min_size )
2225 n_clust = len (set (clusters ))
@@ -34,7 +37,8 @@ def deaDESeq2(counts, conds, comparisons, alpha, size_factors=None):
3437 try :
3538 pandas2ri .activate ()
3639 deseq2 = RimportLibrary ("DESeq2" )
37- r ("suppressMessages(library(DESeq2))" )
40+ multicore = RimportLibrary ("BiocParallel" )
41+ multicore .register (multicore .MulticoreParam (multiprocessing .cpu_count ()- 1 ))
3842 # Create the R conditions and counts data
3943 r_counts = pandas2ri .py2ri (counts )
4044 cond = robjects .DataFrame ({"conditions" : robjects .StrVector (conds )})
@@ -74,6 +78,8 @@ def deaScranDESeq2(counts, conds, comparisons, alpha, scran_clusters=False):
7478 pandas2ri .activate ()
7579 deseq2 = RimportLibrary ("DESeq2" )
7680 scran = RimportLibrary ("scran" )
81+ multicore = RimportLibrary ("BiocParallel" )
82+ multicore .register (multicore .MulticoreParam (multiprocessing .cpu_count ()- 1 ))
7783 as_matrix = r ["as.matrix" ]
7884 # Create the R conditions and counts data
7985 r_counts = pandas2ri .py2ri (counts )
@@ -102,7 +108,12 @@ def deaScranDESeq2(counts, conds, comparisons, alpha, scran_clusters=False):
102108 # Perform the comparisons and store results in list
103109 for A ,B in comparisons :
104110 result = r .results (dds , contrast = r .c ("conditions" , A , B ), alpha = alpha )
105- result = pandas2ri .ri2py_dataframe (r ['as.data.frame' ](result ))
111+ result = r ['as.data.frame' ](result )
112+ genes = r ['rownames' ](result )
113+ result = pandas2ri .ri2py_dataframe (result )
114+ # There seems to be a problem parsing the rownames from R to pandas
115+ # so we do it manually
116+ result .index = genes
106117 results .append (result )
107118 pandas2ri .deactivate ()
108119 except Exception as e :
@@ -142,7 +153,9 @@ def Rtsne(counts, dimensions, theta=0.5, dims=50, perplexity=30, max_iter=1000):
142153 using the R package Rtsne"""
143154 pandas2ri .activate ()
144155 r_counts = pandas2ri .py2ri (counts )
145- tsne = RimportLibrary ("Rtsne" )
156+ tsne = RimportLibrary ("Rtsne" )
157+ multicore = RimportLibrary ("BiocParallel" )
158+ multicore .register (multicore .MulticoreParam (multiprocessing .cpu_count ()- 1 ))
146159 as_matrix = r ["as.matrix" ]
147160 tsne_out = tsne .Rtsne (as_matrix (counts ),
148161 dims = dimensions ,
0 commit comments