Small issue with R's C API
Prof Brian Ripley wrote:
This is nothing to do with the C API: isVector and isMatrix are not part of the API (see Writing R Extensions for what it is). That's the `issue' here. On Tue, 25 Oct 2005, Dominick Samperi wrote:
Consider the R code: mat <- matrix(seq(1,20),4,5) is.matrix(mat) # gives TRUE is.vector(mat) # gives FALSE On the other hand, if mat is passed through the .Call interface the corresponding SEXP (call it smat) satisfies isMatrix(smat) // TRUE isVector(smat) // TRUE Consequently, you cannot distinguish matrices from vectors. Looking at the dim attribute of a vector doesn't help because this is garbage.
You can look to see if it has a dim attribute ... you could also look at the C code for is.vector. Where did you find a definition of isVector? There is one in the comments in src/main/util.c. It is not as you seem to be assuming a C analogue of is.vector.
I probably grep-ed Rinternals.h, or looked in the section of that file for definitions similar to isMatrix, or just guessed that if there is an isMatix, there probably is an isVector (I realize that there is no substitute for the manual when it comes to finding things like isNewList, instead of the "guess" isList). Thanks for the tip about looking at the code for is.vector... Dominick