R packages
EBEN: software implements algorithms developed in the paper: Huang A., Xu S., Cai X. EBEN for multiple QTL mapping. Heredity. (2014) 10.1038/hdy.2014.79.
EBEN Package is now available on CRAN
SparseSEM: software implements algorithms developed in the paper: Huang A., et. al. Elastic Net Enabled SEM-SML in Inferring GRNs . Genome Biology. To be appear.
sparseSEM Package is now available on CRAN
EBglmnet: software implements algorithms developed in the following papers:
EBlasso: Cai X., Huang A., Xu S. Fast Empirical Bayesian Lasso for Multiple Quantitative Trait Locus Mapping. BMC Bioinformatics 12:211 (2011)
Huang A., Xu S., Cai X. Empirical Bayesian Lasso-logistic regression for multiple binary trait locus mapping. BMC Genet 14 (1), 5 (2013)
Group EBlasso: Huang, A., E. Martin, et al. (2014). "Detecting genetic interactions in pathway-based genome-wide association studies." Genet Epidemiol 38(4): 300-309.
EBEN: Huang A., Xu S., Cai X. EBEN for multiple QTL mapping. Heredity. (2014) 10.1038/hdy.2014.79.
EBglmnet Package is now available on CRAN.
R notes
MPI: an executable program or a dynamic shared object
While tutorial of writing and compiling a C/C++ executable program with Open MPI is easy to find online, there is limited resource introducing dynamic loaded libraries for Open MPI to interface with R. (It is easy to work on the executable program directly for software engineers, while R and Python are the major tools for statisticians.)
The Open MPI itself is a dynamic linked library (DLL for windows, dynamic shared objects (DSO) is a more common name in Linux), with lots of components loaded during execution (typically when MPI_INIT() is called). However, there is a barrier among these DSOs. In default, the DSOs (to be called from libmpi.so) for Open MPI are set to be global visible for the Linux process. On the other hand, the DSO you are trying to build (the MPI.so to be dynamic loaded into R) has a local name table. The hierarchy of these name tables are:
1. R: we execute a program from R
2. MPI.so: this is dynamically loaded into 1.
3. libmpi.so: this is the components linked by 2.
4. DSOs: the DSOs of Open MPI
We want 4 to be visible to 2 and 3 so we can perform parallel computing with it. However, in Linux (infact, the design of POSIX), 4 is set to be visible to 1 (global). When the program executes, 2 is trying to find 4 in its local name table. The error message reported is:
symbol lookup error: /usr/lib64/openmpi/mca_paffinity_linux.so: undefined symbol: mca_base_param_reg_int
So this barrier of visibility.
Solution:
1. Configure Open MPI with the the option: ./configure --disable-dlopen
Resulting all Open MPI components packed into libmpi.so and no secondary scope created. This seems popular when Google with the problem, only if you have permission to reinstall it on you clusters.
2. Gain access to an object file by dlopen() in C, you will need the following couple lines in your code:
#include <dlfcn.h>
void *handle;
handle = dlopen("libmpi.so", RTLD_GLOBAL | RTLD_LAZY);
Here is a link to the API http://pubs.opengroup.org/onlinepubs/009695399/functions/dlopen.html