On Wed, 23 Jun 2004, Barry Rowlingson wrote:

> Uwe Ligges wrote:
> > Monica Palaseanu-Lovejoy wrote:
> > 
> >> Hi,
> >>
> >> I would like to write a little automatic routine in R, but i am a too 
> >> much of a beginner for that. I will appreciate any help regarding this 
> >> particular problem.
> 
> > If all columns of your data.frame are numeric:
> > 
> > z[z<0] <- 0
> > z[z>1] <- 1
> > 
> 
>   For added fun, you can wrap any of the methods given on the list into 
> a function. For example:
> 
>   hardLimit <- function(z, min=0, max=1){
>     z[z < min] <- min
>     z[z > max] <- max
>     return(z)
> }
> 
>   Then you can do:
> 
>   z <- hardLimit(z)
> 
>   if you want to overwrite z, or:
> 
>   y <- hardLimit(z)
> 
>   to create a new data frame.
> 
>   Note how the default min and max arguments are 0 and 1, and make the 
> function more flexible. You can also do:
> 
>   x <- hardLimit(z, min=-1)
> 
>   and that sets everything below -1 to the value -1.
> 
> Welcome to the world of R development!

First off, if you do start programming, you need to program up the 
comments too.  So as Uwe said

> > If all columns of your data.frame are numeric:

you need (untested)

hardLimit <- function(z, min=0, max=1)
{
    if(!(is.numeric(z) || all(sapply(z, is.numeric)) )) 
        stop("z is not a numeric vector, array or data frame")
    z[z < min] <- min
    z[z > max] <- max
    z
}

since the code will also work for numeric vectors and arrays.  Then you 
need to check if min < max or the order matters ....


However, if you want to do this at all efficiently for a data frame, start
with my solution not Uwe's, which creates several arrays the size of the
one you started with (two for the logical values, and one of the
intermediate answer) and does a for loop over columns internally at least
four times.

When operating on data frames it is usually best to work column by column, 
hence the

newDF[] <- lapply(DF, some_function_for_one_column)

paradigm.  (Changing just the values keeps all the attributes such as row 
names and col names.)


-- 
Brian D. Ripley,                  [EMAIL PROTECTED]
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to