Skip to content

Commit

Permalink
version 3.1
Browse files Browse the repository at this point in the history
  • Loading branch information
Yanchun123 authored and cran-robot committed Mar 5, 2020
1 parent a5119ed commit f3891f3
Show file tree
Hide file tree
Showing 19 changed files with 340 additions and 416 deletions.
14 changes: 8 additions & 6 deletions DESCRIPTION
@@ -1,15 +1,17 @@
Package: enRich
Type: Package
Title: An R Package for the Analysis of Multiple ChIP-Seq Data
Version: 3.0
Date: 2015-10-19
Title: Analysis of Multiple ChIP-Seq Data
Version: 3.1
Date: 2020-02-03
Author: Yanchun Bao, Veronica Vinciotti
Maintainer: Yanchun Bao <ybaoa@essex.ac.uk>
Description: An R package for joint statistical modelling of ChIP-seq data, accounting for technical/biological replicates, multiple conditions and different ChIP efficiencies of the individual experiments.
Description: Joint statistical modelling of ChIP-seq data, accounting for technical/biological replicates, multiple conditions and different ChIP efficiencies of the individual experiments. <DOI:10.1186/1471-2105-14-169>. <DOI:10.1093/biostatistics/kxt047>.
Depends: R(>= 3.2.2), parallel
License: GPL-2
LazyLoad: yes
RoxygenNote: 7.0.2
Encoding: UTF-8
NeedsCompilation: yes
Packaged: 2015-10-24 12:05:11 UTC; hongsheng
Packaged: 2020-03-04 12:04:32 UTC; ybaoa
Repository: CRAN
Date/Publication: 2015-10-24 18:19:26
Date/Publication: 2020-03-05 12:20:05 UTC
34 changes: 17 additions & 17 deletions MD5
@@ -1,41 +1,41 @@
40d5b94166709b388cece35bd1084111 *DESCRIPTION
2d80ee620ef63f6f377c3338efe5b99e *NAMESPACE
bf6930743809c4d58f9c670d80bb85ee *DESCRIPTION
69c7c5f7e766565e201ebd4b8bb61607 *NAMESPACE
c2d161145fe5f54aaf850dd0b86b24b7 *R/FDR.R
0de35362a72a63dae57766d58329d476 *R/IPE.R
58c23cc8dbe449d7532a43d9f0a63475 *R/NBlike_phi_offset.R
1e36698d0ceaf5bfe3174e2267056c9b *R/enrich.mix.R
c34bdb88566012459417c6eba19d5f8e *R/enrich.mrf.R
a8efc832733c327427778a866133bb17 *R/mix.R
f6f5ff7b75d0a8f1c6ac9d0c0e004146 *R/mix.R
14b59160492386fb590c52db8d5da8bf *R/mix.joint.R
dadd96f5b98b4fa133cea54b1091552d *R/mix_offset.R
3e673636f87af251956b7b63ee1b5a16 *R/mix_single.R
041321ec3173ac886ef5efe78023bbff *R/mix_srsp1.R
91cd65fb2f580792ef6a19434b3ffea2 *R/mix_srsp1.R
dadd96f5b98b4fa133cea54b1091552d *R/mixfit_offset.R
257d3aaf3ebe645a537cc452c0d2c639 *R/mloglike_offsetNB.R
cb8c5f8392eb06ee89f5df9750d90fac *R/mloglike_offsetpois.R
321515d47aa8728300cf65da57f1f40d *R/mrf.R
3bb1d9ba552de6119689d1fd64aa47e8 *R/mrf.joint.R
c883d500bb6e6e52539a2ca5ee4cfec6 *R/mrf_rep.R
8a6cbb16641baa94acf3b9e08e134fc1 *R/mrf_single.R
48713fd9899bb2f74e4b9a6c5eb26a0c *R/mrf.joint.R
37455d05a35125a802da7ae665602848 *R/mrf_rep.R
040a5f7df15c85bea449a75894681f96 *R/mrf_single.R
446c14c29533399f452491799b8eaf3e *R/mrf_sp.R
071b86a420dbab1172e04347bd2770e4 *R/mrf_srsp.R
9cb4b5212ff81b46d91c07733506e438 *R/pprob.R
76e34f89608959cbe3c821ed057edaf0 *R/pprob_joint.R
e27bec8e0ac77f83968df29a7d10e346 *data/datalist
f58550e058c35683812dd62365ac8fee *data/p300cbp.1000bp.rda
316e900cbcb530392c28f8a57deae5c8 *data/p300cbp.200bp.rda
039111d6a07ff940cb518a5fe7ba48b9 *man/FDR.Rd
4b3f80b27fde8ec04315aadaff705557 *man/IPE.Rd
726e4bc150b85b841bc33d5b63e0d18f *man/enRich-package.Rd
0281943b58998511e9bfce6c6e898a2b *man/enrich.mix.Rd
115bf00f69f0228141daba5256f0e863 *man/enrich.mrf.Rd
4b787bd023403d2e4f604b5950f4cce2 *man/mix.Rd
8aa77f735cb1f7064830341858fc7016 *man/mix.joint.Rd
52358956cb582d936c83f878dcb659d2 *man/mrf.Rd
063b4ae3d1f13e35345126c6c6c2b125 *man/mrf.joint.Rd
2adb82115200298799ad7f7e4d72b6a9 *man/enRich-package.Rd
ce7d36e3538996fc8825a4386c4f9087 *man/enrich.mix.Rd
77a5af447cd3bab142f7f4a6d655dda1 *man/enrich.mrf.Rd
569c3e0a2adf0db57cf66b6cdb8cf373 *man/mix.Rd
cc7fa2bf70adfd4c7afc8f802aa0a0e3 *man/mix.joint.Rd
9c3a8181690d7a8c528483ecfc24bed9 *man/mrf.Rd
10ff1eb55e7958a3d0893970b65995fb *man/mrf.joint.Rd
494ad59e5cb59d8c588bde57d032c170 *man/p300cbp.1000bp.Rd
73b12c77e4daa17ae3e0a3ec7810c1ce *man/p300cbp.200bp.Rd
c026ad10807e871c0afda967290ef1dd *man/p300cbp.200bp.Rd
872b15bca3db76fb1c74386344696506 *src/MRF.c
b714b28fd3d3cebffa0e9344e5238e8a *src/MRFrep.c
3de2d8d5ead59073103e504ba0670359 *src/MRFsp.c
9fc3955dce49e6406eec9ddda47d1e37 *src/MRFsrsp.c
e8e3408df5fc4ed8e1c65cd28dab5ec1 *src/MRFsrsp.c
c1baac4a5ad8674003ea737c76f2f19a *src/registerDynamicSymbol.c
2 changes: 1 addition & 1 deletion NAMESPACE
@@ -1,4 +1,4 @@
useDynLib(enRich)
useDynLib(enRich, .registration=TRUE)
export(mrf, mrf.joint, enrich.mrf, enrich.mix, FDR, IPE, mix, mix.joint)
importFrom("stats", approx, dnbinom, dpois, optim, pnbinom, ppois)
importFrom("utils", sessionInfo)
Expand Down
2 changes: 1 addition & 1 deletion R/mix.R
@@ -1,4 +1,4 @@
mix<-function(data, method=NULL, initialpara=NULL,fixoffset=FALSE, fixk=3,krange=c(0:10), exp.label=NULL, stopdiff=0.0001, parallel=TRUE)
mix<-function(data, method=NULL, initialpara=NULL,fixoffset=FALSE, fixk=3,krange=c(0:10), exp.label=NULL, stopdiff=0.0001, parallel=FALSE)
{
## INPUT
## data: list of data, the first list is the region, which is a n x 3 matrix, where the name of the columns are ("Chromosome", "Start", "Stop")
Expand Down
91 changes: 49 additions & 42 deletions R/mix_srsp1.R
Expand Up @@ -53,7 +53,7 @@ mix_srsp1 <-function(datasr, datasp, method=NULL, initialpara_sr, initialpara_sp
para_sp=c(para_sp, initialpara_sp[((i-1)*6+2):((i-1)*6+6)])
}
}
}
}
p=temp1/(sum(Nsr)+sum(Nsp))
para=c(p, para_sr, para_sp)
k1=1
Expand All @@ -63,11 +63,11 @@ mix_srsp1 <-function(datasr, datasp, method=NULL, initialpara_sr, initialpara_sp
if (Nsp==1)
datasp=cbind(datasp, 0)

#Iterative steps
#Iterative steps
while (any(difference>stopdiff)&(k1<stopN))
{
paratemp=para

#1 iterative classification (E-step)
pr1=matrix(0, N, Np)
pr0=matrix(0, N, Np)
Expand All @@ -82,22 +82,22 @@ mix_srsp1 <-function(datasr, datasp, method=NULL, initialpara_sr, initialpara_sp
{
j2=sum(Nsr[0:(j-1)])+j1
if (method=="Poisson")
{
{
pr1[,j]=pr1[,j]+ifelse(datasr[,j2]<para_sr[(j2-1)*3+3], log(0.00001), dpois(datasr[,j2]-para_sr[(j2-1)*3+3],para_sr[(j2-1)*3+1], log=TRUE))
pr0[,j]=pr0[,j]+dpois(datasr[,j2], para_sr[(j2-1)*3+2], log=TRUE)
}
if (method=="NB")
{
pr1[,j]=pr1[,j]+ifelse(datasr[,j2]<para_sr[(j2-1)*5+5], log(0.00001), dnbinom(datasr[,j2]-para_sr[(j2-1)*5+5], para_sr[(j2-1)*5+2],,para_sr[(j2-1)*5+1], log=TRUE))
pr0[,j]=pr0[,j]+dnbinom(datasr[,j2], para_sr[(j2-1)*5+4],,para_sr[(j2-1)*5+3], log=TRUE)
{
pr1[,j]=pr1[,j]+ifelse(datasr[,j2]<para_sr[(j2-1)*5+5], log(0.00001), dnbinom(datasr[,j2]-para_sr[(j2-1)*5+5], para_sr[(j2-1)*5+2],para_sr[(j2-1)*5+1], log=TRUE))
pr0[,j]=pr0[,j]+dnbinom(datasr[,j2], para_sr[(j2-1)*5+4],para_sr[(j2-1)*5+3], log=TRUE)
}
}
}
}
if (Nsp>0)
{
for (j in (Ns+1):Np)## same p for non-replicates
{
{
j2=j-Ns
if (method=="Poisson")
{
Expand All @@ -106,11 +106,11 @@ mix_srsp1 <-function(datasr, datasp, method=NULL, initialpara_sr, initialpara_sp
}
if (method=="NB")
{
pr1[, j]=ifelse(datasp[,j2]<para_sp[(j2-1)*5+5], log(0.00001), dnbinom(datasp[,j2]-para_sp[(j2-1)*5+5], para_sp[(j2-1)*5+2],,para_sp[(j2-1)*5+1], log=TRUE))
pr0[, j]=dnbinom(datasp[,j2], para_sp[(j2-1)*5+4],,para_sp[(j2-1)*5+3], log=TRUE)
pr1[, j]=ifelse(datasp[,j2]<para_sp[(j2-1)*5+5], log(0.00001), dnbinom(datasp[,j2]-para_sp[(j2-1)*5+5], para_sp[(j2-1)*5+2],para_sp[(j2-1)*5+1], log=TRUE))
pr0[, j]=dnbinom(datasp[,j2], para_sp[(j2-1)*5+4],para_sp[(j2-1)*5+3], log=TRUE)
}
}
}
}
for (j in 1:Np)
{
pr1[,j]=pr1[,j]+log(p)
Expand Down Expand Up @@ -147,7 +147,7 @@ mix_srsp1 <-function(datasr, datasp, method=NULL, initialpara_sr, initialpara_sp
if (Nsp>0)
{
for (j in (Ns+1):Np)## same p for non-replicates
{
{
j2=j-Ns
if (method=="Poisson")
{
Expand All @@ -167,54 +167,61 @@ mix_srsp1 <-function(datasr, datasp, method=NULL, initialpara_sr, initialpara_sp
para=c(p, para_sr, para_sp)
difference=abs(para-paratemp)
k1=k1+1
}
}
#para1=c(para_sr, para_sp)


## subfunction
arrpara<-function(para, method)
{
if (method=="Poisson")
{
Nexp=length(para)/3
parameter=matrix(0, Nexp, 3)
colnames(parameter)=c("lambda_S", "lambda_B", "k")
for (j in 1:Nexp)
{
parameter[j,1:3]=para[((j-1)*3+1):((j-1)*3+3)]
}
}
if (method=="NB")
{
Nexp=length(para)/5
parameter=matrix(0, Nexp, 5)
colnames(parameter)=c("mus", "phis", "mub", "phib", "k")
for (j in 1:Nexp)
{
parameter[j,1:5]=para[((j-1)*5+1):((j-1)*5+5)]
}
}
rownames(parameter)=rownames(parameter, do.NULL = FALSE, prefix = "Experiment")
return(parameter)
}
if (Ns>0)
{
temp_sr=arrpara(para_sr, method=method)
temp_sr=cbind(rep(p,sum(Nsr)), temp_sr)
colnames(temp_sr)[1]="p"
colnames(temp_sr)[1]="p"
temp_sr=round(temp_sr, digits=4)
}else
{
temp_sr=NULL
}
if (Np>0)
if (Nsp>0) ## used to be if (Np>0) but it's always satisfy but para_sp has no value so
{
temp_sp=arrpara(para_sp, method=method)
temp_sp=cbind(rep(p,sum(Nsp)), temp_sp)
colnames(temp_sp)[1]="p"
temp_sp=round(temp_sp, digits=4)
}else
{
temp_sr=NULL
temp_sp=NULL
}


parameter=list(para_sr=temp_sr, para_sp=temp_sp)
return(parameter)
}

## subfunction
arrpara<-function(npara, method)
{
if (method=="Poisson")
{
Nexp=length(npara)/3
#Nexp=floor(length(npara)/3)
parameter=matrix(0, Nexp, 3)
colnames(parameter)=c("lambda_S", "lambda_B", "k")
for (j in 1:Nexp)
{
parameter[j,1:3]=npara[((j-1)*3+1):((j-1)*3+3)]
}
}
if (method=="NB")
{
Nexp=length(npara)/5
#Nexp=floor(length(npara)/5)
parameter=matrix(0, Nexp, 5)
colnames(parameter)=c("mus", "phis", "mub", "phib", "k")
for (j in 1:Nexp)
{
parameter[j,1:5]=npara[((j-1)*5+1):((j-1)*5+5)]
}
}
rownames(parameter)=rownames(parameter, do.NULL = FALSE, prefix = "Experiment")
return(parameter)
}
2 changes: 1 addition & 1 deletion R/mrf.joint.R
@@ -1,4 +1,4 @@
mrf.joint <-function(data, method=NULL, rep.vec=NULL, p.vec=NULL, exp.label=NULL, Niterations=10000, Nburnin=5000, Poisprior=NULL, NBprior=NULL, PoisNBprior=NULL, var.NB=NULL, var.q=NULL, parallel=TRUE)
mrf.joint <-function(data, method=NULL, rep.vec=NULL, p.vec=NULL, exp.label=NULL, Niterations=10000, Nburnin=5000, Poisprior=NULL, NBprior=NULL, PoisNBprior=NULL, var.NB=NULL, var.q=NULL, parallel=FALSE)
{
## INPUT
## data: list of data, the first list is the region, which is a n x 3 matrix, where the name of the columns are ("chr", "start", "end")
Expand Down
16 changes: 8 additions & 8 deletions R/mrf_rep.R
@@ -1,5 +1,5 @@
mrf_rep<-function(data1, method=method, Niterations=10000, Nburnin=5000, Poisprior=NULL, NBprior=NULL, PoisNBprior=NULL, var.NB=NULL)
{
{
data1=as.matrix(data1)
Nrep=ncol(data1)#we expect have p experiment, so data1 is in form of matrix with n row and p col.
Na=Niterations
Expand Down Expand Up @@ -38,25 +38,25 @@ mrf_rep<-function(data1, method=method, Niterations=10000, Nburnin=5000, Poispri
if (is.null(Poisprior))
{
Poisprior=rep(c(0, 0, 0.5, 1), Nrep)
}
}
if (is.null(NBprior))
{
NBprior=rep(c(5, 1, 1, 1, 0, 0, 0, 0), Nrep)
}
if (is.null(var.NB))
{
var.NB=rep(c(0.1, 0.1, 0, 0), Nrep)
}
}
if (length(var.NB)==2*Nrep)
{
tvar.NB=NULL
for (i in 1:Nrep)
{
tvar.NB=c(tvar.NB, var.NB[((i-1)*2+1):((i-1)*2+2)], 0, 0)
}
var.NB=tvar.NB
var.NB=tvar.NB
}
}
}
if (method=="Poisson")
{
met=1
Expand All @@ -78,9 +78,9 @@ mrf_rep<-function(data1, method=method, Niterations=10000, Nburnin=5000, Poispri
if (is.null(var.NB))
{
var.NB=rep(c(0.1, 0.1, 0.1, 0.1), Nrep)
}
}
}
temp=.C("MRFrep", as.integer(newdata1), as.integer(Nrep), as.integer(size), as.integer(met), as.double(qprior), as.double(piprior), as.double(Poisprior), as.double(NBprior), as.integer(Na), as.integer(Nb), as.integer(jumpN), as.double(var.NB), PP=as.double(PP), es_pi=as.double(es_pi), es_q1=as.double(es_q1), es_q0=as.double(es_q0), es_lambda1=as.double(es_lambda1), es_mu1=as.double(es_mu1), es_phi1=as.double(es_phi1), es_lambda0=as.double(es_lambda0), es_mu0=as.double(es_mu0), es_phi0=as.double(es_phi0), loglikeli=as.double(loglikeli), acrate=as.double(acrate), PACKAGE = "enRich")
temp=.C("MRFrep", as.integer(newdata1), as.integer(Nrep), as.integer(size), as.integer(met), as.double(qprior), as.double(piprior), as.double(Poisprior), as.double(NBprior), as.integer(Na), as.integer(Nb), as.integer(jumpN), as.double(var.NB), PP=as.double(PP), es_pi=as.double(es_pi), es_q1=as.double(es_q1), es_q0=as.double(es_q0), es_lambda1=as.double(es_lambda1), es_mu1=as.double(es_mu1), es_phi1=as.double(es_phi1), es_lambda0=as.double(es_lambda0), es_mu0=as.double(es_mu0), es_phi0=as.double(es_phi0), loglikeli=as.double(loglikeli), acrate=as.double(acrate))#, PACKAGE = "enRich")
pi=t(matrix(temp$es_pi, Nrep, Nsample))
mu1=t(matrix(temp$es_mu1, Nrep, Nsample))
phi1=t(matrix(temp$es_phi1, Nrep, Nsample))
Expand All @@ -92,7 +92,7 @@ mrf_rep<-function(data1, method=method, Niterations=10000, Nburnin=5000, Poispri
q0=temp$es_q0
para=list()
if (met==0)
{
{
for (i in 1:Nrep)
{
para[[i]]=cbind(q1=q1, q0=q0, mu1=mu1[,i], phi1=phi1[,i],pi=pi[,i], lambda0=lambda0[,i])
Expand Down
24 changes: 12 additions & 12 deletions R/mrf_single.R
@@ -1,18 +1,18 @@
mrf_single<-function(data, met, Niterations=10000, Nburnin=5000, Poisprior=c(5, 1, 0.5, 1), NBprior=c(5, 1, 1, 1, 0.5, 1, 1, 1), PoisNBprior=c(5,1,1,1, 0.5,1), var.NB=c(0.1, 0.1, 0.1, 0.1))
{
{
## INPUT
## data: the counts of a single ChIP experiment, which is a vector of size n. where n is the number of regions and p is the number of experiments.
## data: the counts of a single ChIP experiment, which is a vector of size n. where n is the number of regions and p is the number of experiments.
## met: The code denote the method, be 0 for "PoisNB", 1 for "Poisson" and 2 for "NB" and it refers to the densities of the mixture distribution.
## Niterations: the number of MCMC iteration steps.
## Niterations: the number of MCMC iteration steps.
## Nburnin: the number of burn-in steps.
## Poisprior: the gamma priors for mean parameter lambda in Poisson-Poisson mixture, the first two are priors for signal and the second two are priors for background.
## Default values are (5,1, 0.5, 1).
## NBprior: the gamma priors for mean mu and overdispersion parameters phi in NB-NB mixture, the first two are priors for mu_S for signal, the third and fourth are priors for phi_S
## Poisprior: the gamma priors for mean parameter lambda in Poisson-Poisson mixture, the first two are priors for signal and the second two are priors for background.
## Default values are (5,1, 0.5, 1).
## NBprior: the gamma priors for mean mu and overdispersion parameters phi in NB-NB mixture, the first two are priors for mu_S for signal, the third and fourth are priors for phi_S
## the fifth and sixth are priors for mu_B of background and the seventh and eighth are priors for phi_B. Default values are (5, 1, 1, 1, 0.5, 1, 1, 1).
## PoisNBprior: the gamma priors for lambda_B and mu_S, phi_S in Poisson-NB mixture, the first two are priors for mu_S, the third and the fourth are priors for phi_S,
## the fifth and the sixth are priors for lambda_B. Default values are (5, 1,1,1, 0.5, 1).
## var.NB: the variances used in Metropolis-Hastling algorithm for estimates of (mu_S, phi_S, mu_B, phi_B) for NB mixture or for estimates of (mu_S, phi_S) for poisNB mixture.
## Default values are (0.1, 0.1, 0.1, 0.1) or (0.1, 0.1) for NB and poisNB respectively.
## PoisNBprior: the gamma priors for lambda_B and mu_S, phi_S in Poisson-NB mixture, the first two are priors for mu_S, the third and the fourth are priors for phi_S,
## the fifth and the sixth are priors for lambda_B. Default values are (5, 1,1,1, 0.5, 1).
## var.NB: the variances used in Metropolis-Hastling algorithm for estimates of (mu_S, phi_S, mu_B, phi_B) for NB mixture or for estimates of (mu_S, phi_S) for poisNB mixture.
## Default values are (0.1, 0.1, 0.1, 0.1) or (0.1, 0.1) for NB and poisNB respectively.

data1=data
qprior=c(2.0, 2.0, 2.0, 2.0)
Expand All @@ -33,8 +33,8 @@ mrf_single<-function(data, met, Niterations=10000, Nburnin=5000, Poisprior=c(5,
es_phi0=numeric(N)
es_phi1=numeric(N)
loglikeli=numeric(N)
acrate=numeric(4)
temp=.C("MRF", as.integer(data1), as.integer(size), as.integer(met), as.double(qprior), as.double(piprior), as.double(Poisprior), as.double(NBprior), as.integer(Na), as.integer(Nb), as.integer(jumpN), as.double(var.NB), PP=as.double(PP), es_pi=as.double(es_pi), es_q1=as.double(es_q1), es_q0=as.double(es_q0), es_lambda1=as.double(es_lambda1), es_mu1=as.double(es_mu1), es_phi1=as.double(es_phi1), es_lambda0=as.double(es_lambda0), es_mu0=as.double(es_mu0), es_phi0=as.double(es_phi0), loglikeli=as.double(loglikeli), acrate=as.double(acrate), PACKAGE = "enRich")
acrate=numeric(4)
temp=.C("MRF", as.integer(data1), as.integer(size), as.integer(met), as.double(qprior), as.double(piprior), as.double(Poisprior), as.double(NBprior), as.integer(Na), as.integer(Nb), as.integer(jumpN), as.double(var.NB), PP=as.double(PP), es_pi=as.double(es_pi), es_q1=as.double(es_q1), es_q0=as.double(es_q0), es_lambda1=as.double(es_lambda1), es_mu1=as.double(es_mu1), es_phi1=as.double(es_phi1), es_lambda0=as.double(es_lambda0), es_mu0=as.double(es_mu0), es_phi0=as.double(es_phi0), loglikeli=as.double(loglikeli), acrate=as.double(acrate))#, PACKAGE = "enRich")
if (met==0)
{
para.sample=cbind( q1=temp$es_q1, q0=temp$es_q0, mu_S=temp$es_mu1, phi_S=temp$es_phi1, pi=temp$es_pi, lambda_B=temp$es_lambda0)
Expand Down
2 changes: 0 additions & 2 deletions data/datalist

This file was deleted.

6 changes: 3 additions & 3 deletions man/enRich-package.Rd
Expand Up @@ -3,7 +3,7 @@
\alias{enRich}
\docType{package}
\title{
An R package for the analysis of multiple ChIP-seq data.
Analysis of multiple ChIP-seq data.
}
\description{
enRich is an R package that performs a joint statistical modelling of ChIP-seq data, accounting for technical/biological replicates, multiple conditions and
Expand All @@ -13,8 +13,8 @@ the different IP efficiencies of individual experiments.
\tabular{ll}{
Package: \tab enRich\cr
Type: \tab Package\cr
Version: \tab 3.0\cr
Date: \tab 2015-10-19\cr
Version: \tab 3.1\cr
Date: \tab 2020-02-03\cr
Depends: \tab R(>= 3.2.2), parallel\cr
License: \tab GPL (>=2)\cr
LazyLoad: \tab yes\cr
Expand Down

0 comments on commit f3891f3

Please sign in to comment.