David Winsemius wrote:

On Nov 15, 2009, at 10:18 AM, <rkevinbur...@charter.net> wrote:

This is a very simple question but I couldn't form a site search quesry that would return a reasonable result set.

Say I have a vector:

x <- c(0,2,3,4,5,-1,-2)

I want to replace all of the values in 'x' with the log of x. Naturally this runs into problems since some of the values are negative or zero. So how can I replace all of the positive elements of x with the log(x) and the rest with zero?

 > x <- c(0,2,3,4,5,-1,-2)
 > x <- ifelse(x>0, log(x), 0)
Warning message:
In log(x) : NaNs produced
 > x
[1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379 0.0000000 0.0000000

The warning is harmless as you can see, but if you wanted to avoid it, then:

 > x[x<=0] <- 0; x[x>0] <-log(x[x>0])

In the second command, you need to have the logical test on both sides to avoid replacement " out of synchrony."

Here is one more way, somewhat less transparent, motivated
by the examples on the ?ifelse page:

 x <- log(ifelse(x > 0, x, 1))

 -Peter Ehlers

--

David Winsemius, MD
Heritage Laboratories
West Hartford, CT

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

Reply via email to