Hi Romain

I got what ur saying. Good idea. First I convert the data into a timeseries
and return object using C, then I pass it onto an R function which I have
written, I call the R function from my C code, it evaluates and then I
process the values returned by it in my C code. Much simpler that way. So, I
can do away with all these confusing constructs. :)

What about performance? You think I will see a difference if I follow a C
only approach of creating all the objects?

Regards

Abhijit

On Wed, Sep 30, 2009 at 12:45 PM, Abhijit Bera <abhib...@gmail.com> wrote:

> Hi
>
> I'm pulling financial datasets from a DB, converting it to a timeseries
> object then creating a returns object out of it.
>
> I plan to embed R into an application, which is why I'm taking this route
> of using C.
>
> Regards
>
> Abhijit
>
>
> On Wed, Sep 30, 2009 at 12:07 PM, Romain Francois <
> romain.franc...@dbmail.com> wrote:
>
>> On 09/30/2009 08:51 AM, Abhijit Bera wrote:
>>
>>>
>>> Hi
>>>
>>> Thanks all of you for your suggestions. I will put up my code shortly
>>> based
>>> on your suggestions.
>>>
>>> I wonder how the parsing and eval will work when most of my data comes in
>>> from an external source like a DB?  Probably it would be more efficient
>>> to
>>> make an object? Hmmmm... maybe it has to be a mix of parsing and eval?
>>>
>>
>> What's in the database ? Is this the data or the R code ? What's wrong
>> with writing your own set of R functions and evaluate calls to these
>> functions instead of basically replicate this in C or C++ or whatever.
>>
>> Dirk's code certainly is nicer, but would you really do it like that in
>> real life ?
>>
>> Romain
>>
>>
>>  Yes, the lang4 c idea sucks. mkstring is better.
>>>
>>> Regards
>>>
>>> Abhijit
>>>
>>>
>>> On Tue, Sep 29, 2009 at 11:55 PM, Dirk Eddelbuettel<e...@debian.org>
>>>  wrote:
>>>
>>>
>>>> This is so much fun.  The C code posted wasn't exactly legible.  So here
>>>> is
>>>> a
>>>> new C++ variant that I just committed to the RInside SVN as a new
>>>> example.
>>>> And it mine works (against RInide and Rcpp as on CRAN):
>>>>
>>>> e...@ron:~/svn/rinside/pkg/inst/examples>  ./rinside_sample4
>>>> Package 'sn', 0.4-12 (2009-03-21). Type 'help(SN)' for summary
>>>> information
>>>> Using the GLPK callable library version 4.37
>>>>
>>>> Title:
>>>>  MV Feasible Portfolio
>>>>  Estimator:         covEstimator
>>>>  Solver:            solveRquadprog
>>>>  Optimize:          minRisk
>>>>  Constraints:       LongOnly
>>>>
>>>> Portfolio Weights:
>>>> SBI SPI SII LMI MPI ALT
>>>> 0.1 0.1 0.1 0.1 0.3 0.3
>>>>
>>>> Covariance Risk Budgets:
>>>>    SBI     SPI     SII     LMI     MPI     ALT
>>>> -0.0038  0.1423  0.0125 -0.0058  0.4862  0.3686
>>>>
>>>> Target Return and Risks:
>>>>  mean     mu    Cov  Sigma   CVaR    VaR
>>>> 0.0548 0.0548 0.4371 0.4371 1.0751 0.6609
>>>>
>>>> Description:
>>>>  Tue Sep 29 13:43:36 2009 by user:
>>>>             SBI        -0.00380065
>>>>             SPI           0.142261
>>>>             SII          0.0125242
>>>>             LMI        -0.00576251
>>>>             MPI           0.486228
>>>>             ALT           0.368551
>>>> e...@ron:~/svn/rinside/pkg/inst/examples>
>>>>
>>>> The final few lines are C++ accessing the result, earlier in the code I
>>>> assign the weight vector from C++ as you desired from C.  All with error
>>>> checking / exception handling and what have in under 60 lines of (IMHO
>>>> more
>>>> readable) code -- see below.
>>>>
>>>> Dirk
>>>>
>>>> // -*- mode: C++; c-indent-level: 4; c-basic-offset: 4;  tab-width: 8;
>>>> -*-
>>>> //
>>>> // Another simple example inspired by an r-devel mail by Abhijit Bera
>>>> //
>>>> // Copyright (C) 2009 Dirk Eddelbuettel and GPL'ed
>>>>
>>>> #include "RInside.h"                    // for the embedded R via
>>>> RInside
>>>> #include "Rcpp.h"                       // for the R / Cpp interface
>>>> used
>>>> for transfer
>>>> #include<iomanip>
>>>>
>>>> int main(int argc, char *argv[]) {
>>>>
>>>>    try {
>>>>        RInside R(argc, argv);          // create an embedded R instance
>>>>        SEXP ans;
>>>>
>>>>        std::string txt = "suppressMessages(library(fPortfolio))";
>>>>        if (R.parseEvalQ(txt))          // load library, no return value
>>>>            throw std::runtime_error("R cannot evaluate '" + txt + "'");
>>>>
>>>>        txt = "lppData<- 100 * LPP2005.RET[, 1:6]; "
>>>>          "ewSpec<- portfolioSpec(); "
>>>>          "nAssets<- ncol(lppData); ";
>>>>        if (R.parseEval(txt, ans))      // prepare problem
>>>>            throw std::runtime_error("R cannot evaluate '" + txt + "'");
>>>>
>>>>        const double dvec[6] = { 0.1, 0.1, 0.1, 0.1, 0.3, 0.3 }; //
>>>> choose
>>>> any weights you want
>>>>        const std::vector<double>  w(dvec,&dvec[6]);
>>>>
>>>>        R.assign( w, "weightsvec");     // assign STL vector to R's
>>>> 'weightsvec' variable
>>>>
>>>>        txt = "setWeights(ewSpec)<- weightsvec";
>>>>        if (R.parseEvalQ(txt))          // evaluate assignment
>>>>            throw std::runtime_error("R cannot evaluate '" + txt + "'");
>>>>
>>>>        txt = "ewPortfolio<- feasiblePortfolio(data = lppData, spec =
>>>> ewSpec, constraints = \"LongOnly\"); "
>>>>          "print(ewPortfolio); "
>>>>          "vec<- getCovRiskBudgets(ewportfo...@portfolio)";
>>>>        if (R.parseEval(txt, ans))      // assign covRiskBudget weights
>>>> to
>>>> ans
>>>>            throw std::runtime_error("R cannot evaluate '" + txt + "'");
>>>>        RcppVector<double>  V(ans);      // convert SEXP variable to an
>>>> RcppMatrix
>>>>
>>>>        R.parseEval("names(vec)", ans); // assign columns names to ans
>>>>        RcppStringVector names(ans);
>>>>
>>>>        for (int i=0; i<names.size(); i++) {
>>>>          std::cout<<  std::setw(16)<<  names(i)<<  "\t"
>>>>                    <<  std::setw(11)<<  V(i)<<  "\n";
>>>>        }
>>>>
>>>>    } catch(std::exception&  ex) {
>>>>        std::cerr<<  "Exception caught: "<<  ex.what()<<  std::endl;
>>>>    } catch(...) {
>>>>        std::cerr<<  "Unknown exception caught"<<  std::endl;
>>>>    }
>>>>
>>>>    exit(0);
>>>> }
>>>>
>>>
>>
>>
>> --
>> Romain Francois
>> Professional R Enthusiast
>> +33(0) 6 28 91 30 30
>> http://romainfrancois.blog.free.fr
>> |- http://tr.im/ztCu : RGG #158:161: examples of package IDPmisc
>> |- http://tr.im/yw8E : New R package : sos
>> `- http://tr.im/y8y0 : search the graph gallery from R
>>
>>
>

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to