Dataframe 为什么map在对数据阵列进行操作时会丢弃类型信息?

Dataframe 为什么map在对数据阵列进行操作时会丢弃类型信息?,dataframe,julia,Dataframe,Julia,我试图理解为什么会发生这种情况,即使考虑到数据阵列的局限性。假设要映射到Int64的DataArray: da = DataArray([1,2,3,4]) println(typeof(da)) println(typeof(map(a -> a^2, da))) # Returns an int for this input println(typeof(map(a -> int(a^2), da))) # Cast the piecewise result to int pri

我试图理解为什么会发生这种情况,即使考虑到数据阵列的局限性。假设要映射到Int64的DataArray:

da = DataArray([1,2,3,4])
println(typeof(da))
println(typeof(map(a -> a^2, da))) # Returns an int for this input
println(typeof(map(a -> int(a^2), da))) # Cast the piecewise result to int
println(typeof(int(map(a -> a^2, da)))) # Cast the output DataArray{Any,1} to int
导致

DataArray{Int64,1}
DataArray{Any,1}
DataArray{Any,1}
Array{Int64,1}
对于数组,
a=[1,2,3,4]
map(a->a^2,da)
按预期返回INT64数组。映射和/或数据数组是什么导致类型信息在此处丢失的?当您使用的类型没有将DataArray{any,1}转换为DataArray{ThatType,1}的构造函数(如Dates.DateTime)时,是否有保存类型信息的解决方案

编辑:convert可以很好地使DataArray{Any,1}成为DataArray{ThatType,1}(至少对于DateTime是这样)

检查来源

它正在创建要返回的类型DataArray{Any,1}

res = DataArray(Any, n) 
您可以查看James Fairbanks给出的答案(2015年4月1日04:12)

抓得好,我忘了地图!这是我应该用的。
# TODO: should this be an AbstractDataVector, so it works with PDV's?
function Base.map(f::Function, dv::DataVector)
    n = length(dv)
    res = DataArray(Any, n)
    for i in 1:n
        res[i] = f(dv[i])
    end
    return res
end
res = DataArray(Any, n)