Re: [R] explanation for left-side behaviour

2009-12-02 Thread Antje

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@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.





__
R-help@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.


Re: [R] explanation for left-side behaviour

2009-12-01 Thread Don MacQueen

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@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.



--
-
Don MacQueen
Lawrence Livermore National Laboratory
Livermore, CA, USA
925-423-1062
m...@llnl.gov

__
R-help@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.


[R] explanation for left-side behaviour

2009-12-01 Thread Antje

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@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.