miga-base 0.4.3.0 → 0.5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
-
|