Updated dependencies; Accept missing values on input arrays (if eltype <: AbstractFloat)

This commit is contained in:
Giorgio Calderone 2021-05-05 00:52:56 +02:00
parent 5c46e35fea
commit e8a6b21df6
2 changed files with 36 additions and 39 deletions

View File

@ -14,11 +14,11 @@ StructC14N = "d2514e9c-36c4-5b8e-97e2-51e7675c221c"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
[compat]
ColorSchemes = "^3.5"
ColorTypes = "^0.10"
ColorSchemes = "^3.12"
ColorTypes = "^0.11"
Colors = "^0.12"
DataStructures = "^0.18"
ReplMaker = "^0.2"
StatsBase = "^0.33"
StructC14N = "^0.3"
julia = "^1.2"
julia = "^1.5"

View File

@ -1112,11 +1112,8 @@ function parseArguments(_args...)
end
insert!(args, pos, string(strip(arg[1])) => nothing)
elseif isa(arg, AbstractArray) && # ==> a dataset column
((valtype(arg) <: Real) ||
(valtype(arg) <: AbstractString)) ;
elseif isa(arg, AbstractArray) && # ==> a dataset column (to be `convert`ed)
((typeof(arg[1]) <: Real) ||
(typeof(arg[1]) <: AbstractString))
((nonmissingtype(eltype(arg)) <: Real) ||
(nonmissingtype(eltype(arg)) <: AbstractString)) ;
elseif isa(arg, Real) # ==> a dataset column with only one row
args[pos] = [arg]
elseif isa(arg, Dataset) ; # ==> a Dataset object
@ -1138,54 +1135,54 @@ function parseArguments(_args...)
pos += 1
end
# Third pass: convert data into Dataset objetcs
# Third pass: convert data into Dataset objects
pos = 1
accum = Vector{AbstractArray}()
while pos <= length(args)
arg = args[pos]
taken = false
if isa(arg, AbstractArray) &&
!(valtype(arg) <: Real) &&
!(valtype(arg) <: AbstractString)
if isa(arg, AbstractArray)
if nonmissingtype(eltype(arg)) != eltype(arg)
@assert nonmissingtype(eltype(arg)) <: AbstractFloat "Missing values are supported only on arrays of floats"
arg[ismissing.(arg)] .= NaN
arg = convert(Array{nonmissingtype(eltype(arg))}, arg)
end
tt = eltype(arg)
# Try with `convert`
if typeof(arg[1]) <: Integer
# Try to convert into Int, Float64 and String
if (tt <: Integer) && !(tt <: Int)
arg = convert(Array{Int}, arg)
elseif typeof(arg[1]) <: Real
elseif (tt <: Real) && !(tt <: Float64)
arg = convert(Array{Float64}, arg)
elseif typeof(arg[1]) <: AbstractString
elseif (tt <: AbstractString) && !(tt <: String)
arg = convert(Array{String}, arg)
end
end
if isa(arg, AbstractArray) && # ==> beginning of a dataset
((valtype(arg) <: Real) ||
(valtype(arg) <: AbstractString))
# Collect all data
accum = Vector{AbstractArray}()
while isa(arg, AbstractArray) &&
((valtype(arg) <: Real) ||
(valtype(arg) <: AbstractString))
tt = eltype(arg)
if (tt <: Real) ||
(tt <: AbstractString)
push!(accum, arg)
deleteat!(args, pos)
if pos <= length(args)
arg = args[pos]
taken = true
end
end
if !taken || (pos > length(args))
if length(accum) > 0
mm = extrema(length.(accum))
if mm[1] == 0 # empty Dataset
@assert mm[1] == mm[2] "At least one input array is empty, while other(s) are not"
d = DatasetEmpty()
else
break
d = Dataset(accum)
end
insert!(args, pos, d)
empty!(accum)
end
mm = extrema(length.(accum))
if mm[1] == 0
# empty Dataset
@assert mm[1] == mm[2] "At least one input array is empty, while other(s) are not"
d = DatasetEmpty()
else
d = Dataset(accum)
end
insert!(args, pos, d)
pos += 1
end
pos += 1
end
# Fourth pass: collect PlotElement objects