2017-10-02 5 views
1

Je voulais faire une fonction qui regarde chaque colonne d'un DataFrame et retourne un booléen, donc je me retrouve avec un tableau de booléens. Voici le codeJulia: Comment rendre colwise retourner un tableau au lieu d'un tableau de tableaux?

# some random dataframe 
df = DataFrame([1:3, 4:6]) 

# a function that returns an array of boolean 
function some_bool_fn(df)::Array{Bool} 
    array_of_arrays = colwise(df) do sdd3 
     # for illustration only 
     return true 
    end 
    array = [a[1] for a in array_of_arrays] 
    return array 
end 

# calling the function 
some_bool_fn(dd3) 

Cela fonctionne sauf que je trouve la ligne

 array = [a[1] for a in array_of_arrays] 

un peu inutile. Fondamentalement, je reçois un tableau de tableaux comme la sortie de colwise, donc j'ai dû mettre le tableau de tableaux dans un tableau simple de bools. Y at-il un moyen d'écrire le code afin que je puisse éviter cette ligne de code?

+2

X-ref: https://github.com/JuliaData/DataFrames.jl/commit/5f611bf480632507e15bb2c96bf39aedb71d6d06 – Gnimuc

Répondre

3

Comme @Gnimuc a commenté ce comportement est en train de changer.

Si vous regardez la branche principale: https://github.com/JuliaData/DataFrames.jl/blob/master/src/groupeddataframe/grouping.jl#L241 vous verrez une autre version. Vous pouvez probablement le copier:

mycolwise(f, d::AbstractDataFrame) = [f(d[i]) for i in 1:ncol(d)] 
+0

Comment puis-je faire usage de cette version? Est-ce Pkg.checkout ("DataFrames") – xiaodai

+1

@xiaodai Je pense que c'est une exagération de vérifier le maître DataFrames pour une si petite fonctionnalité (juste un changement de code de ligne) puisque vous êtes sujet à souffrir d'autres casse. Comme l'a suggéré Liso dans la réponse, votre nuage définit un autre colwise ou écrase directement DataFrames.colwise. – Gnimuc

+1

@Gnimuc il ne suffit pas d'écraser seulement ce oneliner car il y a plus de méthodes définies. Peut-être que ça pourrait être bien de faire une compilation conditionnelle selon la version de DataFrames. (BTW comment obtenir cette information de version?) – Liso