Ответ 1
Что-то вроде этого, конечно, возможно. Вы должны просто представить себе для себя, в каком фрейме/точке вы хотите оценить аргументы f, которые затем перенаправляются на g.
Типичная процедура состоит из вызова match.call() внутри f, чтобы фактически записать выражение вызова, с которым был вызван f, а затем изменить выражение вызова, поскольку оно должно быть удобно для вас (например, отфильтровывать ненужные аргументы, добавляя новые, и т.д.), а затем оценку нового выражения вызова через вызов eval(). Итак, что-то вроде этого должно (почти) работать:
f <- function(a, callback, b, c, d, ...) {
# Grab the "f" call expression
fcall <- match.call(expand.dots = FALSE)
# Construct the new call expression
fcall[[1]] <- callback
# Filter out / add new args
fcall$callback <- NULL
fcall$z <- z
# Do the call
eval(fcall, parent.frame())
}