[R] Logical function

Romain Francois romain.francois at dbmail.com
Thu Jan 14 11:26:51 CET 2010


Here's one way :

ds <- data.frame( st = runif(100), s0=runif(100), 
s1=runif(100),s2=runif(100),mp=runif(100))
ds <- within( ds, {
	n1 <- 1*( st>0.38 )
	
	n2 <- numeric( length( st ) )
	n2[ is.na(st) | st <= 0.38 ] <- .25
	n2[ s0 == mp ] <- .25
	n2[ s2 == mp ] <- .5
	n2[ mp == 1  ] <- .75
} )

See ?within for why/how this works.

Romain

On 01/14/2010 11:10 AM, Olivier Deckmyn wrote:
>
> Dear all,
>
> I'm learning R, with a "classical" programming background. Some hours were
> necessary for me to programm the "vector" way.
>
> Here is my dataset :
>
> ds<- data.frame( st=runif(100), st=runif(100),s1=runif(100),mp=runif(100))
>
> I need to generate 2 new variables. First was easy :
>
> ds$n1<- (ds$st>0.38)*1
>
> Second involve a "if" statement.
>
> Here is the "python way" of expressing what I need :
>
> nash<- function(st,s0,s1,mp){
>     if (is.na(st) | (st<=0.38)){
>         return(0.25)
>     }
>     if (s0 == mp){
>         return(0.25)
>     }
>     if (s1 == mp){
>         return(0.5)
>     }
>     if (mp == 1){
>         return(0.75)
>     }
> }
>
> I would like to do something like :
>
> ds$n2<- nash(ds)
>
> I mean I would like to add a new variable "n2", whose value depends on the
> value of other variables - row per row.
>
> I played with a for loop (don't flame :p), with apply functions and
> derivatives, with a logical set, etc....
>
> Can you help me find the "R" way, please ?
>
> Cheers,
> --
>
> Olivier Deckmyn | olivier at deckmyn.org | 06 73 40 89 88

-- 
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://tr.im/KfKn : Rcpp 0.7.2
|- http://tr.im/JOlc : External pointers with Rcpp
`- http://tr.im/JFqa : R Journal, Volume 1/2, December 2009



More information about the R-help mailing list