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

0

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

QuantLib был установлен вместе с Boost и построен в соответствии с этими инструкциями в 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;
}
Теги:
rcpp
quantlib

1 ответ

2
Лучший ответ

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

Но раньше Rcpp уже был RQuantLib, и он все еще существует. Загрузите его источники, скачайте файл quantlib-1.4.zip с сайта "extras" в Оксфорде и просто перестройте его с помощью 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
  • pre-build 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;
}

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню