[R] Testing for Inequality à la "select case"

diegol diegol81 at gmail.com
Sun Mar 15 21:12:03 CET 2009


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.




More information about the R-help mailing list