[Rd] missing IntegerFromString()

Seth Falcon sfalcon at fhcrc.org
Fri Jun 8 08:41:26 CEST 2007

"Aniko Szabo" <aszabo at hpi.mcw.edu> writes:

> I am sorry about the confusion, I was too hasty.
> asInteger(coerceVector(x,INTSXP)) does not work after all. Here are more
> details of what I am trying to accomplish: I have a matrix with column
> names that are actually known to be integers (because I set them so
> myself in the R code, say, colnames(mat) <- 1:10. Of course, they become
> converted to character strings.)
> The relevant part of my code used to be:
> SEXP MyFunction(SEXP mat);
> 	int warn, minY 
> 	SEXP rl, cl;
> 	char *rn, *cn;
> 	GetMatrixDimnames(mat, &rl, &cl, &rn, &cn);
> 	minY = IntegerFromString(VECTOR_ELT(cl,0), &warn);
> 	if (warn > 0) error("Names of popmatrix columns are not
> integers");
> Running some tests it appears that VECTOR_ELT(cl,0) is CHARSXP (which I
> wound up using without even knowing it).
> I tried replacing the IntegerFromString part with both
> asInteger(VECTOR_ELT(cl,0)) and with
> asInteger(coerceVector(VECTOR_ELT(cl,0),INTSXP)), but as you surmised,
> since VECTOR_ELT(cl,0) is CHARSXP, it does not work.
> So, how could I get the actual values in the column names?

How about:

  SEXP colnums;
  int *ivals;
  PROTECT(colnums = coerceVector(cl, INTSXP));
  ivals = INTEGER(colnums);

Here you convert the STRSXP cl into an INTSXP.  If you want the actual
integer values, use the ivals pointer.

+ seth

Seth Falcon | Computational Biology | Fred Hutchinson Cancer Research Center

More information about the R-devel mailing list