有没有办法修复/允许DataArrays.DataArray {String}的isna广播?尝试这样做时出现以下错误:
julia> using DataFrames
julia> a=@data(["1776", "1895", " 0", " 1774", NA ])
5-element DataArrays.DataArray{String,1}:
"1776"
"1895"
" 0"
" 1774"
NA
julia> isna.(a)
ERROR: MethodError: Cannot `convert` an object of type Bool to an object of type String
This may have arisen from a call to the constructor String(...),
since type constructors fall back to convert methods.
in macro expansion at /home/ngphuoc/.julia/v0.5/DataArrays/src/broadcast.jl:60 [inlined]
in macro expansion at ./cartesian.jl:64 [inlined]
in (::DataArrays.#_F_#203)(::DataArrays.DataArray{String,1}, ::DataArrays.DataArray{String,1}) at /home/ngphuoc/.julia/v0.5/DataArrays/src/broadcast.jl:130
in broadcast!(::Function, ::DataArrays.DataArray{String,1}, ::DataArrays.DataArray{String,1}) at /home/ngphuoc/.julia/v0.5/DataArrays/src/broadcast.jl:229
in databroadcast(::Function, ::DataArrays.DataArray{String,1}, ::Vararg{DataArrays.DataArray{String,1},N}) at /home/ngphuoc/.julia/v0.5/DataArrays/src/broadcast.jl:235
in broadcast(::Function, ::DataArrays.DataArray{String,1}) at /home/ngphuoc/.julia/v0.5/DataArrays/src/broadcast.jl:296
in eval_user_input(::Any, ::Base.REPL.REPLBackend) at ./REPL.jl:64
in macro expansion at ./REPL.jl:95 [inlined]
in (::Base.REPL.##3#4{Base.REPL.REPLBackend})() at ./event.jl:68
答案 0 :(得分:1)
在0.5上,DataArrays错误地假设broadcast
的结果元素类型将仅遵循促销规则。此错误已在0.6中修复。更新将是您最好的行动方式。
当然,在0.5上,仍然存在旧的矢量化isna
方法;如果你现在必须留在那里,这可能是你最好的选择。自从被弃用以支持isna.(a)
广播0.6后。
julia> isna(a)
5-element BitArray{1}:
false
false
false
false
true