Хэдли,
Вы определенно можете написать код C ++, похожий на код C.
Я понимаю, что вы говорите о том, что C ++ более сложен, чем C. Это если вы хотите освоить все: объекты, шаблоны, STL, метапрограммирование шаблонов и т.д ... большинству людей эти вещи не нужны, и они могут просто полагаться на других к нему. Реализация Rcpp очень сложна, но то, что вы не знаете, как работает ваш холодильник, не означает, что вы не можете открыть дверь и взять свежее молоко ...
Из ваших многочисленных вкладов в R меня поразило то, что вы находите R несколько утомительным (манипулирование данными, графика, манипуляции со строками и т. Д.). Будьте готовы к еще большему количеству сюрпризов с внутренним C API R. Это очень утомительно.
Время от времени я читал руководства по R-exts или R-ints. Это помогает. Но в большинстве случаев, когда я действительно хочу что-то узнать, я обращаюсь к исходному тексту R, а также к источнику пакетов, написанному, например, Саймоном (обычно там есть чему поучиться).
Rcpp разработан, чтобы избавиться от этих утомительных аспектов API.
Вы можете сами судить, что вам кажется более сложным, запутанным и т. Д., На основе нескольких примеров. Эта функция создает вектор символов с помощью C API:
SEXP foobar(){
SEXP ab;
PROTECT(ab = allocVector(STRSXP, 2));
SET_STRING_ELT( ab, 0, mkChar("foo") );
SET_STRING_ELT( ab, 1, mkChar("bar") );
UNPROTECT(1);
}
Используя Rcpp, вы можете написать такую же функцию, как:
SEXP foobar(){
return Rcpp::CharacterVector::create( "foo", "bar" ) ;
}
или:
SEXP foobar(){
Rcpp::CharacterVector res(2) ;
res[0] = "foo" ;
res[1] = "bar" ;
return res ;
}
Как сказал Дирк, в нескольких виньетках есть и другие примеры. Мы также обычно указываем людям на наши модульные тесты, потому что каждый из них тестирует очень конкретную часть кода и в некоторой степени не требует пояснений.
Я здесь явно предвзято, но я бы рекомендовал познакомиться с Rcpp вместо изучения C API R, а затем перейти к списку рассылки, если что-то неясно или не представляется возможным с Rcpp.
В любом случае, конец коммерческой презентации.
Я думаю, все зависит от того, какой код вы хотите написать в конечном итоге.
Ромен