2013-08-31 2 views
0

В чем разница между Rcpp::InternalFunction и LOAD_RCPP_MODULE в контексте использования RInside? Они, похоже, имеют ту же цель, что и у LOAD_RCPP_MODULE есть дополнительный слой. Каковы варианты использования для обоих из них, и когда я должен выбирать один за другим?Разница между LOAD_RCPP_MODULE и Rcpp :: InternalFunction

//example with LOAD_RCPP_MODULE 
const char* hello(std::string who){ 
    std::string result("hello ") ; 
    result += who ; 
    return result.c_str() ; 
} 

RCPP_MODULE(bling){ 
    using namespace Rcpp ; 
    function("hello", &hello); 
} 

R["bling"] = LOAD_RCPP_MODULE(bling); 

Вот другой пример

//example with Rcpp::InternalFunction 
    const char* hello(std::string who){ 
     std::string result("hello ") ; 
     result += who ; 
     return result.c_str() ; 
    } 

R["hello"] = Rcpp::InternalFunction(&hello) 

ответ

1

Модули позволят вам выставить несколько функций и классов. InternalFunction предоставляет только одну функцию за раз.

InternalFunction - это что-то вроде любопытства, которое мы в какой-то момент добавили, чтобы ответить на вопрос «можем ли мы сделать это». Это одна из этих вещей, которые остаются в Rcpp, потому что они когда-то были, но это не вызывает у нас слишком большого внимания. Он в основном используется в RInside, чтобы R-код вызывал функции C++. Это любопытный шаблон, учитывая, что с RInside фокус является внедрением приложений на C++ R.

Модули, однако, уделяют много внимания. Мой совет - использовать их.

+0

true Я согласен с вашими комментариями, есть некоторые варианты использования функции «InternalFunction», например, функция в C++, переданная в библиотеку оптимизации R, но ее определенно не шоу-стоппер, если вы избегаете «InternalFunction». – pyCthon

+0

Несомненно. Я знаю, что это полезно, иначе я бы не стал его вводить. Если ваша целевая функция является функцией C++, я думаю, что я бы посмотрел на алгоритмы оптимизации, которые не нужно возвращать в R, чтобы называть это ... так все это в C++ –

1

"Это зависит от многого."

Это разные инструменты для аналогичных целей. Обратите внимание на «Внутренний», хотя он что-то сигнализирует. В общем, модули очень тонкие и мощные тоже для Rcpp (со своей собственной виньеткой), а также доступны через RInside.