December 3, 2025
1992: Robert Gentleman and Ross Ihaka develop an early version of R for teaching.
1995: Martin Mächler (ETH Zurich) persuades Robert and Ross to release R under a GNU public license.
30 years as an open source project: How can the community help to sustain R?
By default, messages, warnings and errors are shown in the current locale.
The language can be changed with Sys.setLanguage:
In the R sources, translations are stored in .po files, e.g.:
utils/po/R-es.po
…
The Weblate instance at https://translate.rx.studio set up by Gergely Daróczi provides a user-friendly interface for contributing translations.
Enter the translation and “Suggest” (if unsure) or “Save and continue” (if confident).
Sidebar shows alerts and any relevant terms from glossary.
Top: Translators on Weblate. Bottom: Translators at LatinR 2023
Register on https://translate.rx.studio to start translating!
(Real name encouraged.)
Contributors can help in several ways:
Warning
Contributions on the right require building R from source
Caution
Can be a big time sink for ad-hoc contributors!
The R Dev Container provides a development environment that can be run in the browser:
text() recycles coordinate pairs when there are more labels than points
The comments on the original bug report suggest an outline solution:
text()text.default()debugging in: text.default(1:2, 2:4, LETTERS[1:4])
debug: {
if (!missing(y) && (is.character(y) || is.expression(y))) {
labels <- y
y <- NULL
}
x <- xy.coords(x, y, recycle = TRUE, setLab = FALSE)
labels <- as.graphicsAnnot(labels)
if (!is.null(vfont))
vfont <- c(typeface = pmatch(vfont[1L], Hershey$typeface),
fontindex = pmatch(vfont[2L], Hershey$fontindex))
.External.graphics(C_text, x, labels, adj, pos, offset, vfont,
cex, col, font, ...)
invisible()
}
Browse[1]>
debug: if (!missing(y) && (is.character(y) || is.expression(y))) {
labels <- y
y <- NULL
}
Browse[1]>
debug: x <- xy.coords(x, y, recycle = TRUE, setLab = FALSE)
Browse[1]>
debug: labels <- as.graphicsAnnot(labels)
Browse[1]>
Browse[1]> x
$x
[1] 1 2 1
$y
[1] 2 3 4
$xlab
NULL
$ylab
NULL
nx rather than the original argumentsIndex: src/library/graphics/R/text.R
===================================================================
--- src/library/graphics/R/text.R (revision 88304)
+++ src/library/graphics/R/text.R (working copy)
@@ -27,6 +27,16 @@
labels <- y; y <- NULL
}
x <- xy.coords(x,y, recycle = TRUE, setLab = FALSE)
+
+ if (is.language(labels)) {
+ labels <- as.expression(labels)
+ }
+
+ if (length(labels) > (n <- length(x$x)) && n >= 1) {
+ labels <- labels[1:n]
+ warning("length(labels) > max(length(x), length(y)). labels truncated to length ", n, ".")
+ }
+
labels <- as.graphicsAnnot(labels)
if (!is.null(vfont))
vfont <- c(typeface = pmatch(vfont[1L], Hershey$typeface),
Index: src/library/graphics/man/text.Rd
===================================================================
--- src/library/graphics/man/text.Rd (revision 88304)
+++ src/library/graphics/man/text.Rd (working copy)
@@ -24,7 +24,7 @@
language objects (names and calls) to expressions, and vectors and
other classed objects to character vectors by \code{\link{as.character}}.
If \code{labels} is longer than \code{x} and
- \code{y}, the coordinates are recycled to the length of \code{labels}.}
+ \code{y}, \code{labels} is truncated to \code{max(length(x), length(y))}.}
\item{adj}{one or two values in \eqn{[0, 1]} which specify the x
(and optionally y) adjustment (\sQuote{justification}) of the
labels, with 0 for left/bottom, 1 for right/top, and 0.5 for
Bug 7084 is an example of a good first issue:
Check out the tips in this 10-minute video (or view slides)
You can also attend an R Contributor Office hour, next up
Or check the #getting-started channel on the R Contributor Slack.
Top: Contributors at R Dev Day @ RSECon25
R Dev Days are events to work on contributions to R:
Plan to run hybrid in future, next up R Dev Day @ New Zealand 2025, 16-17 Dec