Just write a function to do what I want.
partial2 <- function(func, recursive = FALSE, ...) {
cl <- as.call(c(list(quote(func)), list(...)))
cl <- match.call(func,cl)
args <- as.list(cl)[-1]
newfunc <- function(...) {
new_cl <- as.call(c(list(quote(func)), list(...)))
new_cl <- match.call(func,new_cl)
new_args <- as.list(new_cl)[-1]
if (recursive) {
new_args <- modifyList(args, new_args, keep.null = TRUE)
} else {
keep_args <- setdiff(names(args), names(new_args))
new_args <- c(args[keep_args], new_args)
}
do.call(func, new_args)
}
}