[R] Unintended behaviour (possibly bugs)

Alexey Shipunov
Mon, 17 Feb 2020 04:59:09 -0000

My suggestion (shipunov::Dotchart1()) was:

==   yinch <- if (!is.null(ylab)) 0.4 else 0
   # inserted!
    if (!(is.null(labels) && is.null(glabels))) {
        nmai <- par("mai")
        nmai.2.new <- nmai[4L] + max(yinch + linch + goffset, ginch) +
0.1 # changed!
        if (nmai.2.new > nmai[2L]) {
    # changed!
            nmai[2L] <- nmai.2.new
    # changed!
        }
        par(mai = nmai)
    }
==
But I am not sure if this is the best way.

Now, how to move to r-devel? I never did it before.

Alexey

??, 17 ????. 2020 ?. ? 13:54, Rui Barradas <ruipbarradas at
sapo.pt>:
>
> Hello,
>
> Yes, this is definitely a bug.
> Even the matrix plot is puzzling, with a "1" as top row
sort-of-label
> but no grid line. I'm trying to follow the source code of dotchart but
> am yet to understand exactly what it does to decide the margins settings.
>
>      if (!(is.null(labels) && is.null(glabels))) {
>        nmai <- par("mai")
>        nmai[2L] <- nmai[4L] + max(linch + goffset, ginch) +
>          0.1
>        par(mai = nmai)
>      }
>
> This should be moved to r-devel?
>
> Rui Barradas
>
> ?s 03:33 de 17/02/20, Alexey Shipunov escreveu:
> > 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
> >>>
> >>> ______________________________________________
> >>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and
more, see
> >>> 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.
> >>>