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