Skip to content

Create sequence of evenly-spaced points

Source code

Description

[Experimental]

Usage

pl$linear_space(
  start,
  end,
  num_samples,
  ...,
  closed = c("both", "left", "none", "right")
)

Arguments

start Lower bound of the range.
end Upper bound of the range.
num_samples Number of samples in the output sequence.
… These dots are for future extensions and must be empty.
closed Define which sides of the range are closed (inclusive). One of the following: “both” (default), “left”, “right”, “none”.

Details

linear_space works with numeric and temporal dtypes. When the start and end parameters are Date dtypes, the output sequence consists of equally-spaced Datetime elements with millisecond precision.

Value

A polars expression

Examples

library("polars")

pl$select(
  pl$linear_space(start = 0, end = 1, num_samples = 3)
)
#> shape: (3, 1)
#> ┌─────────┐
#> │ literal │
#> │ ---     │
#> │ f64     │
#> ╞═════════╡
#> │ 0.0     │
#> │ 0.5     │
#> │ 1.0     │
#> └─────────┘
pl$select(
  pl$linear_space(start = 0, end = 1, num_samples = 3, closed = "left")
)
#> shape: (3, 1)
#> ┌──────────┐
#> │ literal  │
#> │ ---      │
#> │ f64      │
#> ╞══════════╡
#> │ 0.0      │
#> │ 0.333333 │
#> │ 0.666667 │
#> └──────────┘
pl$select(
  pl$linear_space(start = 0, end = 1, num_samples = 3, closed = "right")
)
#> shape: (3, 1)
#> ┌──────────┐
#> │ literal  │
#> │ ---      │
#> │ f64      │
#> ╞══════════╡
#> │ 0.333333 │
#> │ 0.666667 │
#> │ 1.0      │
#> └──────────┘
pl$select(
  pl$linear_space(start = 0, end = 1, num_samples = 3, closed = "none")
)
#> shape: (3, 1)
#> ┌─────────┐
#> │ literal │
#> │ ---     │
#> │ f64     │
#> ╞═════════╡
#> │ 0.25    │
#> │ 0.5     │
#> │ 0.75    │
#> └─────────┘
# Date endpoints generate a sequence of Datetime values:
pl$select(
  pl$linear_space(
    start = as.Date("2025-01-01"),
    end = as.Date("2025-02-01"),
    num_samples = 3,
    closed = "right"
  )
)
#> shape: (3, 1)
#> ┌─────────────────────┐
#> │ literal             │
#> │ ---                 │
#> │ datetime[μs]        │
#> ╞═════════════════════╡
#> │ 2025-01-11 08:00:00 │
#> │ 2025-01-21 16:00:00 │
#> │ 2025-02-01 00:00:00 │
#> └─────────────────────┘
# You can generate a sequence using the length of the dataframe:
df <- pl$DataFrame(a = c(1, 2, 3, 4, 5))
df$with_columns(ls = pl$linear_space(0, 1, pl$len()))
#> shape: (5, 2)
#> ┌─────┬──────┐
#> │ a   ┆ ls   │
#> │ --- ┆ ---  │
#> │ f64 ┆ f64  │
#> ╞═════╪══════╡
#> │ 1.0 ┆ 0.0  │
#> │ 2.0 ┆ 0.25 │
#> │ 3.0 ┆ 0.5  │
#> │ 4.0 ┆ 0.75 │
#> │ 5.0 ┆ 1.0  │
#> └─────┴──────┘