Posted by
Dirk Eddelbuettel on
Jun 04, 2013; 1:51pm
URL: http://quantlib.414.s1.nabble.com/QuantLib-R-package-from-SWIG-code-tp14318p14327.html
Hi Luigi,
On 4 June 2013 at 12:19, Luigi Ballabio wrote:
| Hi Dirk,
| yes, let's merge it after release. We'll autoconf it so that the
| cpp is generated in the correct place and the other files are created,
| too.
Sounds good. We'll tackle this off-line.
| Re the swap enumeration: it might be due to the shenanigans we're
| doing to hide the shared pointers from the interface. Option::Put,
| that you see, is exported directly (see options.i:40).
| VanillaSwap::Payer is first hidden, then re-exported as a static const
| data member (see swap.i, line 56 and onwards). Does SWIG/R manage
| this?
I will attest to complete ignorance as to what SWIG/R does. That was AFAIK
all Joseph Wang--and singlehandedly.
Dirk
| Luigi
|
|
|
| On Tue, Jun 4, 2013 at 3:06 AM, Dirk Eddelbuettel <
[hidden email]> wrote:
| >
| > Hi all,
| >
| > A few days ago I finally made an attempt at turning the few files usually
| > contained in the QL-SWIG directory for R (eg makeRData.R, QuantLib.cpp,
| > QuantLib.R) into a proper R package (in the sense of the ~ 4500 CRAN
| > packages).
| >
| > It is straightforward. A working version is committed in the SVN of my
| > earlier (and more limited) explicit RQuantLib wrapping at R-Forge [1]. One
| > only needs this minimal layout:
| >
| > edd@max:~/svn/rquantlib/pkg/QuantLib$ tree
| > .
| > ├── cleanup
| > ├── demo # mostly files by Joseph Wang
| > │ ├── 00Index # index of demos
| > │ ├── bates.R # a file by Klaus Spanderen
| > │ ├── bonds.R # something I added, see below
| > │ ├── europeanOption.R
| > │ ├── fdOption.R
| > │ ├── graph.R
| > │ ├── scatter.R
| > │ ├── swap.R # incomplete, see below
| > │ └── wireframe.R
| > ├── DESCRIPTION
| > ├── NAMESPACE
| > ├── R
| > │ ├── makeRData.R # not needed
| > │ └── QuantLib.R
| > └── src
| > ├── Makevars
| > └── QuantLib.cpp
| >
| > 3 directories, 16 files
| > edd@max:~/svn/rquantlib/pkg/QuantLib$
| >
| > where
| > a) demo/ is an optional directory with examples or demos,
| > b) makeRData.R is all commented-out (!!) and
| > c) the files R/QuantLib.R and src/QuantLib.cpp are _unaltered_ copies
| > from the current QL-SWIG files.
| > DESCRIPTION and NAMESPACE are needed per R standards for packages. The rest
| > is gravy: src/Makevars is two lines calling quantlib-config. We can easily
| > autoconf this.
| >
| > The main advantage: it now behaves like a standard R packages, and users can
| > do library(QuantLib) as they would with any other package. [ It will
| > never pass QA tests for R as every exported function would need a manual page
| > etc pp. The code is also fragile, it is pretty easy to end up with segfaults. ]
| >
| > Now, I don't want to suggest that we shoehorn this into 1.3 if QL 1.3 is coming
| > soon, but maybe the one after would fit if anybody else is interested in R
| > integration? I'd also be happy to keep it outside of QL if that is prefered.
| >
| > Also, I spent some time on the weekend translating bonds.py into bonds.R.
| > That worked nicely, see below [2] I also tried to translate swap.py -- but
| > just realized that the enum type for the Payer vs Receiver is not in the
| > QuantLib.R file [3]. Any idea? I may translate some more of the existing
| > examples from Python or other directories.
| >
| > Feedback welcome.
| >
| > Dirk
| >
| >
| > [1] You can browse the SVN here:
| >
https://r-forge.r-project.org/scm/viewvc.php/pkg/QuantLib/?root=rquantlib| >
| > [2] A quick transcript
| >
| > edd@max:~/svn/rquantlib/pkg/QuantLib$ R --slave -e 'source("demo/bonds.R")'
| > Today :[1] "2008-09-15"
| > Settlement Date: [1] "2008-09-18"
| >
| > Results:
| > zeroCoupon fixedRate floatingRate
| > NPV 100.922 107.66829 102.3593146
| > Clean Price 100.922 106.12753 101.7972017
| > Dirty Price 100.922 107.66829 102.3593146
| > Accrued Amount 0.000 1.54076 0.5621129
| > Previous Coupon NA 0.04500 0.0288625
| > Next Coupon NA 0.04500 0.0342984
| >
| > Sample indirect computations (for the floating rate bond):
| > Yield to Clean Price: [1] 101.797
| > Clean Price to Yield: [1] 0.0220096
| > edd@max:~/svn/rquantlib/pkg/QuantLib$
| >
| >
| > [3] No Payer/Receiver enum for Vanilla Swap, other enums are defined:
| >
| > edd@max:~/svn/rquantlib/pkg/QuantLib$ grep Payer R/QuantLib.R
| > edd@max:~/svn/rquantlib/pkg/QuantLib$ grep Put R/QuantLib.R
| > 'Put' = -1,
| > edd@max:~/svn/rquantlib/pkg/QuantLib$
| >
| > --
| > Dirk Eddelbuettel |
[hidden email] |
http://dirk.eddelbuettel.com| >
| > ------------------------------------------------------------------------------
| > How ServiceNow helps IT people transform IT departments:
| > 1. A cloud service to automate IT design, transition and operations
| > 2. Dashboards that offer high-level views of enterprise services
| > 3. A single system of record for all IT processes
| >
http://p.sf.net/sfu/servicenow-d2d-j| > _______________________________________________
| > QuantLib-dev mailing list
| >
[hidden email]
| >
https://lists.sourceforge.net/lists/listinfo/quantlib-dev--
Dirk Eddelbuettel |
[hidden email] |
http://dirk.eddelbuettel.com------------------------------------------------------------------------------
How ServiceNow helps IT people transform IT departments:
1. A cloud service to automate IT design, transition and operations
2. Dashboards that offer high-level views of enterprise services
3. A single system of record for all IT processes
http://p.sf.net/sfu/servicenow-d2d-j_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev