Cast between DataType
Description
Cast between DataType
Usage
<Expr>$cast(dtype, ..., strict = TRUE, wrap_numerical = FALSE)
Arguments
dtype
|
DataType to cast to. |
…
|
These dots are for future extensions and must be empty. |
strict
|
If TRUE (default), an error will be thrown if cast failed
at resolve time.
|
wrap_numerical
|
If TRUE , numeric casts wrap overflowing values instead of
marking the cast as invalid.
|
Value
A polars expression
Examples
library("polars")
df <- pl$DataFrame(a = 1:3, b = c(1, 2, 3))
df$with_columns(
pl$col("a")$cast(pl$Float64),
pl$col("b")$cast(pl$Int32)
)
#> shape: (3, 2)
#> ┌─────┬─────┐
#> │ a ┆ b │
#> │ --- ┆ --- │
#> │ f64 ┆ i32 │
#> ╞═════╪═════╡
#> │ 1.0 ┆ 1 │
#> │ 2.0 ┆ 2 │
#> │ 3.0 ┆ 3 │
#> └─────┴─────┘
# strict FALSE, inserts null for any cast failure
pl$select(
pl$lit(c(100, 200, 300))$cast(pl$UInt8, strict = FALSE)
)$to_series()
#> shape: (3,)
#> Series: 'literal' [u8]
#> [
#> 100
#> 200
#> null
#> ]
# strict TRUE, raise any failure as an error when query is executed.
tryCatch(
{
pl$select(
pl$lit("a")$cast(pl$Float64, strict = TRUE)
)$to_series()
},
error = function(e) e
)
#> <error/rlang_error>
#> Error:
#> ! Evaluation failed in `$select()`.
#> Caused by error:
#> ! Evaluation failed in `$collect()`.
#> Caused by error:
#> ! Invalid operation: conversion from `str` to `f64` failed in column 'scalar' for 1 out of 1 values: ["a"]
#>
#> Resolved plan until failure:
#>
#> ---> FAILED HERE RESOLVING 'sink' <---
#> SELECT ["a".strict_cast(Float64)]
#> FROM
#> DF []; PROJECT */0 COLUMNS
#> ---
#> Backtrace:
#> ▆
#> 1. ├─base::tryCatch(...)
#> 2. │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
#> 3. │ └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
#> 4. │ └─base (local) doTryCatch(return(expr), name, parentenv, handler)
#> 5. └─pl$select(pl$lit("a")$cast(pl$Float64, strict = TRUE))
#> 6. └─pl$DataFrame()$select(...) at neo-r-polars/R/functions-lazy.R:12:3
#> 7. ├─polars:::wrap(self$lazy()$select(...)$collect(`_eager` = TRUE)) at neo-r-polars/R/dataframe-frame.R:367:3
#> 8. │ └─rlang::try_fetch(...) at neo-r-polars/R/utils-wrap.R:3:3
#> 9. │ ├─base::tryCatch(...)
#> 10. │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
#> 11. │ │ └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
#> 12. │ │ └─base (local) doTryCatch(return(expr), name, parentenv, handler)
#> 13. │ └─base::withCallingHandlers(...)
#> 14. └─self$lazy()$select(...)$collect(`_eager` = TRUE) at neo-r-polars/R/utils-wrap.R:3:3
#> 15. ├─polars:::wrap(...) at neo-r-polars/R/lazyframe-frame.R:284:3
#> 16. │ └─rlang::try_fetch(...) at neo-r-polars/R/utils-wrap.R:3:3
#> 17. │ ├─base::tryCatch(...)
#> 18. │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
#> 19. │ │ └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
#> 20. │ │ └─base (local) doTryCatch(return(expr), name, parentenv, handler)
#> 21. │ └─base::withCallingHandlers(...)
#> 22. └─ldf$collect(engine) at neo-r-polars/R/lazyframe-frame.R:331:5
#> 23. └─polars:::.savvy_wrap_PlRDataFrame(...) at neo-r-polars/R/000-wrappers.R:3579:5