It all has to do with the precedence of the ! operator.
Compare !duplicated(v) + 0 with (!duplicated(v)) + 0

Dave



From:
"Charles C. Berry" <cberry@tajo.ucsd.edu>
To:
Dennis Murphy <djmuser@gmail.com>
Cc:
r-help@r-project.org
Date:
11/23/2010 10:08 AM
Subject:
Re: [R] the first. from SAS in R
Sent by:
r-help-bounces@r-project.org



On Tue, 23 Nov 2010, Dennis Murphy wrote:

> Interesting. Check this out:
>
> u <- sample(c(TRUE, FALSE), 10, replace = TRUE)
>> u
> [1] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
>> class(u)
> [1] "logical"
>> u + 0
> [1] 0 0 1 0 0 1 0 0 0 0
>> 0 + u
> [1] 0 0 1 0 0 1 0 0 0 0
>
> v <- rpois(10, 3)
>> !duplicated(v)
> [1]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE
>> class(!duplicated(v))
> [1] "logical"
>> !duplicated(v) + 0
> [1]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE
>> 0 + !duplicated(v)
> [1] 1 0 1 1 1 1 0 1 0 1
>
> # Now assign !duplicated(v) to an object:
>> w <- !duplicated(v)
>> class(w)
> [1] "logical"
>> 0 + w
> [1] 1 0 1 1 1 1 0 1 0 1
>> w + 0
> [1] 1 0 1 1 1 1 0 1 0 1
>
> I can see *what* is going on, but what is the reason for it? I see 
another
> notebook entry coming :)

See

                 ?Arithmetic

and read the paragraph under Details starting 'Logical vectors'

Chuck

>
> Dennis
>
> On Tue, Nov 23, 2010 at 6:12 AM, David Winsemius 
<dwinsemius@comcast.net>wrote:
>
>>
>> On Nov 23, 2010, at 8:33 AM, Joel wrote:
>>
>>
>>> Is there any similar function in R to the first. in SAS?
>>>
>>> What it dose is:
>>>
>>> Lets say we have this table:
>>>
>>>  a b  c
>>>  1 1  5
>>>  1 0  2
>>>  2 0  2
>>>  2 0 NA
>>>  2 9  2
>>>  3 1  3
>>>
>>>
>>> and then I want do to do one thing the first time the number 1 appers 
in a
>>> and something else the secund time 1 appers in a and so on.
>>>
>>> so
>>>
>>> something similar to:
>>>
>>> if first.a {
>>> a$d<-1
>>> }else{
>>> a$d<-0
>>> }
>>>
>>>
>> The duplicated function which returns a logical vector with those 
features
>> can easily be coerced to numeric.
>>
>> df$d <- as.numeric(!duplicated(df$a))
>>
>>
>> I was a bit puzzled about my failure to get coercion by the method 
which I
>> thought was supposed to work, namely adding 0.
>>
>> df$e <- !duplicated(df$a)+0  # does not coerce
>>
>> df$e <- 0 + !duplicated(df$a) # pre-adding 0 does coerce
>>
>> Maybe the rules on coercion were amended.
>>
>> --
>> David
>>
>>
>>  This would give me
>>>
>>>  a b  c b
>>>  1 1  5 1
>>>  1 0  2 0
>>>  2 0  2 1
>>>  2 0 NA 0
>>>  2 9  2 0
>>>  3 1  3 1
>>>
>>> Is there such a function in R or anything similar?
>>>
>>>
>>> thx
>>>
>>> //Joel
>>>
>>> --
>>> View this message in context:
>>> 
http://r.789695.n4.nabble.com/the-first-from-SAS-in-R-tp3055417p3055417.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.
>>>
>>
>> David Winsemius, MD
>> West Hartford, CT
>>
>>
>> ______________________________________________
>> 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.
>>
>
>                [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
>

Charles C. Berry                            Dept of Family/Preventive 
Medicine
cberry@tajo.ucsd.edu                                                 UC 
San Diego
http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901

______________________________________________
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.



	[[alternative HTML version deleted]]

