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

Reply via email to