A comment... On Fri, Apr 20, 2012 at 8:32 PM, Duncan Mackay <mac...@northnet.com.au> wrote: > Hi David, ilai > > The root cause of the problem is the passing of arguments to panel functions > to me and my colleagues. > Just going through the archives there seems to be different ways for very > similar/same outcomes and > trying to get a pattern is hard to discern.
Bad strategy! Trying to infer the rules from examples in complex cases -- and as you said, different equivalent ways -- is nuts. You need to read the docs carefully (including Deepayan's book, possibly) and use the examples for understanding what is explained there. Finally, I don't know if this is relevant or helpful but: ## this code works fine xyplot(rnorm(5) ~ 1:5, type="l", panel = function(...)panel.xyplot(...,lwd=2)) ## This code throws an error about repeat lwd arguments. Is it obvious why? xyplot(rnorm(5) ~ 1:5, lwd=1,type="l", panel = function(...) panel.xyplot(...,lwd=2)) -- Bert > I frequently have to use the subscripts or group.number to access other > data. > I thought I had things sorted out in my head with the panel.groups and > group.number but this has shattered it. > > Thanks > > Duncan > > At 12:15 21/04/2012, you wrote: > >> On Apr 20, 2012, at 9:14 PM, ilai wrote: >> >>> Oops - that is "reply all" >>> On Fri, Apr 20, 2012 at 5:29 PM, David Winsemius <dwinsem...@comcast.net >>> > wrote: >>>> >>>> >>>> I'm a bit puzzled by this exchange. I know there is a >>>> 'panel.locfit', but >>>> you two are spelling it differently. Can you explain why you are >>>> doing so? >>> >>> >>> Hi David, >>> Thanks for stepping in. panel.Locfit is the OP's local function (or >>> just a wrapper ?) which I believe is here >>> http://www.mail-archive.com/r-help@r-project.org/msg167164.html >>> >>> Note the two errors OP encountered (solved down the thread) were >>> caused by the way he called the function in xyplot, not by >>> panel.Locfit itself, which I did not modify. I guess now the issue is >>> how to generalize panel.Locfit somehow, but I am not sure how. I >>> suspect the problem is not my understanding but that there really >>> isn't any one specific problem here for the list to solve, though, >>> again, I am known for misinterpreting OP requests... :) >>> >>>>> ?panel.locfit >>> >>> >>> As I said, I am unfamiliar with the package - but this doesn't >>> surprise me. Thank you for pointing it out, wish you've noticed the >>> exchange sooner... >> >> >> Another puzzle. In the original posting there was this segment: >> --- >> but gives an error message without par.settings if i want to add >> panel.Locfit(x,y,nn= 0.9,lwd = c(1,2,3), ...) >> >> Error using packet 1 >> formal argument "Iwd" matched by multiple actual arguments >> --- >> >> On my mailer that formal argument starts with a capital "I" but the >> code seemed to be attempting a lowercase "l". >> >> I could never see reason offered for defining a new panel.locfit, but >> I'm wondering if the sometimes similar representation of those two >> different letters could be causing an obscure conflict? >> >> -- >> David. >>> >>> >>> Cheers >>> >>> >>>>> ?panel.Locfit >>>> >>>> No documentation for 'panel.Locfit' in specified packages and >>>> libraries: >>>> you could try '??panel.Locfit' >>>> >>>>> ?panel.locfit >>>> >>>> >>>> {locfit} R Documentation >>>> Locfit panel function >>>> >>>> Description >>>> >>>> This panel function can be used to add locfit fits to plots >>>> generated by >>>> trellis. >>>> >>>> >>>> >>>>> I am trying to construct a function/s to cover as many of the normal >>>>> situations as possible. >>>>> Usually I have to amend colours lines etc to distinguish the data. >>>>> >>>>> I want to cover a number of situations >>>>> 1 Conditioned by panel no groups >>>>> 2 Conditioned by panel and groups. >>>>> 3 Multiple values for above - to show colleagues (EDA) >>>>> 4 Conditioned by panel and groups + an overall fit for all the >>>>> data within >>>>> a panel >>>>> 5 Several y values in a panel eg Y1+Y2 and outer = FALSE with a >>>>> fit for >>>>> each of Y1 and Y2 >>>>> >>>>> I am trying to cover as many of the above situations in 1 function >>>>> before >>>>> resulting to trellis.focus or >>>>> overlaying. The graphs that I normally create are not simple, >>>>> generally >>>>> involving useOuterStrips >>>>> which may have different y scales for panel rows (combindeLimits/ >>>>> manual) >>>>> and different panel row heights. >>>>> >>>>> locfit is like loess but 2 arguments for smoothing; the degree of >>>>> smoothing produced by the defaults >>>>> is approximately that of loess but I normally need less smoothing >>>>> (the >>>>> same would be apply for loess). >>>>> >>>>> Most of the questions to Rhelp are for 1 with just a small number >>>>> for 5 >>>>> and they are not applicable here >>>>> and understanding the requirements for passing arguments in these >>>>> different situations I find difficult. >>>>> I would like to reduce the number of panel functions to the >>>>> minimum to >>>>> cover the general situaltions because >>>>> my graphs are usually not normal and then add to them for a >>>>> particular >>>>> situation. >>>>> >>>>> Regards >>>>> >>>>> Duncan >>>>> >>>>> >>>>> At 01:38 21/04/2012, you wrote: >>>>>> >>>>>> >>>>>> Duncan, >>>>>> First off, I admit it is not clear to me what you are trying to >>>>>> achieve and more importantly, why? by "why" I mean 1) I don't see >>>>>> the >>>>>> advantage of writing one general panel function for completely >>>>>> different situations (one/multiple smoothers, grouping levels >>>>>> etc.) 2) >>>>>> your intended result as I understand it seems rather cluttered, >>>>>> google >>>>>> <chartjunk>. 3) I am unfamiliar with locfit package, but are we >>>>>> reinventing the wheel here ? i.e. will modifying settings in >>>>>> xyplot(y >>>>>> ~x, xx, groups = Farm, type=c('p','smooth')) achieve the same ? >>>>>> >>>>>> With your initial reproducible example (thank you) it was easy to >>>>>> eliminate the errors, but clearly the resulting plots are not >>>>>> what you >>>>>> intended (continue inline): >>>>>> >>>>>> On Thu, Apr 19, 2012 at 4:23 PM, Duncan Mackay <mac...@northnet.com.au >>>>>> > >>>>>> wrote: >>>>>> <snip> >>>>>>> >>>>>>> 3. What I want to be able to add in the above is extra lines with >>>>>>> different >>>>>>> values of nn. >>>>>>> I think I will have to modify panel.Locfit so that it goes >>>>>>> through >>>>>>> different values of nn in each of the panels and groups if I want >>>>>>> different >>>>>>> colours for extra lines with different nn values >>>>>> >>>>>> >>>>>> Yes you could. There are several options: >>>>>> add group.number to the arguments of panel.locfit and use it to >>>>>> make >>>>>> nn a vector, along the lines of >>>>>> panel.foo <- function(x,y,group.number,theta,...){ >>>>>> smpar <- theta[group.number] >>>>>> panel.loess(x,y,smpar,...) >>>>>> panel.xyplot(x,y,...) >>>>>> } >>>>>> >>>>>> xyplot (y ~ x ,xx ,group >>>>>> =Farm,theta=c(4,1,.4),panel=panel.superpose,panel.groups=panel.foo) >>>>>> >>>>>> # or >>>>>> xyplot(y~x|Farm,xx,group=Padd,theta=c(.6,1), >>>>>> panel=panel.superpose,panel.groups=panel.foo) >>>>>> >>>>>> Here you will need to modify the Farm group to 6 levels - 3*two >>>>>> smoothers. >>>>>> >>>>>> You could make nn a list and loop over it inside the panel >>>>>> function. >>>>>> Looks like you tried something like that with specifying 2 >>>>>> panel.Locfit, one suggestion to your code: >>>>>> >>>>>> panel.Locfit(x,y,...) # default 0.7 >>>>>> panel.Locfit(x,y,nn=0.9) # i.e. remove the >>>>>> ... to avoid clashes >>>>>> >>>>>> Finally, use ?trellis.focus to plot the second smoother "post-hoc". >>>>>> also the latticeExtra package has many useful tools to create >>>>>> layers >>>>>> of the same (or different) plot with different settings. >>>>>> >>>>>>> 4 Produce an extra line for a fit for all the groups in 1/2+ >>>>>>> panels. >>>>>>> As for 3 but I do not know how to group all the x and y's for >>>>>>> each >>>>>>> of the >>>>>>> panes using panel.groups >>>>>> >>>>>> >>>>>> Why does it matter ? seems you have failed to learn the lesson from >>>>>> the first post - the same functionality applies to 1 as to multiple >>>>>> panels. Does each panel have a different grouping structure ? use >>>>>> packet.number() for panels similar to group.number idea. >>>>>> >>>>>>> I need to do this and then scale up for a panel function to >>>>>>> include >>>>>>> confidence bands >>>>>> >>>>>> >>>>>> than expand the xlim,ylim or scales in ?xyplot >>>>>> >>>>>>> >>>>>>> For the record making Farm and Padd factors. With 1 panel and >>>>>>> groups = >>>>>>> Farm >>>>>>> works with the extra line the same colour for its group >>>>>>> a similar situation for the three panels when conditioned by >>>>>>> Farm and >>>>>>> groups >>>>>>> = Pad >>>>>> >>>>>> >>>>>> ???? >>>>>> >>>>>> Like I said I am a little lost on this problem but I hope this >>>>>> helps >>>>>> giving some direction. >>>>>> Cheers >>>>>> >>>>>> >>>>>>> >>>>>>> xyplot(y ~x, xx, >>>>>>> groups = Farm, >>>>>>> >>>>>>> par.settings = list(strip.background = list(col = >>>>>>> "transparent"), >>>>>>> superpose.line = list(col = >>>>>>> c("black","grey"), >>>>>>> lwd = >>>>>>> c(1,2,3), >>>>>>> lty = >>>>>>> c(2,1,3)), >>>>>>> superpose.symbol = list(cex = c(0.8, >>>>>>> 0.7,0.7), >>>>>>> col = >>>>>>> c("red","black","blue"), >>>>>>> pch = >>>>>>> c(20,4,16)) >>>>>>> ), >>>>>>> auto.key=list(lines=T,points = T,rectangles=F), >>>>>>> >>>>>>> panel = panel.superpose, >>>>>>> panel.groups=function(x,y, ...){ >>>>>>> >>>>>>> panel.xyplot(x,y,...) >>>>>>> panel.Locfit(x,y,...) # default 0.7 >>>>>>> panel.Locfit(x,y,nn=0.9,...) >>>>>>> >>>>>>> } >>>>>>> ) ## xyplot >>>>>>> >>>>>>> >>>>>>> Regards >>>>>>> >>>>>>> Duncan >>>>>>> >>>>>>> >>>>>>> At 02:12 20/04/2012, you wrote: >>>>>>>> >>>>>>>> >>>>>>>> On Thu, Apr 19, 2012 at 2:30 AM, Duncan Mackay >>>>>>>> <mac...@northnet.com.au> >>>>>>>> wrote: >>>>>>>>> >>>>>>>>> Hi >>>>>>>>> >>>>>>>>> xyplot(y ~x|Farm,xx, >>>>>>>>> groups = Padd, >>>>>>>>> panel = panel.superpose, >>>>>>>>> panel.groups=function(x,y, ...){ >>>>>>>>> panel.Locfit(x,y,...) >>>>>>>>> panel.xyplot(x,y,...) >>>>>>>>> } >>>>>>>>> ) ## xyplot >>>>>>>>> >>>>>>>>> The above works nicely and also without par.setting giving >>>>>>>>> lattice >>>>>>>>> defaults. >>>>>>>>> The par.setting is handy for a lot of graphs that I do. >>>>>>>>> >>>>>>>>> But when I tried a 1 panel plot I get the error message. >>>>>>>>> >>>>>>>>> xyplot(y ~x,xx, >>>>>>>>> groups = Farm, >>>>>>>>> auto.key=TRUE, >>>>>>>>> panel = function(x,y, ...){ >>>>>>>>> >>>>>>>>> panel.Locfit(x,y,...) >>>>>>>>> panel.xyplot(x,y,...) >>>>>>>>> } >>>>>>>>> ) >>>>>>>> >>>>>>>> >>>>>>>> These two plots are NOT THE SAME. Did you want the same as the >>>>>>>> first >>>>>>>> but with groups being Farm and Padd ignored ? in that case you >>>>>>>> (again) >>>>>>>> need a panel.groups: >>>>>>>> >>>>>>>> xyplot(y ~x,xx, >>>>>>>> groups = Farm, >>>>>>>> auto.key=TRUE, >>>>>>>> panel = panel.superpose,panel.groups=function(x,y,...){ >>>>>>>> panel.Locfit(x,y,...) >>>>>>>> panel.xyplot(x,y,...) >>>>>>>> } >>>>>>>> ) >>>>>>>> >>>>>>>> >>>>>>>>> If I want to plot another curve with different smoothing >>>>>>>>> but gives an error message without par.settings if i want to add >>>>>>>>> panel.Locfit(x,y,nn= 0.9,lwd = >>>>>>>>> c(1,2,3), ...) >>>>>>>>> >>>>>>>>> Error using packet 1 >>>>>>>>> formal argument "Iwd" matched by multiple actual arguments >>>>>>>> >>>>>>>> >>>>>>>> It is all in the way you initially specified how to pass the >>>>>>>> arguments >>>>>>>> for panel.Locfit. This works without error: >>>>>>>> >>>>>>>> xyplot(y ~x,xx, >>>>>>>> groups = Farm, >>>>>>>> auto.key=TRUE,lwd=1:3, >>>>>>>> panel = panel.superpose,panel.groups=function(x,y,nn,...){ >>>>>>>> panel.Locfit(x,y,nn=.9,...) >>>>>>>> panel.xyplot(x,y,...) >>>>>>>> } >>>>>>>> ) >>>>>>>> >>>>>>>> >>>>>>>> HTH >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>> I also need to plot a smoothed line for all groups trying >>>>>>>>> groups, >>>>>>>>> subscripts >>>>>>>>> and panel.groups as arguments without success >>>>>>>>> >>>>>>>>> Any solutions to solve the above will be gratefully received and >>>>>>>>> faithfully >>>>>>>>> applied. >>>>>>>>> >>>>>>>>> Duncan >>>>>>>>> >>>>>>>>> sessionInfo() >>>>>>>>> R version 2.15.0 (2012-03-30) >>>>>>>>> Platform: i386-pc-mingw32/i386 (32-bit) >>>>>>>>> >>>>>>>>> locale: >>>>>>>>> [1] LC_COLLATE=English_Australia.1252 >>>>>>>>> LC_CTYPE=English_Australia.1252 >>>>>>>>> LC_MONETARY=English_Australia.1252 LC_NUMERIC=C >>>>>>>>> LC_TIME=English_Australia.1252 >>>>>>>>> >>>>>>>>> attached base packages: >>>>>>>>> [1] datasets utils stats graphics grDevices grid >>>>>>>>> methods >>>>>>>>> base >>>>>>>>> >>>>>>>>> other attached packages: >>>>>>>>> [1] locfit_1.5-7 R.oo_1.9.3 R.methodsS3_1.2.2 >>>>>>>>> foreign_0.8-49 >>>>>>>>> chron_2.3-42 MASS_7.3-17 latticeExtra_0.6-19 >>>>>>>>> RColorBrewer_1.0-5 >>>>>>>>> [9] lattice_0.20-6 >>>>>>>>> >>>>>>>>> loaded via a namespace (and not attached): >>>>>>>>> [1] tools_2.15.0 >>>>>>>>> >>>>>>>>> >>>> >>>> >>>> >>>> David Winsemius, MD >>>> West Hartford, CT >>>> >>>> >>>> ______________________________________________ >>>> R-help@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 >> > > ______________________________________________ > R-help@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. -- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm ______________________________________________ R-help@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.