[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