Я бы хотел передать переменное количество аргументов из функции в C/С++, но хотел бы оставить аргументы необоснованными и в то же время не делать никаких вычислений в R (кроме вызова C/С++), т.е. я не хочу вызывать substitute
в моей функции R. Один из вариантов для этого, который, как я думал, я мог бы использовать, - это .External
и делает что-то вроде этого:
R_fn = function(...) .External("cpp_fn", ...)
...
# and in C code:
SEXP cpp_fn (SEXP arglist) {
}
Однако .External
оценивает аргументы в ...
, поэтому, если я попробую что-то вроде
rm(x, y) # just making sure these don't exist
R_fn(x*y)
Я получаю сообщение об ошибке, потому что R пытается оценить x*y
перед отправкой его функции.
Для сравнения, в R:
f = function(...) g(...)
g = function(x, ...) print(substitute(x))
f(x*y*z)
# x * y * z
Какие еще варианты у меня есть? Ясно, что это можно сделать, поскольку R сам делает это для ряда функций, например. substitute
сам, но я не понимаю, как это сделать. Я добавил тег rcpp
, потому что мое возможное использование этого будет в rcpp
.