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: -----------------------------------------------> aa1 a2 1 2> bb1 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 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
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