ok - sorted. change that function to 

function collectFields(dict::Dict)
    di_keys = collect(keys(dict))
    n = length(dict)
    cols = Array(Any,n)
    for i in 1:n
        cols[i] = dict[di_keys[i]]
    end
    cnames = Array(Symbol,length(dict))
    for i in 1:length(di_keys)
        cnames[i] = symbol(di_keys[i])
    end
    # return DataFrame(cols, DataFrames.Index(cnames))
    return DataFrame(cols, cnames)
end


although I couldn't see the difference between the Vector created by the 
comprehension before. anyway...


On Thursday, 12 June 2014 16:43:00 UTC+1, Florian Oswald wrote:
>
> yeah that's true! same for me. argh. 
>
> alright. let me do exactly what you do in depracted.jl when you build that 
> dataframe and i'll be back. gotta be that cols vector.
>
>
> On 12 June 2014 16:39, John Myles White <[email protected]> wrote:
>
>> Actually, I think the problem is in your code right now.
>>
>> When I use your code, I hit the problem you’re seeing. But if I step 
>> through it line-by-line, it doesn’t seem to happen. I suspect something 
>> wacky is happening with type inference.
>>
>>  — 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