From 5157089d876aab1f639a7e72d3e952687aaa21da Mon Sep 17 00:00:00 2001 From: Pietro Vertechi Date: Sun, 27 Aug 2017 18:56:10 +0100 Subject: [PATCH] group on a tuple of vectors --- src/args.jl | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/args.jl b/src/args.jl index ef403a04..3bd869f5 100644 --- a/src/args.jl +++ b/src/args.jl @@ -840,16 +840,24 @@ end # this is when given a vector-type of values to group by -function extractGroupArgs(v::AVec, args...) +function extractGroupArgs(v::AVec, args...; legendEntry = string) groupLabels = sort(collect(unique(v))) n = length(groupLabels) if n > 100 warn("You created n=$n groups... Is that intended?") end groupIds = Vector{Int}[filter(i -> v[i] == glab, 1:length(v)) for glab in groupLabels] - GroupBy(map(string, groupLabels), groupIds) + GroupBy(map(legendEntry, groupLabels), groupIds) end +legendEntryFromTuple(ns::Tuple) = string(("$n " for n in ns)...) + +# this is when given a tuple of vectors of values to group by +function extractGroupArgs(vs::Tuple, args...) + (vs == ()) && return GroupBy([""], [1:size(args[1],1)]) + v = collect(zip(vs...)) + extractGroupArgs(v, args...; legendEntry = legendEntryFromTuple) +end # expecting a mapping of "group label" to "group indices" function extractGroupArgs{T, V<:AVec{Int}}(idxmap::Dict{T,V}, args...)