Предварительные шаги
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;
}
Пожалуйста, смотрите 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, убедитесь, что
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;
}
который отличается от вашего только (важно!) ссылкой на плагин, используемый здесь.
Других решений пока нет …