Вызов QuantLib из R через Rcpp

Предварительные шаги

QuantLib был установлен вместе с Увеличение и построил следующее эти инструкции в Microsoft Visual C ++ 2010; Тестовый код прошел без проблем.

Использование R со следующим примером кода дало ожидаемые результаты:

install.packages("Rcpp")
library(Rcpp)

cppFunction('
int add(int x, int y, int z) {
int sum = x + y + z;
return sum;
}'
)

add(1, 2, 3)
# > add(1, 2, 3)
# [1] 6

Что касается использования отдельных файлов C ++, пример ниже

#include <Rcpp.h>
using namespace Rcpp;

// Below is a simple example of exporting a C++ function to R. You can
// source this function into an R session using the Rcpp::sourceCpp
// function (or via the Source button on the editor toolbar)

// For more on using Rcpp click the Help button on the editor toolbar

// [[Rcpp::export]]
int timesTwo(int x) {
return x * 2;
}

удалось за результат в R было

> timesTwo(7)
[1] 14

Я думаю, что все в порядке.

Мой вопрос

Если мои настройки верны, мой вопрос таков: QuantLib-vc100-mt-gd.lib библиотека объектных файлов находится в C:\DevTools\QuantLib-1.3\lib, что я должен сделать, чтобы сделать что-то вроде кода ниже, чтобы работать должным образом, если вызывается из R?

#include <ql/quantlib.hpp>
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
double timesTwo(double x) {
QuantLib::Calendar myCal = QuantLib::UnitedKingdom();
QuantLib::Date newYearsEve(31, QuantLib::Dec, 2008);
QuantLib::Rate zc3mQuote = x;
return zc3mQuote * 2;
}

0

Решение

Пожалуйста, смотрите FAQ по Rcpp для общего вопроса «могу ли я использовать R и Rcpp с Visual Studio» (tl; dr: Нет, вы не можете).

Но до появления Rcpp уже существовал RQuantLib, и он все еще существует. Загрузите его источники, скачайте Quantlib-1.4.zip с сайт «Экстры» в Оксфорде и просто перестройте RQuantLib с ним. Который использует Rcpp.

Затем вы можете расширить RQuantLib до вашего сердца.

В новейшей RQuantLib также есть плагин, аналогичный тому, что есть у RcppArmadillo и RcppEigen, так что вы можете создавать быстрые маленькие тестовые файлы, такие как тот, который вы опубликовали. Я постараюсь продолжить в выходные с примером доказательства существования.

редактировать: Как и обещал, я попробовал. С текущими RQuantLib (0.3.12) и Rcpp (0.11.1, выпущенными сегодня, но 0.11.0 должен работать), и ваш файл сохранится в /tmp/lisaann.cpp это «просто работает»:

R> library(Rcpp)
R> sourceCpp("/tmp/lisaann.cpp")
R> timesTwo(1.23)
[1] 2.46
R>

Если это не работает в Windows, убедитесь, что

  • Rtools установлен
  • предварительная сборка QuantLib для использования R (см. мой недавний пост в блоге)
  • установить переменные среды, которые src/Makevars.win надеется

Иначе, просто используйте Ubuntu, Debian или любую другую здравомыслящую ОС на виртуальной машине.

Изменить 2: Одна важная часть, однако, заключается в том, что [[ Rcpp::depends() ]] атрибут добавлен в ваш код. С этим вот файл, который я использовал:

#include <ql/quantlib.hpp>
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::depends(RQuantLib)]]

// [[Rcpp::export]]
double timesTwo(double x) {
QuantLib::Calendar myCal = QuantLib::UnitedKingdom();
QuantLib::Date newYearsEve(31, QuantLib::Dec, 2008);
QuantLib::Rate zc3mQuote = x;
return zc3mQuote * 2;
}

который отличается от вашего только (важно!) ссылкой на плагин, используемый здесь.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]