miga-base 0.4.3.0 → 0.5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/miga/cli.rb +43 -223
- data/lib/miga/cli/action/add.rb +91 -62
- data/lib/miga/cli/action/classify_wf.rb +97 -0
- data/lib/miga/cli/action/daemon.rb +14 -10
- data/lib/miga/cli/action/derep_wf.rb +95 -0
- data/lib/miga/cli/action/doctor.rb +83 -55
- data/lib/miga/cli/action/get.rb +68 -52
- data/lib/miga/cli/action/get_db.rb +206 -0
- data/lib/miga/cli/action/index_wf.rb +31 -0
- data/lib/miga/cli/action/init.rb +115 -190
- data/lib/miga/cli/action/init/daemon_helper.rb +124 -0
- data/lib/miga/cli/action/ls.rb +20 -11
- data/lib/miga/cli/action/ncbi_get.rb +199 -157
- data/lib/miga/cli/action/preproc_wf.rb +46 -0
- data/lib/miga/cli/action/quality_wf.rb +45 -0
- data/lib/miga/cli/action/stats.rb +147 -99
- data/lib/miga/cli/action/summary.rb +10 -4
- data/lib/miga/cli/action/tax_dist.rb +61 -46
- data/lib/miga/cli/action/tax_test.rb +46 -39
- data/lib/miga/cli/action/wf.rb +178 -0
- data/lib/miga/cli/base.rb +11 -0
- data/lib/miga/cli/objects_helper.rb +88 -0
- data/lib/miga/cli/opt_helper.rb +160 -0
- data/lib/miga/daemon.rb +7 -4
- data/lib/miga/dataset/base.rb +5 -5
- data/lib/miga/project/base.rb +4 -4
- data/lib/miga/project/result.rb +2 -1
- data/lib/miga/remote_dataset/base.rb +5 -5
- data/lib/miga/remote_dataset/download.rb +1 -1
- data/lib/miga/version.rb +3 -3
- data/scripts/cds.bash +3 -1
- data/scripts/essential_genes.bash +1 -0
- data/scripts/stats.bash +1 -1
- data/scripts/trimmed_fasta.bash +5 -3
- data/utils/distance/runner.rb +3 -0
- data/utils/distance/temporal.rb +10 -1
- data/utils/enveomics/Manifest/Tasks/fasta.json +5 -0
- data/utils/enveomics/Manifest/Tasks/sequence-identity.json +7 -0
- data/utils/enveomics/Scripts/BlastTab.addlen.rb +33 -31
- data/utils/enveomics/Scripts/FastA.tag.rb +42 -41
- data/utils/enveomics/Scripts/HMM.essential.rb +85 -55
- data/utils/enveomics/Scripts/HMM.haai.rb +29 -20
- data/utils/enveomics/Scripts/SRA.download.bash +1 -1
- data/utils/enveomics/Scripts/aai.rb +163 -128
- data/utils/enveomics/build_enveomics_r.bash +11 -10
- data/utils/enveomics/enveomics.R/DESCRIPTION +3 -2
- data/utils/enveomics/enveomics.R/R/autoprune.R +141 -107
- data/utils/enveomics/enveomics.R/R/barplot.R +105 -86
- data/utils/enveomics/enveomics.R/R/cliopts.R +131 -115
- data/utils/enveomics/enveomics.R/R/df2dist.R +144 -106
- data/utils/enveomics/enveomics.R/R/growthcurve.R +201 -133
- data/utils/enveomics/enveomics.R/R/recplot.R +350 -315
- data/utils/enveomics/enveomics.R/R/recplot2.R +1334 -914
- data/utils/enveomics/enveomics.R/R/tribs.R +521 -361
- data/utils/enveomics/enveomics.R/R/utils.R +31 -15
- data/utils/enveomics/enveomics.R/README.md +7 -0
- data/utils/enveomics/enveomics.R/man/cash-enve.GrowthCurve-method.Rd +17 -0
- data/utils/enveomics/enveomics.R/man/cash-enve.RecPlot2-method.Rd +17 -0
- data/utils/enveomics/enveomics.R/man/cash-enve.RecPlot2.Peak-method.Rd +17 -0
- data/utils/enveomics/enveomics.R/man/enve.GrowthCurve-class.Rd +16 -21
- data/utils/enveomics/enveomics.R/man/enve.TRIBS-class.Rd +31 -28
- data/utils/enveomics/enveomics.R/man/enve.TRIBS.merge.Rd +23 -19
- data/utils/enveomics/enveomics.R/man/enve.TRIBStest-class.Rd +36 -26
- data/utils/enveomics/enveomics.R/man/enve.__prune.iter.Rd +23 -24
- data/utils/enveomics/enveomics.R/man/enve.__prune.reduce.Rd +23 -24
- data/utils/enveomics/enveomics.R/man/enve.__tribs.Rd +32 -33
- data/utils/enveomics/enveomics.R/man/enve.barplot.Rd +91 -64
- data/utils/enveomics/enveomics.R/man/enve.cliopts.Rd +57 -37
- data/utils/enveomics/enveomics.R/man/enve.col.alpha.Rd +24 -19
- data/utils/enveomics/enveomics.R/man/enve.col2alpha.Rd +19 -18
- data/utils/enveomics/enveomics.R/man/enve.df2dist.Rd +39 -26
- data/utils/enveomics/enveomics.R/man/enve.df2dist.group.Rd +38 -25
- data/utils/enveomics/enveomics.R/man/enve.df2dist.list.Rd +40 -26
- data/utils/enveomics/enveomics.R/man/enve.growthcurve.Rd +67 -49
- data/utils/enveomics/enveomics.R/man/enve.prune.dist.Rd +37 -28
- data/utils/enveomics/enveomics.R/man/enve.recplot.Rd +122 -97
- data/utils/enveomics/enveomics.R/man/enve.recplot2-class.Rd +35 -31
- data/utils/enveomics/enveomics.R/man/enve.recplot2.ANIr.Rd +24 -23
- data/utils/enveomics/enveomics.R/man/enve.recplot2.Rd +68 -51
- data/utils/enveomics/enveomics.R/man/enve.recplot2.__counts.Rd +25 -24
- data/utils/enveomics/enveomics.R/man/enve.recplot2.__peakHist.Rd +21 -22
- data/utils/enveomics/enveomics.R/man/enve.recplot2.__whichClosestPeak.Rd +19 -20
- data/utils/enveomics/enveomics.R/man/enve.recplot2.changeCutoff.Rd +19 -18
- data/utils/enveomics/enveomics.R/man/enve.recplot2.compareIdentities.Rd +41 -32
- data/utils/enveomics/enveomics.R/man/enve.recplot2.coordinates.Rd +29 -24
- data/utils/enveomics/enveomics.R/man/enve.recplot2.corePeak.Rd +18 -18
- data/utils/enveomics/enveomics.R/man/enve.recplot2.extractWindows.Rd +40 -34
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.Rd +36 -24
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__em_e.Rd +19 -20
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__em_m.Rd +19 -20
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__emauto_one.Rd +27 -29
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__mow_one.Rd +41 -42
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.__mower.Rd +17 -18
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.em.Rd +43 -33
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.emauto.Rd +36 -28
- data/utils/enveomics/enveomics.R/man/enve.recplot2.findPeaks.mower.Rd +74 -56
- data/utils/enveomics/enveomics.R/man/enve.recplot2.peak-class.Rd +44 -31
- data/utils/enveomics/enveomics.R/man/enve.recplot2.seqdepth.Rd +27 -22
- data/utils/enveomics/enveomics.R/man/enve.recplot2.windowDepthThreshold.Rd +32 -26
- data/utils/enveomics/enveomics.R/man/enve.tribs.Rd +59 -44
- data/utils/enveomics/enveomics.R/man/enve.tribs.test.Rd +28 -21
- data/utils/enveomics/enveomics.R/man/enve.truncate.Rd +27 -22
- data/utils/enveomics/enveomics.R/man/plot.enve.GrowthCurve.Rd +63 -43
- data/utils/enveomics/enveomics.R/man/plot.enve.TRIBS.Rd +38 -29
- data/utils/enveomics/enveomics.R/man/plot.enve.TRIBStest.Rd +38 -30
- data/utils/enveomics/enveomics.R/man/plot.enve.recplot2.Rd +111 -83
- data/utils/enveomics/enveomics.R/man/summary.enve.GrowthCurve.Rd +19 -18
- data/utils/enveomics/enveomics.R/man/summary.enve.TRIBS.Rd +19 -18
- data/utils/enveomics/enveomics.R/man/summary.enve.TRIBStest.Rd +19 -18
- data/utils/find-medoid.R +3 -2
- data/utils/representatives.rb +5 -3
- data/utils/subclade/pipeline.rb +22 -11
- data/utils/subclade/runner.rb +5 -1
- data/utils/subclades-compile.rb +1 -1
- data/utils/subclades.R +9 -3
- metadata +15 -4
- data/utils/enveomics/enveomics.R/man/enveomics.R-package.Rd +0 -15
- data/utils/enveomics/enveomics.R/man/z$-methods.Rd +0 -26
@@ -1,119 +1,135 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
requireNamespace("tools", quietly=TRUE)
|
38
|
-
if(missing(positional_arguments)) positional_arguments <- FALSE
|
39
|
-
if(missing(usage)) usage <- "usage: %prog [options]"
|
40
|
-
|
41
|
-
#= Get help (if any)
|
42
|
-
if(!missing(rd_file)){
|
43
|
-
rd <- tools::parse_Rd(rd_file)
|
44
|
-
for(i in 1:length(rd)){
|
45
|
-
tag <- attr(rd[[i]],'Rd_tag')
|
46
|
-
if(tag=="\\description" && p_desc==""){
|
47
|
-
p_desc <- paste("\n\t",as.character(rd[[i]]),sep='')
|
48
|
-
}else if(tag=="\\arguments"){
|
49
|
-
for(j in 1:length(rd[[i]])){
|
50
|
-
if(length(rd[[i]][[j]])==2){
|
51
|
-
name <- as.character(rd[[i]][[j]][[1]])
|
52
|
-
if(length(o_desc[[name]])==1) next
|
53
|
-
desc <- as.character(rd[[i]][[j]][[2]])
|
54
|
-
o_desc[[name]] <- paste(gsub("\n","\n\t\t",desc), collapse='')
|
55
|
-
}
|
56
|
-
}
|
57
|
-
}
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
#= Set options
|
62
|
-
o_i <- 0
|
63
|
-
opts <- list()
|
64
|
-
f <- formals(fx)
|
65
|
-
if(length(defaults)>0){
|
66
|
-
for(i in 1:length(defaults)) f[[names(defaults)[i]]] <- defaults[[i]]
|
67
|
-
}
|
68
|
-
for(i in names(f)){
|
69
|
-
if(i=="..." || i %in% ignore) next
|
70
|
-
o_i <- o_i + 1
|
71
|
-
flag <- gsub("\\.","-",i)
|
1
|
+
#' Enveomics: Cliopts
|
2
|
+
#'
|
3
|
+
#' Generates nicely formatted command-line interfaces for functions
|
4
|
+
#' (\strong{closures} only).
|
5
|
+
#'
|
6
|
+
#' @param fx Function for which the interface should be generated.
|
7
|
+
#' @param rd_file (Optional) .Rd file with the standard documentation of
|
8
|
+
#' the function.
|
9
|
+
#' @param positional_arguments (Optional) Number of \strong{positional}
|
10
|
+
#' arguments passed to \code{\link[optparse]{parse_args}}
|
11
|
+
#' (package: \pkg{optparse}).
|
12
|
+
#' @param usage (Optional) Usage passed to \code{\link[optparse]{OptionParser}}
|
13
|
+
#' (package: \pkg{optparse}).
|
14
|
+
#' @param mandatory Mandatory arguments.
|
15
|
+
#' @param vectorize Arguments of the function to vectorize (comma-delimited).
|
16
|
+
#' If numeric, use also \code{number}.
|
17
|
+
#' @param ignore Arguments of the function to ignore.
|
18
|
+
#' @param number Force these arguments as numerics. Useful for numeric
|
19
|
+
#' vectors (see \code{vectorize}) or arguments with no defaults.
|
20
|
+
#' @param defaults Defaults to use instead of the ones provided by the
|
21
|
+
#' formals.
|
22
|
+
#' @param o_desc Descriptions of the options. Help from \code{rd} is ignored
|
23
|
+
#' for arguments present in this list.
|
24
|
+
#' @param p_desc Description Description of the function. Help from \code{rd}
|
25
|
+
#' is ignored for the function description unless this value is an empty string.
|
26
|
+
#'
|
27
|
+
#' @return Returns a list with keys:
|
28
|
+
#' \itemize{
|
29
|
+
#' \item{\code{options}, a named list with the values for the function's
|
30
|
+
#' arguments}
|
31
|
+
#' \item{\code{args}, a vector with zero or more strings containing the
|
32
|
+
#' positional arguments}}
|
33
|
+
#'
|
34
|
+
#' @author Luis M. Rodriguez-R [aut, cre]
|
35
|
+
#'
|
36
|
+
#' @export
|
72
37
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
38
|
+
enve.cliopts <- function(
|
39
|
+
fx,
|
40
|
+
rd_file,
|
41
|
+
positional_arguments,
|
42
|
+
usage,
|
43
|
+
mandatory=c(),
|
44
|
+
vectorize=c(),
|
45
|
+
ignore=c(),
|
46
|
+
number=c(),
|
47
|
+
defaults=list(),
|
48
|
+
o_desc=list(),
|
49
|
+
p_desc=""
|
50
|
+
){
|
51
|
+
|
52
|
+
#= Load stuff
|
53
|
+
if(!suppressPackageStartupMessages(
|
54
|
+
requireNamespace("optparse", quietly=TRUE)))
|
55
|
+
stop("Package 'optparse' is required.")
|
56
|
+
requireNamespace("tools", quietly=TRUE)
|
57
|
+
if(missing(positional_arguments)) positional_arguments <- FALSE
|
58
|
+
if(missing(usage)) usage <- "usage: %prog [options]"
|
59
|
+
|
60
|
+
#= Get help (if any)
|
61
|
+
if(!missing(rd_file)){
|
62
|
+
rd <- tools::parse_Rd(rd_file)
|
63
|
+
for(i in 1:length(rd)){
|
64
|
+
tag <- attr(rd[[i]],'Rd_tag')
|
65
|
+
if(tag=="\\description" && p_desc==""){
|
66
|
+
p_desc <- paste("\n\t",as.character(rd[[i]]),sep='')
|
67
|
+
}else if(tag=="\\arguments"){
|
68
|
+
for(j in 1:length(rd[[i]])){
|
69
|
+
if(length(rd[[i]][[j]])==2){
|
70
|
+
name <- as.character(rd[[i]][[j]][[1]])
|
71
|
+
if(length(o_desc[[name]])==1) next
|
72
|
+
desc <- as.character(rd[[i]][[j]][[2]])
|
73
|
+
o_desc[[name]] <- paste(gsub("\n","\n\t\t",desc), collapse='')
|
74
|
+
}
|
75
|
+
}
|
89
76
|
}
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
80
|
+
#= Set options
|
81
|
+
o_i <- 0
|
82
|
+
opts <- list()
|
83
|
+
f <- formals(fx)
|
84
|
+
if(length(defaults)>0){
|
85
|
+
for(i in 1:length(defaults)) f[[names(defaults)[i]]] <- defaults[[i]]
|
86
|
+
}
|
87
|
+
for(i in names(f)){
|
88
|
+
if(i=="..." || i %in% ignore) next
|
89
|
+
o_i <- o_i + 1
|
90
|
+
flag <- gsub("\\.","-",i)
|
91
|
+
|
92
|
+
optopt <- list(help="")
|
93
|
+
if(length(o_desc[[i]])==1) optopt$help <- o_desc[[i]]
|
94
|
+
if(!is.null(f[[i]]) && !suppressWarnings(is.na(f[[i]])) && is.logical(f[[i]])){
|
95
|
+
optopt$opt_str <- paste(ifelse(f[[i]], "--no-", "--"), flag, sep='')
|
96
|
+
optopt$action <- ifelse(f[[i]], "store_false", "store_true")
|
97
|
+
}else{
|
98
|
+
optopt$opt_str <- paste("--", flag, sep='')
|
99
|
+
optopt$action <- "store"
|
100
|
+
optopt$help <- paste(optopt$help, "\n\t\t[",
|
101
|
+
ifelse(i %in% mandatory, "** MANDATORY", "default %default"),
|
102
|
+
ifelse(i %in% vectorize, ", separate values by commas", ""),
|
103
|
+
"].", sep="")
|
104
|
+
}
|
105
|
+
if(!is.name(f[[i]])){
|
106
|
+
optopt$default <- f[[i]]
|
107
|
+
optopt$metavar <- class(f[[i]])
|
108
|
+
}
|
109
|
+
if(i %in% number) optopt$metavar <- "NUMERIC"
|
110
|
+
optopt$dest <- i
|
111
|
+
|
112
|
+
opts[[o_i]] <- do.call(optparse::make_option, optopt)
|
113
|
+
}
|
114
|
+
opt <- optparse::parse_args(
|
115
|
+
optparse::OptionParser(option_list=opts, description=p_desc, usage=usage),
|
116
|
+
positional_arguments=positional_arguments)
|
117
|
+
|
118
|
+
#= Post-hoc checks
|
119
|
+
if(length(opt[['options']])==0) opt <- list(options=opt, args=c())
|
120
|
+
for(i in mandatory){
|
121
|
+
if(length(opt$options[[i]])==0) stop('Missing mandatory argument: ',i)
|
122
|
+
}
|
123
|
+
for(i in vectorize){
|
124
|
+
if(length(opt$options[[i]])==1)
|
125
|
+
opt$options[[i]] <- strsplit(opt$options[[i]],",")[[1]]
|
126
|
+
}
|
127
|
+
for(i in number){
|
128
|
+
if(length(opt$options[[i]])>0)
|
129
|
+
opt$options[[i]] <- as.numeric(opt$options[[i]])
|
130
|
+
}
|
131
|
+
opt$options$help <- NULL
|
132
|
+
|
133
|
+
return(opt)
|
118
134
|
}
|
119
135
|
|
@@ -1,117 +1,155 @@
|
|
1
|
+
#' Enveomics: Data Frame to Dist
|
2
|
+
#'
|
3
|
+
#' Transform a dataframe (or coercible object, like a table) into a
|
4
|
+
#' \strong{dist} object.
|
5
|
+
#'
|
6
|
+
#' @param x A dataframe (or coercible object) with at least three columns:
|
7
|
+
#' \enumerate{
|
8
|
+
#' \item ID of the object 1,
|
9
|
+
#' \item ID of the object 2, and
|
10
|
+
#' \item distance between the two objects.}
|
11
|
+
#' @param obj1.index Index of the column containing the ID of the object 1.
|
12
|
+
#' @param obj2.index Index of the column containing the ID of the object 2.
|
13
|
+
#' @param dist.index Index of the column containing the distance.
|
14
|
+
#' @param default.d Default value (for missing values).
|
15
|
+
#' @param max.sim If not zero, assumes that the values are similarity
|
16
|
+
#' (not distance) and this is the maximum similarity (corresponding to
|
17
|
+
#' distance 0). Applies transformation:
|
18
|
+
#' \eqn{distance = (max.sim - values)/max.sim.}
|
19
|
+
#'
|
20
|
+
#' @return Returns a \strong{dist} object.
|
21
|
+
#'
|
22
|
+
#' @author Luis M. Rodriguez-R [aut, cre]
|
23
|
+
#'
|
24
|
+
#' @export
|
1
25
|
|
2
26
|
enve.df2dist <- function(
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
d <- as.double(x[, dist.index]);
|
24
|
-
if(max.sim!=0) d <- (max.sim - d)/max.sim
|
25
|
-
ids <- unique(c(a,b));
|
26
|
-
m <- matrix(default.d, nrow=length(ids), ncol=length(ids), dimnames=list(ids, ids));
|
27
|
-
diag(m) <- 0.0
|
28
|
-
for(i in 1:nrow(x)){
|
29
|
-
m[a[i], b[i]] <- d[i];
|
30
|
-
}
|
31
|
-
m <- pmin(m, t(m), na.rm=TRUE)
|
32
|
-
return(as.dist(m));
|
33
|
-
### Returns a `dist` object.
|
27
|
+
x,
|
28
|
+
obj1.index=1,
|
29
|
+
obj2.index=2,
|
30
|
+
dist.index=3,
|
31
|
+
default.d=NA,
|
32
|
+
max.sim=0
|
33
|
+
){
|
34
|
+
x <- as.data.frame(x);
|
35
|
+
a <- as.character(x[, obj1.index]);
|
36
|
+
b <- as.character(x[, obj2.index]);
|
37
|
+
d <- as.double(x[, dist.index]);
|
38
|
+
if(max.sim!=0) d <- (max.sim - d)/max.sim
|
39
|
+
ids <- unique(c(a,b));
|
40
|
+
m <- matrix(default.d, nrow=length(ids), ncol=length(ids), dimnames=list(ids, ids));
|
41
|
+
diag(m) <- 0.0
|
42
|
+
for(i in 1:nrow(x)){
|
43
|
+
m[a[i], b[i]] <- d[i];
|
44
|
+
}
|
45
|
+
m <- pmin(m, t(m), na.rm=TRUE)
|
46
|
+
return(as.dist(m));
|
34
47
|
}
|
35
48
|
|
36
|
-
|
49
|
+
#' Enveomics: Data Frame to Dist (Group)
|
50
|
+
#'
|
51
|
+
#' Transform a dataframe (or coercible object, like a table) into a
|
52
|
+
#' \strong{dist} object, where there are 1 or more distances between each pair
|
53
|
+
#' of objects.
|
54
|
+
#'
|
55
|
+
#' @param x A dataframe (or coercible object) with at least three columns:
|
56
|
+
#' \enumerate{
|
57
|
+
#' \item ID of the object 1,
|
58
|
+
#' \item ID of the object 2, and
|
59
|
+
#' \item distance between the two objects.}
|
60
|
+
#' @param obj1.index Index of the column containing the ID of the object 1.
|
61
|
+
#' @param obj2.index Index of the column containing the ID of the object 2.
|
62
|
+
#' @param dist.index Index of the column containing the distance.
|
63
|
+
#' @param summary Function summarizing the different distances between the
|
64
|
+
#' two objects.
|
65
|
+
#' @param empty.rm Remove rows with empty or \code{NA} groups.
|
66
|
+
#'
|
67
|
+
#' @return Returns a \strong{dist} object.
|
68
|
+
#'
|
69
|
+
#' @author Luis M. Rodriguez-R [aut, cre]
|
70
|
+
#'
|
71
|
+
#' @export
|
37
72
|
|
38
73
|
enve.df2dist.group <- function(
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
id.i <- ids[i];
|
66
|
-
for(j in 1:(i-1)){
|
67
|
-
id.j <- ids[j];
|
68
|
-
d.ij <- summary(c( d[ a==id.i & b==id.j], d[ b==id.i & a==id.j] ));
|
69
|
-
m[id.i, id.j] <- d.ij;
|
70
|
-
m[id.j, id.i] <- d.ij;
|
71
|
-
}
|
72
|
-
}
|
73
|
-
return(as.dist(m));
|
74
|
-
### Returns a `dist` object.
|
74
|
+
x,
|
75
|
+
obj1.index=1,
|
76
|
+
obj2.index=2,
|
77
|
+
dist.index=3,
|
78
|
+
summary=median,
|
79
|
+
empty.rm=TRUE
|
80
|
+
){
|
81
|
+
x <- as.data.frame(x);
|
82
|
+
if(empty.rm) x <- x[ !(is.na(x[,obj1.index]) | is.na(x[,obj2.index]) | x[,obj1.index]=='' | x[,obj2.index]==''), ]
|
83
|
+
a <- as.character(x[, obj1.index]);
|
84
|
+
b <- as.character(x[, obj2.index]);
|
85
|
+
d <- as.double(x[, dist.index]);
|
86
|
+
ids <- unique(c(a,b));
|
87
|
+
if(length(ids)<2) return(NA);
|
88
|
+
m <- matrix(NA, nrow=length(ids), ncol=length(ids), dimnames=list(ids, ids));
|
89
|
+
diag(m) <- 0
|
90
|
+
for(i in 2:length(ids)){
|
91
|
+
id.i <- ids[i];
|
92
|
+
for(j in 1:(i-1)){
|
93
|
+
id.j <- ids[j];
|
94
|
+
d.ij <- summary(c( d[ a==id.i & b==id.j], d[ b==id.i & a==id.j] ));
|
95
|
+
m[id.i, id.j] <- d.ij;
|
96
|
+
m[id.j, id.i] <- d.ij;
|
97
|
+
}
|
98
|
+
}
|
99
|
+
return(as.dist(m));
|
75
100
|
}
|
76
101
|
|
102
|
+
#' Enveomics: Data Frame to Dist (List)
|
103
|
+
#'
|
104
|
+
#' Transform a dataframe (or coercible object, like a table)
|
105
|
+
#' into a \strong{dist} object.
|
106
|
+
#'
|
107
|
+
#' @param x A dataframe (or coercible object) with at least three columns:
|
108
|
+
#' \enumerate{
|
109
|
+
#' \item ID of the object 1,
|
110
|
+
#' \item ID of the object 2, and
|
111
|
+
#' \item distance between the two objects.}
|
112
|
+
#' @param groups Named array where the IDs correspond to the object IDs,
|
113
|
+
#' and the values correspond to the group.
|
114
|
+
#' @param obj1.index Index of the column containing the ID of the object 1.
|
115
|
+
#' @param obj2.index Index of the column containing the ID of the object 2.
|
116
|
+
#' @param dist.index Index of the column containing the distance.
|
117
|
+
#' @param empty.rm Remove incomplete matrices.
|
118
|
+
#' @param ... Any other parameters supported by
|
119
|
+
#' \code{\link{enve.df2dist.group}}.
|
120
|
+
#'
|
121
|
+
#' @return Returns a \strong{list} of \strong{dist} objects.
|
122
|
+
#'
|
123
|
+
#' @author Luis M. Rodriguez-R [aut, cre]
|
124
|
+
#'
|
125
|
+
#' @export
|
126
|
+
|
77
127
|
enve.df2dist.list <- function(
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
l <- list();
|
102
|
-
same_group <- groups[a]==groups[b];
|
103
|
-
same_group <- ifelse(is.na(same_group), FALSE, TRUE);
|
104
|
-
for(group in unique(groups)){
|
105
|
-
ids <- ids.all[ groups[ids.all]==group ];
|
106
|
-
if(length(ids)>1 & group!=""){
|
107
|
-
x.sub <- x[ same_group & (groups[a]==group) & (groups[b]==group), ]
|
108
|
-
if(nrow(x.sub)>0){
|
109
|
-
d.g <- enve.df2dist(x.sub, obj1.index, obj2.index, dist.index, ...);
|
110
|
-
if(!empty.rm | !any(is.na(d.g))) l[[ group ]] <- d.g;
|
111
|
-
}
|
128
|
+
x,
|
129
|
+
groups,
|
130
|
+
obj1.index=1,
|
131
|
+
obj2.index=2,
|
132
|
+
dist.index=3,
|
133
|
+
empty.rm=TRUE,
|
134
|
+
...
|
135
|
+
){
|
136
|
+
x <- as.data.frame(x);
|
137
|
+
a <- as.character(x[, obj1.index]);
|
138
|
+
b <- as.character(x[, obj2.index]);
|
139
|
+
d <- as.numeric(x[, dist.index]);
|
140
|
+
ids.all <- unique(c(a,b));
|
141
|
+
l <- list();
|
142
|
+
same_group <- groups[a]==groups[b];
|
143
|
+
same_group <- ifelse(is.na(same_group), FALSE, TRUE);
|
144
|
+
for(group in unique(groups)){
|
145
|
+
ids <- ids.all[ groups[ids.all]==group ];
|
146
|
+
if(length(ids)>1 & group!=""){
|
147
|
+
x.sub <- x[ same_group & (groups[a]==group) & (groups[b]==group), ]
|
148
|
+
if(nrow(x.sub)>0){
|
149
|
+
d.g <- enve.df2dist(x.sub, obj1.index, obj2.index, dist.index, ...);
|
150
|
+
if(!empty.rm | !any(is.na(d.g))) l[[ group ]] <- d.g;
|
112
151
|
}
|
113
|
-
|
114
|
-
|
115
|
-
|
152
|
+
}
|
153
|
+
}
|
154
|
+
return(l);
|
116
155
|
}
|
117
|
-
|