[R] getAttr problem
Stoyanov, Tsvetan
tsvetan.stoyanov at mirant.com
Fri May 9 16:55:13 CEST 2003
Correct,
I meant getAttrib, and the "names" attribute is indeed NULL. I meant to say that the "dimnames" attribute of the outer product id NULL, when it should be given by those of the arguments.
I am just trying to reproduce the example in section 4.7.4:
out.R:
------
out <- function(x, y) .Call("out", as.double(x),as.double(y))
out.c:
------
#include <R.h>
#include <Rinternals.h>
SEXP out(SEXP x, SEXP y)
{
int i, j, nx, ny;
double tmp;
SEXP ans, dim, dimnames;
nx = length(x); ny = length(y);
PROTECT(ans = allocVector(REALSXP, nx*ny));
for(i = 0; i < nx; i++) {
tmp = REAL(x)[i];
for(j = 0; j < ny; j++)
REAL(ans)[i + nx*j] = tmp * REAL(y)[j];
}
PROTECT(dim = allocVector(INTSXP, 2));
INTEGER(dim)[0] = nx; INTEGER(dim)[1] = ny;
setAttrib(ans, R_DimSymbol, dim);
PROTECT(dimnames = allocVector(VECSXP, 2));
SET_VECTOR_ELT(dimnames, 0, getAttrib(x,R_NamesSymbol));
SET_VECTOR_ELT(dimnames, 1, getAttrib(y, R_NamesSymbol));
setAttrib(ans, R_DimNamesSymbol, dimnames);
UNPROTECT(3);
return(ans);
}
Create out.dll, start R and here is the output:
-----------------------------------------------
> a
a1 a2
1 2
> b
b1 b2 b3
3 4 5
> dyn.load("out.dll")
> out(a,b)
[,1] [,2] [,3]
[1,] 3 4 5
[2,] 6 8 10
If you replace the last line of out.c with
return(getAttrib(x, R_NamesSymbol));
you will see that getAttrib returns NULL.
Tsvetan
-----Original Message-----
From: Prof Brian Ripley [mailto:ripley at stats.ox.ac.uk]
Sent: Friday, May 09, 2003 10:44 AM
To: Stoyanov, Tsvetan
Cc: 'r-help at stat.math.ethz.ch'
Subject: Re: [R] getAttr problem
On Fri, 9 May 2003, Stoyanov, Tsvetan wrote:
> It seems that getAttr doesn't return "names" attribute properly as in
Is this getAttrib?
> getAttrib(x, R_NamesSymbol));
Really? As it is widely used inside R, that seems implausible.
> If you look at section 4.7.4 in "Writing R Extensions", the second example of
> SEXP out(SEXP, SEXP) returns NULL for the names attribute of the
> outer product.
But the outer product is a matrix and does not have names, so NULL is
correct.
> This is true for R 1.7.0 on both Win2000 with mingw and Redhat 9.0 with gcc.
Well, the source code is the same for both systems, so that is not
surprising (and BTW `mingw' is on ix86 port of gcc, and RH9 (no .0?)
uses another ix86 port of gcc).
> Is there something I am missing?
Yes: could you supply a complete example with the results you get and an
explanation as to why you think it is wrong?
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help
mailing list