From armstrong.whit at gmail.com  Tue Mar 17 21:45:40 2009
From: armstrong.whit at gmail.com (Whit Armstrong)
Date: Tue, 17 Mar 2009 16:45:40 -0400
Subject: [Rd] question on "row.names" attribute of dataframe when called
	from a compiled package
Message-ID: <8ec76080903171345h98a17efx67aed1f861d0d271@mail.gmail.com>

Why does the following show a class attribute of "character" when
using the interpreter:

x <- data.frame(hat=1:10)
class(rownames(x))  ## returns [1] "character"

but when called from c/cpp, the rownames attribute has no class
attribute, and is in fact a vector of INTSXP?

> .Call("print_class_of_rownames", x, package = "test")
length(x): 10
TYPEOF(x): 13
R_ClassSymbol is null.
NULL
>

is this the intended behaviour?

-Whit


here is my test code:

SEXP print_class_of_rownames(SEXP dataframe_sexp) {
  SEXP x = getAttrib(dataframe_sexp,install("row.names"));
  cout << "length(x): " << length(x) << endl;
  cout << "TYPEOF(x): " << TYPEOF(x) << endl;
  if(getAttrib(x, R_ClassSymbol)==R_NilValue) {
    cout << "R_ClassSymbol is null." << endl;
  } else {
    cout << "R_ClassSymbol is a good value." << endl;
  }
  return R_NilValue;
}



[Rd] question on "row.names" attribute of dataframe when called from a compiled package
Whit Armstrong