I have a `DataArray{Float64,1}` named `ps` with a bunch of values I'd like
to map to their bin indices in a histogram, and a function `histidx` that
maps a single value (based on endpoints of the histogram and number of
bins). I try the following:
idxs = map(p -> histidx(minx, maxx, Nbins, p), ps)
and the result is a `DataArray{Any,1}`. However, I know that `histidx` can
only return integers:
function histidx(xmin, xmax, Nbins::Integer, x)
if x <= xmin
return 1
elseif x >= xmax
return Nbins
else
return iceil((x-xmin)/((xmax-xmin)/Nbins))
end
end
Why isn't map able to infer that the type of the resulting array could be
tighter?
I try to help it in various ways, but without success:
julia> typeof(map(p -> histidx(minx, maxx, Nbins, p)::Integer, ps))
DataArray{Any,1}
julia> foo() = map(p -> histidx(minx, maxx, Nbins, p); typeof(foo())
DataArray{Any,1}
The only thing that seems to work is manually doing this on the underlying
data instead:
julia> typeof(map(p -> histidx(minx, maxx, Nbins, p), ps.data))
Array{Int64,1}
This is troublesome, since it a) requires me to handle `Array`s and
`DataArray`s differently when I do this mapping, and b) doesn't allow for
missing data in the `DataArray`s.
I think the correct behavior should be to return a DataArray{Int64,1}, with
each `NA` value mapped to `NA` in the output.
// T