Using R 2.7.0 under WinXP.

I need to write a function that takes a non-negative vector and returns the
parallell maximum between a percentage of this argument and a fixed value.
Both the percentages and the fixed values depend on which interval x falls
in. Intervals are as follows:

>From      |       To         |       % of x   |       Minimum
---------------------------------------------------------------
0           |       20000    |       65        |       0
20000     |       100000  |       40        |       14000       
100000   |       250000   |       30       |       40000        
250000   |       700000   |       25       |       75000
700000   |       1000000 |       20       |       175000
1000000 |       inf          |       --       |       250000

Once the interval is determined, the values in x are multiplied by the
percentages applying to the range in the 3rd column. 
If the result is less than the fourth column, then the latter is used.
For values of x falling in the last interval, 250,000 must be used.


My best attempt at it in R:

        MyRange <- function(x){

        range_aux = ifelse(x<=20000, 1, 
                    ifelse(x<=100000, 2, 
                      ifelse(x<=250000, 3,
                        ifelse(x<=700000, 4,
                          ifelse(x<=1000000, 5,6)))))
        percent = c(0.65, 0.4, 0.3, 0.25, 0.2, 0)
        minimum = c(0, 14000, 40000, 75000, 175000, 250000)

        pmax(x * percent[range_aux], minimum[range_aux])

        }


This could be done in Excel much tidier in my opinion (especially the
range_aux part), element by element (cell by cell), 

with a VBA function as follows:

        Function MyRange(x as Double) as Double

        Select Case x
            Case Is <= 20000
                MyRange = 0.65 * x
            Case Is <= 100000
                RCJuiProfDet = IIf(0.40 * x < 14000, 14000, 0.4 * x)
            Case Is <= 250000
                RCJuiProfDet = IIf(0.3 * x < 40000, 40000, 0.3 * x)
            Case Is <= 700000
                RCJuiProfDet = IIf(0.25 * x < 75000, 75000, 0.25 * x)
            Case Is <= 1000000
                RCJuiProfDet = IIf(0.2 * x < 175000, 175000, 0.2 * x)    
            Case Else
                ' This is always 250000. I left it this way so it is analogous 
to the R
function
                RCJuiProfDet = IIf(0 * x < 250000, 250000, 0 * x) 
        End Select

        End Function


Any way to improve my R function? I have searched the help archive and the
closest I have found is the switch function, which tests for equality only.
Thank you in advance for reading this.


-----
~~~~~~~~~~~~~~~~~~~~~~~~~~
Diego Mazzeo
Actuarial Science Student
Facultad de Ciencias Económicas
Universidad de Buenos Aires
Buenos Aires, Argentina
-- 
View this message in context: 
http://www.nabble.com/Testing-for-Inequality-%C3%A0-la-%22select-case%22-tp22527465p22527465.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
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