Теперь Rcpp используется в 300 пакетах R

Теперь Rcpp используется в 300 пакетах R

26 ноября 2014, 08:31
СанСаныч Фоменко
0
223

Этим утром Rcpp достиг круглой вехи: 300 пакетов на CRAN теперь зависят от него. Интересно, что в конце апреля было 200 пакетов, а в начале августа - 250.

Пакет Rcpp обеспечивает классы C++, которые значительно облегчают установление связи с кодом C или C++ в пакетах R, используя интерфейс .Call (), имеющийся в R.

Rcpp обеспечивает соответствие классам C++ для большого количества основных типов данных R. Следовательно, автор пакета может сохранить свои данные в нормальных структурах данных R, не волнуясь о переводе или передаче их в C++. Одновременно, можно легко получить доступ к структурам данных на уровне C++ и использоваться их обычным способом.

Отображение типов данных работает в обоих направлениях. Можно как передать данные из R в C++, так и вернуть данные из C++ в R. Поддерживаются следующие типы данных.

Тип данных (SEXP)  в R соответствуют объектам C++ в иерархии классов. Поддерживаются все типы R: векторы, функции, среда, и т.д..., и каждый тип отображен на выделенный класс. Например, числовые векторы представлены как класс Rcpp::NumericVector, среды (environments ) представлены как cpp::Environment,, функции представлены как Rcpp::Function, и т.д...

Базовая библиотека C++ также предлагает обертки функций Rcpp::wrap, которая является шаблоном функций, который преобразует произвольный объект в SEXP. Это позволяет прямо реализовать логику C++ с точки зрения стандартных типов C++, таких как контейнеры STL и затем обернуть их при их возврате в R. Внутренне, обертки используют усовершенствованные шаблоны методов метапрограммирования и в настоящий момент поддерживаются следующие типы данных: примитивные типы: bool, int, double, size_t, Rbyte, Rcomplex, std::string, контейнеры STL, например, std::vector.

 Обратная конверсия (из R в C++) выполняется по шаблону функции Rcpp::as, предлагающий подобную степень гибкости.

 

С версии 0.7.0 Rcpp содержит измененную функцию 'cfunction', которая позволяет пользователю R определять тело функции C++ как стандартный символьный вектор R, передаваемый в 'cfunction' наряду с несколькими другими параметрами. Затем функция создает полный исходный файл C++, содержащий функцию с данным телом. Затем компилирует, связывает, и загружает ее. Вместе с классами интерфейса Rcpp это позволяет  очень легко использовать C++ из R.

Поделитесь с друзьями: