On Fri, Apr 20, 2012 at 8:15 PM, David Winsemius <dwinsem...@comcast.net> wrote: > > 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? >
If that is indeed what's happening, it will be the first time for me. My mailer shows upper case "L" too, I assume that this is correct and the OP's intention is exactly that - not redefine panel.locfit but create his own (if that is good use of his/our time is another matter altogether). Seems to me the source of this error was, as the error message suggested, simply the "default" formals: panel.Locfit <- function(x,y, nn, h, col, col.line, lwd = lwd, lty = lty, ...){ ... } Which is why this solved it: 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,...) } ) With my new found understanding of the OP's real intentions, maybe a call to trellis.par.get('superpose.line') inside panel.Locfit is the answer? Cheers > -- > 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.