Hi all, It seems that getAttr doesn't return "names" attribute properly as in getAttrib(x, R_NamesSymbol)); 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. This is true for R 1.7.0 on both Win2000 with mingw and Redhat 9.0 with gcc. Is there something I am missing? Best, Tsvetan
On Fri, 9 May 2003, Stoyanov, Tsvetan wrote:> It seems that getAttr doesn't return "names" attribute properly as inIs 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
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
Ok, it is trivial, it in in the R function, it has as.double which removes the names. Anyhow, the example in the text should be clarified. 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 inIs 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
On Fri, 9 May 2003, Stoyanov, Tsvetan wrote:> Ok, > > it is trivial, it in in the R function, it has as.double which removes the names. > Anyhow, the example in the text should be clarified.Let me point out the following extract from R-exts.R, *in the same directory* ## ----- outer products example ----- out <- function(x, y) .Call("out", as.double(x), as.double(y)) out(1:3, 2:4) x <- as.double(1:3); names(x) <- letters[x] # so as not to lose names out <- function(x, y) .Call("out", x, y) out(x, as.double(2:4)) so the lack of clarity is not in the R sources (which do at least get the function names right). -- 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