ok, I see. so ideally I would do this

di = (ASCIIString=>Array{Real,1})["a"=>[1,3],"b"=>[0.0,1.0]]

( not quite sure why the curly brackets solves this problem, since that
creates Dict{Any,Any}, and you said that's what's causing trouble? )

thanks!


On 12 June 2014 16:46, John Myles White <[email protected]> wrote:

> If you replace
>
> cols = [dict[k] for k in di_keys]
>
> with
>
> cols = {dict[k] for k in di_keys}
>
> things work properly. This is actually correct behavior, although it
> demonstrates why we deprecated the awful DataFrame(::Any…) constructor.
> Your current code doesn’t match the correct signature of a DataFrame. It
> only works by accident in your first accident because the column types
> aren’t homogeneous. Once they, type inference produces the correct tighter
> type for cols and then you’re not producing the right output.
>
> FWIW, I think you’ll find Julia easier to use if you avoid list
> comprehensions without explicit types.
>
>  — John
>
> On Jun 12, 2014, at 8:31 AM, Florian Oswald <[email protected]>
> wrote:
>
> sure - any idea where should I look for this? I pretty much copied this
> line
>
>
> https://github.com/JuliaStats/DataFrames.jl/blob/master/src/deprecated.jl#L34
>
> for my collectFields function.
>
>
>
>
> On 12 June 2014 16:18, John Myles White <[email protected]> wrote:
>
>> Certainly seems like a bug. A PR fixing this would be very helpful.
>>
>> At some point I’d like to move the functions for converting Dict’s to
>> DataFrames out of the DataFrames package since there’s so many ways to do
>> it that it’s hard for me to keep track of them.
>>
>>  — John
>>
>> On Jun 12, 2014, at 8:15 AM, Florian Oswald <[email protected]>
>> wrote:
>>
>> Hi all,
>>
>> I found some strange behaviour and am trying to find out where I'm going
>> wrong. I have a dict that stores several vectors of equal length, and I
>> want to make a DataFrame from it, where the columns should have the names
>> of the dict keys:
>>
>> using DataFrames
>>
>> function collectFields(dict::Dict)
>>     di_keys = collect(keys(dict))
>>     cols = [ dict[k] for k in di_keys ]
>>     cnames = Array(Symbol,length(dict))
>>     for i in 1:length(di_keys)
>>         cnames[i] = symbol(di_keys[i])
>>     end
>>       return DataFrame(cols, cnames)
>> end
>>
>> di = ["a"=>[1,3],"b"=>[0.0,1.0]]
>> collectFields(di)
>>
>> This works as expected:
>>
>> collectFields(di)
>> 2x2 DataFrame
>> |-------|---|-----|
>> | Row # | a | b   |
>> | 1     | 1 | 0.0 |
>> | 2     | 3 | 1.0 |
>>
>> however, changing the type of the vectors in dict:
>>
>> di2 = ["a"=>[1,3],"b"=>[0,1]]
>>
>>
>> julia> collectFields(di2)
>> 2x2 DataFrame
>> |-------|-------|----|
>> | Row # | x1    | x2 |
>> | 1     | [1,3] | a  |
>> | 2     | [0,1] | b  |
>>
>>
>> Any ideas? thanks!
>>
>>
>>
>
>

Reply via email to