Ulrich Windl
2017-Apr-12 12:40 UTC
[Rd] "table(droplevels(aq)$Month)" in manual page of droplevels
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): ---> 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
Henric Winell
2017-Apr-12 13:35 UTC
[Rd] "table(droplevels(aq)$Month)" in manual page of droplevels
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. 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 at r-project.org > mailing list https://stat.ethz.ch/mailman/listinfo/r-devel >
Henric Winell
2017-Apr-12 15:40 UTC
[Rd] "table(droplevels(aq)$Month)" in manual page of droplevels
(Let's keep the discussion on-list -- I've added back R-devel.) On 2017-04-12 16:39, Ulrich Windl wrote:>>>> Henric Winell <nilsson.henric at gmail.com> schrieb am 12.04.2017 >>>> um 15:35 in > Nachricht <b66fe849-bb8d-f00d-87e5-553f866d57e0 at gmail.com>: >> 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". 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 at r-project.org mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-devel >>> > > > > >
Rui Barradas
2017-Apr-12 16:07 UTC
[Rd] "table(droplevels(aq)$Month)" in manual page of droplevels
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 <nilsson.henric at gmail.com> schrieb am 12.04.2017 >>>>> um 15:35 in >> Nachricht <b66fe849-bb8d-f00d-87e5-553f866d57e0 at gmail.com>: >>> 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, 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 at r-project.org mailing list >>>> https://stat.ethz.ch/mailman/listinfo/r-devel >>>> >> >> >> >> >> > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel