Quantcast

debug R objects at C level

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

debug R objects at C level

dusadrian
Dear R-devel,

I am now at a debugging phase, and would like to inspect the
(individual) values in an arbitrary R vector. It should be simple, but
after hours of reading I am simply unable to find the right
information.

A possible C code is:
±±±±±±±±±±±±±±±±±
# include <R.h>
# include <Rinternals.h>
# include <R_ext/Rdynload.h>

SEXP foo(SEXP x) // where x is a vector passed by an R function
    double *px;
    int i;
    px = REAL(x);

    for (i = 0; i < length(x); i++) {
        printf("%d\n", px[i]);            // not good
    }
}
±±±±±±±±±±±±±±±±±

That doesn't do the trick, because it only prints the pointer itself.
What I'd like to do is to inspect is the actual vector value in the
position i, that the pointer px[i] points to.

I read about PrintVector() in Rinternals.h, but that prints the whole
R vector, while for debugging purposes I need to inspect individual
values, one at at time.

Thanks in advance,
Adrian

--
Adrian Dusa
Romanian Social Data Archive
1, Schitu Magureanu Bd.
050025 Bucharest sector 5
Romania
Tel.:+40 21 3126618 \
       +40 21 3120210 / int.101
Fax: +40 21 3158391

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: debug R objects at C level

Duncan Murdoch-2
On 12-06-21 7:38 AM, Adrian Duşa wrote:

> Dear R-devel,
>
> I am now at a debugging phase, and would like to inspect the
> (individual) values in an arbitrary R vector. It should be simple, but
> after hours of reading I am simply unable to find the right
> information.
>
> A possible C code is:
> ±±±±±±±±±±±±±±±±±
> # include<R.h>
> # include<Rinternals.h>
> # include<R_ext/Rdynload.h>
>
> SEXP foo(SEXP x) // where x is a vector passed by an R function
>      double *px;
>      int i;
>      px = REAL(x);
>
>      for (i = 0; i<  length(x); i++) {
>          printf("%d\n", px[i]);            // not good
>      }
> }
> ±±±±±±±±±±±±±±±±±
>
> That doesn't do the trick, because it only prints the pointer itself.
> What I'd like to do is to inspect is the actual vector value in the
> position i, that the pointer px[i] points to.
>
> I read about PrintVector() in Rinternals.h, but that prints the whole
> R vector, while for debugging purposes I need to inspect individual
> values, one at at time.

You seeing the value, not a pointer, but you are using an integer format
to display a real.  You need the %f or related format.

I would also recommend using Rprintf() rather than printf().  The latter
will only work on some platforms, while Rprintf() should work everywhere.

Duncan Murdoch

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: debug R objects at C level

dusadrian
On Thu, Jun 21, 2012 at 3:02 PM, Duncan Murdoch
<[hidden email]> wrote:
> On 12-06-21 7:38 AM, Adrian Duşa wrote:
>>[...]
>
> You seeing the value, not a pointer, but you are using an integer format to
> display a real.  You need the %f or related format.
>
> I would also recommend using Rprintf() rather than printf().  The latter
> will only work on some platforms, while Rprintf() should work everywhere.

Oh... so that was a printing issue... indeed very basic (starting to
learn C and slowly catching up with various data formats).
Thanks as well for the tip with Rprintf(), that also helps.

Best wishes,
Adrian

--
Adrian Dusa
Romanian Social Data Archive
1, Schitu Magureanu Bd.
050025 Bucharest sector 5
Romania
Tel.:+40 21 3126618 \
       +40 21 3120210 / int.101
Fax: +40 21 3158391

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Loading...