Hi Berry, You might look at scatterplot3d in the scatterplot3d package for an example of how a similar problem was handled, precisely as Duncan suggests.
Sarah On Fri, Oct 5, 2012 at 8:25 AM, Duncan Murdoch <murdoch.dun...@gmail.com> wrote: > On 05/10/2012 8:19 AM, Berry Boessenkool wrote: >> >> >> Hi all, >> >> I improved a function drawing horizontal histograms (code below) which >> uses barplot and works fine. >> It does,however, need to assign a function to the global environment to >> later find the actual location on the vertical axis, and not the number of >> bars used by barplot. >> Hopefully, running the examples below will illustrate that. >> >> As said, it works perfectly fine and does exactly what I want. >> The problem arises now that I'm building a package (just for myself, for >> now) and run into R CMD >> check telling me 'no visible binding for '<<-' assignment'. >> (wording below) >> Similar problem as in >> http://r.789695.n4.nabble.com/R-CMD-check-tells-me-no-visible-binding-for-global-variable-what-does-it-mean-td1837236.html >> >> My question is: >> Is there a way to avoid assigning the function to the global environment >> with <<- but still have it available? I know it is generally not good >> practice. > > > You can return the function as the value of your function. A bonus: if it > is created within the body of your function, it will have access to all the > local variables there. > > You shouldn't write to the global environment, because globalenv belongs to > the user, not to you. If the user wants your function in the global > environment s/he can just assign the value of your function to a variable > there. > > Duncan Murdoch > > > >> Or ist it OK in a case like this, and is there a way to avoid the notes >> from the rcmd check (make the function package-compatible)? >> Or should I just ignore these notes? (I'm completely new to building >> packages and cannot judge the importance yet.) >> >> I'd be very thankful for any hints! >> >> Berry >> >> PS: I recently read about barcharts in lattice, but by now I'm already >> used to my function. (And I learned a lot writing it a couple of years ago). >> >> # Function >> horiz.hist <- function(Data, breaks="Sturges", col="transparent", las=1, >> ylim=range(HBreaks), labelat=pretty(ylim), labels=labelat, >> border=par("fg"), ... ) >> {a <- hist(Data, plot=FALSE, breaks=breaks) >> HBreaks <- a$breaks >> HBreak1 <- a$breaks[1] >> hpos <<- function(Pos) (Pos-HBreak1)*(length(HBreaks)-1)/ >> diff(range(HBreaks)) # Assign a function to the global environment with >> values calculated inside the main function. >> barplot(a$counts, space=0, horiz=T, ylim=hpos(ylim), col=col, >> border=border,...) >> axis(2, at=hpos(labelat), labels=labels, las=las, ...) >> print("use hpos() to address y-coordinates") } >> >> # Data and basic concept >> set.seed(8); ExampleData <- rnorm(50,8,5)+5 >> hist(ExampleData) >> horiz.hist(ExampleData, xlab="absolute frequency") >> # Caution: the labels at the y-axis are not the real coordinates! >> # abline(h=2) will draw above the second bar, not at the label value 2. >> Use hpos: >> abline(h=hpos(11), col=2) >> >> # Further arguments >> horiz.hist(ExampleData, xlim=c(-8,20)) >> horiz.hist(ExampleData, main="the ... argument worked!", col.axis=3) >> hist(ExampleData, xlim=c(-10,40)) # with xlim >> horiz.hist(ExampleData, ylim=c(-10,40), border="red") # with ylim >> horiz.hist(ExampleData, breaks=20, col="orange") >> axis(2, hpos(0:10), labels=F, col=2) # another use of hpos() >> >> # One shortcoming: doesn't work with breakpoints provided as a vector with >> different widths of the bars >> >> >> Wording from the rcmd check when building a package: >> * checking R code for possible problems ... NOTE >> horiz.hist: no visible binding for '<<-' assignment to 'hpos' >> horiz.hist: no visible global function definition for 'hpos' >> >> >> -- Sarah Goslee http://www.functionaldiversity.org ______________________________________________ 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.