[R] vector help

David Winsemius dwinsemius at comcast.net
Thu Dec 10 22:12:40 CET 2009


On Dec 10, 2009, at 3:47 PM, Steve Lianoglou wrote:

> Hi Ramya,
>
> On Dec 10, 2009, at 3:29 PM, David Winsemius wrote:
>
>>
>> On Dec 10, 2009, at 2:55 PM, Ramya wrote:
>>
>>>
>>> I have tow vectors one is the subset of another
>>>
>>> x is a subset of X Both are vectors with n elements
>>>
>>> X[X %in% x] would give me x again rite because it is a subset but  
>>> i want all
>>> those are not in x from X.
>>>
>>> X[which(X != x)] should this do that
>
> One way to increase your proficiency in R is to break out your  
> statements so that each line does 1 thing.
>
> You should look at the object that `X != x` returns to you. [Shuffle  
> the elements in X and x and then see how that changes for extra  
> credit]
>
> Then look at what `which(X != x)` gives you.
>
> Doing that, you'd see why what you tried originally didn't work.
>
>>
>> Perhaps you think R _should_ read your mind, but we are not there  
>> yet. Try instead:
>>
>> X[!(X %in% x)]
>
> There are also set-like functions in R, which might fit your brain- 
> way of thinking:
>
> Get elements that are in both x and X:
> intersect(X,x)
>
> Get elements in X that are not in x
> setdiff(X,x)

Yes there are, and beware that the setdiff function is an asymmetric  
version rather than what I expected,  which was the complement of the  
intersection;

 > ?setdiff
 > X
[1] "H" "J" "E" "A" "F" "D" "B"
 > x
[1] "H" "B" "F" "A" "Z"
 > setdiff(union(X,x), intersect(X,x))  # which is what I expected
[1] "J" "E" "D" "Z"
 > setdiff(X,x)   # what you get
[1] "J" "E" "D"
>
>
> --
> Steve Lianoglou
> Graduate Student: Computational Systems Biology
>  |  Memorial Sloan-Kettering Cancer Center
>  |  Weill Medical College of Cornell University
> Contact Info: http://cbio.mskcc.org/~lianos/contact
>

David Winsemius, MD
Heritage Laboratories
West Hartford, CT




More information about the R-help mailing list