I am trying to use the python module limmbo
(https://github.com/HannahVMeyer/limmbo) with R via the reticulate
R package. I have successfully installed limmbo
with Anaconda2. I'm now trying to use the function limmbo$core$vdbootstrap$LiMMBo$runBootstrapCovarianceEstimation
, as in my code below. When I run the code below, I get an error about converting a float64 to an integer64.
```{r}
library(reticulate)
import("limmbo") -> limmbo
```
I then run the python code:
```{python}
import numpy
from numpy.random import RandomState
from numpy.linalg import cholesky as chol
from limmbo.core.vdsimple import vd_reml
from limmbo.io.input import InputData
random = RandomState(15)
N = 100
S = 1000
P = 3
snps = (random.rand(N, S) < 0.2).astype(float)
kinship = numpy.dot(snps, snps.T) / float(10)
y = random.randn(N, P)
pheno = numpy.dot(chol(kinship), y)
pheno_ID = [ 'PID{}'.format(x+1) for x in range(P)]
samples = [ 'SID{}'.format(x+1) for x in range(N)]
datainput = InputData()
datainput.addPhenotypes(phenotypes = pheno,
phenotype_ID = pheno_ID, pheno_samples = samples)
datainput.addRelatedness(relatedness = kinship,
relatedness_samples = samples)
```
The problem arises when I try to run the R function limmbo$core$vdbootstrap$LiMMBo$runBootstrapCovarianceEstimation
:
```{r}
(limmbo$core$vdbootstrap$LiMMBo(py$datainput, timing = TRUE, iterations = 100, S = 2) -> foo)
limmbo$core$vdbootstrap$LiMMBo$runBootstrapCovarianceEstimation(foo, cpus = 1, seed = 12345)
```
Error in py_call_impl(callable, dots$args, dots$keywords) :
TypeError: Cannot cast array from dtype('float64') to dtype('int64') according to the rule 'safe'
Detailed traceback:
File "/Users/frederickboehm/anaconda2/lib/python2.7/site-packages/limmbo/core/vdbootstrap.py", line 96, in runBootstrapCovarianceEstimation
minCooccurrence=minCooccurrence)
File "/Users/frederickboehm/anaconda2/lib/python2.7/site-packages/limmbo/core/vdbootstrap.py", line 353, in __generateBootstrapMatrix
rand_state = np.random.RandomState(seed)
File "mtrand.pyx", line 644, in mtrand.RandomState.__init__
File "mtrand.pyx", line 687, in mtrand.RandomState.seed
Calls: <Anonymous> ... eval -> eval -> <Anonymous> -> py_call_impl -> .Call
Execution halted
First of all, import you numpy module via
np <- import("numpy", convert = FALSE)
.
And then you can re-create your numpy array with explicit type int64
by using reticulate::np_array(datainput, dtype = np$int64)
.
You can learn more about how to manipulate and create your arrays in this tutorial.
Hope this helps.