Obtaining predetermined sample per strata

Good day,

How does one obtain different strata sample from data using S as size of each stratum)?
Please advise on how to do this using tidyverse.

data

data <- data.frame(
gender = c('M','F','M','M', 'F', 'F', 'F','M','M', 'F','F','M','M', 'F','F','M','F','M','M', 'F', 'F', 'F','M','M', 'F','F','M','M', 'F','F'),
age = c(16,24,55,45,25,72,28,17,21,33,16,24,55,45,25,72,28,17,21,33,16,24,55,45,25,72,28,17,21,33),
st = c('a','e','c','d','b','c','b','a','e','d','a','e','c','d','b','c','b','a','e','d','a','e','c','d','b','c','b','a','e','d')
)

sample needed per strata in dada S

S <- data.frame(
st = c('a', 'b', 'c', 'd', 'e'),
smpl = c(7,12,5,10,16)
)

Something like this perhaps:

library(dplyr)
library(purrr)

# data
data <- data.frame(
  gender = c('M','F','M','M', 'F', 'F', 'F','M','M', 'F','F','M','M', 'F','F','M','F','M','M', 'F', 'F', 'F','M','M', 'F','F','M','M', 'F','F'),
  age = c(16,24,55,45,25,72,28,17,21,33,16,24,55,45,25,72,28,17,21,33,16,24,55,45,25,72,28,17,21,33),
  st = c('a','e','c','d','b','c','b','a','e','d','a','e','c','d','b','c','b','a','e','d','a','e','c','d','b','c','b','a','e','d')
)

# sample needed per strata in data 
S <- data.frame(
  st = c('a', 'b', 'c', 'd', 'e'),
  smpl = c(7,12,5,10,16)
)

# sample slice  
smpl_strat <- function(st, smple, x) {
  x  |> 
    filter(st == !!st)  |> 
    slice_sample(n = smple, replace = TRUE)
}

# map over S
stratified_sample <- pmap(S, smpl_strat, data  ) |> list_rbind()

# make sure it worked
all.equal(
  stratified_sample |>  count(st,  name = "smpl"), S)