[R] library sets: A & EMPTY does not work; gset_intersection(A,EMPTY) works
David Winsemius
dwinsemius at comcast.net
Wed Apr 7 15:17:11 CEST 2010
On Apr 7, 2010, at 8:54 AM, Czerminski, Ryszard wrote:
> Thank you for looking into it!
>
> There is still something I do not understand (despite different
> numerics on different machines, etc.)
> On my system plain "p == p" (where p's are from runif())
> gives all TRUE values, but with q (gset) which memberships values
> are set to p
> "q == q" generates FALSE
>
> Apparently memberships values are identical, tags of set members are
> identical (letters),
> but "q == q" still generates FALSE...
>
> Best regards,
> Ryszard
>
> p <- runif(length(letters))
> q <- gset(letters, p)
> summary(p == p) # gives all TRUE values, but
> q == q # gives FALSE
Not on my system; it returns:
> require(sets)
Loading required package: sets
> p <- runif(length(letters))
> q <- gset(letters, p)
> summary(p == p) # gives all TRUE values, but
Mode TRUE NA's
logical 26 0
> q == q
[1] TRUE
> sessionInfo()
R version 2.10.1 RC (2009-12-09 r50695)
x86_64-apple-darwin9.8.0
locale:
[1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] sets_1.0-4 lattice_0.17-26 animation_1.1-1 MASS_7.3-4
np_0.30-3 boot_1.2-41
loaded via a namespace (and not attached):
[1] grid_2.10.1 tools_2.10.1
> summary(p == gset_memberships(q)) # and this gives all TRUE values
>
>> p <- runif(length(letters))
>> q <- gset(letters, p)
>> summary(p == p) # gives all TRUE values, but
> Mode TRUE
> logical 26
>> q == q # gives FALSE
> [1] FALSE
>> summary(p == gset_memberships(q)) # and this gives all TRUE values
> Mode TRUE
> logical 26
>>
>
> --------------------------------------------------------------------------
> Confidentiality Notice: This message is private and may contain
> confidential and proprietary information. If you have received this
> message in error, please notify us and remove it from your system
> and note that you must not copy, distribute or take any action in
> reliance on it. Any unauthorized use or disclosure of the contents
> of this message is not permitted and may be unlawful.
>
> -----Original Message-----
> From: David Meyer [mailto:david.meyer at wu.ac.at]
> Sent: Wednesday, April 07, 2010 8:25 AM
> To: Czerminski, Ryszard
> Cc: Peter Ehlers; R-help at R-project.org; David Meyer
> Subject: Re: [R] library sets: A & EMPTY does not work;
> gset_intersection(A,EMPTY) works
>
>>> This is rather by chance due to numeric instabilities, I think:
>> It looks like something else is going on in addition to potential
>> problem
>> with numerical instabilities:
>>
>> p <- runif(length(letters))
>> q <- gset(letters, p)
>> all.equal(p,p)
>> all.equal(q,q)
>> q == q
>>
>>> p <- runif(length(letters))
>>> q <- gset(letters, p)
>>> all.equal(p,p)
>> [1] TRUE
>>> all.equal(q,q)
>> [1] "target and current have different memberships"
>>> q == q
>> [1] FALSE
>
> On my system:
>
>> p <- runif(length(letters))
>> q <- gset(letters, p)
>> all.equal(p,p)
> [1] TRUE
>> all.equal(q,q)
> [1] TRUE
>> q == q
> [1] TRUE
>
> This is the same problem, since the all.equal-method for gsets does
> not
> use all.equal internally (which *is* a bug, of course!). Will be fixed
> ASAP ...
>
> Thanks
> David
>
>
>
>>
>>
>> --------------------------------------------------------------------------
>> Confidentiality Notice: This message is private and may contain
>> confidential and proprietary information. If you have received this
>> message in error, please notify us and remove it from your system
>> and note that you must not copy, distribute or take any action in
>> reliance on it. Any unauthorized use or disclosure of the contents
>> of this message is not permitted and may be unlawful.
>>
>> -----Original Message-----
>> From: David Meyer [mailto:david.meyer at wu.ac.at]
>> Sent: Tuesday, April 06, 2010 6:03 PM
>> To: Czerminski, Ryszard
>> Cc: Peter Ehlers; R-help at R-project.org; David Meyer
>> Subject: Re: [R] library sets: A & EMPTY does not work;
>> gset_intersection(A,EMPTY) works
>>
>> This is rather by chance due to numeric instabilities, I think:
>>
>>> uv <- c('a', 'b', 'c'); s <- gset(uv, runif(length(uv)))
>>> s
>> {"a" [0.7533966], "b" [0.968067], "c" [0.2494876]}
>>> s == s
>> [1] TRUE
>>> gset_is_equal(s,s)
>> [1] TRUE
>>
>> But using all.equal instead of `==` for the memberships might by a
>> good
>> idea, I will have a look at it.
>>
>> Thanks
>> David
>>
>> Czerminski, Ryszard wrote:
>>> Hi Peter,
>>>
>>> This looks like another one: "gset_is_equal(X,X)" and "X == X"
>>> evaluate to FALSE ?
>>>
>>>> uv <- c('a', 'b', 'c'); s <- gset(uv, runif(length(uv)))
>>>> s
>>> {"a" [0.0811552], "b" [0.3552998], "c" [0.996772]}
>>>> gset_is_equal(s, s)
>>> [1] FALSE
>>>> s == s
>>> [1] FALSE
>>>> class(s)
>>> [1] "gset" "cset"
>>>
>>> Best regards,
>>> Ryszard
>>>
>>>
>>> --------------------------------------------------------------------------
>>> Confidentiality Notice: This message is private and may contain
>>> confidential and proprietary information. If you have received
>>> this message in error, please notify us and remove it from your
>>> system and note that you must not copy, distribute or take any
>>> action in reliance on it. Any unauthorized use or disclosure of
>>> the contents of this message is not permitted and may be unlawful.
>>>
>>> -----Original Message-----
>>> From: Peter Ehlers [mailto:ehlers at ucalgary.ca]
>>> Sent: Wednesday, March 31, 2010 2:03 PM
>>> To: Czerminski, Ryszard
>>> Cc: R-help at r-project.org; David Meyer
>>> Subject: Re: [R] library sets: A & EMPTY does not work;
>>> gset_intersection(A,EMPTY) works
>>>
>>> Ryszard,
>>>
>>> You've made me take a closer look and now I do think that
>>> you've found a bug.
>>>
>>> After a quick look at the package vignette, I see that the
>>> authors have indeed overloaded "&" and so it should work for
>>> your example. The problem seems to be the order of the class
>>> attribute which is used to call the relevant 'Ops' function:
>>>
>>> class(A)
>>> #[1] "gset" "cset"
>>>
>>> class(B)
>>> #[1] "gset" "cset"
>>>
>>> class(E <- A - A)
>>> #[1] "set" "gset" "cset"
>>>
>>> If you re-order the class vector, function Ops.gset will be called
>>> to handle A and E:
>>>
>>> class(E) <- class(E)[c(2,3,1)]
>>> A & E
>>> #{}
>>>
>>> I've cc'd David Meyer.
>>>
>>> -Peter Ehlers
>>>
>>> On 2010-03-31 10:11, Czerminski, Ryszard wrote:
>>>> It seems that "A& B" works the same way as
>>>> "gset_intersection(A,B)"
>>>> as long as A and B are not empty...
>>>> see below:
>>>>
>>>> fuzzy_logic("Yager", p=2)
>>>> support<- universe<- c('a','b','c','d')
>>>> A<- gset(support=support, memberships=c(0.2, 0.2, 0.9, 0),
>>>> universe=universe)
>>>> B<- gset(support=support, memberships=c(0.211, 0.222, 0.999, 0),
>>>> universe=universe)
>>>> A
>>>> B
>>>> A& B
>>>> gset_intersection(A,B)
>>>> E<- A - A
>>>> A& E
>>>> gset_intersection(A,E)
>>>>
>>>>> fuzzy_logic("Yager", p=2)
>>>>> support<- universe<- c('a','b','c','d')
>>>>> A<- gset(support=support, memberships=c(0.2, 0.2, 0.9, 0),
>>>> universe=universe)
>>>>> B<- gset(support=support, memberships=c(0.211, 0.222, 0.999, 0),
>>>> universe=universe)
>>>>> A
>>>> {"a" [0.2], "b" [0.2], "c" [0.9]}
>>>>> B
>>>> {"a" [0.211], "b" [0.222], "c" [0.999]}
>>>>> A& B
>>>> {"c" [0.899995]}
>>>>> gset_intersection(A,B)
>>>> {"c" [0.899995]}
>>>>> E<- A - A
>>>>> A& E
>>>> Error in A& E :
>>>> operations are possible only for numeric or logical types
>>>> In addition: Warning message:
>>>> Incompatible methods ("Ops.gset", "Ops.set") for "&"
>>>>> gset_intersection(A,E)
>>>> {}
>>>>
>>>>
>>>> --------------------------------------------------------------------------
>>>> Confidentiality Notice: This message is private and may contain
>>>> confidential and proprietary information. If you have received
>>>> this message in error, please notify us and remove it from your
>>>> system and note that you must not copy, distribute or take any
>>>> action in reliance on it. Any unauthorized use or disclosure of
>>>> the contents of this message is not permitted and may be unlawful.
>>>>
>>>> -----Original Message-----
>>>> From: Peter Ehlers [mailto:ehlers at ucalgary.ca]
>>>> Sent: Wednesday, March 31, 2010 11:43 AM
>>>> To: Czerminski, Ryszard
>>>> Cc: R-help at r-project.org
>>>> Subject: Re: [R] library sets: A& EMPTY does not work;
>>>> gset_intersection(A,EMPTY) works
>>>>
>>>> On 2010-03-31 9:30, Peter Ehlers wrote:
>>>>> Unless I'm missing something, I don't see any method
>>>>> in pkg:sets for intersection other than gset_intersection.
>>>> Whoops, a bit quick on the draw.
>>>> There are of course also set_intersection and cset_intersection,
>>>> but not AFAICS any method for `&`.
>>>>
>>>> -Peter Ehlers
>>>>
>>>>> So you're using the base R function `&` whose help page
>>>>> tells you that its arguments should be vectors. Yours
>>>>> aren't.
>>>>>
>>>>> -Peter Ehlers
>>>>>
>>>>> On 2010-03-31 8:50, Czerminski, Ryszard wrote:
>>>>>> When using generalized sets from "sets" library
>>>>>>
>>>>>> A& EMPTY does not work, but gset_intersection(A,EMPTY) works:
>>>>>> example
>>>>>> code below
>>>>>>
>>>>>> Is it a bug?
>>>>>>
>>>>>> Best regards,
>>>>>> Ryszard
>>>>>>
>>>>>> library(sets)
>>>>>> support<- universe<- c('a','b','c','d')
>>>>>> A<- gset(support=support, memberships=c(0.2, 0.2, 0.9, 0),
>>>>>> universe=universe)
>>>>>> class(A)
>>>>>> A
>>>>>> E<- A - A # create empty set
>>>>>> I<- gset_intersection(A, E) #<<< this WORKS
>>>>>> class(I); I
>>>>>> I<- A& E #<<< this DOES NOT WORK
>>>>>>
>>>>>> # ---
>>>>>>
>>>>>>> support<- universe<- c('a','b','c','d')
>>>>>>> A<- gset(support=support, memberships=c(0.2, 0.2, 0.9, 0),
>>>>>> universe=universe)
>>>>>>> class(A)
>>>>>> [1] "gset" "cset"
>>>>>>> A
>>>>>> {"a" [0.2], "b" [0.2], "c" [0.9]}
>>>>>>> E<- A - A
>>>>>>> I<- gset_intersection(A, E) #<<< this WORKS
>>>>>>> class(I); I
>>>>>> [1] "set" "gset" "cset"
>>>>>> {}
>>>>>>> I<- A& E #<<< this DOES NOT WORK
>>>>>> Error in A& E :
>>>>>> operations are possible only for numeric or logical types
>>>>>> In addition: Warning message:
>>>>>> Incompatible methods ("Ops.gset", "Ops.set") for "&"
>>>>>>
>>>>>>
>>>>>>
>>>> ------------------------------------------------------------------------
>>>> --
>>>>>> Confidentiality Notice: This message is private and may
>>>> ...{{dropped:8}}
>>>>>> ______________________________________________
>>>>>> R-help at 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.
>>>>>>
>>>>>>
>>
>
> --
> Priv.-Doz. Dr. David Meyer
> Department of Information Systems and Operations
>
> WU
> Wirtschaftsuniversität Wien
> Vienna University of Economics and Business
> Augasse 2-6, 1090 Vienna, Austria
> Tel: +43-1-313-36-4393
> Fax: +43-1-313-36-90-4393
> HP: http://ec.wu.ac.at/~meyer
>
> ______________________________________________
> R-help at 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
More information about the R-help
mailing list