Georgi Boshnakov
2018-May-13 08:24 UTC
[Rd] BUG: 'bibentry' methods change default bibstyle
Hi,
Some 'bibentry' methods have the side effect of changing the default
bibstyle.
Background:
tools::bibstyle() defines and registers bibtex styles for formatting
'bibentry' objects.
It optionally (and by default) sets a default style. It is also used to get a
particular style.
The last feature of bibstyle() is used in 'bibentry' methods defined in
packages 'tools' and 'utils' , see the excerpts below.
They have the side effect of resetting the default bibstyle. This seems like a
bug. I t can be resolved by adding argument '.default = FALSE' to the
calls of bibstyle() in the bibentry methods for sort() and toRd() (there maybe
other methods using this and perhaps also unexported functions).
Here is the example from the help page of bibstyle():
===================== refs <-
c(bibentry(bibtype = "manual",
title = "R: A Language and Environment for Statistical
Computing",
author = person("R Core Team"),
organization = "R Foundation for Statistical Computing",
address = "Vienna, Austria",
year = 2013,
url = "https://www.R-project.org"),
bibentry(bibtype = "article",
author = c(person(c("George", "E.",
"P."), "Box"),
person(c("David", "R."),
"Cox")),
year = 1964,
title = "An Analysis of Transformations",
journal = "Journal of the Royal Statistical Society, Series
B",
volume = 26,
pages = "211-252"))
bibstyle("unsorted", sortKeys = function(refs) seq_along(refs),
fmtPrefix = function(paper) paste0("[", paper$.index,
"]"),
.init = TRUE)
======================
As expected, the bibstyle() call sets "unsorted" as default bibstyle
but here is how calls to sort() and toRd() have the side effect of changing the
default style:
> tools::getBibstyle()
[1] "unsorted"> sort(refs, .bibstyle = "JSS")
> tools::getBibstyle()
[1] "JSS"> tools::toRd(refs, style = "unsorted")
> tools::getBibstyle()
[1] "unsorted">
=======================
The same happens with format() and print() but this seems due to their use of
sort().
Excerpts from bibentry methods:
=================================> utils:::sort.bibentry
function (x, decreasing = FALSE, .bibstyle = NULL, drop = FALSE,
...)
{
x[order(tools::bibstyle(.bibstyle)$sortKeys(x), decreasing = decreasing),
drop = drop]
}
> tools:::toRd.bibentry
function (obj, style = NULL, ...)
{
obj <- sort(obj, .bibstyle = style)
style <- bibstyle(style)
...
}
=====================
Georgi Boshnakov
[[alternative HTML version deleted]]
