The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

m61r: The Pure Base R Data Engine 🌌

License: MIT Base R

m61r provides dependency-free tabular and time-series manipulation for R. It is designed for the Base R purist who demands modern syntax and high performance.

Why m61r?

Quick Start

  1. Tabular Manipulation

library(m61r)

# Initialize with the built-in CO2 dataset

co2 <- m61r(CO2)

co2$filter(~uptake > 30)$
    select(~c(Plant, Type, uptake))$
    group_by(~Type)$
    summarise(mean_uptake = ~mean(uptake))

print(co2[])
  1. Temporal Data Manipulation
ts_data <- data.frame(
  time = as.POSIXct("2025-01-01 00:00:00") + runif(50, 0, 86400),
  consumption = rnorm(50, 500, 100)
)

p_agg <- m61r(ts_data)

p_agg$mutate(hour_bin = ~format(time, "%Y-%m-%d %H:00"))
p_agg$group_by(~hour_bin)
p_agg$summarise(
  n_obs = ~length(consumption),
  avg_load = ~mean(consumption)
)
p_agg$head(5)

Benchmarks

  1. filter, mutate, head
library(microbenchmark)
library(m61r)

set.seed(42)
n <- 1e6
df_large <- data.frame(
  id = 1:n,
  group = sample(letters, n, replace = TRUE),
  val = rnorm(n)
)

p <- m61r(df_large)

results <- microbenchmark(
  # Approche Base R classique
  base_r = {
    tmp <- df_large[df_large$val > 0, ]
    tmp$new_val <- tmp$val * 2
    head(tmp)
  },
  
  # Approche m61r
  m61r_pipe = {    
    p$filter(~val > 0)
    p$mutate(new_val = ~val * 2)
    p$head()
  },
  times = 50 
)

print(results)

Unit: milliseconds

expr min lq mean median uq max neval
base_r 37.79 42.08 49.75 44.39 59.48 92.38 50
m61r_pipe 20.11 21.94 27.10 23.78 26.19 55.45 50
  1. group_by, summarise
results_group <- microbenchmark(
  # Base R avec aggregate
  base_aggregate = {
    aggregate(val ~ group, data = df_large, FUN = mean)
  },
  
  # m61r
  m61r_grouped = {
    p$group_by(~group)
    p$summarise(avg = ~mean(val))
    p[]
  },
  times = 20
)

print(results_group)

Unit: milliseconds

expr min lq mean median uq max neval
base_aggregate 329.80 350.84 361.70 354.05 372.74 442.04 20
m61r_grouped 146.57 147.70 154.79 149.88 165.77 172.25 20

Installation

Installation from CRAN

install.packages("m61r")

Installation from GITHUB in Base R

setwd("~")

download.file("https://github.com/pv71u98h1/m61r/archive/0.1..zip",destfile="m61r-0.1.0.zip")
unzip("m61r-0.1.0.zip")

# install
install.packages("m61r", repos=NULL, type='source')

unlink(file.path("~","m61r-0.1.0"),recursive=TRUE)
file.remove(file.path("~","m61r-0.1.0.zip"))

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.