[R] explanation for left-side behaviour

Antje niederlein-rstat at yahoo.de
Wed Dec 2 13:10:38 CET 2009


Hi Don,

thanks for your answer. Okay, I should have mentioned the error messages 
I get for case 1 and 2 - sorry.
I was just surprised because the following does not give an error 
(though I feed with the factor vector):

substr(values,2,3)

[1] "bc" "bc" "bc" "cd" "cd" "cd" "de" "de" "de"

Obviously, the factor vector is converted to character somewhere, no?
I get the same result when typing:

substr(as.character(values),2,3)

So, the restriction that "substr" cannot take anything else than a 
character vector seems to be only in case I want to use the replace 
functionality instead of just extracting a substring. At least, that is 
my guess..

Ciao,
Antje




Don MacQueen wrote:
> Read the help page for substr().
> It says that the first argument should be a character vector.
> The only one that works is the one where you gave it a character vector.
>
> You said only third one "works". But you didn't explain what you mean 
> by "works". It's always a good idea on r-help to show both what you 
> expected, and what you actually got, so that people can understand 
> exactly what the question is.
>
> To explain a little further, let me number your three approaches.
>
> [1]  substr(values,2,3) <- ".."
>
> [2] substr(as.character(values),2,3) <- ".."
>
> values <- as.character(values)
> [3] substr(values,2,3) <- ".."
>
> With regard to case [1]
> It makes no sense to replace character substrings in a factor. factors 
> are really numbers, not characters. It's just that they have 
> additional attributes that make them (sometimes) print as if the were 
> characters. But they're not. And the error message (that you didn't 
> report) says exactly that.
>
> With regard to case [2]:
> values and as.character(values) are not the same thing.
> Therefore, replacing substrings in as.character(values) is not the 
> same as replacing substrings in values. In this case, I would 
> interpret the error message to indicate that R is trying to replace 
> characters in a function. That makes sense, because you supplied a 
> function, namely, as.character().
>
> Case [3] works because you supplied a character vector.
>
> -Don
>
> At 9:57 AM +0100 12/1/09, Antje wrote:
>> Hi there,
>>
>> I'm pretty sure that it's written down somewhere but I cannot find it 
>> so far.
>>
>> The little example shows different approaches to replace a substring. 
>> Only the last one works. I think it has something to do with the fact 
>> that "substr" is used on the left side. Can anybody refer to an 
>> explanation for this behaviour?
>>
>> Thanks a lot in advance!
>>
>> Antje
>>
>>
>>
>> values <- factor(c(rep("abc",3), rep("bcd",3), rep("cde",3)))
>>
>> substr(values,2,3) <- ".."
>> substr(as.character(values),2,3) <- ".."
>>
>> values <- as.character(values)
>> substr(values,2,3) <- ".."
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://*stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide 
>> http://*www.*R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
>




More information about the R-help mailing list