To get such behavior with on.exit(), remember to call it with add = TRUE, after = FALSE.
on_exit_stack <-function() {cat("put on socks\n")on.exit(cat("take off socks\n"), add =TRUE, after =FALSE)cat("put on shoes\n")on.exit(cat("take off shoes\n"), add =TRUE, after =FALSE)}on_exit_stack()#> put on socks#> put on shoes#> take off shoes#> take off socks