> Rui Barradas
> on Wed, 12 Apr 2017 17:07:45 +0100 writes:
> Hello, Inline.
> Em 12-04-2017 16:40, Henric Winell escreveu:
>> (Let's keep the discussion on-list -- I've added back
>> R-devel.)
>>
>> On 2017-04-12 16:39, Ulrich Windl wrote:
>>
> Henric Winell schrieb am
>> 12.04.2017
> um 15:35 in
>>> Nachricht
>>> :
On 2017-04-12 14:40, Ulrich Windl wrote:
> The last line of the example in droplevels' manual
> page seems to be incorrect to me. I think it should
> read: "table(droplevels(aq$Month))". Amazingly (I
> don't understand) both variants seem to produce the
> same result (R 3.3.3): ---
The manual says that "The function 'droplevels' is used
to drop unused levels from a 'factor' or, more
commonly, from factors in a data frame." and, as
documented, the 'droplevels' generic has methods for
objects of class "data.frame" and "factor". So, your
being amazed is a bit surprising given that 'aq' is a
data frame.
>>>
>>> The "surprising" thing is the syntax: I was unaware that
>>> '$' is a generic operator that can be applied to the
>>> result of a function (i.e.: droplevels); I thought it's
>>> kind of a special variable syntax.
>>
>> Then your surprise is unrelated to the use of
>> 'droplevels'.
>>
>> Since the 'droplevels' method for objects of class
>> "data.frame" returns a data frame, the extraction
>> operator '$' works directly on the resulting object. So,
>> 'droplevels(aq)$Month' is essentially the same as
>>
>> aq <- droplevels(aq) aq$Month
>>
>> > Isn't there also the syntax
>> ``droplevels(aq)["Month"]''?
>>
>> Sure, and there are even more ways to do subsetting. But
>> this is basic stuff and therefore off-topic for R-devel.
>> Please see the manual (?Extract) or, e.g., Chapter 3 of
>> Hadley Wickham's "Advanced R".
> But note that droplevels(aq)["Month"] and
> droplevels(aq)$Month are _not_ the same. The first returns
> a data.frame (with just one vector), the latter returns a
> vector. To return just a vector you could also use
> droplevels(aq)[["Month"]]
> which is preferable for programming, by the way. The '$'
> operator should be reserved for interactive use only.
> Hope this helps,
Indeed, we hope.. Thanks to the helpers!
Ulrich, please note that in the end this was all because you're
still learning to understand R (e.g., data frames !) better.
As such this was completely inappropriate for R-devel and should
have gotten to the R help list R-help.
With regards,
Martin Maechler, ETH Zurich
> Rui Barradas
>>
>>
>> Henric Winell
>>>
>>> Regards, Ulrich
>>>
Henric Winell
> aq <- transform(airquality, Month = factor(Month, labels =
> month.abb[5:9])) aq <- subset(aq, Month != "Jul")
> table(aq$Month)
>
> May Jun Jul Aug Sep 31 30 0 31 30
> table(droplevels(aq)$Month)
>
> May Jun Aug Sep 31 30 31 30
> table(droplevels(aq$Month))
>
> May Jun Aug Sep 31 30 31 30
>>
> --- For the sake of learners, try to keep the examples
> simple and useful, even though you experts want to
> impress the newbees...
>
> Ulrich
>
> __
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>>>
>>>
>>>
>>>
>>>
>>
>> __
>> R-devel@r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
> __
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel