On 20/06/2007 6:46 AM, Federico Calboli wrote:> Hi All,
>
> I have the following problem: I have a vector
>
> x = rep(0,15)
> x[1:2] = 1
> x
> [1] 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
>
> I need to be able to call that vector 'x' so that if condition
'A' is true, only
> the first value is kept 'as is' and all the others are put to 0
>
> if(A == T)
>
> function(x) with x returning 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>
> and if 'A' is false the second value is kept 'as is' and
all the others are put to 0
>
> if(A == F)
>
> function(x) with x returning 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
>
> BUT, and that's the rub, I need x to changed in a *non permanent* way,
so that
> at the end x is still
>
> x
> [1] 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
>
> (that is because condition 'A' might be called again and could be
different in
> it's T/F state from previous calls).
Simply make a function that does what you want:
modifyx <- function(x, A) {
if (A) x[-1] <- 0
else x[-2] <- 0
x
}
then call your function by passing modifyx(x, A) instead of just x.
You don't need to put A or x in the argument list of the function, but
it probably makes sense to do so.
Duncan Murdoch