I'm trying to create this object in C

SWX.RET[1:6,c("SBI,"SPI","SII")]

While i am able to access and use a simple SWX.RET object, I'm getting
confused on how to create an object with the array subscripts like above.

Here is what I tried to do. It doesn't work becase [ is obviously not an
operation on SWX.RET. So how do I create this object so that I may be able
to use it in an expression?

#include <stdio.h>
#include <R.h>
#include <Rinternals.h>
#include <Rdefines.h>
#include <Rembedded.h>

int main(int argc, char** argv)
{

    SEXP e,c,portSpec,portData,portConstr,portVal,tsAssets;
    int errorOccurred,nx,ny,i,j;
    double *v;
    const char *x,*y;

    Rf_initEmbeddedR(argc, argv);

    // loading fPortfolio
    PROTECT(e = lang2(install("library"), mkString("fPortfolio")));
    R_tryEval(e, R_GlobalEnv, NULL);
    UNPROTECT(1);


    // creating a default portfolioSpec object
    PROTECT(e=lang1(install("portfolioSpec")));
    PROTECT(portSpec=R_tryEval(e,R_GlobalEnv, NULL));

    // creating a portfolioData object
    // reqd: take a time series and make a porftfolio object

PROTECT(e=lang4(install("c"),mkString("SBI"),mkString("SPI"),mkString("SII")));
    PROTECT(c=R_tryEval(e,R_GlobalEnv,NULL));

    PROTECT(e=lang3(install("["),install("SWX.RET"),c));
    PROTECT(portData=R_tryEval(e,R_GlobalEnv,NULL));

    PROTECT(e=lang2(install("print"),portData));
    R_tryEval(e,R_GlobalEnv,NULL);


    UNPROTECT(3);

    Rf_endEmbeddedR(0);

    return 0;
}

On Tue, Sep 15, 2009 at 1:05 PM, Abhijit Bera <abhibera@gmail.com> wrote:

> Hi
>
> I have confusion in evaluating this expression using C. It's similar to my
> previous expression with the addition of row and column specifiers. I'm
> confused how to create such objects.
>
> Covariance <- round(cov(100 * SWX.RET[1:6,c("SBI","SPI","SII")]),
>
> I thought of creating vectors for 1:6 and c("SBI","SPI","SII")
>
> But I don't know how to create the object
> SWX.RET[1:6,c("SBI","SPI","SII")]
>
>
> On Tue, Aug 25, 2009 at 6:11 PM, Abhijit Bera <abhibera@gmail.com> wrote:
>
>> Hi
>>
>> I think I have asked these questions earlier, but I been able to find
>> answers from the documentation (which I found poorly written in several
>> places). Will someone be kind enough to give me answers and enlighten me?
>> (as in explain with CODE?)
>>
>> I want to embed R in my application and use the fPortfolio package for
>> carrying out risk management computations. Right now I'm reading the
>> Rmetrics Ebook and trying to convert the various examples into embedded C
>> code.
>>
>> Coming from a strictly C background, I have slight difficulty in
>> comprehending a functional language like R and it gets worse when I try to
>> embed R into a procedural language like C. So here is a list of my doubts:
>>
>> 1) I am very confused on how the lang 1 2 3 4 ... set of functions work. I
>> haven't found any relevant documentation explaining it clearly. I have a
>> vague idea but still I cannot understand how I would evaluate an R
>> expression like Covariance <- round(cov(100 * SWX.RET), digits = 4) using
>> lang, install and R_tryEval.
>>
>> 2) What exactly does install do?
>>
>> 3) I wrote the following code:
>>
>> #include <Rinternals.h>
>> #include <Rembedded.h>
>>
>> int main (int argc, char** argv) {
>>
>>     SEXP e,val;
>>     int errorOccurred;
>>
>>     Rf_initEmbeddedR(argc, argv);
>>
>>     // library("fPortfolio")
>>     PROTECT(e = lang2(install("library"), mkString("fPortfolio")));
>>     R_tryEval(e, R_GlobalEnv, NULL);
>>     UNPROTECT(1);
>>
>>    // colMeans(SWX.RET)
>>     PROTECT(e = lang2(install("colMeans"), install("SWX.RET")));
>>     val = (R_tryEval(e, NULL, &errorOccurred));
>>
>>     Rf_PrintValue(val);
>>
>>     return 0;
>>
>> }
>>
>> When I tried :
>>
>> >mean(SWX.RET)
>>
>> in the R prompt I got the following output:
>>
>>          SBI          SPI          SII         LP25         LP40
>> LP60
>> 4.660521e-06 2.153198e-04 2.033869e-04 1.388886e-04 1.349041e-04
>> 1.226859e-04
>>
>>
>> However when I replaced colMeans with mean in the C code above I got a
>> mean of the means (0.0001366410) of all the columns when Rf_PrintValue was
>> called. Using colMeans gave me the output as shown above. Why does this
>> happen? How do I get the above output using mean?
>>
>> 4) From the above code segment, how can I deal with the SEXPREC val which
>> is returned by R_tryEval in the above code and convert it to my own local
>> vector datatype? How do I access the values of val? val will now be a
>> timeseries so how do i convert it?
>>
>>
>> Thanks
>>
>> Abhijit Bera
>>
>>
>>
>>
>>
>>
>

	[[alternative HTML version deleted]]

