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.
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'


                                          
        [[alternative HTML version deleted]]

______________________________________________
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.

Reply via email to