Если вам действительно нужно динамически собрать вызов функции и затем оценить его, do.call
обычно намного лучше (и эффективнее). Немного трудно передать отсутствующий параметр, но TRUE также работает в этом случае:
z <- c[TRUE,2]
эквивалентно:
z <- do.call('[', list(c, TRUE, 2))
Но вот хак, чтобы получить недостающий символ, который затем можно использовать:
m <- quote(f(,))[[2]] # The elusive missing symbol
z <- do.call('[', alist(c, m, 2))