[R] Unintended behaviour (possibly bugs)

Alexey Shipunov
Mon, 17 Feb 2020 03:33:47 -0000

John and Rui, thanks!

However, if we use the proper object, the problem still persists:

dotchart(c("3"=1, "2"=2, "1"=3),
ylab="Ylab") # ylab is invisible
dotchart(c("aa"=1, "b"=2, "cc"=3),
ylab="Ylab") # ylab is partly visible (!!!)
dotchart(c("aaa"=1, "bbb"=2, "ccc"=3),
ylab="Ylab") # ylab is well visible

If the object is matrix, ylab is visible:

dotchart(matrix(1:3,
dimnames=list(c("aa","bb","cc"), NULL)),
ylab="Ylab")

But the ?dotchart explicitly says that "x: either a vector or matrix
of numeric values" and then "labels: a vector of labels for each
point.  For vectors the default is to use ?names(x)? ...".

So this is likely a bug. Do you agree?

Alexey

??, 17 ????. 2020 ?. ? 01:55, Rui Barradas <ruipbarradas at
sapo.pt>:
>
> Hello,
>
> I believe you are wrong, the error is not in dotchart, it's in your
> code. You assume that to plot an object of class "table" is the
same as
> to plot an object of class "numeric".
>
> Inline.
>
> ?s 12:21 de 16/02/20, Alexey Shipunov escreveu:
> > Dear list,
> >
> > I have been advised to share these with R-help instead of filling the
> > bug report:
> >
> > 1) dotchart() does not allow to see the left axis title
('ylab') and
> > cannot change the left margin (outer margin 2) of the plot
> >
> > The code:
> >
> > aa <- table(c(1, 1, 1, 2, 2, 3))
> > dotchart(aa, ylab="Ylab") # does not show 'ylab'
>
> You are right, it does *not* show 'ylab' but the user is warned.
>
>
> aa <- table(c(1, 1, 1, 2, 2, 3))
> dotchart(aa, ylab = "Ylab") # does show 'ylab'
> #Warning message:
> #In dotchart(aa, ylab = "Ylab") :
> #  'x' is neither a vector nor a matrix: using as.numeric(x)
>
>
> My code:
>
>
> (mar <- par("mar"))    # new R session
> #[1] 5.1 4.1 4.1 2.1   # the left margin is 4.1
>
> aa <- as.numeric(table(c(1, 1, 1, 2, 2, 3)))
>
> dotchart(aa, ylab = "Ylab") # It does show 'ylab'
> old.par <- par(mar = mar + c(0, 5, 0, 0))
> par("mar")
> #[1] 5.1 9.1 4.1 2.1
>
> dotchart(aa, ylab = "Ylab")  # The left margin is now 9.1, much
bigger
>
> par(old.par)                 # It does change the left margin
> dotchart(aa, ylab = "Ylab")  #  but only when a new graph is
plotted.
>
>
>
> > old.par <- par(mar=c(1, 10, 1, 1)) ; dotchart(aa,
ylab="Ylab") ;
> > par(old.par) # does not change left margin
> >
> > Possible solution:
> >
> > I researched the problem and think that the dotchart() code will need
> > few corrections. If there is an interest, I can post it here; or you
> > can look at the code of shipunov::Dotchart1() function.
> >
> > 2) example(hist) includes two "wrong" and
"extreme" examples which
> > slow down and even crash R on some systems; this make it unsuitable
> > for demonstration in the class and strikes beginners in R who just
> > want to understand how hist() works. Actually, I did it last week (I
> > was not aware of these examples), and in the class two computers hang,
> > and many others were extremely slow.
> >
> > The code:
> >
> > example(hist)
> >
> > Possible solution:
> >
> > If R maintainers will enclose parts of "hist" example in
\dontrun{},
> > this will allow to see the code but in the same time will not strike
> > beginners in R who just
> > want to understand how hist() works. They will still be possible to
> > run with example(..., run.dontrun=TRUE).
>
> Agree, it's annoying. Sometimes there's a Warning section after the
> Details section. Maybe such a section could get users' attention to
> those examples? At least it wouldn't hurt...
>
>
> Hope this helps,
>
> Rui Barradas
>
> >
> > With best wishes,
> >
> > Alexey Shipunov