[R] Rcmdr Plugin and menus.txt

John Fox jfox at mcmaster.ca
Fri Nov 2 15:29:38 CET 2007


Dear Haris,

First, there's nothing wrong (at least that I can see) with your menu file,
although I would consider using the activation field to determine whether
the menu items should be activated or "grayed out" in the current context.

The problem you encountered is a bug in the Commander() function that,
apparently, didn't surface before because no one previously tried to define
a submenu of a top-level menu introduced by a plug-in package, as opposed to
a new top-level menu or a submenu of one of the standard Rcmdr top-level
menus. Briefly, the expression Menus[, "menuOrItem"] == line[1,
"menuOrItem"], which is meant to determine where the submenu is to be
"cascaded" under its parent menu, should read Menus[, "commandOrMenu"] ==
line[1, "menuOrItem"].

I've now fixed this bug. I intend to upload a new version (1.3-6) of the
Rcmdr package, which addresses several small problems, to CRAN soon,
probably later today.

Thanks for bringing this bug to my attention.

John

--------------------------------
John Fox, Professor
Department of Sociology
McMaster University
Hamilton, Ontario
Canada L8S 4M4
905-525-9140x23604
http://socserv.mcmaster.ca/jfox 
-------------------------------- 

> -----Original Message-----
> From: Charilaos Skiadas [mailto:cskiadas at gmail.com] 
> Sent: Friday, November 02, 2007 12:31 AM
> To: John Fox
> Cc: 'R-help help'
> Subject: Re: [R] Rcmdr Plugin and menus.txt
> 
> Thanks John, no hurry.
> 
> I tried to debug it a little bit, without much success. Two things I
> discovered:
> 1) The exact same lines work just fine if I place them in the 
> Rcmdr- menus.txt file in the Rcmdr package (and add the 
> "testOne" function
> also.)
> 2) While trying to do debug(Commander), the thing I noticed 
> is that, when reading items from the menus.txt file, the 
> function seems to process them in the opposite order. So it 
> starts from the last item and moves up (well, I don't know if 
> it would move up since it crashes in the absence of the 
> psychMenu object). It seems the problem might be with the line:
> Menus <- addMenus(Menus)
> When examining Menus, I noticed that my new commands were 
> added at the beginning of the Menus data frame, and in a 
> messed up order:
> 
> Browse[1]> Menus[1:20,1:3]
>       type  menuOrItem operationOrParent
> 8    item   psychMenu           cascade
> 1    menu   psychMenu           topMenu
> 4    menu testTwoMenu         psychMenu
> 5    item testTwoMenu           command
> 6    item testTwoMenu           command
> 7    item testTwoMenu           command
> 2    item   psychMenu           command
> 2100 menu    fileMenu           topMenu
> 3    item    fileMenu           command
> 410  item    fileMenu           command
> 510  item    fileMenu           command
> 610  item    fileMenu           command
> 710  item    fileMenu           command
> 810  item    fileMenu           command
> 9    item    fileMenu           command
> 10   menu    exitMenu          fileMenu
> 11   item    exitMenu           command
> 12   item    exitMenu           command
> 13   item    fileMenu           cascade
> 14   item     topMenu           cascade
> 
> 
> I would hazard to guess that the problem is with the call 
> "Menus <- insertRows(Menus, line, where)"  in line 866 of 
> Rcmdr. But at that point things got a bit too "technical" for 
> me. Hope this helps narrow the problem down a bit.
> 
> Thanks for the preprint. It is nicely written, though it 
> didn't shed any light on this problem.
> 
> Haris Skiadas
> Department of Mathematics and Computer Science Hanover College
> 
> On Nov 1, 2007, at 3:32 PM, John Fox wrote:
> 
> > Dear Haris,
> >
> > I'll take a look at this as soon as I have a chance, probably not 
> > until tomorrow. In the meantime I've attached a "preprint" of an 
> > article that describes how to write plug-ins. Perhaps 
> you'll find that 
> > helpful.
> > (I don't
> > know whether it will go through r-help, but you should receive the 
> > direct
> > email.)
> >
> > Regards,
> >  John
> >
> > --------------------------------
> > John Fox, Professor
> > Department of Sociology
> > McMaster University
> > Hamilton, Ontario
> > Canada L8S 4M4
> > 905-525-9140x23604
> > http://socserv.mcmaster.ca/jfox
> > --------------------------------
> >
> >> -----Original Message-----
> >> From: r-help-bounces at r-project.org
> >> [mailto:r-help-bounces at r-project.org] On Behalf Of 
> Charilaos Skiadas
> >> Sent: Thursday, November 01, 2007 2:53 PM
> >> To: R-help help
> >> Subject: [R] Rcmdr Plugin and menus.txt
> >>
> >> Hi all,
> >>
> >> 	I'm trying to write a plugin for R Commander, following 
> the model of
> >
> >> the TeachingDemos plugin. I am struggling trying to even 
> add items by 
> >> editing the menus.txt file. I would welcome any help from 
> anyone who 
> >> has messed with it.
> >> Essentially the problem I am having is: I cannot create a 
> submenu to 
> >> a newly created menu. Here is what the menus.txt file looks like:
> >>
> >> #   type    menu/item      operation/parent
> >> label                              command/menu
> >> activation    install?
> >> menu    psychMenu       topMenu
> >> ""                                      ""
> >> ""                      ""
> >> item    psychMenu       command         "Test"
> >> testOne         ""                      ""
> >> item    topMenu         cascade
> >> "Psych"                                 psychMenu
> >> ""                      ""
> >> menu    testTwoMenu      psychMenu
> >> ""                                    ""
> >> ""                  ""
> >> item    testTwoMenu      command         "Binomial
> >> distributions"                testOne
> >> ""                      ""
> >> item    testTwoMenu      command         "Normal
> >> distributions"                  testOne
> >> ""                      ""
> >> item    testTwoMenu      command         "t
> >> distributions"                       testOne
> >> ""                      ""
> >> item    psychMenu   cascade     "Submenu"
> >> testTwoMenu                  ""                      ""
> >>
> >>
> >> I would expect the above to create:
> >> 1) A top level menu called "psychMenu", with the title "Psych"
> >> 2) An item in this menu with title "Test"
> >> 3) A second item, called "Submenu", and internally called 
> >> "testTwoMenu", which is itself a submenu.
> >> 4) Three items in that submenu.
> >>
> >> The difference between this and the example is basically, 
> that in the 
> >> example, the testTwoMenu is created as a submenu of the 
> >> distributionsMenu. If I change those last five lines above to read:
> >>
> >> menu    testTwoMenu      distributionsMenu
> >> ""                                    ""
> >> ""                  ""
> >> item    testTwoMenu      command         "Binomial
> >> distributions"                testOne
> >> ""                      ""
> >> item    testTwoMenu      command         "Normal
> >> distributions"                  testOne
> >> ""                      ""
> >> item    testTwoMenu      command         "t
> >> distributions"                       testOne
> >> ""                      ""
> >> item    distributionsMenu   cascade     "Submenu"
> >> testTwoMenu                  ""                      ""
> >>
> >>
> >> Then everything works fine and the submenu is created inside the 
> >> distributions menu. On the other hand, my original code 
> gives me the
> >> error:
> >>
> >> Warning in max(which((Menus[, "operationOrParent"] ==
> >> "cascade") & (Menus[,  :
> >> 	 no non-missing arguments to max; returning -Inf Error 
> in eval(expr,
> >
> >> envir, enclos) : object "psychMenu" not found
> >>
> >>
> >> I should point out further, that keeping only the first 
> three lines 
> >> from my original code also works fine, and creates the new 
> menu and 
> >> an item in it. The problem seems to arise when I try to create a 
> >> submenu in a menu I have just created.
> >>
> >> Any thoughts how to accomplish this, or rather what am I 
> doing wrong?
> >>
> >> Should this go to R-SIG-GUI instead? Or is there another list more 
> >> appropriate?
> >>
> >> Thanks,
> >> Haris Skiadas
> >> Department of Mathematics and Computer Science Hanover College
> >>
> 
> 
> 
> 
>



More information about the R-help mailing list