Skip to content

Commit

Permalink
Cleaned up type conversions, functions, removed return type restricti…
Browse files Browse the repository at this point in the history
…ons, added `passmissing()` to handle `missing` values, reserving `catch()` for parsing failures.
  • Loading branch information
Karandeep Singh committed Apr 12, 2023
1 parent 2a7d480 commit 1f24583
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 18 deletions.
6 changes: 3 additions & 3 deletions src/Tidier.jl
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ using Reexport
@reexport using ShiftedArrays: lag, lead

export Tidier_set, across, desc, n, row_number, starts_with, ends_with, matches, if_else, case_when, ntile,
@select, @transmute, @rename, @mutate, @summarize, @summarise, @filter, @group_by, @ungroup, @slice,
@arrange, @distinct, @pull, @left_join, @right_join, @inner_join, @full_join, @pivot_wider, @pivot_longer,
@bind_rows, @bind_cols, @clean_names, @count, @tally, @drop_na, @glimpse, as_float, as_integer, as_string
as_float, as_integer, as_string, @select, @transmute, @rename, @mutate, @summarize, @summarise, @filter,
@group_by, @ungroup, @slice, @arrange, @distinct, @pull, @left_join, @right_join, @inner_join, @full_join,
@pivot_wider, @pivot_longer, @bind_rows, @bind_cols, @clean_names, @count, @tally, @drop_na, @glimpse

# Package global variables
const code = Ref{Bool}(false) # output DataFrames.jl code?
Expand Down
78 changes: 78 additions & 0 deletions src/docstrings.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1869,4 +1869,82 @@ Groups: a [100]
.b Int64 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
.c String a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
```
"""

const docstring_as_float =
"""
as_float(value)
Convert a number or string to a Float64 data type.
This is a useful helper for type conversions. Missing values are propagated.
# Arguments
- `value`: An `AbstractString`, `Number`, or `missing` value.
# Examples
```jldoctest
julia> as_float(1)
1.0
julia> as_float("1.5")
1.5
julia> as_float(missing)
missing
```
"""

const docstring_as_integer =
"""
as_integer(value)
Convert a number or string to an Int64 data type.
This is a useful helper for type conversions. Missing values are propagated. Any values after the decimal point are removed.
# Arguments
- `value`: An `AbstractString`, `Number`, or `missing` value.
# Examples
```jldoctest
julia> as_integer(1)
1
julia> as_integer(1.5)
1
julia> as_integer("2")
2
julia> as_integer("2.5")
2
julia> as_integer(missing)
missing
```
"""

const docstring_as_string =
"""
as_string(value)
Convert a number or string to a String data type.
This is a useful helper for type conversions. Missing values are propagated.
# Arguments
- `value`: An `AbstractString`, `Number`, or `missing` value.
# Examples
```jldoctest
julia> as_string(1)
"1"
julia> as_string(1.5)
"1.5"
julia> as_string(missing)
missing
```
"""
41 changes: 26 additions & 15 deletions src/type_conversions.jl
Original file line number Diff line number Diff line change
@@ -1,36 +1,47 @@

function as_float(value)::Union{AbstractFloat, Missing}
"""
$docstring_as_float
"""
function as_float(value)
try
convert(AbstractFloat, value)
passmissing(convert)(Float64, value)
catch
missing
missing # if parsing failure
end
end

function as_float(value::String)::Union{Float64, Missing}
function as_float(value::AbstractString)
try
parse(Float64, value)
passmissing(parse)(Float64, value)
catch
missing
missing # if parsing failure
end
end

function as_integer(value)::Union{Integer, Missing}
"""
$docstring_as_integer
"""
function as_integer(value)
try
convert(Integer, value)
passmissing(floor)(value) |>
x -> passmissing(convert)(Int64, x)
catch
missing
missing # if parsing failure
end
end

function as_integer(value::String)::Union{Int64, Missing}
function as_integer(value::AbstractString)
try
parse(Int64, value)
passmissing(parse)(Float64, value) |>
x -> passmissing(floor)(x) |>
x -> passmissing(convert)(Int64, x)
catch
missing
missing # if parsing failure
end
end

function as_string(value)::String
string(value)
"""
$docstring_as_string
"""
function as_string(value)
passmissing(string)(value)
end

0 comments on commit 1f24583

Please sign in to comment.