[R] nchar on data.frames

nels tomlinson tomlinso at purdue.edu
Thu Mar 29 02:56:26 CEST 2001


Take a look at what you are taking the length of:


 > temp <- list(text=c("thug","jimbob","apple","thug"),numbers=1:4)
 >
 > attributes(temp$text)
NULL
 > attributes(temp)
$names
[1] "text"    "numbers"

and then after you make it a data frame, they are very different things:

 > temp<-data.frame(temp)
 > attributes(temp)
$names
[1] "text"    "numbers"

$row.names
[1] "1" "2" "3" "4"

$class
[1] "data.frame"

 > attributes(temp$text)
$levels
[1] "apple"  "jimbob" "thug" 

$class
[1] "factor"

So, by making it a data.frame, you made the vector of strings into a 
vector holding a factor (discrete-valued) variable with levels equal to 
the three unique strings.  I'll have to leave it to someone who knows 
what he's doing to explain why the nchar() gives different lengths. 

I think that that is a sensible transformation to make, by the way.  
After all, if it is really data, that's probably what you really meant 
... Of course, if what you really wanted was to make those character 
strings into row names, use the row.name= argument of data.frame() to do 
just that.  If you REALLY wanted a vector of strings in there, use the 
I() function to make it so.  See the details section of the data.frame() 
function for details on this.  Here's how I made it work:

 > temp <- data.frame(text=I(c("thug","jimbob","apple","thug")),numbers=1:4)
 > attributes(temp)
$names
[1] "text"    "numbers"

$row.names
[1] "1" "2" "3" "4"

$class
[1] "data.frame"

 > attributes(temp$text)
$class
[1] "AsIs"

 > nchar(temp$text)
[1] 4 6 5 4
 >


By the way, when someone who's speaking of libre software says "read the 
fine manual", he's usually speaking ironically; the manual usually isn't 
"fine" ( but you must still read it!).  R is wonderfully unique in that 
the manual really is fine, even in comparison to the commercial 
software.  I've been looking through the documentation for S-Plus, which 
is certainly the closest commercial approach to R, and I really don't 
think that their documentation is superior to R's. 

Hope this helps,
Nels

David L. Tabb wrote:

> I don't understand why nchar() gives different string lengths for vectors
> in a list than it does for vectors in a dataframe.  Here's a snippet of
> code:
> 
>> temp <- list(text=c("thug","jimbob","apple","thug"),numbers=1:4)
>> nchar(temp$text)
> 
> [1] 4 6 5 4
> 
>> temp <- data.frame(temp)
>> nchar(temp$text)
> 
> [1] 1 1 1 1
> 
> Could someone explain how I can get the former behavior for a text vector
> in a data.frame?
> 
> Thanks!  RPM reports I'm using R-base-1.2.1-2.
> 
> Dave
> 
> -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
> r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
> Send "info", "help", or "[un]subscribe"
> (in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
> _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list