IMO auto-vectorization is one of those DWIM features that looks
extremely handy at first sight, but leads to inconvenient complications
later on, especially for anything nontrivial and more complicated. R is
an example of what can happen.

Best,

Tamas

On Fri, Mar 18 2016, Matt Bauman wrote:

> Yes, the DataArrays package exists to handle `NA` elements as a foundation 
> for DataFrames.
>
> You've stumbled upon an open issue in the language, and you're exactly 
> right: vectorization like this is really handy, but it can make reading 
> code a bit harder to understand.  In this case, for example, right now 
> everyone who knows Julia will expect Float64(x) to return a Float64, 
> regardless of what x is.  If we auto-vectorize the Float64 constructor, 
> that will no longer be the case.
>
> Here are some alternatives:
>
> map(Float64, full_frl_college[:jun_sen]) # not very fast on 0.4, will be 
> much better on 0.5
> convert(Array{Float64}, full_frl_college[:jun_sen]) # note that you can 
> omit the dimensionality
> convert(AbstractArray{Float64}, full_frl_college[:jun_sen]) # this will try 
> to keep the outer array type the same
>
> Converting directly to a DataArray, like you tried, should probably work 
> and may be a missing method in DataArrays.jl.
>
>  On Friday, March 18, 2016 at 3:13:00 PM UTC-4, Lewis Levin wrote:
>>
>> Here is a simple statement:
>> full_frl_college[:jun_sen] = Float64(full_frl_college[:jun_sen])
>>
>> Here is the resulting error message:
>>
>> LoadError: MethodError: `convert` has no method matching 
>> convert(::Type{Float64}, ::DataArrays.DataArray{Int64,1})
>>
>>
>> What is the right approach to this conversion?  I tried 
>> convert(DataArrays.DataArray{Float64,1}, full_frl_college[:jun_sen])
>> which did not work.
>>
>> Answering my own question, both of these work:
>> x = Array{Float64,1}(collect(full_frl_college[exist, :jun_sen]))
>> # or
>> full_frl_college[:jun_sen]=Array{Float64,1}full_frl_college[:jun_sen]
>> # note the collect() above is NOT needed
>>
>> So, all is good.
>>
>> My confusion was taking the error message too literally and trying to 
>> convert using the DataArray type.  Does the DataArrays.DataArray type 
>> enable DataFrames to do its NA handling? If so, then I'd really want to use 
>> that type rather than Array{Float64, N}.  For this data, I'd already purged 
>> the NAs so it didn't matter.
>>
>> Obviously, dimensionality is part of the type of the starting and target 
>> types.  Perhaps that is a bit too restrictive.  Is it possible that if a 
>> conversion will be, in effect, an element-wise conversion of the entire 
>> contents of the array that the conversion/promotion should be allowed?  I 
>> realize that with mixed types it can be unclear what a conversion "means". 
>>  But, when the object is already of one type and the target is of one type 
>> it seems intuitive to just do the conversion even if the types, strictly 
>> speaking, don't match because of dimensionality.  I guess this is a request 
>> for "element-wise" conversion.
>>
>> Seems like this would make Julia more approachable.  Also, it could make 
>> the job of package developers, working with arrays and matrices, a bit 
>> easier because they wouldn't need methods for as many cases.
>>
>>

Reply via email to