On Aug 28, 2009, at 9:42 AM, Abhijit Bera wrote:
Hi Simon
Thanks. All the confusion between CHAR and STRING. First I read this :
http://www1.cuni.cz/~obo/r_surprises.html
Uh, oh, that doc confuses things even more and is not really correct
(well, the author admits that he has no idea, but that doesn't help).
Ok, so a quick clarification of the world of strings and character
vectors.
In R speak string vector is a vector containing 0 or more character
strings (e.g. c("foo","bar")). It is sometimes also called character
vector, because it is of type and mode "character". In the R C-level
API string vectors are represented by the type STRSXP and you can use
LENGTH(), STRING_ELT(x,i) and SET_STRING_ELT(x,i,a) macros on it to
get the length and get/set elements. The elements are character
strings which are represented by CHARSXP (this is not a vector in R
land) and are always read-only. They can be created using mkChar*()
functions and the C-level const char* content (\0-terminated for now)
can be retrieved using CHAR(x).
The author of the above page is confused about mkString - which
creates a string vector (STRSXP) and mkChar which creates a character
string (CHARSXP). Essentially mkString(x) is just a shortcut for
v=allocVector(STRSXP, 1); SET_STRING_ELT(v, 0, mkChar(x)); x; Users in
R never see CHARSXP directly - it is never used when interfacing
another function since there are conceptually no scalars in the R
language.
I hope this helps to sort out the confusion.
Cheers,
Simon
In the meantime I got your reply. Then I read the documentation and
it made sense!
Regards
Abhijit Bera
[..snip, previously posed code omitted ..]
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel