Skip to content

Instantly share code, notes, and snippets.

@jmbarbone
Created October 2, 2025 05:55
Show Gist options
  • Select an option

  • Save jmbarbone/d178a14f5fac72dcf319fe4796a4077e to your computer and use it in GitHub Desktop.

Select an option

Save jmbarbone/d178a14f5fac72dcf319fe4796a4077e to your computer and use it in GitHub Desktop.
just some iterations in R
enumerate <- function(x, i = "i", v = "v") {
  lapply(
    seq_along(x),
    function(iteration) {
      structure(
        list(iteration, x[[iteration]]),
        class = c("enumeration", "list"),
        names = c(i, v)
      )
    }
  )
}


for (e in enumerate(letters)) {
  cat(sprintf("%i: %s\n", e$i, e$v))
}
#> 1: a
#> 2: b
#> 3: c
#> 4: d
#> 5: e
#> 6: f
#> 7: g
#> 8: h
#> 9: i
#> 10: j
#> 11: k
#> 12: l
#> 13: m
#> 14: n
#> 15: o
#> 16: p
#> 17: q
#> 18: r
#> 19: s
#> 20: t
#> 21: u
#> 22: v
#> 23: w
#> 24: x
#> 25: y
#> 26: z


pair <- function(...) {
  p <- list(...)
  stopifnot(nzchar(names(p)))

  do.call(
    mapply,
    c(
      function(...) list(...),
      p,
      USE.NAMES = FALSE,
      SIMPLIFY = FALSE
    )
  )
}

for (p in pair(x = state.abb, y = state.area)) {
  cat(sprintf("%s: %i\n", p$x, p$y))
}
#> AL: 51609
#> AK: 589757
#> AZ: 113909
#> AR: 53104
#> CA: 158693
#> CO: 104247
#> CT: 5009
#> DE: 2057
#> FL: 58560
#> GA: 58876
#> HI: 6450
#> ID: 83557
#> IL: 56400
#> IN: 36291
#> IA: 56290
#> KS: 82264
#> KY: 40395
#> LA: 48523
#> ME: 33215
#> MD: 10577
#> MA: 8257
#> MI: 58216
#> MN: 84068
#> MS: 47716
#> MO: 69686
#> MT: 147138
#> NE: 77227
#> NV: 110540
#> NH: 9304
#> NJ: 7836
#> NM: 121666
#> NY: 49576
#> NC: 52586
#> ND: 70665
#> OH: 41222
#> OK: 69919
#> OR: 96981
#> PA: 45333
#> RI: 1214
#> SC: 31055
#> SD: 77047
#> TN: 42244
#> TX: 267339
#> UT: 84916
#> VT: 9609
#> VA: 40815
#> WA: 68192
#> WV: 24181
#> WI: 56154
#> WY: 97914

iterate <- function(x, expr, i = "i", v = "v") {
  expr <- substitute(expr)
  for (e in enumerate(x, i = i, v = v)) {
    eval(expr, envir = e)
  }
}

iterate(
  letters,
  cat(sprintf("%s: %s\n", i, v))
)
#> 1: a
#> 2: b
#> 3: c
#> 4: d
#> 5: e
#> 6: f
#> 7: g
#> 8: h
#> 9: i
#> 10: j
#> 11: k
#> 12: l
#> 13: m
#> 14: n
#> 15: o
#> 16: p
#> 17: q
#> 18: r
#> 19: s
#> 20: t
#> 21: u
#> 22: v
#> 23: w
#> 24: x
#> 25: y
#> 26: z

vec_iterate <- function(x, expr, i = "i", v = "v") {
  expr <- substitute(expr)
  sapply(enumerate(x, i = i, v = v), function(e) eval(expr, e))
}

vec_iterate(
  letters,
  sprintf("%s: %s", i, v),
)
#>  [1] "1: a"  "2: b"  "3: c"  "4: d"  "5: e"  "6: f"  "7: g"  "8: h"  "9: i" 
#> [10] "10: j" "11: k" "12: l" "13: m" "14: n" "15: o" "16: p" "17: q" "18: r"
#> [19] "19: s" "20: t" "21: u" "22: v" "23: w" "24: x" "25: y" "26: z"

Created on 2025-10-02 with reprex v2.1.1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment