{"version":"https://jsonfeed.org/version/1.1","title":"rOpenSci - open tools for open science","favicon":"https://ropensci.org/blog/apple-touch-icon.png","home_page_url":"https://ropensci.org/blog/","feed_url":"https://ropensci.org/blog/index.json","description":"Open Tools and R Packages for Open Science","items":[{"id":"https://doi.org/10.59350/2k3fg-s7b57","title":"From Census Data to Demographic Analysis with ARcenso: A Reproducible Workflow in R","language":"en","authors":[{"name":"Andrea Gomez Vargas","url":"https://orcid.org/0009-0007-8745-3967","avatar":"https://github.com/SoyAndrea.png","_role":["author"]},{"name":"Emanuel Ciardullo","url":"https://orcid.org/0009-0004-9447-7420","avatar":"https://github.com/ECiardullo.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor","translator"]}],"tags":["acceso a datos","censo","arcenso","Argentina","packages"],"content_html":"\u003cp\u003ePopulation censuses are a key source of information for understanding the composition of populations and how they change across regions within a country. They provide essential evidence for research, the design and evaluation of public policies, and informed decision-making.\u003c/p\u003e\u003cp\u003eWorking with census data typically involves several preliminary steps: identifying what information is available, downloading the data, organizing it, and preparing it for analysis. When this information is scattered across multiple sources and provided in different formats, the process can become complex.\u003c/p\u003e\u003cbr\u003e\u003cfigure\u003e\u003cimg src=\"/es/blog/2026/08/10/analisis-demografico-con-arcenso/portada-blog.es.png\"\t\t\talt=\"Illustration of the Argentine Census featuring the ARcenso and rOpenSci logos, a hornero (the national bird), and graphic material from the 1970 and 1980 censuses.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eARcenso blog homepage\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003e\u003ca href=\"https://soyandrea.github.io/arcenso/\"\u003eARcenso\u003c/a\u003e is an R package developed as part of \u003ca href=\"/es/champions/\"\u003ethe     rOpenSci Champions Program\u003c/a\u003e to facilitate access to Argentine census data and simplify its analysis.\u003c/p\u003e\u003cp\u003eIn this article, the ARcenso development team demonstrates how to work with the historical census data available through the package in a simple, reproducible way.\u003c/p\u003e\u003cp\u003eThe goal is to conduct a demographic analysis using official national data from the 1970 and 1980 censuses, combining visualisations and tables to explore the structure of the population—that is, how it is distributed by age and sex. This type of analysis helps characterise demographic changes over time, providing key information for research and the design of public policies.\u003c/p\u003e\u003ch2 id=\"getting-started\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#getting-started\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGetting started\u003c/h2\u003e\u003cp\u003eTo run the code examples from this article on your own computer, make sure you have the following packages installed:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# If you don\u0026#39;t have pak installed\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003einstall.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;pak\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Install ARcenso from GitHub\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epak\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epkg_install\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;soyandrea/arcenso\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Install the required packages from CRAN\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003einstall.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;dplyr\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;tidyr\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;ggplot2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;gt\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNext, we load the packages needed to work with the census data and build indicators for the analysis:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003earcenso\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e   \u003cspan class=\"c1\"\u003e# access census data\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e     \u003cspan class=\"c1\"\u003e# data manipulation\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etidyr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e     \u003cspan class=\"c1\"\u003e# data tidying and transformation\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eggplot2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e   \u003cspan class=\"c1\"\u003e# data visualisation\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egt\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e        \u003cspan class=\"c1\"\u003e# table formatting\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"accessing-census-data\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#accessing-census-data\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAccessing census data\u003c/h2\u003e\u003cp\u003eNow that the required packages are installed and loaded, we can use ARcenso to access census data from the 1970 and 1980 censuses. The package allows users to retrieve information by census year, topic, and geographic area of interest, using the official geographic codes defined by the\u003ca href=\"https://www.indec.gob.ar/indec/web/Nivel3-Tema-2-41\"\u003e     National Institute of Statistics and Censuses (INDEC) of Argentina\u003c/a\u003e   .\u003c/p\u003e\u003cp\u003eThe \u003ccode\u003echeck_repository()\u003c/code\u003e function helps identify the datasets available in the package. The \u003ccode\u003etopic\u003c/code\u003e argument specifies the subject of interest (for example, population structure), while \u003ccode\u003egeo_code\u003c/code\u003e identifies the geographic area.\u003c/p\u003e\u003cp\u003eIf you are unsure which values are available for these arguments, you can explore the package metadata. The \u003ccode\u003egeo_metadata\u003c/code\u003e object contains the available geographic areas and their corresponding codes, while \u003ccode\u003ecensus_metadata\u003c/code\u003e provides information about the topics and tables included in the package.\u003c/p\u003e\u003cp\u003eIn this example, we use population structure data (\u003ccode\u003etopic = \u0026quot;estructura\u0026quot;\u003c/code\u003e) for the entire country (\u003ccode\u003egeo_code = \u0026quot;00\u0026quot;\u003c/code\u003e). As a first step, we use \u003ccode\u003echeck_repository()\u003c/code\u003e to see which datasets are available.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003echeck_repository\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etopic\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;estructura\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003egeo_code\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;00\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# A tibble: 4 × 3  id_cuadro              anio titulo                                              \u0026lt;chr\u0026gt;                 \u0026lt;dbl\u0026gt; \u0026lt;chr\u0026gt;                                             1 1970_00_estructura_01  1970 Cuadro 1. Total del país. Población total, por gr…2 1980_00_estructura_01  1980 Cuadro G3. Centros urbanos según tamaño y poblaci…3 1980_00_estructura_02  1980 Cuadro G1. Total del país. Población total según …4 1980_00_estructura_03  1980 Cuadro G2. Total del país. Población según sexo y…\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe output of \u003ccode\u003echeck_repository()\u003c/code\u003e lists the available years for the selected combination of topic and geographic area, together with the corresponding table identifiers (IDs) and their titles. Based on this information, we select the tables \u003ccode\u003e1970_00_estructura_01\u003c/code\u003e and \u003ccode\u003e1980_00_estructura_03\u003c/code\u003e, which contain tabulations of the country\u0026rsquo;s total population by sex and age group and will be used throughout this analysis.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003cstrong\u003eTip\u003c/strong\u003e: You can also explore the available data interactively using \u003ccode\u003earcenso_app()\u003c/code\u003e. Once you find the table you need, simply copy its ID and use it in your analysis.\u003c/p\u003e\u003c/blockquote\u003e\u003cfigure\u003e\u003cimg src=\"/es/blog/2026/08/10/analisis-demografico-con-arcenso/shiny_arcenso.es.png\"\t\t\talt=\"Shiny ARcenso Application: View census data filtered by year, geographic scope, and topic, displaying the 1970 literacy table.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eInteractive census data explorer with \u003ccode\u003earcenso_app()\u003c/code\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"data-preparation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#data-preparation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eData preparation\u003c/h2\u003e\u003cp\u003eOnce the tables of interest have been identified, we use \u003ccode\u003eget_census()\u003c/code\u003e to import them directly into the R session using their table identifiers.\u003c/p\u003e\u003cp\u003eAs the structures of the two tables are not identical, we perform a series of transformations to harmonise the variables and create a consistent basis for comparison across censuses. In particular, we recode the age categories into five-year groups to ensure a common structure and add a column identifying the census year.\u003c/p\u003e\u003ch3 id=\"1970-census\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#1970-census\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e1970 Census\u003c/h3\u003e\u003cp\u003eFor the 1970 census, the data are already grouped into five-year age groups, so we only need to adjust the format of some labels and keep the variables relevant to the analysis.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Country Total\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epoblacion_1970\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_census\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;1970_00_estructura_01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epob_1970\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003epoblacion_1970\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esexo\u003c/span\u003e \u003cspan class=\"o\"\u003e!=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Total\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecenso\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1970\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003egrupo_de_edad\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ecase_when\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003egrupo_de_edad\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;0-4\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;00-04\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003egrupo_de_edad\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;5-9\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;05-09\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"n\"\u003egrupo_de_edad\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003erename\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egrupo_edad\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003egrupo_de_edad\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecenso\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esexo\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003egrupo_edad\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"1980-census\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#1980-census\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e1980 Census\u003c/h3\u003e\u003cp\u003eIn contrast, the 1980 census table reports age as single years and includes additional information that is not relevant to this analysis. We therefore select the categories of interest and aggregate the data into five-year age groups to make them comparable with the 1970 census.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epoblacion_1980\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_census\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;1980_00_estructura_03\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epob_1980\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003epoblacion_1980\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eurbano_rural\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Total\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esexo\u003c/span\u003e \u003cspan class=\"o\"\u003e!=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Total\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eedad\u003c/span\u003e \u003cspan class=\"o\"\u003e!=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Total\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecenso\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1980\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eifelse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eedad\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;85 y más\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e85\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eas.numeric\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eedad\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003egrupo_edad\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ecase_when\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;00-04\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e5\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e9\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;05-09\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e10\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e14\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;10-14\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e15\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e19\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;15-19\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e20\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e24\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;20-24\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e25\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e29\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;25-29\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e30\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e34\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;30-34\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e35\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e39\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;35-39\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e40\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e44\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;40-44\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e45\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e49\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;45-49\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e50\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e54\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;50-54\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e55\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e59\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;55-59\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e60\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e64\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;60-64\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e65\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e69\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;65-69\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e70\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e74\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;70-74\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e75\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e79\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;75-79\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eedad_num\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e80\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e84\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;80-84\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;85 y más\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecenso\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esexo\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003egrupo_edad\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"building-the-integrated-database\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#building-the-integrated-database\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBuilding the integrated database\u003c/h3\u003e\u003cp\u003eOnce both tables have been processed, we combine them into a single dataset and define the final structure of the variables, preparing the data for visualisation and the analysis of demographic indicators.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# We combine both geographic areas and prepare the variables for use\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ebind_rows\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epob_1970\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epob_1980\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eas.numeric\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esexo\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003efactor\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esexo\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elevels\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Varones\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Mujeres\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003egrupo_edad\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003efactor\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003egrupo_edad\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003elevels\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;00-04\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;05-09\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;10-14\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;15-19\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;20-24\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;25-29\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;30-34\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;35-39\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;40-44\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;45-49\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;50-54\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;55-59\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;60-64\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;65-69\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;70-74\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;75-79\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;80-84\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s\"\u003e\u0026#34;85 y más\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"population-structure\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#population-structure\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePopulation structure\u003c/h2\u003e\u003cp\u003eNow that we have a dataset combining both censuses, with population totals organised by census year, sex, and age group, we can consistently compare the population composition across the two census years.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# A tibble: 6 × 4\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003ecenso\u003c/span\u003e \u003cspan class=\"n\"\u003esexo\u003c/span\u003e    \u003cspan class=\"n\"\u003egrupo_edad\u003c/span\u003e \u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003edbl\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003efct\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e   \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003efct\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e          \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003edbl\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"m\"\u003e1\u003c/span\u003e  \u003cspan class=\"m\"\u003e1970\u003c/span\u003e \u003cspan class=\"n\"\u003eVarones\u003c/span\u003e \u003cspan class=\"m\"\u003e00-04\u003c/span\u003e        \u003cspan class=\"m\"\u003e1196950\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"m\"\u003e2\u003c/span\u003e  \u003cspan class=\"m\"\u003e1970\u003c/span\u003e \u003cspan class=\"n\"\u003eMujeres\u003c/span\u003e \u003cspan class=\"m\"\u003e00-04\u003c/span\u003e        \u003cspan class=\"m\"\u003e1158350\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"m\"\u003e3\u003c/span\u003e  \u003cspan class=\"m\"\u003e1970\u003c/span\u003e \u003cspan class=\"n\"\u003eVarones\u003c/span\u003e \u003cspan class=\"m\"\u003e05-09\u003c/span\u003e        \u003cspan class=\"m\"\u003e1163050\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"m\"\u003e4\u003c/span\u003e  \u003cspan class=\"m\"\u003e1970\u003c/span\u003e \u003cspan class=\"n\"\u003eMujeres\u003c/span\u003e \u003cspan class=\"m\"\u003e05-09\u003c/span\u003e        \u003cspan class=\"m\"\u003e1133950\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"m\"\u003e5\u003c/span\u003e  \u003cspan class=\"m\"\u003e1970\u003c/span\u003e \u003cspan class=\"n\"\u003eVarones\u003c/span\u003e \u003cspan class=\"m\"\u003e10-14\u003c/span\u003e        \u003cspan class=\"m\"\u003e1114300\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"m\"\u003e6\u003c/span\u003e  \u003cspan class=\"m\"\u003e1970\u003c/span\u003e \u003cspan class=\"n\"\u003eMujeres\u003c/span\u003e \u003cspan class=\"m\"\u003e10-14\u003c/span\u003e        \u003cspan class=\"m\"\u003e1086850\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eOrganising the population by sex and five-year age groups allows us to analyse its structure using a variety of visualisations. In this case, we use a population pyramid, which makes it easier to interpret both dimensions together.\u003c/p\u003e\u003ch3 id=\"population-pyramid\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#population-pyramid\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePopulation pyramid\u003c/h3\u003e\u003cp\u003eA population pyramid displays the distribution of the population by age and sex simultaneously, typically showing males on the left and females on the right. By representing the proportion of people in each five-year age group, it provides a clear visual summary of the population structure.\u003c/p\u003e\u003cp\u003eIn this case, we calculated the relative distribution of the population within each census, allowing us to compare the population structure between 1970 and 1980 regardless of total population size. The shape of the pyramid also allows us to identify broad demographic patterns, such as a higher concentration of younger age groups or a relatively older population profile.\u003c/p\u003e\u003cp\u003eWe then calculated the relative distribution of the population in each census and constructed a population pyramid to compare the population structure of the two censuses.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Dataset for the Population Pyramid\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epiramide\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecenso\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esexo\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epoblacion_rel\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eif_else\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003esexo\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Varones\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"nf\"\u003esum\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"nf\"\u003esum\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eungroup\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Comparison Pyramid\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epiramide\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epoblacion_rel\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003egrupo_edad\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esexo\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_col\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efacet_wrap\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e~\u003c/span\u003e\u003cspan class=\"n\"\u003ecenso\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003encol\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003escale_fill_manual\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003evalues\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;#00f59b\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#7014f2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003escale_x_continuous\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elabels\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"nf\"\u003epaste0\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eabs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eround\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"m\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;%\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elimits\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e-0.15\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.15\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ebreaks\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eseq\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e-0.15\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.15\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eby\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.05\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elabs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Gráfico 1. Estructura de la población por sexo y grupo quinquenal de edad.\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esubtitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Argentina. Años 1970 y 1980\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Porcentaje\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Grupo quinquenal de edad\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecaption\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Fuente: INDEC, Censo Nacional de Población 1970 y 1980. Procesado con ARcenso.\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Sexo\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etheme_bw\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etheme\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elegend.position\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;bottom\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003estrip.text\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eelement_text\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eface\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;bold\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esize\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e12\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/es/blog/2026/08/10/analisis-demografico-con-arcenso/piramide_poblacional_1.es.png\"\t\t\talt=\"Population pyramids comparing the distribution by age and sex in Argentina between 1970 and 1980. A narrower base is observed in 1980, along with a slight relative increase in the adult and older adult populations, with differences between men and women.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eFigure 1. Population structure by sex and five-year age group. Argentina. Year 1970 and 1980. Source: INDEC, Censo Nacional de Población 1970 y 1980. Processed with ARcenso.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eBoth censuses show a young population structure, with a high concentration of people in the younger age groups. However, by 1980, a slight shift towards the adult age groups is already apparent, suggesting the early stages of population aging.\u003c/p\u003e\u003ch2 id=\"construction-of-demographic-indicators\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#construction-of-demographic-indicators\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConstruction of demographic indicators\u003c/h2\u003e\u003cp\u003eWhile the population pyramid provides an overall view of the population structure, demographic indicators offer summary measures that allow these patterns to be quantified and compared more precisely. In this section, we calculate two commonly used indicators to complement the visual analysis.\u003c/p\u003e\u003ch3 id=\"aging-index\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#aging-index\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAging index\u003c/h3\u003e\u003cp\u003eThe aging index compares the number of older adults (aged 65 years and over) with the number of children (aged 0–14 years). It provides a simple way to see whether the population is weighted more toward younger age groups or older age groups.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eenvejecimiento\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecenso\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003esummarise\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epoblacion_0a14\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003esum\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epoblacion[\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003egrupo_edad\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;00-04\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;05-09\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;10-14\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epoblacion_65ymas\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003esum\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epoblacion[\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003egrupo_edad\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;65-69\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;70-74\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;75-79\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;80-84\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;85 y más\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eindice\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eround\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epoblacion_65ymas\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"n\"\u003epoblacion_0a14\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"m\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003egt\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eenvejecimiento\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etab_header\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Comparación del índice de envejecimiento\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esubtitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Argentina. Años 1970 y 1980\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etab_spanner\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elabel\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Población\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecolumns\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epoblacion_0a14\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epoblacion_65ymas\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efmt_number\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecolumns\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epoblacion_0a14\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epoblacion_65ymas\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003edecimals\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esep_mark\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;.\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecols_label\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epoblacion_0a14\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;0 a 14 años\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epoblacion_65ymas\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;65 años y más\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eindice\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Indice\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etab_source_note\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esource_note\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003emd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"s\"\u003e\u0026#34;**Fuente:** elaboración propia en base a datos de INDEC (Censos Nacionales de Población 1970 y 1980).\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ctable\u003e  \u003cthead\u003e    \u003ctr class=\"gt_heading\"\u003e      \u003ctd colspan=\"4\" class=\"gt_heading gt_title gt_font_normal\" style\u003eAging Index Comparison\u003c/td\u003e    \u003c/tr\u003e    \u003ctr class=\"gt_heading\"\u003e      \u003ctd colspan=\"4\" class=\"gt_heading gt_subtitle gt_font_normal gt_bottom_border\" style\u003eArgentina. 1970s and 1980s\u003c/td\u003e    \u003c/tr\u003e    \u003ctr class=\"gt_col_headings gt_spanner_row\"\u003e      \u003cth class=\"gt_col_heading gt_columns_bottom_border gt_right\" rowspan=\"2\" colspan=\"1\" scope=\"col\" id=\"censo\"\u003eCensus\u003c/th\u003e      \u003cth class=\"gt_center gt_columns_top_border gt_column_spanner_outer\" rowspan=\"1\" colspan=\"2\" scope=\"colgroup\" id=\"Population\"\u003e        \u003cdiv class=\"gt_column_spanner\"\u003ePopulation\u003c/div\u003e      \u003c/th\u003e      \u003cth class=\"gt_col_heading gt_columns_bottom_border gt_right\" rowspan=\"2\" colspan=\"1\" scope=\"col\" id=\"index\"\u003eIndex\u003c/th\u003e    \u003c/tr\u003e    \u003ctr class=\"gt_col_headings\"\u003e      \u003cth class=\"gt_col_heading gt_columns_bottom_border gt_right\" rowspan=\"1\" colspan=\"1\" scope=\"col\" id=\"population_0to14\"\u003eAges 0 to 14\u003c/th\u003e      \u003cth class=\"gt_col_heading gt_columns_bottom_border gt_right\" rowspan=\"1\" colspan=\"1\" scope=\"col\" id=\"population_65andover\"\u003e65 years and older\u003c/th\u003e    \u003c/tr\u003e  \u003c/thead\u003e  \u003ctbody class=\"gt_table_body\"\u003e    \u003ctr\u003e\u003ctd headers=\"census\" class=\"gt_row gt_right\"\u003e1970\u003c/td\u003e\u003ctd headers=\"population_0to14\" class=\"gt_row gt_right\"\u003e6,853,450\u003c/td\u003e\u003ctd headers=\"population_65andover\" class=\"gt_row gt_right\"\u003e1,631,400\u003c/td\u003e\u003ctd headers=\"index\" class=\"gt_row gt_right\"\u003e24\u003c/td\u003e\u003c/tr\u003e    \u003ctr\u003e\u003ctd headers=\"census\" class=\"gt_row gt_right\"\u003e1980\u003c/td\u003e\u003ctd headers=\"population_0to14\" class=\"gt_row gt_right\"\u003e8,480,768\u003c/td\u003e\u003ctd headers=\"population_65_and_over\" class=\"gt_row gt_right\"\u003e2,290,564\u003c/td\u003e\u003ctd headers=\"index\" class=\"gt_row gt_right\"\u003e27\u003c/td\u003e\u003c/tr\u003e  \u003c/tbody\u003e  \u003ctfoot\u003e    \u003ctr class=\"gt_sourcenotes\"\u003e      \u003ctd class=\"gt_sourcenote\" colspan=\"4\"\u003e\u003cspan class='gt_from_md'\u003e\u003cstrong\u003eSource:\u003c/strong\u003e Author’s own calculations based on INDEC data (1970 and 1980 National Population Censuses).\u003c/span\u003e\u003c/td\u003e    \u003c/tr\u003e  \u003c/tfoot\u003e\u003c/table\u003e\u003cp\u003eThe increase in the aging index reflects a change in the population age structure between 1970 and 1980, indicating a larger relative share of people aged 65 years and over compared with the younger population. This suggests a gradual aging of the population.\u003c/p\u003e\u003ch3 id=\"female-to-male-ratio\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#female-to-male-ratio\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFemale-to-Male ratio\u003c/h3\u003e\u003cp\u003eThis indicator shows how many women there are for every 100 men in a specific population group. Here, we calculate it for people aged 60 years and over, where differences between women and men tend to become more pronounced.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efeminidad\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003egrupo_edad\u003c/span\u003e \u003cspan class=\"o\"\u003e%in%\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;60-64\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;65-69\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;70-74\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;75-79\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;80-84\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;85 y más\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecenso\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003egrupo_edad\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esexo\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003esummarise\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003esum\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003e.groups\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;drop\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003epivot_wider\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enames_from\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esexo\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003evalues_from\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epoblacion\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eindice_feminidad\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eround\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eMujeres\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"n\"\u003eVarones\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"m\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eVarones\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eMujeres\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efeminidad_plot\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003efeminidad\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003epivot_wider\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003enames_from\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenso\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003evalues_from\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eindice_feminidad\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003enames_prefix\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;censo_\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003egrupo_edad\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_segment\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenso_1970\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003exend\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenso_1980\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eyend\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003egrupo_edad\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecolor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;grey85\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elinewidth\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenso_1970\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecolor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ff0f7b\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esize\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenso_1980\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecolor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#f89b29\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esize\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_text\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenso_1970\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elabel\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenso_1970\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ehjust\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1.4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esize\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_text\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenso_1980\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elabel\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenso_1980\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ehjust\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e-0.4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esize\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elabs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Mujeres por cada 100 varones\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Grupo de edad\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Cambio en el índice de feminidad de la población de 60 años y más\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esubtitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Argentina, Años 1970 y 1980\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecaption\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Fuente: INDEC, Censo Nacional de Población 1970 y 1980. Procesado con ARcenso.\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etheme_minimal\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efeminidad_plot\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/es/blog/2026/08/10/analisis-demografico-con-arcenso/indice_feminidad.es.png\"\t\t\talt=\"Graph comparing the sex ratio (women per 100 men) in the population aged 60 and older between 1970 and 1980, by five-year age groups. An increase in the ratio is observed across all age groups, with higher values among older age groups, indicating a relatively higher proportion of women.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eChange in the female-to-male ratio among the population aged 60 and older. Argentina. Year 1970 and 1980. Source: INDEC, Censo Nacional de Población 1970 y 1980. Processed with ARcenso.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThe female-to-male ratio shows a higher proportion of women in the older age groups. This difference becomes more pronounced between 1970 and 1980 across all the age groups analysed, reflecting patterns of higher female life expectancy.\u003c/p\u003e\u003ch2 id=\"what-does-this-analysis-tell-us\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-does-this-analysis-tell-us\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat does this analysis tell us?\u003c/h2\u003e\u003cp\u003eIn demographic analysis, the most time-consuming part is often not calculating indicators or creating visualisations, but the work that comes beforehand: identifying the available data for each census, understanding how it is organised, and building a consistent framework that enables comparisons across census years.\u003c/p\u003e\u003cp\u003eIn this example, that process involved locating the relevant tables, understanding the structural differences between the 1970 and 1980 censuses, and harmonising the variables based on the available information to create a comparable dataset. This is precisely what ARcenso is designed to simplify. The \u003ccode\u003echeck_repository()\u003c/code\u003e function helps identify the available tables, \u003ccode\u003eget_census()\u003c/code\u003e imports the data into R in a structured format, and \u003ccode\u003earcenso_app()\u003c/code\u003e provides an interactive way to explore the repository.\u003c/p\u003e\u003cp\u003eOnce the data have been organised, the analysis becomes more accessible, reproducible, and easier to extend to new questions.\u003c/p\u003e\u003cp\u003eARcenso is still a work in progress. Future developments will incorporate additional census years and continue expanding the package\u0026rsquo;s analytical capabilities. The package was created to make Argentine census data easier to discover, access, and analyse, while building on the collaborative efforts of the open-source community.\u003c/p\u003e\u003cp\u003eIf you would like to explore further,check out the \u003ca href=\"https://soyandrea.github.io/arcenso/articles/indicadores_demograficos.html\"\u003e\u003cem\u003evignettes\u003c/em\u003e\u003c/a\u003e in the package, which include additional examples to work with census data.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/08/10/analisis-demografico-con-arcenso/","date_published":"2026-08-10T00:00:00+00:00","date_modified":"2026-08-13T13:29:29+02:00"},{"id":"https://doi.org/%!s(<nil>)","title":"The Journey of {nycOpenData}: From Classroom to Community","language":"en","authors":[{"name":"Christian Martinez","url":"https://orcid.org/0009-0005-6026-6454","avatar":"https://ropensci.org/img/community/christian-martinez.JPEG","_role":["author"]}],"tags":["open-data","open-source","R","education","package-development","community","API"],"content_html":"\u003ch2 id=\"fade-in\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#fade-in\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFADE IN\u003c/h2\u003e\u003cp\u003eNine students in the M.S. in Psychology Research program at Brooklyn College, New York City (NYC), USA are taking the course \u003cem\u003eReproducible Psychological Research\u003c/em\u003e, where they are learning how to code for the first time. All of them have their cameras off. They are all learning R for the first time, and as an introduction to R, are being taught using the \u003ccode\u003emtcars\u003c/code\u003e dataset.\u003c/p\u003e\u003cp\u003eNine \u003cstrong\u003eNYC\u003c/strong\u003e graduate students who\u003c/p\u003e\u003cul\u003e\u003cli\u003edon\u0026rsquo;t own a car,\u003c/li\u003e\u003cli\u003edon\u0026rsquo;t drive a car,\u003c/li\u003e\u003cli\u003eand have no interest in cars.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eEven with their screens off, with every additional \u003ccode\u003emtcars\u003c/code\u003e column we talked about, they fell deeper and deeper asleep during the lectures.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eIf I wanted my students to learn anything in my class\u0026mdash;not just R\u0026mdash;I needed to make an immediate pivot.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eChange needed to happen, and happen fast.\u003c/p\u003e\u003ch2 id=\"relevance-drives-rigor\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#relevance-drives-rigor\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRelevance drives rigor\u003c/h2\u003e\u003cp\u003eI didn\u0026rsquo;t take my students\u0026rsquo; interests into consideration at the start of the course, and I was paying the price. How do I make sure that no matter what each individual student is interested in, they can be accommodated? Probably a big ask, but part of me felt like I was starting the semester in debt and needed to really pay up.\u003c/p\u003e\u003cp\u003eWhat do all my students have \u003cem\u003ein common\u003c/em\u003e? \u003cstrong\u003eThey all live in NYC\u003c/strong\u003e. Even if they\u0026rsquo;re not from NYC, they currently call it home.\u003c/p\u003e\u003cp\u003eThen came the idea:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u0026#x1f4a1; What if I incorporate NYC Open Data into the course?\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eFor anyone who doesn\u0026rsquo;t know, NYC does an incredible job of making public data available through the \u003ca href=\"https://opendata.cityofnewyork.us/\"\u003eNYC Open Data Portal\u003c/a\u003e. Thousands of datasets, ranging from 311 calls to transportation data to slashings and stabbings (a favorite of one of my students), are available for free, for anyone, anywhere.\u003c/p\u003e\u003cp\u003eImmediately, there was a switch in my (virtual) classroom. Before, engagement was about as close to zero as you can get. Now, it skyrocketed. Students were asking more questions, which was great.\u003c/p\u003e\u003cp\u003eThere were really only two options when it came to using NYC Open Data. The first, which I began using, was downloading static datasets as Excel or CSV files. While this helped with engagement, it also created a new set of problems: using outdated datasets (311, for instance, is updated daily), making sure students downloaded the correct files, and making sure they put them in the correct folders.\u003c/p\u003e\u003cp\u003eLuckily, the portal offers a fantastic solution to all of the problems associated with accessing static files: APIs!\u003c/p\u003e\u003cp\u003eHowever, this came with an even bigger problem:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eIn this class, I had to teach R, statistics, reproducible workflows, data analysis, data cleaning, data visualization, writing, interpretation, and really an innumerable number of additional skills. Did I really want to add APIs to this list?\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eCue an idea.\u003c/p\u003e\u003ch2 id=\"nycopendata-the-beginning\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#nycopendata-the-beginning\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ccode\u003enycOpenData\u003c/code\u003e: The beginning\u003c/h2\u003e\u003cp\u003eAt this point, I knew a few things:\u003c/p\u003e\u003col\u003e\u003cli\u003eStudents need relevant data in order to stay engaged.\u003c/li\u003e\u003cli\u003eStudents really enjoyed using NYC Open Data.\u003c/li\u003e\u003cli\u003eMy students\u0026rsquo; heads may explode if I teach them about APIs.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eSo I started thinking:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eHow do I incorporate NYC Open Data into the classroom moving forward without using APIs or static files?\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003e\u003cem\u003eWhat if I make a package?\u003c/em\u003e\u003c/p\u003e\u003cp\u003eStudents are learning R, which means we\u0026rsquo;re also learning about packages\u0026mdash;a crucial, yet simple, concept. What if there was a package dedicated to pulling NYC Open Data? That would fit right into the students\u0026rsquo; learning path.\u003c/p\u003e\u003cp\u003eWhen I looked, there wasn\u0026rsquo;t one.\u003c/p\u003e\u003cp\u003eSo I thought:\u003c/p\u003e\u003cp\u003e\u003cem\u003eWhy not make it myself?\u003c/em\u003e\u003c/p\u003e\u003cp\u003eMaybe a crazy idea. I had never developed an R package, never mind one that relied on APIs. What does the process look like? Do I have the skills? Will CRAN accept something that most likely only my nine students and I would ever use?\u003c/p\u003e\u003cp\u003eAs a big believer in the mantra, \u003cem\u003e\u0026ldquo;I\u0026rsquo;ll do it myself,\u0026rdquo;\u003c/em\u003e I already had the code to pull in the individual datasets in R, so\u0026hellip; why not?\u003c/p\u003e\u003cp\u003eSo, I went ahead and did it myself.\u003c/p\u003e\u003ch2 id=\"nycopendata-the-middle\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#nycopendata-the-middle\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ccode\u003enycOpenData\u003c/code\u003e: The middle\u003c/h2\u003e\u003cp\u003eOriginally, I thought the easiest thing to do was build the package with one function: \u003ccode\u003enyc_311()\u003c/code\u003e, which would simply pull in the 311 dataset. The perk was that it was one of the largest and most data-diverse datasets, so it could kill many birds with one stone.\u003c/p\u003e\u003cp\u003eBut then I thought,\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u0026ldquo;No way will CRAN accept a package with just one function.\u0026rdquo;\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eSo, I literally copied and pasted the same exact code 30 different times and adapted it for the 30 most popular datasets on the NYC Open Data Portal.\u003c/p\u003e\u003cp\u003eThrough a lot of blood, sweat, and documentation, the first iteration of \u003ca href=\"https://docs.ropensci.org/nycOpenData/index.html\"\u003e\u003ccode\u003enycOpenData\u003c/code\u003e\u003c/a\u003e was officially created and accepted onto CRAN! I, a person who only installed packages, was now the creator of one? It was amazing to actually give back to the marvelous R community that provided me with so much for so many years.\u003c/p\u003e\u003cp\u003eThis not only made teaching with NYC Open Data easier, but more fun too. The package did exactly what it needed to do: make working with NYC Open Data datasets incredibly easy in R.\u003c/p\u003e\u003cp\u003eWith this version of \u003ccode\u003enycOpenData\u003c/code\u003e, students were able to complete their final projects with one simple prompt:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eAnswer any question you have about NYC using open data.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThose projects eventually became the \u003ca href=\"https://martinezc1-nyc-open-data-student-gallery.share.connect.posit.cloud/\"\u003eNYC Open Data Student Gallery Book\u003c/a\u003e, which was presented at \u003ca href=\"https://www.youtube.com/watch?v=Vw8PhY7NDGE\"\u003eNYC Open Data Week 2026\u003c/a\u003e. Each student\u0026rsquo;s project became its own chapter, and each student had the opportunity to present their work to the world. These same students who were once falling asleep while I basically sang them a lullaby, now were very much awake, displaying what they\u0026rsquo;ve learned and uncovered to an audience of professionals.\u003c/p\u003e\u003cp\u003eAs an educator, my goal is to help my students be as successful as possible. Through \u003ccode\u003enycOpenData\u003c/code\u003e, that goal became a reality.\u003c/p\u003e\u003cp\u003eAll of the work I put into this package was worth it.\u003c/p\u003e\u003ch2 id=\"nycopendata-student-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#nycopendata-student-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ccode\u003enycOpenData\u003c/code\u003e: Student contributions\u003c/h2\u003e\u003cp\u003eThe following semester, I had the opportunity to teach a follow-up class to the same cohort. Then came another crazy idea:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eWhat if the same students who used \u003ccode\u003enycOpenData\u003c/code\u003e to not only learn, but also conduct research, contributed to the same infrastructure they utilized?\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eBasically, what if I helped my students contribute to the \u003ccode\u003enycOpenData\u003c/code\u003e package?\u003c/p\u003e\u003cp\u003eThis would be similar to what a junior software developer might do. Using my code as a template, they could build their own functions for whatever dataset they were interested in. The package already had 30 functions\u0026mdash;what\u0026rsquo;s another nine?\u003c/p\u003e\u003cp\u003eThrough light introductions to GitHub, package development, and open-source software, each of my students successfully contributed their own function to the \u003ccode\u003enycOpenData\u003c/code\u003e package. Suddenly, they weren\u0026rsquo;t just users of open-source software\u0026mdash;they were contributors.\u003c/p\u003e\u003cp\u003eGood thing I didn\u0026rsquo;t do this last semester, as that would have guaranteed brain explosions from my students.\u003c/p\u003e\u003ch2 id=\"nycopendata-ropensci\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#nycopendata-ropensci\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ccode\u003enycOpenData\u003c/code\u003e: rOpenSci\u003c/h2\u003e\u003cp\u003eAs time progressed, and as I assessed the student contributions, I became more familiar with package development. Wanting the best product possible, I decided to submit the package to rOpenSci through its \u003ca href=\"https://github.com/ropensci/software-review/issues/750#issuecomment-5007655734\"\u003e\u003cstrong\u003epublic peer review process\u003c/strong\u003e\u003c/a\u003e. I was a first-time package developer and wanted guidance from people who had far more experience than I did. I wanted anyone\u0026mdash;whether my students or someone using the package halfway around the world\u0026mdash;to have the best experience possible. After all, the goal was to make NYC Open Data more accessible for \u003cem\u003eanyone\u003c/em\u003e. To go from helping just my students, to my students helping, to potentially helping the overall R community through rOpenSci\u0026mdash;I would have never guessed this trajectory.\u003c/p\u003e\u003cp\u003eThis ended up being one of the best experiences I\u0026rsquo;ve had as a programmer.\u003c/p\u003e\u003cp\u003eThe review process didn\u0026rsquo;t simply determine whether the package was ready\u0026mdash;it made the package better. Every suggestion strengthened the documentation, improved the user experience, and taught me something new about developing open-source software.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eFirst of all, my editor and reviewers told me exactly what I needed to hear:\u003c/strong\u003e\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eHaving 39 functions that basically do the same thing is not only unmanageable, but bad code.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eWhich was 100% the truth.\u003c/p\u003e\u003cp\u003eAnd, if I\u0026rsquo;m being honest, the package itself came about while I was teaching a course on reproducibility. I was literally teaching my students that copy-and-paste was \u003cem\u003enot\u003c/em\u003e something to do, while I was doing the exact same thing. Sure, I brushed it off because I needed to put something together quickly, but it was time to face the facts and fix it.\u003c/p\u003e\u003cp\u003eWith that came good news and bad news. As for every action, there is an equal and opposite reaction:\u003c/p\u003e\u003cul\u003e\u003cli\u003eThe \u003cem\u003egood\u003c/em\u003e news: I was able to turn the 39 functions into just 3. Now, all 2,000+ datasets can be pulled from the portal. Easier to maintain, easier for users to understand, and overall a much better product.\u003c/li\u003e\u003cli\u003eThe \u003cem\u003ebad\u003c/em\u003e news: All of my students\u0026rsquo; work was now gone. (Sad face.)\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThanks to the thoughtful feedback and hard work of the editor, reviewers, and everyone involved in the review process, \u003ccode\u003enycOpenData\u003c/code\u003e was successfully accepted into rOpenSci\u0026mdash;an indescribable privilege. I honestly can\u0026rsquo;t believe the journey from where the package started to where it is today.\u003c/p\u003e\u003cp\u003eI am especially grateful to my editor, \u003ca href=\"/author/ronny-hernandez-mora/\"\u003e\u003cstrong\u003eRonny Hernandez Mora\u003c/strong\u003e\u003c/a\u003e, and reviewers, \u003ca href=\"https://scholar.google.com/citations?hl=en\u0026amp;user=5GTf-McAAAAJ\"\u003e\u003cstrong\u003eHaolin Dong\u003c/strong\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/MichaelPascale\"\u003e\u003cstrong\u003eMichael Pascale\u003c/strong\u003e\u003c/a\u003e, for the time, care, and thoughtful feedback they invested throughout the review. As a first-time package developer, I couldn\u0026rsquo;t have asked for a better introduction to open-source software development.With the foundation finally built, another thought entered my mind:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eCan we use this same infrastructure for other open data portals?\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eTurns out, you can!\u003c/p\u003e\u003ch2 id=\"the-opendata-ecosystem\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-opendata-ecosystem\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe OpenData Ecosystem\u003c/h2\u003e\u003cp\u003eWith the infrastructure in place, another realization hit me: I never had to build it from scratch again.\u003c/p\u003e\u003cp\u003eThe same foundation that powered \u003ccode\u003enycOpenData\u003c/code\u003e could be adapted to other open data portals, making it possible to create an entire ecosystem of OpenData packages.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eIf students in NYC were motivated by using data regarding their own city, why wouldn\u0026rsquo;t the same hold true for students in other cities?\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eSince then, four additional packages have been built, turning one package into an ecosystem:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://martinezc1.github.io/nysOpenData/\"\u003e\u003ccode\u003enysOpenData\u003c/code\u003e\u003c/a\u003e \u0026mdash; New York State Open Data\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://martinezc1.github.io/mtaOpenData/\"\u003e\u003ccode\u003emtaOpenData\u003c/code\u003e\u003c/a\u003e \u0026mdash; Metropolitan Transportation Authority Open Data\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://martinezc1.github.io/laOpenData/\"\u003e\u003ccode\u003elaOpenData\u003c/code\u003e\u003c/a\u003e \u0026mdash; Los Angeles Open Data\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://martinezc1.github.io/chiOpenData/\"\u003e\u003ccode\u003echiOpenData\u003c/code\u003e\u003c/a\u003e \u0026mdash; Chicago Open Data\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://martinezc1.github.io/ausOpenData/\"\u003e\u003ccode\u003eausOpenData\u003c/code\u003e\u003c/a\u003e \u0026mdash; Austin Open Data\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe ecosystem continues to grow. A former student and I recently collaborated on the \u003ccode\u003eausOpenData\u003c/code\u003e package (which was just recently accepted to CRAN), and a current intern at the \u003ca href=\"https://nycopendatalab.org\"\u003eNYC Open Data Lab\u003c/a\u003e is building \u003ca href=\"https://github.com/gomes-sh/sfOpenData\"\u003e\u003ccode\u003esfOpenData\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/gomes-sh/SeattleOpenData\"\u003e\u003ccode\u003eSeattleOpenData\u003c/code\u003e\u003c/a\u003e\u003ccode\u003e.\u003c/code\u003e This not only gives others an opportunity to contribute, but also gives me a chance to continue involving students in the ecosystem after the original \u003ccode\u003enycOpenData\u003c/code\u003e functions were \u0026ldquo;refactored.\u0026rdquo;\u003c/p\u003e\u003cp\u003eHopefully, there are many more to come. The hard part is no longer building packages\u0026mdash;it is deciding which open data portal comes next.\u003c/p\u003e\u003ch2 id=\"nycopendata-the-final-product\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#nycopendata-the-final-product\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ccode\u003enycOpenData\u003c/code\u003e: The Final Product\u003c/h2\u003e\u003cp\u003eWhat started as a single function has turned into six OpenData packages, one of which has been successfully peer-reviewed by rOpenSci, with the others built on the same foundation. \u003cem\u003eTens of billions\u003c/em\u003e of rows of public data, from across the country, are now easily accessible in R for anyone\u0026mdash;from researchers and journalists to students and educators.\u003c/p\u003e\u003cp\u003eLooking back, I think this journey embodies the spirit of R.\u003c/p\u003e\u003cp\u003eOne of the best things about R is that it is open source. Anyone with an idea can contribute, and those ideas have a way of growing into something much bigger than originally imagined. This entire ecosystem started because nine graduate students didn\u0026rsquo;t care about the \u003ccode\u003emtcars\u003c/code\u003e dataset.\u003c/p\u003e\u003cp\u003eOn top of that, the tools used to build this ecosystem were free and open source, and the packages themselves are freely available to anyone. In my family we say, \u003cem\u003e\u0026ldquo;If it\u0026rsquo;s for free, it\u0026rsquo;s for me.\u0026rdquo;\u003c/em\u003e\u003c/p\u003e\u003cp\u003eWhat started in one virtual classroom ended up bringing together students, educators, reviewers, professionals, interns, and thousands of people who have since installed the packages.\u003c/p\u003e\u003cp\u003eThrough this entire process, the biggest lesson learned was:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eRelevance isn\u0026rsquo;t a reward for learning\u0026mdash;it is what enables learning.\u003c/p\u003e\u003c/blockquote\u003e\u003ch2 id=\"to-my-students\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#to-my-students\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTo my students\u003c/h2\u003e\u003cp\u003eWhile this story has my name attached to it, it wouldn\u0026rsquo;t exist without students who were willing to try something new, contribute code, ask questions, and occasionally tolerate my crazy ideas. When we started the course, I asked you all to keep an open mind and try something new-and I never would ask you to do something that I wouldn\u0026rsquo;t.\u003c/p\u003e\u003cp\u003eThank you for trusting me when I asked you to do something different.\u003c/p\u003e\u003ch2 id=\"fade-out\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#fade-out\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFADE OUT\u003c/h2\u003e","url":"https://ropensci.org/blog/2026/08/06/the-journey-of-nycopendata-from-classroom-to-community/","date_published":"2026-08-06T00:00:00+00:00","date_modified":"2026-08-06T09:44:16-04:00"},{"id":"https://doi.org/10.59350/mk9p7-erv80","title":"Windows ARM64 comes to R-universe","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","tech notes","windows","arm64"],"content_html":"\u003cp\u003eAttentive package authors already noticed something new in their r-universe page over the past few weeks: R-universe has quietly started building and checking packages for Windows ARM64.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/pdftools#checktable\"\u003ehttps://ropensci.r-universe.dev/pdftools#checktable\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://cran.r-universe.dev/dplyr#checktable\"\u003ehttps://cran.r-universe.dev/dplyr#checktable\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://bioc-release.r-universe.dev/S4Vectors#checktable\"\u003ehttps://bioc-release.r-universe.dev/S4Vectors#checktable\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eR-universe has supported ARM64 on Linux and macOS for some time already, but not Windows. With this addition, packages are now built and checked on both \u003cstrong\u003ex86_64\u003c/strong\u003e and \u003cstrong\u003eARM64\u003c/strong\u003e across all major operating systems, making the R ecosystem fully ARM ready.\u003c/p\u003e\u003ch2 id=\"porting-the-r-ecosystem-to-arm-windows\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#porting-the-r-ecosystem-to-arm-windows\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePorting the R ecosystem to ARM Windows\u003c/h2\u003e\u003cp\u003eThe R-universe service is part of \u003ca href=\"https://contributor.r-project.org/windows-arm64/\"\u003ea broader community effort\u003c/a\u003e to bring the R ecosystem to Windows ARM64. This project builds on the work from Tomáš Kalibera, whose efforts laid much of the \u003ca href=\"https://blog.r-project.org/2024/04/23/r-on-64-bit-arm-windows/index.html\"\u003egroundwork\u003c/a\u003e for modernizing R on Windows to support UCRT and ARM.\u003c/p\u003e\u003cp\u003eAmong other things, the project provides daily builds of \u003ca href=\"https://github.com/r-devel/windows-arm64/releases#release-devel\"\u003ebase R installers\u003c/a\u003e for Windows ARM64 (R-release, R-patched, and R-devel), built on GitHub Actions with the \u003ca href=\"https://cran.r-project.org/bin/windows/Rtools/rtools45/news.html\"\u003ertools45 toolchain\u003c/a\u003e. Because CRAN repositories do not have Windows ARM64 binaries yet, these installers are patched to install binary packages from R-universe instead, so \u003ccode\u003einstall.packages()\u003c/code\u003e just works. There is nothing users need to configure.\u003c/p\u003e\u003ch3 id=\"what-we-had-to-fix-along-the-way\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-we-had-to-fix-along-the-way\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat we had to fix along the way\u003c/h3\u003e\u003cp\u003eRolling this out on R-universe turned out to be a great way to find out which parts of the ecosystem were not quite ready for Windows on ARM. Some things that needed patching:\u003c/p\u003e\u003cul\u003e\u003cli\u003eThe base R installers themselves, to pick up ARM64 binaries from the right repository path.\u003c/li\u003e\u003cli\u003eExternal software such as \u003ca href=\"https://github.com/r-windows/JAGS/releases/tag/installers\"\u003eJAGS\u003c/a\u003e, which needed some changes to compile \u003ccode\u003erjags\u003c/code\u003e and \u003ccode\u003erunjags\u003c/code\u003e for arm.\u003c/li\u003e\u003cli\u003eRust integration: many R packages using Rust were hard-coding the \u003ccode\u003ex86_64-pc-windows-gnu\u003c/code\u003e target. The extendr project shipped a fix in \u003ccode\u003eextendr-api\u003c/code\u003e 0.8.2, and rustup now supports the \u003ccode\u003eaarch64-pc-windows-gnullvm\u003c/code\u003e target we need.\u003c/li\u003e\u003cli\u003eBig compiled packages like arrow, plus a few dozen other packages with issues such as unconditionally passing \u003ccode\u003e-msse\u003c/code\u003e compiler flags (ARM chips do not do SSE) or autoconf scripts misdetecting the toolchain.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFor broken CRAN and Bioconductor packages we maintain a set of \u003ca href=\"https://github.com/r-devel/windows-arm64/tree/main/patches\"\u003einstall-time patches\u003c/a\u003e, and we are in the process of upstreaming these fixes to the package maintainers. With these patches in place, the entire R ecosystem now builds on Windows ARM64. 🎉\u003c/p\u003e\u003ch3 id=\"testing-in-the-real-world\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#testing-in-the-real-world\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTesting in the real world\u003c/h3\u003e\u003cp\u003eThe fact that everything builds does not yet guarantee that everything behaves exactly as expected. We would love help from users to find any loose ends. Hence if you are running Windows on ARM hardware, or you are using a Windows VM on MacOS, we would love for you to take this for a spin.\u003c/p\u003e\u003cp\u003eFor package developers there several ways to test packages with compiled code on Windows ARM64. As mentioned, if your package is already on CRAN or BioConductor, you can find binaries and check results on R-universe at \u003ccode\u003ehttps://cran.r-universe.dev/{pkg}\u003c/code\u003e or \u003ccode\u003ehttps://bioc.r-universe.dev/{pkg}\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eIn addition, GitHub Actions provides free \u003ccode\u003ewindows-11-arm\u003c/code\u003e runners, and the standard workflows from \u003ccode\u003er-lib/actions\u003c/code\u003e support them out of the box.\u003c/p\u003e\u003ch2 id=\"helping-the-ecosystem-evolve\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#helping-the-ecosystem-evolve\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHelping the ecosystem evolve\u003c/h2\u003e\u003cp\u003eThis project is exactly one of the reasons for building the R-universe system. Besides providing an open space for developers to publish new software, it also serves as a versatile infrastructure that lets us experiment with new tooling and platforms to help move the ecosystem forward as a whole. Having an automated platform that continuously builds thousands of packages made it possible to find those missing pieces, fix them, and iterate quickly.\u003c/p\u003e\u003cp\u003eBy identifying and fixing the main hurdles now, we want to help package authors address the problems before they hit end-users, and pave the way for a smooth introduction of Windows ARM64 support on mainstream repositories such as CRAN and Posit Package Manager when the time is ready.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/08/06/r-universe-winarm/","date_published":"2026-08-06T00:00:00+00:00","date_modified":"2026-08-06T13:24:06+02:00"},{"id":"https://doi.org/10.59350/yra55-8rf60","title":"From Peer Review to Mentorship: My rOpenSci Story","language":"en","authors":[{"name":"Eunseop Kim","url":"https://ropensci.org/author/eunseop-kim/","avatar":"https://github.com/markean.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["community","Software Peer Review","Champions Program","anniversary"],"content_html":"\u003ch2 id=\"getting-involved-with-ropensci\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#getting-involved-with-ropensci\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGetting Involved with rOpenSci\u003c/h2\u003e\u003cp\u003eI first came to rOpenSci in 2022, though at the time I barely knew what it was.I was getting a statistical package of mine ready to submit to the Journal of Statistical Software, and that is how I was pointed toward \u003ca href=\"/software-review/\"\u003erOpenSci review\u003c/a\u003e: the journal directs authors to rOpenSci\u0026rsquo;s statistical software standards, so going through the review looked like a convenient step along the way.At the time, my focus was on polishing the software for the journal submission, not on rOpenSci itself.\u003c/p\u003e\u003cp\u003eWhat I did not expect was how much the process itself would change my perspective.Coming from an academic background, the \u003ca href=\"https://github.com/ropensci/software-review/issues/550\"\u003eopen review on GitHub\u003c/a\u003e felt very different from the closed, anonymous process I was used to.It was rigorous without being adversarial.An editor and two reviewers carefully examined the package, and their feedback was constructive and grounded in \u003ca href=\"https://stats-devguide.ropensci.org/standards.html\"\u003erOpenSci\u0026rsquo;s well-defined standards and guidelines\u003c/a\u003e.The review improved the package, and it also gave me a greater appreciation for the collaborative approach behind open-source software review.\u003c/p\u003e\u003cp\u003eI was later \u003ca href=\"https://github.com/ropensci/software-review/issues/728\"\u003einvited to review a package myself\u003c/a\u003e.The experience gave me a different perspective on the review process.As a reviewer, I saw that the goal was not simply to determine whether a package met some standards or merits, but to help authors improve their software through constructive feedback.When applications opened for the \u003ca href=\"/champions/\"\u003eChampions Program\u003c/a\u003e, mentoring felt like a natural next step.Having experienced rOpenSci as both a software author and a reviewer, it seemed like a meaningful way to contribute to the community.\u003c/p\u003e\u003ch2 id=\"mentoring-in-the-champions-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mentoring-in-the-champions-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMentoring in the Champions Program\u003c/h2\u003e\u003cp\u003eI was matched with \u003ca href=\"/author/yi-chin-sunny-tseng/\"\u003eSunny Tseng\u003c/a\u003e as her mentor.Over the program, Sunny built \u003ca href=\"https://sunnytseng.github.io/bbsTaiwan/\"\u003ebbsTaiwan\u003c/a\u003e, an R package that makes Taiwan\u0026rsquo;s Breeding Bird Survey data much easier to access and analyze.It was a real package solving a real problem for people who study Taiwan\u0026rsquo;s birds, which made it a pleasure to work on together.\u003c/p\u003e\u003cp\u003eMostly, what I gave was time and attention.We worked through package scope, unit testing, version control, and the other practical aspects of building an R package.Many of our conversations were not about solving a particular technical problem, but about discussing trade-offs, identifying useful resources, and thinking through the next steps.Those conversations ended up being one of my favorite parts of the program.\u003c/p\u003e\u003cp\u003eWhat I valued most, though, was seeing how Sunny\u0026rsquo;s work was used after the project.It is easy to think of a package as code made available for others to use, but in this case it became a tool that supported people working with the same data.While visiting Taiwan, she also ran a session introducing it to members of that community.This reinforced my view that open-source software is not just code shared in public, but a way of bringing people together around shared work.\u003c/p\u003e\u003ch2 id=\"looking-back\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#looking-back\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLooking Back\u003c/h2\u003e\u003cp\u003eMore than anything, my time with rOpenSci has left me with an appreciation for how thoughtfully it is run.Its initiatives, from peer review to mentorship, are organized with real care, and they are built to do more than improve software.They are designed to connect people, bring contributors together, and keep community at the center of open science.\u003c/p\u003e\u003cp\u003eFifteen years in, what strikes me about rOpenSci is that it has always been more about people than about packages.What began as a convenient step on the way to a journal turned into one of the more rewarding parts of my work, and I have found value in each perspective I have seen as an author, a reviewer, and a mentor.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/07/14/15yo-eunseop-kim/","date_published":"2026-07-14T00:00:00+00:00","date_modified":"2026-07-13T21:37:15-04:00"},{"id":"https://doi.org/10.59350/vrv9q-27605","title":"An API for Everything There Is to Know About Packages","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["editor"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["tech notes","r-universe","api"],"content_html":"\u003cp\u003eOn R-Universe you can \u003ca href=\"/blog/2023/02/27/runiverse-discovering/\"\u003ediscover and learn everything there is to know about R packages\u003c/a\u003e. But did you know it does only provide a human-friendly website, but also programmatic access to all information through APIs!Thanks to those APIs you can list universes, list packages in an universe, get information on packages, and perform searches; all without any need for authentication.\u003c/p\u003e\u003cp\u003eThe R-Universe APIs are both handy and reliable. You can build upon them, as both rOpenSci and community members have done.This post shows some examples of use cases with the R-Universe API.\u003c/p\u003e\u003ch2 id=\"know-which-packages-are-yours\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#know-which-packages-are-yours\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eKnow which packages are yours\u003c/h2\u003e\u003cp\u003eThe toolbox for rOpenSci community management tasks, \u003ca href=\"https://ropensci.r-universe.dev/promoutils\"\u003epromoutils\u003c/a\u003e, calls an R-Universe API to list and get information on \u003ca href=\"https://github.com/ropensci-org/promoutils/blob/18c80362002bafe48c7c88c1ca062ac3a3050358/R/utils.R#L25\"\u003erOpenSci packages\u003c/a\u003e.This list of packages is in particular used in the \u003ca href=\"https://github.com/ropensci-org/promoutils/blob/18c80362002bafe48c7c88c1ca062ac3a3050358/R/help_wanted_json.R#L48\"\u003efunction\u003c/a\u003e that outputs data on \u003ca href=\"/help-wanted\"\u003ehelp-wanted issues\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"display-packages-developed-at-your-organization\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#display-packages-developed-at-your-organization\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDisplay packages developed at your organization\u003c/h2\u003e\u003cp\u003eIf your organization develops R packages, you can use its R-Universe as the source of truth for your package collection.For instance, the \u003ca href=\"https://ggsegverse.r-universe.dev/builds\"\u003eR-Universe of ggsegverse\u003c/a\u003e corresponds to, well, the ggsegverse.Therefore, on the ggsegverse website, the \u003ca href=\"https://ggsegverse.github.io/ecosystem/\"\u003elisting of packages\u003c/a\u003e is created by querying \u003ccode\u003ehttps://ggsegverse.r-universe.dev/api/packages\u003c/code\u003e, the endpoint for \u003ca href=\"https://docs.r-universe.dev/browse/api.html#information-of-all-packages-in-an-universe\"\u003einformation on all packages in the universe\u003c/a\u003e.\u003c/p\u003e\u003cfigure\u003e\u003ca href=\"https://ggsegverse.github.io/ecosystem/\"\u003e\u003cimg src=\"/blog/2026/07/08/r-universe-apis-use-cases/ggsegverse.png\"\t\t\talt=\"Screenshot of the ggsegverse website, with informative package cards\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003eLikewise, the \u003ca href=\"https://ggsegverse.github.io/docs/\"\u003edocs page\u003c/a\u003e of ggsegverse relies on the R-Universe API to retrieve links to vignettes for each package.\u003c/p\u003e\u003ch3 id=\"server-side-or-client-side-api-requests\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#server-side-or-client-side-api-requests\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eServer-side or client-side API requests\u003c/h3\u003e\u003cp\u003eThe ggsegverse website performs \u003cstrong\u003eclient-side requests\u003c/strong\u003e: it queries the R-Universe API when you open the webpage, through a \u003ca href=\"https://github.com/ggsegverse/ggsegverse.github.io/blob/aea3723f885387ca9399408ccfbcc7a1ec9d7820/js/api.js\"\u003eJS script\u003c/a\u003e.You can also check this through the \u003ca href=\"https://inspectelement.org/apis.html#how-to-find-and-use-undocumented-apis\"\u003eweb developer tools\u003c/a\u003e:\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/07/08/r-universe-apis-use-cases/request.png\"\t\t\talt=\"Screenshot of the web developer tools\u0026#39; network tab, showing the XHR request logged when one reloads the ggsegverse website\"\u003e\u003c/figure\u003e\u003cp\u003eThe rendering of the nice package cards happens through \u003ca href=\"https://github.com/ggsegverse/ggsegverse.github.io/blob/fec52718432d098b1162772f3f94985a1d0feef3/js/render.js\"\u003eanother JS script\u003c/a\u003e that uses information such as the package\u0026rsquo;s title, description, number of stars, etc.\u003c/p\u003e\u003cp\u003eIn contrast, for package listings on author and package pages, the rOpenSci website uses \u003cstrong\u003eserver-side requests\u003c/strong\u003e: the API is called when Hugo renders our website.For instance, for the list of packages at the bottom of \u003ca href=\"/author/jeroen-ooms/\"\u003eJeroen Ooms\u0026rsquo; author page\u003c/a\u003e, we \u003ca href=\"https://github.com/ropensci/roweb3/blob/503f0547854925eaa72a0e2c36420e3731e98ebf/themes/ropensci/layouts/author/list.html#L84\"\u003equery\u003c/a\u003e the R-Universe API link from our website \u003ca href=\"https://github.com/ropensci/roweb3/blob/7851904c5297868b7c372788166c526f2fe2ed1d/config.toml#L60\"\u003econfiguration\u003c/a\u003e and \u003ca href=\"https://github.com/ropensci/roweb3/blob/503f0547854925eaa72a0e2c36420e3731e98ebf/themes/ropensci/layouts/author/list.html#L85\"\u003efilter\u003c/a\u003e the packages by GitHub login.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/07/08/r-universe-apis-use-cases/jeroen.png\"\t\t\talt=\"Screenshot of Jeroen Ooms\u0026#39; author page on the rOpenSci website, featuring the list of rOpenSci packages that he maintains.\"\u003e\u003c/figure\u003e\u003cp\u003eOn a Quarto website, you could have a code chunk using R to query the R-Universe APIs, through the \u003ca href=\"https://docs.ropensci.org/universe/\"\u003euniverse R package\u003c/a\u003e for instance.\u003c/p\u003e\u003cp\u003eIn any case, if you use server-side requests, you need to re-render your website regularly to avoid your packages\u0026rsquo; listing to get out-of-date.The nice thing about client-side requests is that the package lists will be always up-to-date!\u003c/p\u003e\u003ch2 id=\"search-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#search-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSearch Packages\u003c/h2\u003e\u003cp\u003eWith R-universe, you can search packages, not only through the web interface but also through an \u003ca href=\"https://docs.r-universe.dev/browse/api.html#api-global-search\"\u003eAPI\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe project \u003ca href=\"https://rwarehouse.netlify.app/\"\u003eThe Wharehouse\u003c/a\u003e, that helps users find packages according to given keywords, \u003ca href=\"https://rwarehouse.netlify.app/about#resources-credits\"\u003euses R-universe as one its information sources\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we provided some use cases of the R-Universe APIs.Try them out, or read the \u003ca href=\"https://docs.r-universe.dev/browse/api.html\"\u003edocs\u003c/a\u003e to get a sense of all the information that\u0026rsquo;s shared through the different endpoints.If you maintain some infrastructure that uses an R-Universe API, feel free to report a \u003ca href=\"/usecases\"\u003euse case\u003c/a\u003e!\u003c/p\u003e","url":"https://ropensci.org/blog/2026/07/08/r-universe-apis-use-cases/","date_published":"2026-07-08T00:00:00+00:00","date_modified":"2026-07-08T14:47:52+02:00"},{"id":"https://doi.org/10.59350/3rymp-he260","title":"FOSS Tools for Lazy Editors","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["editor"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["community manager tools","editor","welcome","how-to"],"content_html":"\u003c!--- cSpell: ignore xkcd wordlists roweb chrischinchilla jolars  ---\u003e\u003cp\u003eI recently had the opportunity to learn what the term \u0026ldquo;Nerd Sniping\u0026rdquo; meant.\u003ca href=\"/author/ma%C3%ABlle-salmon\"\u003eMaëlle\u003c/a\u003e pointed out a conversation on the rOpenSci Slack about something called Vale, meant for text linting.I\u0026rsquo;d seen the comment, but honestly hadn\u0026rsquo;t really understood what it was all about until Maëlle asked if I thought it\u0026rsquo;d be useful for editing the blog\u0026hellip;\u003c/p\u003e\u003cp\u003e\u0026hellip;time passes\u0026hellip;\u003c/p\u003e\u003cp\u003eAbout three days later, I\u0026rsquo;ve hardly finished any of the blog post reviews I was planning to do.I\u0026rsquo;ve been sucked down a rabbit hole of Vale setup, custom rules, and overrides.\u003c/p\u003e\u003cp\u003eIt turns out that \u0026ldquo;Nerd Sniping\u0026rdquo; refers to the practice of throwing problems at nerds that distract them from what they were doing.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2026/07/02/editor-tools/nerd_sniping.png\"\t\t\talt=\"xkcd comic #356 Nerd Sniping. A comic where a shouted physics problem stops an engineer crossing the street so they are hit by a bus while contemplating the solution.\" width=\"500\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ca href=\"https://xkcd.com/356\"\u003exkcd Nerd Sniping\u003c/a\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThat being said, it was a glorious hole to fall down!It was just too bad that Maëlle sniped me two more times by asking me about my spell check setup in Positron and then by asking if Panache would help with translations.\u003c/p\u003e\u003cp\u003eI was pretty slow at my editorial duties that week!But I did come out of the dive with a great editorial setup which will definitely save me time in future.\u003c/p\u003e\u003cp\u003eI\u0026rsquo;ve \u003ca href=\"/author/steffi-lazerte\"\u003eedited\u003c/a\u003e \u003cstrong\u003ea lot\u003c/strong\u003e of posts on the rOpenSci blog.I take pride in helping writers get their ideas across with clarity, while not losing their own style.I\u0026rsquo;m an opinionated editor, so I also try hard to ensure that writers understand when my suggestions are just my opinion, and when I think there are mistakes in style or content that really do need to be fixed.I am also fussy about the details, about being consistent with capitalizations, about keeping ideas logically ordered, and about making sure that readers without the same background might still understand the gist of the post\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eAs such, my post reviews can get a bit lengthy and it\u0026rsquo;s not unreasonable for me to have 20-30 comments on a standard post.That\u0026rsquo;s not too problematic, but if I had to complain it might be about the technical edits, like fixing the capitalization of \u0026lsquo;rOpenSci\u0026rsquo;\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e, ensuring headings are in sentence case, and that links to ropensci.org pages are relative.These aren\u0026rsquo;t complicated fixes, but if you have to remember to keep an eye out for them, and then create a GitHub PR review suggestion for each fix, it can become a tad tedious.\u003c/p\u003e\u003cp\u003eMaëlle\u0026rsquo;s timely sniping helped me finalize my collection of tools to help streamline editorial tasks.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eSpell checking\u003c/strong\u003e with \u003ca href=\"https://cspell.org/\"\u003ecSpell\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eLinting\u003c/strong\u003e\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e with \u003ca href=\"https://vale.sh/\"\u003eVale\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eFormatting\u003c/strong\u003e with \u003ca href=\"https://panache.bz/\"\u003ePanache\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eCreating GitHub PR suggestions\u003c/strong\u003e with \u003ca href=\"https://github.com/Microsoft/vscode-pull-request-github\"\u003eGitHub Pull Requests\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAll of these tools can be installed and used in different ways.They are also powerful with many different possible customizations and configurations.Here, I\u0026rsquo;ll share with you how I use these tools as extensions in \u003ca href=\"https://positron.posit.co/\"\u003ePositron\u003c/a\u003e to help make it easier to write and edit posts for the rOpenSci blog.Hopefully this inspires you to explore how you might set them up to support your workflows!Further, if you\u0026rsquo;re interested in setting up your own tools, perhaps you want to check out this \u003ca href=\"/blog/2025/09/18/markdown-programmatic-parsing/\"\u003eblog post\u003c/a\u003e on \u0026ldquo;All the Ways to Programmatically Edit or Parse R Markdown / Quarto Documents\u0026rdquo;.\u003c/p\u003e\u003ch2 id=\"general-setup\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#general-setup\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGeneral setup\u003c/h2\u003e\u003cp\u003eFor each tool, you\u0026rsquo;ll want to install the Positron extension, and then set up your configuration.Configurations can usually be specified at three different levels:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eUser\u003c/strong\u003e: Your system-wide setup which is how you want things to work in general across projects.User config files are generally stored somewhere in your home directory.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eProject\u003c/strong\u003e: Project-wide setup which overrides your user setup if the project does things differently.These config files are stored in the project directly (like \u003ccode\u003eroweb3\u003c/code\u003e, for the rOpenSci blog).\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eFile\u003c/strong\u003e: File or file section setup which works at a very local scale.Usually this configuration is indicated by in-file comments.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eMore specifically here are (some) of the locations/names for configuration files and links to their documentation sections for more details.\u003c/p\u003e\u003c!-- panache-ignore-format-start --\u003e\u003ctable\u003e\t\u003cthead\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003cth\u003eLevel\u003c/th\u003e\t\t\t\t\t\u003cth\u003ecSpell\u003c/th\u003e\t\t\t\t\t\u003cth\u003eVale\u003c/th\u003e\t\t\t\t\t\u003cth\u003ePanache\u003c/th\u003e\t\t\t\u003c/tr\u003e\t\u003c/thead\u003e\t\u003ctbody\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eUser\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://streetsidesoftware.com/vscode-spell-checker/#vs-code-configuration-settings\"\u003ePositron settings\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://docs.vale.sh/topics/.vale.ini#search-process\"\u003e\u003ccode\u003e.vale.ini\u003c/code\u003e in any parent dir. or global config\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://panache.bz/guide/configuration.html\"\u003e\u003ccode\u003e~/.config/panache/config.toml\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eProject\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"(https://cspell.org/docs/Configuration)\"\u003e\u003ccode\u003e.cspell.json\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"docs.vale.sh/topics/.vale.ini#creating-a-valeini-file\"\u003e\u003ccode\u003e.vale.ini\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://panache.bz/guide/configuration.html\"\u003e\u003ccode\u003e.panache.toml\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eFile\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://cspell.org/docs/Configuration/document-settings\"\u003eInline Comments\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://docs.vale.sh/formats/html\"\u003eInline Comments\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://panache.bz/getting-started.html#ignore-directives\"\u003eInline Comments\u003c/a\u003e\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\u003c/tbody\u003e\u003c/table\u003e\u003c!-- panache-ignore-format-end --\u003e\u003cp\u003eThis means you can have different rules for different projects, and override them as needed.In the following examples, I\u0026rsquo;ll show you how I do this for posts on the rOpenSci blog.\u003c/p\u003e\u003ch3 id=\"code-spell-checker-cspell\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#code-spell-checker-cspell\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCode Spell Checker (cSpell)\u003c/h3\u003e\u003cp\u003eFirst is my spell checker, which probably doesn\u0026rsquo;t need much explanation.However, it\u0026rsquo;s nice to use a spell checker which also works on code.I use the \u003ca href=\"https://github.com/streetsidesoftware/vscode-spell-checker\"\u003eCode Spell Checker (cSpell)\u003c/a\u003e extension by Street Side Software and installed the languages extensions individually:\u003c/p\u003e\u003cul\u003e\u003cli\u003eCanadian English\u003csup id=\"fnref:4\"\u003e\u003ca href=\"#fn:4\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e4\u003c/a\u003e\u003c/sup\u003e - Code Spell Checker\u003c/li\u003e\u003cli\u003eFrench - Code Spell Checker\u003c/li\u003e\u003cli\u003ePortuguese - Code Spell Checker\u003c/li\u003e\u003cli\u003eSpanish - Code Spell Checker\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAlternatively, you could also install the \u003ca href=\"https://github.com/streetsidesoftware/vscode-cspell-dict-extensions#readme\"\u003e\u003ccode\u003ecSpell Bundled Dictionaries\u003c/code\u003e\u003c/a\u003e instead.\u003c/p\u003e\u003cp\u003eTo configure this extension, I added two types of files: a project-level configuration file, and two dictionaries of words to consider \u0026lsquo;correct\u0026rsquo;.\u003c/p\u003e\u003cp\u003eThe project level configuration file, \u003ca href=\"https://github.com/ropensci/roweb3/blob/5af882c6c3794048391543ced8a10bad39371f72/.cspell.json\"\u003e\u003ccode\u003e.cspell.json\u003c/code\u003e\u003c/a\u003e, lists languages to use for different files (to ensure \u003ccode\u003eindex.es.md\u003c/code\u003e files go through the Spanish spellchecker, while \u003ccode\u003eindex.pt.md\u003c/code\u003e files go through the Portuguese spellchecker, etc.).It also includes a list of globs for file paths we can ignore (I\u0026rsquo;m really not interested in spelling mistakes in the .git folder), as well as pointing to dictionaries.\u003c/p\u003e\u003cp\u003eThese dictionaries are initially created by functions from my \u003ca href=\"https://docs.ropensci.org/promoutils\"\u003epromoutils\u003c/a\u003e package, an R package for all my rOpenSci community workflows.\u003ccode\u003ewordlist_create()\u003c/code\u003e creates a wordlist based on rOpenSci packages and author names, so they don\u0026rsquo;t trigger the spell check if they aren\u0026rsquo;t recognized.\u003ccode\u003ewordlist_update()\u003c/code\u003e updates this list with new names as needed.\u003c/p\u003e\u003cp\u003eWe keep these dictionaries in a \u003ca href=\"hhttps://github.com/ropensci/roweb3/tree/5af882c6c3794048391543ced8a10bad39371f72/.wordlists\"\u003e\u003ccode\u003e.wordlists\u003c/code\u003e\u003c/a\u003e folder.Names are stored in the \u003ccode\u003e.wordlists/names.txt\u003c/code\u003e file, and we also have a \u003ccode\u003e.wordlists/words.txt\u003c/code\u003e file which stores words which are considered correct in the rOpenSci context (like \u0026lsquo;usecases\u0026rsquo;).\u003c/p\u003e\u003cp\u003eI should also note that I have a personal list of user words stored in my Positron user settings which lists words (like my name!)which I want to be considered correct across all projects.\u003c/p\u003e\u003cp\u003eWhen writing posts, we can also override the language settings within a post using a special comment.For example if we want to use \u003ca href=\"https://github.com/ropensci/roweb3/blob/98a419ebb3efc5dcecc35b05265e83e6baa4f32a/content/blog/2026-06-02-ftc-guide/index.en.md?plain=1#L44\"\u003eEnglish and Portuguese for a post\u003c/a\u003e we could add \u003ccode\u003e\u0026lt;--- cSpell: language en,pt--\u0026gt;\u003c/code\u003e to the document.\u003c/p\u003e\u003cp\u003eWe can also include post-specific words to ignore, which is handy for acronyms.For example, if we wanted to \u003ca href=\"https://github.com/ropensci/roweb3/blob/98a419ebb3efc5dcecc35b05265e83e6baa4f32a/content/blog/2026-06-02-ftc-guide/index.en.md?plain=1#L76\"\u003eignore the acronym \u003ccode\u003eCSCW\u003c/code\u003e\u003c/a\u003e we could use \u003ccode\u003e\u0026lt;!--- cSpell: ignore CSCW ---\u0026gt;\u003c/code\u003e at the top of a post.\u003c/p\u003e\u003cp\u003eSpell check issues pop up as a warning in my text window, or as a list under \u0026ldquo;Spell Checker Issues By File\u0026rdquo; my lower window pane so I can review them, add them to word lists, or just mentally ignore them.\u003c/p\u003e\u003ch3 id=\"vale\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#vale\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eVale\u003c/h3\u003e\u003cp\u003eFor linting text (checking the \u003cem\u003estyle\u003c/em\u003e and \u003cem\u003emeaning\u003c/em\u003e of the words) I use the \u003ca href=\"https://github.com/chrischinchilla/vale-vscode\"\u003eVale VSCode\u003c/a\u003e extension by chrischinchilla\u003csup id=\"fnref:5\"\u003e\u003ca href=\"#fn:5\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e5\u003c/a\u003e\u003c/sup\u003e.Vale helps me check that the \u003ca href=\"https://blogguide.ropensci.org/authortechnical.html#styleguide\"\u003eBlog Style\u003c/a\u003e rules are respected, and gives suggestions for alternative word choices to avoid common mistakes (such as words or expressions which might be derogatory).\u003c/p\u003e\u003cp\u003eTo setup Vale I created a project-specific Vale configuration file \u003ca href=\"https://github.com/ropensci/roweb3/blob/5af882c6c3794048391543ced8a10bad39371f72/.vale.ini\"\u003e\u003ccode\u003e.vale.ini\u003c/code\u003e\u003c/a\u003e\u003csup id=\"fnref:6\"\u003e\u003ca href=\"#fn:6\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e6\u003c/a\u003e\u003c/sup\u003e in the roweb3 repository.I keep my personal \u003ccode\u003e.vale.ini\u003c/code\u003e file in a higher level folder that holds all my R projects.In addition to the Vale configuration file, I also created a Vale styles folder in \u003ca href=\"https://github.com/ropensci/roweb3/tree/5af882c6c3794048391543ced8a10bad39371f72/.vale-styles\"\u003e\u003ccode\u003eroweb3/.vale-styles\u003c/code\u003e\u003c/a\u003e.This is where Vale rules are installed if we use predefined rules, and where I can put rOpenSci-specific rules for the blog.The first time you use Vale you\u0026rsquo;ll want to run \u003ccode\u003evale sync\u003c/code\u003e in the terminal to install the standard, non-custom, rules.I \u003ccode\u003e.gitignore\u003c/code\u003e all rules which are installed, but track and push custom rules.\u003c/p\u003e\u003cp\u003eVale is where I\u0026rsquo;ve made the most customizations, especially with the rOpenSci Blog.\u003c/p\u003e\u003c!-- TODO: Add links to the configuration file for these items --\u003e\u003cul\u003e\u003cli\u003eI\u0026rsquo;ve added a \u003ca href=\"https://github.com/ropensci/roweb3/blob/5af882c6c3794048391543ced8a10bad39371f72/.vale-styles/config/vocabularies/Blog/accept.txt\"\u003especific Blog vocab list\u003c/a\u003e to ensure proper capitalization of rOpenSci projects and (not to mention \u0026ldquo;rOpenSci\u0026rdquo; 😉)\u003c/li\u003e\u003cli\u003eI\u0026rsquo;ve \u003ca href=\"https://github.com/ropensci/roweb3/blob/4d7e22b1487a589b3e639109aa5fdc320acf21ff/.vale.ini#L18\"\u003eturned off a lot of specific rules\u003c/a\u003e which are a bit too aggressive for a blog which allows people to write casually and informally as they like (including using words like \u0026ldquo;very\u0026rdquo; 😄).\u003c/li\u003e\u003cli\u003eI\u0026rsquo;ve created custom rules to modify existing rules \u003csup id=\"fnref:7\"\u003e\u003ca href=\"#fn:7\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e7\u003c/a\u003e\u003c/sup\u003e\u003c/li\u003e\u003cli\u003eI\u0026rsquo;ve created custom rules to enforce our style guide, like using \u003ca href=\"https://github.com/ropensci/roweb3/blob/main/.vale-styles/rOpenSci/title.yml\"\u003eTitle Case\u003c/a\u003e for blog post titles\u003csup id=\"fnref:8\"\u003e\u003ca href=\"#fn:8\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e8\u003c/a\u003e\u003c/sup\u003e, sentence case for subheadings, and using \u003ca href=\"https://github.com/ropensci/roweb3/blob/main/.vale-styles/rOpenSci/ropensci_links.yml\"\u003erelative links\u003c/a\u003e for ropensci.org pages.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThis is just the start!I imagine the more I use these rules the more fine tuning I\u0026rsquo;ll do.\u003c/p\u003e\u003cp\u003eVale problems are classified as messages, warnings, or errors, and are highlighted in the text window as a quick fix and listed in the Problems pane in my lower window.\u003c/p\u003e\u003cp\u003eI should also note that for all the rules I\u0026rsquo;ve disabled, there are a lot of opinionated rules left.We keep them as prompts to think about our writing, not because we \u003cem\u003emust\u003c/em\u003e follow them!\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2026/07/02/editor-tools/there_is.png\"\t\t\talt=\"Vale\u0026rsquo;s write-good rule doesn\u0026rsquo;t want me to start a sentence with \u0026lsquo;There is\u0026rsquo;, but I\u0026rsquo;m going to anyway!\" width=\"500\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eVale\u0026rsquo;s write-good rule doesn\u0026rsquo;t want me to start a sentence with \u0026lsquo;There is\u0026rsquo;, but I\u0026rsquo;m going to anyway!\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch3 id=\"panache\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#panache\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePanache\u003c/h3\u003e\u003cp\u003eFor formatting text, I use the \u003ca href=\"https://github.com/jolars/panache\"\u003ePanache\u003c/a\u003e extension by jolars to format the (R)markdown files for the blog.This is probably the smallest amount of setup, as all we need is a minimal \u003ca href=\"https://github.com/ropensci/roweb3/blob/5af882c6c3794048391543ced8a10bad39371f72/.panache.toml\"\u003e\u003ccode\u003e.panache.toml\u003c/code\u003e\u003c/a\u003e configuration file in the roweb3 repository.However, this file instructs Panache to do one super awesome thing for us, especially for translations of multilingual blog posts:\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e[format]wrap = \u0026#34;sentence\u0026#34;\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIf you set up Positron to format on save, Panache automatically wraps text by sentence every time you save the file.This means that when a blog post is sent for a first pass translation using \u003ca href=\"https://docs.ropensci.org/babeldown/\"\u003ebabeldown\u003c/a\u003e, the translation comes back pretty good.Alternatively, if the line breaks are in the middle of a sentence, the translation can become garbled as lines are treated as disjointed sections of text.\u003c/p\u003e\u003cp\u003eFor my other work, I use \u003ccode\u003ewrap = \u0026quot;reflow\u0026quot;\u003c/code\u003e, set in my user configuration file in \u003ccode\u003e~/.config/panache/config.toml\u003c/code\u003e.\u003c/p\u003e\u003ch3 id=\"github-pull-requests\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#github-pull-requests\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGitHub Pull Requests\u003c/h3\u003e\u003cp\u003eFinally, once I\u0026rsquo;ve got all the fiddly edits on a post\u0026rsquo;s (R)md file ready to go, I use the \u003ca href=\"https://github.com/Microsoft/vscode-pull-request-github\"\u003eGitHub Pull Requests\u003c/a\u003e extension to convert these edits to GitHub PR review suggestions.This is really handy if you find yourself making many small suggested changes to GitHub PRs.\u003c/p\u003e\u003cp\u003eTo review blog posts, I fetch the PR with \u003ccode\u003eusethis::pr_fetch()\u003c/code\u003e, and then open the blog post (R)md file in Positron side by side with the html preview of the post in my web browser.\u003c/p\u003e\u003cp\u003eThen I review the html preview and make the edits directly in the (R)md file.When I\u0026rsquo;m done, I right click on the edited file name in the Source Control \u0026gt; Changes and select Create Pull Request Suggestions.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2026/07/02/editor-tools/suggestions.png\" width=\"500\"\u003e\u003c/figure\u003e\u003cp\u003eThis converts my edits to GitHub PR review suggestions which I can then review in Positron, or as I prefer, in a web browser (and fix weird ones, such as suggestions which delete part of a section in one edit but add it back in the next; it\u0026rsquo;s not always a perfect process).Once all the suggestions are converted, the extension asks me if I want to revert my changes (which I usually do).\u003c/p\u003e\u003cp\u003eA note of caution, I find this tool a bit confusing to use on a PR that has a lot of comments already.The comments it makes are sometimes hidden or split in odd ways and it\u0026rsquo;s easy to accidentally create duplicates.In these situations it\u0026rsquo;s sometimes easier just to make the suggestions in a browser as you might normally.\u003c/p\u003e\u003ch2 id=\"why-so-many-tools\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-so-many-tools\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy so many tools?\u003c/h2\u003e\u003cp\u003eEach of these tools provides me a specific solution to a problem.There is some overlap among them; Vale could do spell checks, and Panache could do linting.However, I find that by using the tools separately I can achieve an especially detailed and customized setup that works really well with the rOpenSci blog in particular, and with my work in general.\u003c/p\u003e\u003cp\u003eBy including the configuration files in the roweb3 repository, people who also use these tools will automatically use the configurations we\u0026rsquo;ve setup for the rOpenSci blog when they write a post.We also plan to add instructions for how to use these tools to the \u003ca href=\"https://blogguide.ropensci.org/\"\u003eBlog Guide\u003c/a\u003e.This should give blog writers the option of using these tools if they would like to.\u003c/p\u003e\u003cp\u003eHowever, even if other writers don\u0026rsquo;t use these tools, it\u0026rsquo;s still very useful for me to see a list of potential problems to double check at the end of my review without having to remember to check for them manually.It means I can focus more on the review of the content rather than worry about whether it\u0026rsquo;s Ropensci or rOpenSci 😄\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eDon\u0026rsquo;t judge \u003cem\u003ethis\u003c/em\u003e post by these ideals, I said I\u0026rsquo;m a opinionated \u003cem\u003eeditor\u003c/em\u003e, writing is completely different 😉.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eIt\u0026rsquo;s \u003cstrong\u003erO\u003c/strong\u003epen\u003cstrong\u003eS\u003c/strong\u003eci.Not Ropensci, not RopenSci and not ropenSci.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003e\u0026ldquo;Linting\u0026rdquo; with respect to text or prose means checking the \u003cem\u003estyle\u003c/em\u003e and \u003cem\u003emeaning\u003c/em\u003e of the words.\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:4\"\u003e\u003cp\u003eI\u0026rsquo;m Canadian so generally follow Canadian spelling (a mix of British and American for those of you new to the complex world of English spelling differences).At rOpenSci, we generally just ask an author to pick one and stick to it.\u0026#160;\u003ca href=\"#fnref:4\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:5\"\u003e\u003cp\u003eThere is also \u003ca href=\"https://github.com/vale-cli/vale-vscode\"\u003eVale\u003c/a\u003e by errata-ai, but this extension has been \u003ca href=\"https://github.com/vale-cli/vale-vscode#vale--vs-code\"\u003edeprecated\u003c/a\u003e in favour of Vale VSCode.\u0026#160;\u003ca href=\"#fnref:5\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:6\"\u003e\u003cp\u003eIf you get an error on startup, you may need to tell Vale where this is explicitly by modifying Projects\u0026rsquo; settings.json file to include \u003ccode\u003e\u0026quot;vale.valeCLI.config\u0026quot;: \u0026quot;.vale.ini\u0026quot;\u003c/code\u003e\u0026#160;\u003ca href=\"#fnref:6\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:7\"\u003e\u003cp\u003eFor example, \u003ca href=\"https://github.com/get-alex/alex\"\u003e\u003ccode\u003ealex\u003c/code\u003e\u003c/a\u003e worries that the word \u0026ldquo;Mexican\u0026rdquo; might be used in a racist manner, but at rOpenSci, it\u0026rsquo;s stated with pride and I don\u0026rsquo;t want Vale to flag our community members for mentioning their nationality 😅\u0026#160;\u003ca href=\"#fnref:7\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:8\"\u003e\u003cp\u003eBut awesomely, we can enforce this rule for English, but not Spanish posts!\u0026#160;\u003ca href=\"#fnref:8\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2026/07/02/editor-tools/","date_published":"2026-07-02T00:00:00+00:00","date_modified":"2026-07-02T14:38:16+02:00"},{"id":"https://doi.org/10.59350/312sy-1dt83","title":"rOpenSci News Digest, June 2026","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2026/06/30/news-june-2026\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"champions-program-update\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#champions-program-update\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChampions Program update\u003c/h3\u003e\u003cp\u003eWe have two concurrent cohorts, both in Spanish.\u003c/p\u003e\u003cp\u003eThe 2025\u0026ndash;2026 cohort is nearing the end of its participation in the program, so we are organizing the closing meeting and the overall evaluation.\u003c/p\u003e\u003cp\u003eThe 2026\u0026ndash;2027 cohort is continuing their training activities, meeting with their mentors, and starting to work on their packages, and they have been formally introduced on our blog! Read all about the \u003ca href=\"/blog/2026/06/09/champions-2026/\"\u003e11 new Champions\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-editors-ronny-hernandez-mora-joel-nitta-and-nick-tierney\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-editors-ronny-hernandez-mora-joel-nitta-and-nick-tierney\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew editors Ronny Hernandez Mora, Joel Nitta, and Nick Tierney\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;re thrilled to \u003ca href=\"/blog/2026/06/11/neweditorsq22026/\"\u003eintroduce\u003c/a\u003e new editors Ronny Hernandez Mora, Joel Nitta, and Nick Tierney. An official welcome and thank you to all three!\u003c/p\u003e\u003ch3 id=\"a-new-guide-organizing-events-for-first-time-contributors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-new-guide-organizing-events-for-first-time-contributors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA new guide: Organizing Events for First-time Contributors\u003c/h3\u003e\u003cp\u003eSteffi LaZerte and Yanina Bellini Saibene released a fantastic new rOpenSci guide! Learn how to organize events for first-time contributors such as mini-hackathons and mini-translathons. Read more in the \u003ca href=\"/blog/2026/06/02/ftc-guide/\"\u003erelease announcement\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"r-universe-updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-Universe updates\u003c/h3\u003e\u003cp\u003e\u0026ldquo;Five recent R-Universe features you might have missed\u0026rdquo;: A clickbait title for a blog post you don\u0026rsquo;t want to miss! \u0026#x1f609; Jeroen Ooms \u003ca href=\"/blog/2026/06/07/r-universe-updates/\"\u003edescribes five recent additions\u003c/a\u003e to the R-Universe platform:\u003c/p\u003e\u003cul\u003e\u003cli\u003eSocial media cards that actually look good\u003c/li\u003e\u003cli\u003ePACKAGES.rds support (or: implementing R internals in JavaScript)\u003c/li\u003e\u003cli\u003eFancy sort/filter bars in the WebUI\u003c/li\u003e\u003cli\u003eFor the impatient: trigger a sync manually\u003c/li\u003e\u003cli\u003eMaking check results easier to find and share\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIn other news, R-universe user Tom Palmer also wrote about five things: \u003ca href=\"https://remlapmot.github.io/post/2026/runiverse-tips/\"\u003e\u0026ldquo;Five tips for managing your R-universe 🚀\u0026rdquo;\u003c/a\u003e. You won\u0026rsquo;t believe the fifth one. \u0026#x1f609;\u003c/p\u003e\u003ch3 id=\"yanina-joins-the-2026-sovereign-tech-fellowship\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#yanina-joins-the-2026-sovereign-tech-fellowship\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eYanina Joins the 2026 Sovereign Tech Fellowship\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;re excited to share that our Community Manager, Yanina Bellini Saibene, \u003ca href=\"https://www.sovereign.tech/news/meet-the-2026-sovereign-tech-fellows\"\u003ehas been selected as a 2026 Sovereign Tech Fellow\u003c/a\u003e. During the fellowship, she will focus on making open source more accessible through improved contribution guidance, newcomer-focused mini-hackathons, multilingual training resources, and more sustainable localization practices across communities in the R ecosystem. These efforts will build on and extend rOpenSci\u0026rsquo;s work in community building, mentorship, and open science.\u003c/p\u003e\u003ch3 id=\"quinceañera-celebrating-15-years-together\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#quincea%c3%b1era-celebrating-15-years-together\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003cem\u003eQuinceañera\u003c/em\u003e: celebrating 15 years together\u003c/h3\u003e\u003cp\u003eIn June, we held two community events and a co-working session to mark rOpenSci\u0026rsquo;s 15th anniversary. Across all three sessions, people shared memories of their first contribution, discussed ideas for the next 15 years, and reminded us of how genuinely welcoming rOpenSci \u003cem\u003eand\u003c/em\u003e it\u0026rsquo;s community are. There\u0026rsquo;s more to come :-) Keep an eye out for what we have planned for the rest of the year.\u003c/p\u003e\u003ch3 id=\"software-peer-review-updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review-updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer-Review updates\u003c/h3\u003e\u003cp\u003eCommunity member \u003ca href=\"/author/athanasia-mo-mowinckel/\"\u003eAthanasia Mo Mowinckel\u003c/a\u003e has started a new AI agent \u0026ldquo;skills\u0026rdquo; repo at \u003ca href=\"https://github.com/ropensci-review-tools/ropensci-skills\"\u003e\u003ccode\u003eropensci-review-tools/ropensci-skills\u003c/code\u003e\u003c/a\u003e. The repo holds a variety of \u0026ldquo;skills\u0026rdquo;, which are human-readable markdown files, for AI agents to assist in preparing software for peer-review. Anybody thinking about using AI systems to prepare software for peer-review is encouraged to try out these experimental skills, and to help us improve them for others by opening issues or pull requests in \u003ca href=\"https://github.com/ropensci-review-tools/ropensci-skills\"\u003ethe GitHub repo\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eOur recent updates to the \u003ca href=\"/blog/2026/06/01/goodpractice/\"\u003egoodpractice package\u003c/a\u003e have also been enhanced with an all-new AI \u0026ldquo;skill\u0026rdquo;. \u003ca href=\"https://github.com/ropensci-review-tools/goodpractice/blob/main/inst/skills/goodpractice4agents.md\"\u003eThis skill\u003c/a\u003e instructs agents to edit and improve your package\u0026rsquo;s code to comply with the full suite of goodpractice checks. You can try it out with the package\u0026rsquo;s new \u003ca href=\"https://docs.ropensci.org/goodpractice/reference/use_skill_gp.html\"\u003e\u003ccode\u003euse_skill_gp()\u003c/code\u003e function\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday July 7nd 2026, 09:00 Americas Pacific (16:00 UTC) \u003ca href=\"/events/coworking-2026-07/\"\u003e\u0026ldquo;Debugging in R\u0026rdquo;\u003c/a\u003e, with \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e and cohost \u003ca href=\"/author/shannon-pileggi\"\u003eShannon Pileggi\u003c/a\u003e.\u003cul\u003e\u003cli\u003eRead up on debugging in R.\u003c/li\u003e\u003cli\u003eMeet community host, Shannon Pileggi, and discuss tips and tricks for debugging in R.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday August 4th, 09:00 Australia Western (01:00 UTC) \u003ca href=\"/events/coworking-2026-08/\"\u003e\u0026ldquo;Vale and Text Linting\u0026rdquo;\u003c/a\u003e, with \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/jonathan-carroll/\"\u003eJonathan Carroll\u003c/a\u003e.\u003cul\u003e\u003cli\u003eRead up on text linting.\u003c/li\u003e\u003cli\u003eSetup a linting framework for your projects.\u003c/li\u003e\u003cli\u003eMeet co-host, Jonathan Carroll, and discuss Vale and text linting.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday September 1st, 14:00 Europe Central (12:00 UTC) \u003ca href=\"/events/coworking-2026-09/\"\u003e\u0026ldquo;Getting to Know SORTEE\u0026rdquo;\u003c/a\u003e, with \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/ed-ivimey-cook/\"\u003eEd Ivimey-Cook\u003c/a\u003e.\u003cul\u003e\u003cli\u003eVisit \u003ca href=\"https://sortee.org/\"\u003eSORTEE\u003c/a\u003e (Society for Open, Reliable, and Transparent Ecology and Evolutionary Biology).\u003c/li\u003e\u003cli\u003eMeet co-host, Ed Ivimey-Cook, and learn more about SORTEE and how you might get involved.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003cp\u003eThe following two packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/pvEBayes\"\u003epvEBayes\u003c/a\u003e, developed by Yihao Tan together with Marianthi Markatou, Saptarshi Chakraborty, and Raktim Mukhopadhyay: A suite of empirical Bayes methods to use in pharmacovigilance. Contains various model fitting and post-processing functions. For more details see Tan et al. (2025) \u003ca href=\"https://doi.org/10.1002/sim.70195\"\u003ehttps://doi.org/10.1002/sim.70195\u003c/a\u003e, \u003ca href=\"https://doi.org/10.48550/arXiv.2512.01057\"\u003ehttps://doi.org/10.48550/arXiv.2512.01057\u003c/a\u003e; Koenker and Mizera (2014) \u003ca href=\"https://doi.org/10.1080/01621459.2013.869224\"\u003ehttps://doi.org/10.1080/01621459.2013.869224\u003c/a\u003e; Efron (2016) \u003ca href=\"https://doi.org/10.1093/biomet/asv068\"\u003ehttps://doi.org/10.1093/biomet/asv068\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/760\"\u003ereviewed\u003c/a\u003e by Kathryn Doering and Collin Cademartori.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/nycOpenData\"\u003enycOpenData\u003c/a\u003e, developed by Christian Martinez: Provides a unified set of helper functions to access datasets from the NYC Open Data platform \u003ca href=\"https://opendata.cityofnewyork.us/\"\u003ehttps://opendata.cityofnewyork.us/\u003c/a\u003e. Functions return results as tidy tibbles and support optional filtering, sorting, and row limits via the Socrata API. The package includes endpoints for 311 service requests, DOB job applications, juvenile justice metrics, school safety, environmental data, event permitting, and additional citywide datasets. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/750\"\u003ereviewed\u003c/a\u003e by Haolin Dong and Michael Pascale.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following seventeen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/weathercan\" title=\"Download Weather Data from Environment and Climate Change Canada\"\u003eweathercan\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weathercan/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/occCite\" title=\"Querying and Managing Large Biodiversity Occurrence Datasets\"\u003eoccCite\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/occCite/releases/tag/v0.6.2\"\u003e\u003ccode\u003ev0.6.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lightr\" title=\"Read Spectrometric Data and Metadata\"\u003elightr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lightr/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gutenbergr\" title=\"Download and Process Public Domain Works from Project Gutenberg\"\u003egutenbergr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gutenbergr/releases/tag/v0.5.2\"\u003e\u003ccode\u003ev0.5.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/slopes\" title=\"Calculate Slopes of Roads, Rivers and Trajectories\"\u003eslopes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/slopes/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/qualtRics\" title=\"Download Qualtrics Survey Data\"\u003equaltRics\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/qualtRics/releases/tag/v3.3.0\"\u003e\u003ccode\u003ev3.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/srr\" title=\"rOpenSci Software Review Roclets\"\u003esrr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/srr/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/goodpractice\" title=\"Advice on R Package Building\"\u003egoodpractice\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/goodpractice/releases/tag/v1.1\"\u003e\u003ccode\u003ev1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pkgmatch\" title=\"Find R Packages Matching Either Descriptions or Other R Packages\"\u003epkgmatch\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/pkgmatch/releases/tag/v0.5.4\"\u003e\u003ccode\u003ev0.5.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pkgstats\" title=\"Metrics of R Packages\"\u003epkgstats\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/pkgstats/releases/tag/v0.2.3\"\u003e\u003ccode\u003ev0.2.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (CFF) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v1.4.1\"\u003e\u003ccode\u003ev1.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dfms\" title=\"Dynamic Factor Models\"\u003edfms\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dfms/releases/tag/v1.0.1\"\u003e\u003ccode\u003ev1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmdata\" title=\"Import OpenStreetMap Data as Simple Features or Spatial Objects\"\u003eosmdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmdata/releases/tag/v0.4.0\"\u003e\u003ccode\u003ev0.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/aRxiv\" title=\"Interface to the arXiv API\"\u003eaRxiv\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/aRxiv/releases/tag/0.20\"\u003e\u003ccode\u003e0.20\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/Athlytics\" title=\"A Reproducible Framework for Endurance Data Analysis\"\u003eAthlytics\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/Athlytics/releases/tag/v1.0.6\"\u003e\u003ccode\u003ev1.0.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ReLTER\" title=\"An Interface for the eLTER Community\"\u003eReLTER\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ReLTER/releases/tag/3.1.1\"\u003e\u003ccode\u003e3.1.1\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/read.abares\" title=\"Read Australian Agricultural Data from Government Agencies\"\u003eread.abares\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/read.abares/releases/tag/v3.0.0\"\u003e\u003ccode\u003ev3.0.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eThe writexl package has a \u003ca href=\"https://github.com/ropensci/writexl/pull/98#issuecomment-4191858158\"\u003enew maintainer\u003c/a\u003e, Bill Denney. NLMR is now maintained by \u003ca href=\"https://github.com/ropensci/NLMR/issues/116#issuecomment-4280937012\"\u003eJakub Nowosad\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are eighteen recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/760\"\u003epvEBayes\u003c/a\u003e, Empirical Bayes Methods for Pharmacovigilance. Submitted by \u003ca href=\"https://github.com/YihaoTancn\"\u003eYihao Tan\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/750\"\u003enycOpenData\u003c/a\u003e, Convenient Access to NYC Open Data API Endpoints. Submitted by \u003ca href=\"https://github.com/martinezc1\"\u003eChristian Martinez\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/730\"\u003eernest\u003c/a\u003e, A Toolkit for Nested Sampling. Submitted by \u003ca href=\"https://github.com/kylesnap\"\u003eKyle Dewsnap\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%225/awaiting-reviewer(s)-response%22\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/762\"\u003elakefetch\u003c/a\u003e, Calculate Fetch and Wave Exposure for Lake Sampling Points. Submitted by \u003ca href=\"https://github.com/jeremylfarrell\"\u003ejeremylfarrell\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/704\"\u003epriorsense\u003c/a\u003e, Prior Diagnostics and Sensitivity Analysis. Submitted by \u003ca href=\"https://github.com/n-kall\"\u003eNoa Kallioinen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/744\"\u003eRAQSAPI\u003c/a\u003e, A Simple Interface to the US EPA Air Quality System Data Mart API. Submitted by \u003ca href=\"https://github.com/mccroweyclinton-EPA\"\u003emccroweyclinton-EPA\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/743\"\u003eRAMEN\u003c/a\u003e, RAMEN: Regional Association of Methylome variability with the Exposome and geNome. Submitted by \u003ca href=\"https://erick-navarrodelgado.netlify.app\"\u003eErick Navarro-Delgado\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/741\"\u003elogolink\u003c/a\u003e, An Interface for Running NetLogo Simulations. Submitted by \u003ca href=\"https://danielvartan.com\"\u003eDaniel Vartanian\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/718\"\u003ercrisp\u003c/a\u003e, Automate the Delineation of Urban River Spaces. Submitted by \u003ca href=\"https://github.com/cforgaci\"\u003eClaudiu Forgaci\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.no\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/765\"\u003eciecl\u003c/a\u003e, International Classification of Diseases ICD-10/ICD-11 for Chile. Submitted by \u003ca href=\"https://github.com/Rodotasso\"\u003eRodolfo Tasso\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/763\"\u003eEpiStrainDynamics\u003c/a\u003e, Infer temporal trends of multiple pathogens. Submitted by \u003ca href=\"https://www.smwindecker.com\"\u003eSaras Windecker\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%222/seeking-reviewer(s)%22\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/740\"\u003efcmconfr\u003c/a\u003e, Fuzzy Cognitive Map Analysis in R. Submitted by \u003ca href=\"https://github.com/bhroston\"\u003ebenroston\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/717\"\u003ecoevolve\u003c/a\u003e, Fit Bayesian Generalized Dynamic Phylogenetic Models using Stan. Submitted by \u003ca href=\"https://scottclaessens.github.io/\"\u003eScott Claessens\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/775\"\u003egrumpy\u003c/a\u003e, Read NumPy .npy and .npz Files. Submitted by \u003ca href=\"https://hugogruson.fr/\"\u003eHugo Gruson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/752\"\u003emetasurvey\u003c/a\u003e, Reproducible Survey Data Processing with Step Pipelines. Submitted by \u003ca href=\"https://github.com/mauroloprete\"\u003eMauro Loprete\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/725\"\u003eLBDiscoverAnalysis\u003c/a\u003e, Co-occurrence Discovery Models and Visualization for Biomedical LBD. Submitted by \u003ca href=\"https://github.com/chaoliu-cl\"\u003eChao Liu\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/06/11/neweditorsQ22026\"\u003eRonny Hernandez Mora, Joel Nitta, and Nick Tierney Join rOpenSci Software Peer Review Editorial Team\u003c/a\u003e by Ronny Hernandez Mora, Joel Nitta, Nicholas Tierney, and Yanina Bellini Saibene. Introducing three new editors for rOpenSci software peer review.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/06/19/maintainers-month\"\u003eCelebrating Our Maintainers during Maintainers Month\u003c/a\u003e by Yanina Bellini Saibene. A Look Back at our Maintainer Month 2026 social media campaign.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/06/01/goodpractice\"\u003eOur goodpractice Package Has New Superpowers\u003c/a\u003e by Mark Padgham and Athanasia Mo Mowinckel. We have worked hard over the past few months on major upgrades to our goodpractice package. Checks are now grouped into categories, making it easier to control which checks are run. The biggest change has been adding over 100 new checks, from new lints to many new CRAN checks.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/06/02/ftc-guide\"\u003eA New Guide: Organizing Events for First-time Contributors\u003c/a\u003e by Steffi LaZerte and Yanina Bellini Saibene. We introduce our Guide book for organizing events to support first-time contributors to FOSS.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/06/07/r-universe-updates\"\u003eFive recent R-universe features you might have missed\u003c/a\u003e by Jeroen Ooms. In this technote we look at a few recent additions that make R-universe a little nicer, faster, or more convenient to use.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/06/09/champions-2026\"\u003eEleven Latin American Voices for Open Science: The New Cohort of Champions rOpenSci 2026\u003c/a\u003e by Bastián Olea Herrera, Denisse Fierro Arcos, Durga Valentina Linares Herrera, Evelia Lorena Coss Navarrete, Gladys Choque Ulloa, José Daniel Conejeros, Linda Cabrera Orellana, María Florencia Tames, Marina Cecilia Cock, Patricia A. Loto, Estefania Torrejón, and Yanina Bellini Saibene. Introducing 11 new rOpenSci Champions. Other languages: \u003ca href='/es/blog/2026/06/09/champions-2026' lang='es'\u003eOnce voces latinoamericanas para la ciencia abierta: la nueva cohorte de Campeon(a|e)s rOpenSci 2026 (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/charlatan\"\u003echarlatan\u003c/a\u003e, create fake data in R. \u003ca href=\"https://github.com/ropensci/charlatan/issues/150\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools\"\u003ehddtools\u003c/a\u003e, Tools to discover hydrological data, accessing catalogues and databases from various data providers. \u003ca href=\"https://github.com/ropensci/hddtools/issues/36\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful information for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"goodpractices-new-features-and-behind-the-scene-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#goodpractices-new-features-and-behind-the-scene-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003egoodpractice\u0026rsquo;s new features and behind-the-scene notes\u003c/h3\u003e\u003cp\u003eSoftware Review Lead Mark Padgham and long-time community member \u003ca href=\"/author/athanasia-mo-mowinckel/\"\u003eAthanasia Mo Mowinckel\u003c/a\u003e have written a blog post particularly relevant to package developers for two reasons:\u003c/p\u003e\u003cul\u003e\u003cli\u003eLearn how goodpractice, which helps make your package better, has improved.\u003c/li\u003e\u003cli\u003eRead how Mark and Mo collaborated, including their use of LLMs in the development process.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"dumb-ways-for-an-open-source-project-to-die\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#dumb-ways-for-an-open-source-project-to-die\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDumb Ways for an Open Source Project to Die\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in open-source software projects\u0026rsquo; survivability, you\u0026rsquo;ll enjoy this \u003ca href=\"https://nesbitt.io/2026/05/19/dumb-ways-for-an-open-source-project-to-die.html\"\u003ewrite-up by Andrew Nesbitt\u003c/a\u003e shared by Yanina Bellini Saibene.\u003c/p\u003e\u003ch3 id=\"refactoring-with-jarl-unused-functions-and-more\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#refactoring-with-jarl-unused-functions-and-more\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRefactoring with Jarl: unused functions and more\u003c/h3\u003e\u003cp\u003eHannah Frick and Maëlle Salmon wrote \u003ca href=\"https://blog.r-hub.io/2026/06/02/jarl/\"\u003e\u0026ldquo;Refactoring with Jarl: a coffee chat\u0026rdquo;\u003c/a\u003e on the R-hub blog.\u003c/p\u003e\u003ch3 id=\"a-strategy-for-recovering-data-on-request-interruption\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-strategy-for-recovering-data-on-request-interruption\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA strategy for recovering data on request interruption\u003c/h3\u003e\u003cp\u003eGábor Csárdi summarized \u003ca href=\"https://gaborcsardi.org/2026/gh-1-6-0-recover-from-interruption/\"\u003erecent changes to the gh package\u003c/a\u003e. Especially interesting is his strategy for \u003ca href=\"https://gaborcsardi.org/2026/gh-1-6-0-recover-from-interruption/#Interrupts\"\u003einterruptions\u003c/a\u003e: the user starts a long query then interrupts the process\u0026hellip; how to not lose the data that\u0026rsquo;s already been received? The solution is to make it accessible through \u003ca href=\"https://rlang.r-lib.org/reference/last_error.html\"\u003e\u003ccode\u003erlang::last_error()\u003c/code\u003e\u003c/a\u003e. More details in the \u003ca href=\"https://gaborcsardi.org/2026/gh-1-6-0-recover-from-interruption/#Interrupts\"\u003epost\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"curl-summer-of-bliss\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#curl-summer-of-bliss\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ecurl summer of bliss\u003c/h3\u003e\u003cp\u003eThe curl project \u003ca href=\"https://daniel.haxx.se/blog/2026/06/15/curl-summer-of-bliss/\"\u003eannounced\u003c/a\u003e that it will not accept any vulnerability report during the month of July this year. This is both the opportunity for maintainers to take a break, and to advertise paid curl support, in which there will be no interruption of service.\u003c/p\u003e\u003ch3 id=\"to-conventionally-commit-or-not\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#to-conventionally-commit-or-not\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTo conventionally commit or not\u003c/h3\u003e\u003cp\u003eSumner Evans wrote an interesting post \u003ca href=\"https://sumnerevans.com/posts/software-engineering/stop-using-conventional-commits/\"\u003ecriticizing the conventional commits convention\u003c/a\u003e (starting commits with e.g. \u003ccode\u003efix:\u003c/code\u003e for bug fixes, \u003ccode\u003efeat:\u003c/code\u003e for new features, etc).\u003c/p\u003e\u003ch3 id=\"more-than-gitignore\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#more-than-gitignore\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMore than .gitignore\u003c/h3\u003e\u003cp\u003eNelson Figueroa wrote a useful \u003ca href=\"https://nelson.cloud/.gitignore-isnt-the-only-way-to-ignore-files-in-git/\"\u003eoverview\u003c/a\u003e of the different ways to make Git ignore some files.\u003c/p\u003e\u003ch3 id=\"how-to-work-with-llms-without-losing-your-skills\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-work-with-llms-without-losing-your-skills\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to work with LLMs without losing your skills\u003c/h3\u003e\u003cp\u003eVicki Boykis wrote an insightful post \u003ca href=\"https://vickiboykis.com/2026/05/28/we-should-be-more-tired-than-the-model/\"\u003e\u0026ldquo;We should be more tired than the model\u0026rdquo;\u003c/a\u003e including pratical tips such as \u0026ldquo;Starting to use the agent only after I\u0026rsquo;ve spent 20 minutes on the problem\u0026rdquo; or \u0026ldquo;Discussing an agent\u0026rsquo;s proposed implementation with another person instead\u0026rdquo;.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e. This guide will help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways such as through sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so though our signup form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us through our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e, \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon\u003c/a\u003e, or \u003ca href=\"https://www.linkedin.com/company/ropensci/\"\u003eLinkedIn\u003c/a\u003e. See you soon!\u003c/p\u003e","url":"https://ropensci.org/blog/2026/06/30/news-june-2026/","date_published":"2026-06-30T00:00:00+00:00","date_modified":"2026-06-30T09:38:01+02:00"},{"id":"https://doi.org/10.59350/8gbzt-c4951","title":"Celebrating Our Maintainers during Maintainers Month","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["Software Peer Review","packages","R","community","maintainers"],"content_html":"\u003cp\u003eMay was Open Source Software Maintainer Month.Behind every R package there is at least one person who responds to issues, reviews pull requests, keeps up with dependency changes, and makes sure everything still works.During Maintainer Month we wanted to celebrate rOpenSci\u0026rsquo;s package maintainer community.\u003c/p\u003e\u003ch2 id=\"the-social-media-campaign\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-social-media-campaign\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe social media campaign\u003c/h2\u003e\u003cp\u003eOne of our commitments to our community is to amplify the people who make it work. Social media is one of the ways we do that, so we thought Maintainer Month would be a great opportunity to highlight the people behind the packages through a social media campaign.\u003c/p\u003e\u003cp\u003eTo run this campaign, we first needed permission from our maintainers to feature them. In our annual maintainer survey, we asked whether they would be interested in being featured in a public spotlight, and many said yes.\u003c/p\u003e\u003cp\u003eWe also reached out to current and past Champions from our Champions Program, which trains and supports R developers from historically underrepresented groups in the open science community.\u003c/p\u003e\u003cp\u003eThe result was a month-long series of spotlights: one maintainer at a time, each card sharing who they are, where they come from, and what they maintain.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/06/19/maintainers-month/examples_post.png\"\t\t\talt=\"First post in Mastodon announcing the maintainer month campaign, Ronald M. Visser and Maëlle Salmon post on LinkedIn\"\u003e\u003c/figure\u003e\u003cp\u003eThis campaign brought together 37 maintainers from 15 countries, maintaining more than 50 packages that together serve thousands of researchers and data practitioners around the world.\u003c/p\u003e\u003cp\u003eThe diversity of this group reflects the diversity of the rOpenSci community: archaeologists, bioinformaticians, ecologists, economists, statisticians, sociologists, professors, PhD students, engineers and educators.\u003c/p\u003e\u003cp\u003eWe created 39 posts on our accounts on LinkedIn and Mastodon, which is bridge to BlueSky. All the posts were shared by other people and organizations and received comments from grateful users.\u003c/p\u003e\u003ch2 id=\"meet-all-37-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#meet-all-37-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMeet all 37 maintainers\u003c/h2\u003e\u003cp\u003eHere is the full list of maintainers we celebrated in May.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/06/19/maintainers-month/Maintainermonth.png\"\t\t\talt=\"All 37 maintainers\u0026#39; profile pictures inside hex geometrics form\"\u003e\u003c/figure\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eAlex Koiter\u003c/strong\u003e 🇨🇦 maintains \u003ca href=\"https://docs.ropensci.org/mbquartR\"\u003e{mbquartR}\u003c/a\u003e, for working with Manitoba\u0026rsquo;s quarter-section land survey system in watershed and land management research.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eAndrea Gomez Vargas\u003c/strong\u003e 🇨🇴🇦🇷 maintains \u003ca href=\"https://soyandrea.github.io/arcenso/\"\u003e{ARcenso}\u003c/a\u003e, for accessing and analyzing Argentina\u0026rsquo;s national census data in R. Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eAustin Koontz\u003c/strong\u003e 🇺🇸 maintains \u003ca href=\"https://docs.ropensci.org/SymbiotaR2\"\u003e{SymbiotaR2}\u003c/a\u003e, an R interface to the Symbiota platform for accessing and managing biodiversity occurrence data from natural history collections.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eBilikisu Wunmi Olatunji\u003c/strong\u003e 🇳🇬 maintains \u003ca href=\"https://github.com/BWOlatunji/chartkickR\"\u003e{chartkickR}\u003c/a\u003e, an R wrapper for the Chartkick JavaScript library that makes it easy to create beautiful interactive charts and visualizations from R. Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eCarolina Pradier\u003c/strong\u003e 🇦🇷🇨🇦 maintains \u003ca href=\"https://docs.ropensci.org/eph\"\u003e{eph}\u003c/a\u003e, for downloading and analyzing microdata from Argentina\u0026rsquo;s Permanent Household Survey, supporting labour and socioeconomic research. Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eDaniel Vartanian\u003c/strong\u003e 🇧🇷 maintains \u003ca href=\"https://docs.ropensci.org/mctq\"\u003e{mctq}\u003c/a\u003e, for processing data from the Munich Chronotype Questionnaire in sleep and chronobiology research.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eErick Navarro Delgado\u003c/strong\u003e 🇨🇦🇲🇽 maintains \u003ca href=\"https://ericknavarrod.github.io/RAMEN/\"\u003e{RAMEN}\u003c/a\u003e, for identifying associations between environmental exposures and molecular outcomes in multi-omics research.Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eErika Siregar\u003c/strong\u003e 🇮🇩🇬🇧 maintains \u003ca href=\"https://erikaris.github.io/rplaywright/\"\u003e{rplaywright}\u003c/a\u003e, an R interface to Microsoft Playwright for browser automation and web testing. Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eEzekiel Adebayo Ogundepo\u003c/strong\u003e 🇳🇬 maintains \u003ca href=\"https://gbganalyst.github.io/bulkreadr/\"\u003e{bulkreadr}\u003c/a\u003e, for simplifying the bulk import of multiple files into R across a range of formats. Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eFrancesca Palmeira\u003c/strong\u003e 🇧🇷 maintains \u003ca href=\"https://fblpalmeira.github.io/pcir/\"\u003e{pcir}\u003c/a\u003e, for modeling species interaction data and food web structures in conservation research. Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eGuadalupe Pascal\u003c/strong\u003e 🇦🇷 maintains \u003ca href=\"https://docs.ropensci.org/matildaNLP\"\u003e{matildaNLP}\u003c/a\u003e, a package with a specialized corpus of Spanish texts from the Matilda initiative to support research on gender-aware language processing and policy. Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eHaydée Svab\u003c/strong\u003e 🇧🇷 maintains \u003ca href=\"https://hsvab.github.io/odbr/\"\u003e{odbr}\u003c/a\u003e, for accessing open data urban mobility from a series of cities in Brazil. Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eJeroen Ooms\u003c/strong\u003e 🇳🇱 maintains \u003ca href=\"https://docs.ropensci.org/magick\"\u003e{magick}\u003c/a\u003e, \u003ca href=\"https://docs.ropensci.org/pdftools\"\u003e{pdftools}\u003c/a\u003e, and \u003ca href=\"https://docs.ropensci.org/gert\"\u003e{gert}\u003c/a\u003e, packages for image processing, PDF manipulation, and Git operations in R.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eJonathan Keane\u003c/strong\u003e maintains \u003ca href=\"https://docs.ropensci.org/dittodb\"\u003e{dittodb}\u003c/a\u003e, which makes testing database-backed code easy by recording and replaying real database interactions so tests can run without a live connection.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eJulia Silge\u003c/strong\u003e 🇺🇸 maintains \u003ca href=\"https://docs.ropensci.org/qualtRics\"\u003e{qualtRics}\u003c/a\u003e, for importing survey data from the Qualtrics platform directly into R.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eKarl Broman\u003c/strong\u003e 🇺🇸 maintains \u003ca href=\"https://docs.ropensci.org/chromer\"\u003e{chromer}\u003c/a\u003e and \u003ca href=\"https://docs.ropensci.org/aRxiv\"\u003e{aRxiv}\u003c/a\u003e, for accessing chromosome data and the arXiv preprint server.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eMaëlle Salmon\u003c/strong\u003e 🇫🇷 maintains \u003ca href=\"https://docs.ropensci.org/saperlipopette\"\u003e{saperlipopette}\u003c/a\u003e, \u003ca href=\"https://docs.ropensci.org/babelquarto\"\u003e{babelquarto}\u003c/a\u003e, and \u003ca href=\"https://docs.ropensci.org/babeldown\"\u003e{babeldown}\u003c/a\u003e, tools for learn how to use git, create multilingual Quarto documents, and support translations workflows.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eMarcelo S. Perlin\u003c/strong\u003e 🇧🇷 maintains \u003ca href=\"https://docs.ropensci.org/yfR\"\u003e{yfR}\u003c/a\u003e, for importing financial data from Yahoo Finance into R.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eMarcos Prunello\u003c/strong\u003e 🇦🇷 maintains \u003ca href=\"https://docs.ropensci.org/karel/\"\u003e{karel}\u003c/a\u003e, a package that brings the Karel the Robot programming environment to R, designed to teach programming concepts and computational thinking to beginners. Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eMark Padgham\u003c/strong\u003e 🇩🇪 maintains \u003ca href=\"https://docs.ropensci.org/pkgcheck\"\u003e{pkgcheck}\u003c/a\u003e, which automates software checks for packages submitted to rOpenSci peer review.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eMauro Loprete\u003c/strong\u003e 🇺🇾 maintains \u003ca href=\"https://metasurveyr.github.io/metasurvey/\"\u003e{metasurvey}\u003c/a\u003e, for processing and analyzing household survey microdata using a metadata-driven approach. Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eMicha Silver\u003c/strong\u003e 🇮🇱 maintains \u003ca href=\"https://docs.ropensci.org/rOPTRAM\"\u003e{rOPTRAM}\u003c/a\u003e, implementing the OPtical TRApezoid Model for estimating soil moisture from satellite imagery.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eMoritz Hennicke\u003c/strong\u003e 🇧🇪 maintains \u003ca href=\"https://docs.ropensci.org/nuts\"\u003e{nuts}\u003c/a\u003e, for working with the EU\u0026rsquo;s Nomenclature of Territorial Units for Statistics, useful in regional economics and policy research.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003ePao Corrales\u003c/strong\u003e 🇦🇷🇦🇺 maintains \u003ca href=\"https://docs.ropensci.org/agroclimatico\"\u003e{agroclimatico}\u003c/a\u003e, for calculating agroclimatic indices and bioclimatic variables for agricultural and environmental research. Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003ePeter Desmet\u003c/strong\u003e 🇧🇪 maintains \u003ca href=\"https://docs.ropensci.org/frictionless\"\u003e{frictionless}\u003c/a\u003e, for working with open data standards and publishing datasets.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003ePhilippe Massicotte\u003c/strong\u003e 🇨🇦 maintains \u003ca href=\"https://docs.ropensci.org/rnaturalearth\"\u003e{rnaturalearth}\u003c/a\u003e, \u003ca href=\"https://docs.ropensci.org/rnaturalearthdata\"\u003e{rnaturalearthdata}\u003c/a\u003e, and \u003ca href=\"https://docs.ropensci.org/gitignore\"\u003e{gitignore}\u003c/a\u003e, for working with natural earth map data and project utilities.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eSam Albers\u003c/strong\u003e 🇨🇦 maintains \u003ca href=\"https://docs.ropensci.org/tidyhydat\"\u003e{tidyhydat}\u003c/a\u003e, for accessing Canadian hydrometric data in a tidy format.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eSteffi Lazerte\u003c/strong\u003e 🇨🇦 maintains \u003ca href=\"https://docs.ropensci.org/weathercan\"\u003e{weathercan}\u003c/a\u003e, for downloading Canadian weather data directly from Environment and Climate Change Canada.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eTad Dallas\u003c/strong\u003e 🇺🇸 maintains \u003ca href=\"https://docs.ropensci.org/helminthR\"\u003e{helminthR}\u003c/a\u003e, for accessing the London Natural History Museum\u0026rsquo;s host-parasite database.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eRonald M. Visser\u003c/strong\u003e 🇳🇱 maintains \u003ca href=\"https://docs.ropensci.org/dendroNetwork\"\u003e{dendroNetwork}\u003c/a\u003e, for creating and analyzing networks in dendrochronological research, combining archaeology and data science.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eSehrish Kanwal\u003c/strong\u003e 🇦🇺 maintains \u003ca href=\"https://umccr.github.io/RNAsum/\"\u003e{RNAsum}\u003c/a\u003e, for summarising and visualising RNA-seq data analysis results in clinical cancer genomics workflows. Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eVictor Ordu\u003c/strong\u003e 🇳🇬🇺🇸 maintains \u003ca href=\"https://docs.ropensci.org/naijR\"\u003e{naijR}\u003c/a\u003e, a package of tools and utilities for working with data and maps about Nigeria. Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eWill Gearty\u003c/strong\u003e 🇺🇸 maintains \u003ca href=\"https://docs.ropensci.org/rredlist\"\u003e{rredlist}\u003c/a\u003e, for accessing IUCN Red List data on threatened species.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eWill Landau\u003c/strong\u003e 🇺🇸 maintains \u003ca href=\"https://docs.ropensci.org/targets\"\u003e{targets}\u003c/a\u003e, a pipeline toolkit that makes data analysis in R faster and fully reproducible by tracking dependencies and only re-running what has changed.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eWill Pearse\u003c/strong\u003e 🇬🇧 maintains \u003ca href=\"https://docs.ropensci.org/suppdata\"\u003e{suppdata}\u003c/a\u003e, for downloading supplementary data files directly from published scientific articles across major journals.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eYi-Chin Sunny Tseng\u003c/strong\u003e 🇨🇦🇹🇼 maintains \u003ca href=\"https://sunnytseng.github.io/bbsTaiwan/\"\u003e{bbsTaiwan}\u003c/a\u003e, for accessing and analyzing data from Taiwan\u0026rsquo;s Breeding Bird Survey. Champions project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eZhian Kamvar\u003c/strong\u003e 🇺🇸 maintains \u003ca href=\"https://docs.ropensci.org/tinkr\"\u003e{tinkr}\u003c/a\u003e, for reading and writing Markdown documents in R as XML.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"thank-you-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#thank-you-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThank you Maintainers!\u003c/h2\u003e\u003cp\u003eMaintaining open source software is an act of generosity. It takes time that could be spent elsewhere, and it often goes unacknowledged.Every bug fix, every answered issue, every new feature and update is a small gift to the people who depend on that package.\u003c/p\u003e\u003cp\u003eWe are grateful to all the rOpenSci maintainers.If you use any of these packages, consider saying \u003cem\u003ethank you\u003c/em\u003e.You can also let us know how you use these packages by \u003ca href=\"https://github.com/orgs/ropensci/discussions\"\u003esharing your use case\u003c/a\u003e, that we will \u003ca href=\"/usecases/\"\u003efeature in our website\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWant to learn more? Explore the \u003ca href=\"/packages\"\u003erOpenSci\u0026rsquo;s packages\u003c/a\u003e in our website and check all the other \u003ca href=\"https://r-universe.dev/search\"\u003epackages universes\u003c/a\u003e in R-Universe.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/06/19/maintainers-month/","date_published":"2026-06-19T00:00:00+00:00","date_modified":"2026-06-19T17:00:28-03:00"},{"id":"https://doi.org/10.59350/f2n2n-4y807","title":"Ronny Hernandez Mora, Joel Nitta, and Nick Tierney Join rOpenSci Software Peer Review Editorial Team","language":"en","authors":[{"name":"Joel Nitta","url":"https://orcid.org/0000-0003-4719-7472","avatar":"https://github.com/joelnitta.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["editor"]},{"name":"Nicholas Tierney","url":"https://ropensci.org/author/nicholas-tierney/","avatar":"https://github.com/njtierney.png","_role":["author"]},{"name":"Ronny Hernandez Mora","url":"https://ropensci.org/author/ronny-hernandez-mora/","avatar":"https://ropensci.org/img/team/ronny-hernandez.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["Software Peer Review","editors","rOpenSci team"],"content_html":"\u003cp\u003eWhat makes \u003ca href=\"/software-review/\"\u003erOpenSci\u0026rsquo;s software peer review\u003c/a\u003e work is people who care deeply about the quality and usability of scientific software, and who give their time and expertise to help others build it better. Today, we\u0026rsquo;re pleased to announce three new members of our editorial team.\u003c/p\u003e\u003cp\u003eWe welcome \u003cem\u003eJoel H. Nitta\u003c/em\u003e, and \u003cem\u003eNicholas Tierney\u003c/em\u003e as new editors, and formally introduce \u003cem\u003eRonny Hernández Mora\u003c/em\u003e, who joined the editorial team in August 2025. Each brings a distinct perspective shaped by their work, their communities, and their experience with open-source R development. Together, they strengthen our capacity to serve the growing number of package authors who submit their work for review, and to uphold the collaborative, friendly and transparent standards that rOpenSci software peer review is known for.\u003c/p\u003e\u003ch2 id=\"ronny-hernández-mora\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ronny-hern%c3%a1ndez-mora\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRonny Hernández Mora\u003c/h2\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"/img/team/ronny-hernandez-mora.png\"         alt=\"Headshot of Ronny\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  \u003cp\u003eRonny is a PhD student at the University of Alberta and a research software developer with a background in data analysis and remote sensing. His current research explores how perception-driven drone systems can support detection, monitoring, and decision making in real world settings.\u003c/p\u003e\u003cp\u003eBefore starting his PhD, Ronny worked as a data developer at \u003ca href=\"https://www.ixpantia.com/en/\"\u003eixpantia\u003c/a\u003e, developing data tools, automation pipelines, APIs, and production analytical applications for organizations across Latin America and the United States. Alongside his PhD, he works with \u003ca href=\"https://openscapes.org/\"\u003eOpenscapes\u003c/a\u003e and contributes to opensource communities through teaching, mentorship, talks, and collaborative software projects.\u003c/p\u003e                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003cp\u003eRonny on \u003ca href=\"https://github.com/ronnyhdez\"\u003eGitHub\u003c/a\u003e, \u003ca href=\"https://ronnyale.com/\"\u003eWebsite\u003c/a\u003e.\u003c/p\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003e\u003cp\u003eI first heard about rOpenSci through a \u003ca href=\"https://www.datalatam.com/29/\"\u003eData Latam podcast episode\u003c/a\u003e, and from there I started following the organization and its work. Over time, I got to know people connected to the community, but it was not until 2024 that I became directly involved by volunteering as a package reviewer.\u003c/p\u003e\u003cp\u003eI have always liked the idea of building software collaboratively: creating tools that can be understood, reviewed, reused, and improved by others. That is one of the things I value most about rOpenSci: the way it combines technical review with openness, care, and constructive feedback. I am grateful for the opportunity to contribute as an editor and to support authors and reviewers through that process and continue learning through this community effort.\u003c/p\u003e\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eRonny \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"joel-h-nitta\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#joel-h-nitta\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eJoel H. Nitta\u003c/h2\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"/img/team/joel-nitta.png\"         alt=\"Headshot of Joel\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  Joel is currently an associate professor at \u003ca href=\"https://www.las.chiba-u.jp/research/faculty/nitta.html\"\u003eChiba University\u003c/a\u003e, Japan, where he studies the evolution and ecology of ferns. Throughout his career as a botanist, he has also cultivated a keen interest in reproducible data analysis and has authored several R packages. Two of these are currently part of rOpenSci, \u003ca href=\"https://docs.ropensci.org/canaper/\"\u003ecanaper\u003c/a\u003e for spatial phylogenetic analysis, and \u003ca href=\"https://docs.ropensci.org/dwctaxon/\"\u003edwctaxon\u003c/a\u003e for validation and maintenance of taxonomic databases. He is also an official maintainer of two rOpenSci packages, \u003ca href=\"https://docs.ropensci.org/rgnparser/\"\u003ergnparser\u003c/a\u003e for parsing taxonomic names, and \u003ca href=\"https://docs.ropensci.org/restez/\"\u003erestez\u003c/a\u003e for querying the GenBank DNA database. Outside of rOpenSci, Joel is active in the \u003ca href=\"https://sites.google.com/view/biopackathon/\"\u003eBio\u0026quot;Pack\u0026quot;athon\u003c/a\u003e community in Japan, serves on the organizing committee of the \u003ca href=\"https://pteridogroup.github.io/\"\u003ePteridophyte Phylogeny Group\u003c/a\u003e, and is a certified instructor for \u003ca href=\"https://carpentries.org/community/instructors/\"\u003eThe Carpentries\u003c/a\u003e. Joel\u0026rsquo;s hobbies include various forms of being active outside (hiking, running, backpacking, botanizing, cycling), playing the euphonium, and tabletop games.                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003cp\u003eJoel on \u003ca href=\"https://github.com/joelnitta\"\u003eGitHub\u003c/a\u003e, \u003ca href=\"https://www.joelnitta.com\"\u003eWebsite\u003c/a\u003e.\u003c/p\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003erOpenSci has been incredibly important in my journey with data science and R. Above all, the extremely knowledgeable and helpful rOpenSci community has provided invaluable support as I transitioned from \u0026ldquo;R package user\u0026rdquo; to \u0026ldquo;R package developer\u0026rdquo;. While it may be possible to do this on your own, it is much more enjoyable and efficient when you are in the company of like-minded people. I especially appreciate this because I did not study computer science in undergrad and I am largely self-taught when it comes to R, having first learned it out of necessity during my graduate studies. I am very excited to officially join the editorial team and have the opportunity to give back to the organization that has supported me so much.\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eJoel \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"nicholas-tierney\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#nicholas-tierney\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNicholas Tierney\u003c/h2\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"/img/team/nick-tierney.jpg\"         alt=\"Headshot of \"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  Nicholas (Nick) Tierney is a statistician, \u003ca href=\"https://researchsoftware.org/\"\u003eResearch Software Engineer\u003c/a\u003e, and freelance consultant with a PhD in Statistics who specialises in data analytics, R package development, and teaching. Previously, he worked with \u003ca href=\"https://www.thekids.org.au/contact-us/our-people/g/nick-golding/\"\u003eProfessor Nick Golding\u003c/a\u003e at \u003ca href=\"https://www.thekids.org.au/\"\u003eThe Kids Research Institute Australia\u003c/a\u003e and was a Research Fellow at Monash University with \u003ca href=\"https://www.dicook.org/\"\u003eProfessor Dianne Cook\u003c/a\u003e, where he developed tools for exploratory data analysis including \u003ca href=\"https://docs.ropensci.org/visdat/\"\u003evisdat\u003c/a\u003e, \u003ca href=\"https://naniar.njtierney.com/\"\u003enaniar\u003c/a\u003e, and \u003ca href=\"https://brolgar.njtierney.com/\"\u003ebrolgar\u003c/a\u003e. Nick actively writes about R related projects at his blog, \u003ca href=\"https://www.njtierney.com/\"\u003e\u0026ldquo;credibly curious\u0026rdquo;\u003c/a\u003e. When not coding, Nick enjoys outdoor adventures and hiked the entire Pacific Crest Trail in 2023, documenting his journey at \u003ca href=\"https://njt.micro.blog/\"\u003enjt.micro.blog\u003c/a\u003e.                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003cp\u003eNick on \u003ca href=\"https://github.com/njtierney\"\u003eGitHub\u003c/a\u003e, \u003ca href=\"https://www.njtierney.com/\"\u003eWebsite\u003c/a\u003e.\u003c/p\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003e\u003cp\u003eI remember seeing rOpenSci online in 2014, at their first \u003ca href=\"https://unconf14.ropensci.org/\"\u003erOpenSci hackathon\u003c/a\u003e in San Francisco, USA. I was inspired by not just the projects they worked on, but the collective of people who were kind and generous as much as they were brilliant. I helped run an offshoot of the rOpenSci Unconf in Australia, which ran in \u003ca href=\"https://auunconf.ropensci.org/\"\u003e2016\u003c/a\u003e, \u003ca href=\"https://ozunconf17.ropensci.org/\"\u003e2017\u003c/a\u003e, \u003ca href=\"https://ozunconf18.ropensci.org/\"\u003e2018\u003c/a\u003e, and \u003ca href=\"https://ozunconf19.ropensci.org/\"\u003e2019\u003c/a\u003e. I received amazing mentorship and support from Karthik Ram and Stefanie Butland in learning how to run these unconferences. I think these have had a lasting impact on connecting people from Australia and New Zealand.\u003c/p\u003e\u003cp\u003eI had my R package, \u003ca href=\"https://docs.ropensci.org/visdat/\"\u003evisdat\u003c/a\u003e, reviewed by rOpenSci in 2017, and this experience was formative to my understanding of software review, and greatly improved my own day to day practice. In 2024, with \u003ca href=\"https://github.com/Aariq\"\u003eEric Scott\u003c/a\u003e, and \u003ca href=\"https://github.com/brownag\"\u003eAndrew Brown\u003c/a\u003e, we submitted the \u003ca href=\"https://github.com/ropensci/geotargets\"\u003egeotargets\u003c/a\u003e package to rOpenSci.\u003c/p\u003e\u003cp\u003erOpenSci has always been at the forefront of building a community of practice, and their model of peer review is a gold standard. Science would be better if more journals practised such transparency and kindness. It is an enormous honour to be able to give back to a community that has been so formative in my career and my life.\u003c/p\u003e\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eNick \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"about-the-software-peer-review-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#about-the-software-peer-review-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAbout the Software Peer Review Program\u003c/h2\u003e\u003cp\u003erOpenSci\u0026rsquo;s software peer review program brings together volunteers to collaboratively review scientific and statistical software according to transparent, constructive, and open standards.We have two different type of review: one for \u003ca href=\"https://devguide.ropensci.org/\"\u003egeneral research software packages\u003c/a\u003e and another for \u003ca href=\"https://stats-devguide.ropensci.org\"\u003epackage that implement statistical methods\u003c/a\u003e.Editors like Ronny, Joel, and Nick are central to that process: they handle initial submission checks, identify and coordinate reviewers, and guide authors through the review until their package is ready.\u003c/p\u003e\u003ch2 id=\"get-involved\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#get-involved\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGet Involved\u003c/h2\u003e\u003cp\u003eThinking about submitting a package? Start here:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/software-review/\"\u003erOpenSci Software Peer Review\u003c/a\u003e: scope, process, and guidelines;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues\"\u003erOpenSci Packages: Development, Maintenance, and Peer Review\u003c/a\u003e: the full guide for package authors;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://stats-devguide.ropensci.org\"\u003erOpenSci Statistical Software Peer Review\u003c/a\u003e: the full guide for statistical software submissions;\u003c/li\u003e\u003cli\u003ePublic \u003ca href=\"https://github.com/ropensci/software-review/issues\"\u003esoftware review threads on GitHub\u003c/a\u003e: see software peer review in action.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWould you like to contribute as a reviewer? We\u0026rsquo;d love to have you. Fill out the \u003ca href=\"https://airtable.com/app8dssb6a7PG6Vwj/shrnfDI2S9uuyxtDw\"\u003erOpenSci Reviewer Sign-Up Form\u003c/a\u003e and we\u0026rsquo;ll match you with packages that fit your expertise.\u003c/p\u003e\u003cp\u003eA warm welcome to \u003cstrong\u003eRonny, Joel, and Nick\u003c/strong\u003e! We\u0026rsquo;re very glad to have you with us.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/06/11/neweditorsq22026/","date_published":"2026-06-11T00:00:00+00:00","date_modified":"2026-06-11T09:22:42-03:00"},{"id":"https://doi.org/10.59350/vecsv-jj307","title":"Eleven Latin American Voices for Open Science: The New Cohort of Champions rOpenSci 2026","language":"en","authors":[{"name":"Bastián Olea Herrera","url":"https://ropensci.org/author/basti%C3%A1n-olea-herrera/","avatar":"https://github.com/bastianolea.png","_role":["author"]},{"name":"Denisse Fierro Arcos","url":"https://ropensci.org/author/denisse-fierro-arcos/","avatar":"https://github.com/lidefi87.png","_role":["author"]},{"name":"Durga Valentina Linares Herrera","url":"https://ropensci.org/author/durga-valentina-linares-herrera/","avatar":"https://github.com/valentinalinares.png","_role":["author"]},{"name":"Estefania Torrejón","url":"https://ropensci.org/author/estefania-torrej%C3%B3n/","avatar":"https://github.com/torrejoNia.png","_role":["author"]},{"name":"Evelia Lorena Coss Navarrete","url":"https://ropensci.org/author/evelia-lorena-coss-navarrete/","avatar":"https://github.com/EveliaCoss.png","_role":["author"]},{"name":"Gladys Choque Ulloa","url":"https://ropensci.org/author/gladys-choque-ulloa/","avatar":"https://github.com/GladysUlloa.png","_role":["author"]},{"name":"José Daniel Conejeros","url":"https://orcid.org/0000-0003-3402-4361","avatar":"https://github.com/JDConejeros.png","_role":["author"]},{"name":"Linda Cabrera Orellana","url":"https://ropensci.org/author/linda-cabrera-orellana/","avatar":"https://github.com/lindateachtech.png","_role":["author"]},{"name":"Marina Cecilia Cock","url":"https://ropensci.org/author/marina-cecilia-cock/","avatar":"https://github.com/MarinaCock.png","_role":["author"]},{"name":"María Florencia Tames","url":"https://ropensci.org/author/mar%C3%ADa-florencia-tames/","avatar":"https://github.com/flortames.png","_role":["author"]},{"name":"Patricia A. Loto","url":"https://orcid.org/0000-0003-1849-6916","avatar":"https://github.com/PatriLoto.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["Champions Program","community"],"content_html":"\u003cp\u003eWe are very happy to introduce the new rOpenSci Champions.This group will experience the program and work in Spanish, allowing us to continue to strengthen the open science and research software development community in this language.We are excited about the projects they will develop, which address real challenges from different disciplines and territories in Latin America.\u003c/p\u003e\u003cp\u003eWe invite you to meet each of these people and the projects they will be working on throughout the program.\u003c/p\u003e\u003ch2 id=\"bastián-olea-herrera\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#basti%c3%a1n-olea-herrera\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBastián Olea Herrera\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/bastian-olea-herrera.jpg\"\t\t\talt=\"Profile photo for Bastián Olea Herrera\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eBastián Olea Herrera \u003c/br\u003e Undersecretary of Regional and Administrative Development \u003c/br\u003e Government of Chile\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is Bastián, I live in Chile, I am a sociologist by training and I have a Master\u0026rsquo;s degree in sociology.I like to create content and tutorials about R, and recently we are organizing a community of R users in Santiago, where I live.I am dedicated to data analysis in the public sector, where I work mainly with social data at different territorial levels.This kind of data always needs the same types of cleaning and corrections, but at the same time they usually vary a lot in small details between each source.That is why I applied to the program to develop a package that facilitates working with data at the communal and regional level in Chile.I hope to meet other R users and learn together, as well as receive support from people with more experience and knowledge, so that we can create useful tools for many people!\u003c/p\u003e\u003c/br\u003e\u003c/br\u003e\u003ch2 id=\"denisse-fierro-arcos\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#denisse-fierro-arcos\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDenisse Fierro Arcos\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/denisse-fierro-arcos.JPG\"\t\t\talt=\"Profile photo for Denisse Fierro Arcos\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eDenisse Fierro Arcos \u003c/br\u003e Institute for Marine and Antarctic Studies \u003c/br\u003e University of Tasmania\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is Denisse Fierro Arcos, I am a marine scientist originally from Ecuador but currently living in Australia.At the moment I am close to finishing my PhD program which focuses on developing best practices for the use of oceanographic models in marine ecosystem studies.I am also currently working as a researcher at the University of Tasmania where I am developing a marine ecosystem model that will allow us to project the possible impacts of climate change on marine species and fisheries.It is precisely this model that is the focus of my project with the Champions Program.We want to publish a package in R that will allow other marine researchers to easily run our model.\u003c/p\u003e\u003c/br\u003e\u003c/br\u003e\u003ch2 id=\"durga-valentina-linares-herrera\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#durga-valentina-linares-herrera\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDurga Valentina Linares Herrera\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/valentina-linares.jpeg\"\t\t\talt=\"Profile photo for Durga Valentina Linares Herrera\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eDurga Valentina Linares Herrera \u003c/br\u003e Research Center of the Universidad del Pacífico (CIUP)\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHello!My name is Durga Valentina Linares Herrera and I live in Lima, Peru.I am a social scientist, with a degree in Political Science from the Universidad Antonio Ruiz de Montoya and a diploma in Data Science for Social Sciences and Public Management from the Pontificia Universidad Católica del Perú.I work as a research assistant at the Research Center of the Universidad del Pacífico, where I explore the intersection between technology and work from a sociological perspective and with mixed methodologies.My current projects revolve around the Peruvian labor market and its exposure to artificial intelligence, and the evolution of the strike as a social phenomenon in Peru in the last three decades.\u003c/p\u003e\u003cp\u003eFor the program I presented as a project {epen}, an R package to download, process, and analyze microdata from the Permanent National Employment Survey and its predecessor, the Lima EPE.This idea was born from my experience working directly with these databases.I could see how difficult it can be to access public labor data in a fast, clear, and reproducible way, especially for those of us who come from the social sciences and do not always come to these tools with a previous technical background, as was also my case.With this package, I seek to facilitate that path for researchers, students, and public sector analysts who need to build reliable labor indicators without having to start from scratch each time, something I find especially relevant in this time of so many changes.\u003c/p\u003e\u003cp\u003eIn recent years, with the intention of developing new skills in a context where technology is quickly advancing, I moved towards a more quantitative approach and learned to program in a self-taught way with free resources on the internet.That process has been important for my professional development, but it also made me want to turn that learning into something useful for other people: a tool to help reduce the entry barriers that I myself encountered when I started.That\u0026rsquo;s how the motivation behind this package came about, and this Champions Program appeared just at the right time.I am excited to participate in an initiative like this and to be part of a network like rOpenSci, whose commitment to a more diverse and inclusive open science seems very valuable to me.I hope that this experience will allow me to consolidate in community a path that I once started on my own and pave the way for future packages aimed at improving access to Peruvian public data in R.\u003c/p\u003e\u003ch2 id=\"evelia-lorena-coss-navarrete\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#evelia-lorena-coss-navarrete\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEvelia Lorena Coss Navarrete\u003c/h2\u003e\u003cp\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/evelia-lorena-coss-navarrete.jpg\"\t\t\talt=\"Profile photo for Evelia Lorena Coss Navarrete\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eEvelia Lorena Coss Navarrete \u003c/br\u003e LIIGH-UNAM\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003eI am a postdoctoral researcher specialized in transcriptomics and single cell data analysis.My research focuses on the study of transcriptomic profiles of Mexican patients with lupus, with the aim of better understanding the biological mechanisms of the disease and providing reproducible bioinformatics tools that strengthen both biomedical research and academic training in Mexico and Latin America.\u003c/p\u003e\u003cp\u003eI am a Biotechnology Engineer from the Polytechnic University of Sinaloa (UPSIN), originally from Mazatlan, and I did my Master\u0026rsquo;s and PhD in Plant Biotechnology at Cinvestav, where I studied the conservation of lncRNAs in plants.\u003c/p\u003e\u003cp\u003eMy participation in the rOpenSci Champions Program seeks to strengthen communities such as VieRnes de Bioinformatics, R-Ladies Morelia and RSG-Mexico, promoting the creation of R packages with international standards, reproducible documentation and open review.My vision is to bridge the gap between the global rOpenSci community and local initiatives in Latin America, promoting a more open, inclusive and sustainable science.\u003c/p\u003e\u003c/br\u003e\u003c/br\u003e\u003ch2 id=\"gladys-choque-ulloa\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#gladys-choque-ulloa\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGladys Choque Ulloa\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/gladys-choque.jpeg\"\t\t\talt=\"Profile photo for Gladys Choque Ulloa\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eGladys Choque Ulloa \u003c/br\u003e University of São Paulo \u003c/br\u003e Founder of Women in DataLab\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHello!My name is Gladys Choque Ulloa, I am originally from Peru and currently reside in Brazil.I have a degree in Statistics, a Master\u0026rsquo;s in Statistics, and I am currently pursuing my PhD in Computer Science at the ICMC-USP of the University of São Paulo, Brazil. There, I am developing research in computational neuroscience focused on the automatic diagnosis of mental disorders, using Machine Learning models, Neural Networks, LLMs, Causal Inference, and Time Series.In addition to my academic work, I am founder of the organization Women in DataLab, where I work to reduce the gender gap in technology and data science.\u003c/p\u003e\u003cp\u003eI applied to the rOpenSci Champions Program because I strongly believe in the power of open science and reproducible software to democratize knowledge.During the program, my goal is to hone my skills in developing R tools and scientific software under global standards.With this experience I want to strengthen my technical profile and act as a bridge for more researchers in Latin America to adopt collaborative and open practices, enhancing the impact of our scientific community internationally.\u003c/p\u003e\u003c/br\u003e\u003c/br\u003e\u003ch2 id=\"josé-daniel-conejeros-pavez\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#jos%c3%a9-daniel-conejeros-pavez\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eJosé Daniel Conejeros Pavez\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/jose-conejeros.png\"\t\t\talt=\"Profile photo for José Daniel Conejeros Pavez\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eJosé Daniel Conejeros Pavez \u003c/br\u003e Lagrange Fellow, ISI Foundation \u003c/br\u003e Early Career Researcher, SENTINET - UC\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am José Daniel Conejeros, MSc in Statistics from the Pontificia Universidad Católica de Chile.I am originally from Chile and currently develop my work between Chile and Italy.In Italy I work as a Lagrange Fellow at the ISI Foundation and as a young researcher at the SENTINET Center (Surveillance, epidemiology and new technologies for emerging infectious threats), working on issues of data science, complex systems, and public health.\u003c/p\u003e\u003cp\u003eMy work is situated at the intersection of statistics, epidemiology, and computational social science to understand infectious disease dynamics and health outcomes for different populations.Currently, I am developing spatmask, an R package oriented to the masking and anonymization of spatial data (geomasking), with the goal of enabling reproducible analyses without compromising the privacy of individuals.This project aims to bridge the gap between the use of sensitive data for research and the ethical and regulatory restrictions that limit its access and use.\u003c/p\u003e\u003cp\u003eI decided to apply to the Champions Program because many of the challenges I face are not only technical, but also organizational and cultural.I want to understand how to develop scientific software collaboratively, how to document it correctly and how to foster reproducible practices in contexts where open science is not yet fully installed.I am interested in learning how to build tools that not only work, but that are understandable, auditable, and useful for research teams and Public Policy decision makers.\u003c/p\u003e\u003cp\u003eThrough this program, I hope to strengthen my skills in scientific software development, open review and collaborative work.My goal is to translate this learning into concrete transfer: training, collaboration, and community building around open science in the region.\u003c/p\u003e\u003ch2 id=\"linda-cabrera-orellana\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#linda-cabrera-orellana\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLinda Cabrera Orellana\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/linda-cabrera-orellana.png\"\t\t\talt=\"Profile photo for Linda Cabrera Orellana\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eLinda Cabrera Orellana \u003c/br\u003e R-Ladies Ecuador\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHello!My name is Linda, I am Ecuadorian and currently reside in Granada, Spain.I work as a Senior Data Analyst in a digital marketing agency and I share my experience as a teacher in business schools, where I teach classes on AI applied to analytics and data visualization.\u003c/p\u003e\u003cp\u003eMy project consists of developing an R package with an educational approach to detect, explain, and help correct common structural errors in manually created datasets, specially designed for people with no technical background in data.I am applying to the program because I want to turn my practical and teaching experience into a real contribution to the open scientific software ecosystem, and to strengthen my skills in R package design, documentation, and maintenance.\u003c/p\u003e\u003cp\u003eI also hope that the project will serve as an educational resource in universities in Ecuador and in the R-Ladies community, and that it will build a bridge between those who collect data and those who analyze it, promoting data literacy in Spanish.\u003c/p\u003e\u003c/br\u003e\u003c/br\u003e\u003ch2 id=\"maría-florencia-tames\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mar%c3%ada-florencia-tames\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMaría Florencia Tames\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/maria-tames.png\"\t\t\talt=\"Profile photo for María Florencia Tames\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eMaría Florencia Tames \u003c/br\u003e National University of Córdoba \u003c/br\u003e Argentina\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is María Florencia Tames, I am a professor at the National University of Córdoba (Argentina) and I work in research in the area of air quality, exposure to air pollutants and environmental inequalities in urban contexts in Latin America.\u003c/p\u003e\u003cp\u003eWith a team I developed the AirExposure R package, a tool for estimating daily exposure to air pollutants by integrating information on ambient concentrations, mobility, and daily routines.Through the rOpenSci Champions Program, my goal is to improve and consolidate this package as an open, reproducible and accessible tool for the community.\u003c/p\u003e\u003cp\u003eI am especially interested in strengthening my skills in open software development, incorporating best practices such as documentation, testing, and peer review, and learning to build tools that can be used beyond their original research context.\u003c/p\u003e\u003cp\u003eI am also motivated by the program\u0026rsquo;s focus on community and working in Spanish, as access to programming resources and training is often limited by language.I hope to be able to share what I have learned through training activities and contribute to the development of an open scientific software community in Latin America.\u003c/p\u003e\u003c/br\u003e\u003c/br\u003e\u003ch2 id=\"marina-cecilia-cock\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#marina-cecilia-cock\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMarina Cecilia Cock\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/marina-cecilia-cock.JPG\"\t\t\talt=\"Profile photo for Marina Cecilia Cock\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eMarina Cecilia Cock \u003c/br\u003e INCITAP (CONICET-UNLPam) \u003c/br\u003e National University of La Pampa\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am from Santa Rosa, La Pampa, Argentina.I have a degree in Natural Resources and Environment Engineering from the National University of La Pampa (UNLPam) and a PhD in Agrarian Sciences with orientation in Ecology from the University of Buenos Aires (UBA).\u003c/p\u003e\u003cp\u003eI am currently working as a research assistant at the National Council of Scientific and Technical Research (CONICET) and as a teaching assistant in Biogeography and Statistics at the National University of La Pampa.\u003c/p\u003e\u003cp\u003eI applied to the program to learn about the R package review process.I am interested in participating because I find it especially valuable to join a community where learning is shared and collaborative.I am looking to strengthen my knowledge in R and then be able to transmit it both in my teaching role and within the R community.\u003c/p\u003e\u003c/br\u003e\u003c/br\u003e\u003ch2 id=\"patricia-andrea-loto\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#patricia-andrea-loto\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePatricia Andrea Loto\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/patricia-loto.jpg\"\t\t\talt=\"Profile photo for Patricia Andrea Loto\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003ePatricia Andrea Loto \u003c/br\u003e FACENA, National University of the Northeast (UNNE)\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI have a degree in Information Systems and a Diploma in Data Science, Machine Learning and its Applications.I am currently pursuing a Master\u0026rsquo;s Degree in Information Technology at the Universidad Nacional del Nordeste.I live and work in Argentina.\u003c/p\u003e\u003cp\u003eI work as a software developer and data analyst in the public sector, and as a university teacher in the area of systems and programming.I am a co-founder of RSE Argentina, member of the organizing committee of LatinR, and co-organizer of R-Ladies Resistencia-Corrientes.From these spaces I work to promote open science, reproducible research software and technology inclusion in Latin America.\u003c/p\u003e\u003cp\u003eIn the 2026 cohort I am participating as mentee with the guidance of Guadalupe Pascal.My project is an R package to systematize the creation of Software and Data Management Plans through standardized templates developed with Quarto, which facilitate the documentation, preservation, and reuse of data and scientific code under international open science standards.\u003c/p\u003e\u003cp\u003eI applied to the Champions Program because I see it as a bridge: between where I am technically and where I want to be.I hope to learn about the rOpenSci peer review process, deepen my understanding of testing, technical documentation, and everything that makes a package really useful to others.I\u0026rsquo;m also looking to connect with a network of developers and researchers who share open science values.Finally, I want research software developed from the Global South to have greater visibility and for our contributions to be recognized, and I think rOpenSci is the ideal platform for that.\u003c/p\u003e\u003ch2 id=\"estefania-torrejón\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#estefania-torrej%c3%b3n\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEstefania Torrejón\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/estefania-torrejon.png\"\t\t\talt=\"Profile photo for Estefania Torrejón\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eEstefania Torrejón \u003c/br\u003eNOVA Medical School. Lisbon, Portugal\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am Peruvian and a biologist graduate from the Universidad Nacional Mayor de San Marcos (UNMSM), with a Master\u0026rsquo;s degree in Biomedical Sciences from the Institute of Hygiene and Tropical Medicine (IHMT) in Lisbon, Portugal.I currently reside in Portugal, where I work as a predoctoral researcher in bioinformatics at the Metabolic Diseases Research Lab of NOVA Medical School.I am also director of the International Relations Department of the Peruvian Society of Bioinformatics and Computational Biology.\u003c/p\u003e\u003cp\u003eThe project I am developing in the framework of the rOpenSci Champions Program consists of the preparation and submission of my R package, EV-Net, to the CRAN repository.EV-Net is a bioinformatics tool that identifies and prioritizes molecules present in the cargo of extracellular vesicles (EVs) with high regulatory potential on a receptor tissue of interest.EVs are structures surrounded by a lipid bilayer that carry a great diversity of active molecules.These vesicles can move through the organism and reach specific tissues, which is why they are recognized as key mediators of cell-to-cell communication (CCC).However, most of the bioinformatics tools available to study CCC do not consider EV-mediated communication.To address this limitation, my collaborators, supervisors, and I developed EV-Net.\u003c/p\u003e\u003cp\u003eBeing an rOpenSci Champion is an invaluable opportunity to receive the necessary training, coaching and mentoring to bring EV-Net up to the required quality standards and to be successfully incorporated into CRAN.\u003c/p\u003e\u003ch2 id=\"next-steps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#next-steps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNext steps\u003c/h2\u003e\u003cp\u003eWith the presentation of this new group of Champeons, we begin the fourth edition of the program, the second in Spanish.This group has already started the training stage and met their mentors.They will be working for 12 months developing new packages, preparing existing packages to submit to the peer review process, and reviewing other people\u0026rsquo;s packages.\u003c/p\u003e\u003cp\u003eIf you want to follow the development of their projects and where and when their dissemination and communication activities will take place, don\u0026rsquo;t miss our blog articles, news in our newsletter and social networks.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/06/09/champions-2026/","date_published":"2026-06-09T00:00:00+00:00","date_modified":"2026-06-09T18:25:22-03:00"},{"id":"https://doi.org/10.59350/yw9nq-n2878","title":"Five recent R-universe features you might have missed","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","infrastructure"],"content_html":"\u003cp\u003eOne of the challenges of working on R-universe is that there is never really a release day.\u003c/p\u003e\u003cp\u003eUnlike software projects that accumulate changes for a big launch, R-universe evolves continuously. New features, infrastructure improvements, UI tweaks, and build system enhancements are silently deployed all the time without most people noticing.\u003c/p\u003e\u003cp\u003eEvery now and then, however, a few features emerge that are worth highlighting. In this technote we look at five recent additions that make R-universe a little nicer, faster, or more convenient to use.\u003c/p\u003e\u003ch2 id=\"1-social-media-cards-that-actually-look-good\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#1-social-media-cards-that-actually-look-good\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e1. Social media cards that actually look good\u003c/h2\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"https://ropensci.r-universe.dev/card.svg\" alt=\"Example of preview card for organization\"/\u003e    \u003c/div\u003e    \u003ca href=\"https://ropensci.r-universe.dev/card.svg\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cp\u003eSharing package links on social media used to be a somewhat underwhelming experience, but not anymore! We provide beautiful preview images every package, article, and universe, for example:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/card.png\"\u003ehttps://ropensci.r-universe.dev/card.png\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/card.svg\"\u003ehttps://ropensci.r-universe.dev/card.svg\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/targets/card.png\"\u003ehttps://ropensci.r-universe.dev/targets/card.png\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/targets/card.svg\"\u003ehttps://ropensci.r-universe.dev/targets/card.svg\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eEach card includes package or universe stats and is automatically exposed through the appropriate HTML headers (\u003ccode\u003eog:image\u003c/code\u003e, \u003ccode\u003eog:title\u003c/code\u003e, etc). Whenever somebody shares a package link, the preview should look a bit more polished without requiring any work from package maintainers.\u003c/p\u003e\u003cblockquote class=\"bluesky-embed\" data-bluesky-uri=\"at://did:plc:sh6yzcjqgrzfyn5ka2hut3o5/app.bsky.feed.post/3mkuf6q2xc226\" data-bluesky-cid=\"bafyreichh7mv56ykfbnyyfstbgqlrftmpbrw5qtkhptgp5zgtrypovrmga\" data-bluesky-embed-color-mode=\"system\"\u003e\u003cp lang=\"en\"\u003eR-universe now generates social media preview cards for each package, like this one: ropensci.r-universe.dev/targets. You can also get the card manually from the /{package}/card.png API (or svg).\u003cbr\u003e\u003cbr\u003e\u003ca href=\"https://bsky.app/profile/did:plc:sh6yzcjqgrzfyn5ka2hut3o5/post/3mkuf6q2xc226?ref_src=embed\"\u003e[image or embed]\u003c/a\u003e\u003c/p\u003e\u0026mdash; Jeroen Ooms (\u003ca href=\"https://bsky.app/profile/did:plc:sh6yzcjqgrzfyn5ka2hut3o5?ref_src=embed\"\u003e@jeroenooms.bsky.social\u003c/a\u003e) \u003ca href=\"https://bsky.app/profile/did:plc:sh6yzcjqgrzfyn5ka2hut3o5/post/3mkuf6q2xc226?ref_src=embed\"\u003e12:01 · May 2, 2026\u003c/a\u003e\u003c/blockquote\u003e\u003cscript async src=\"https://embed.bsky.app/static/embed.js\" charset=\"utf-8\"\u003e\u003c/script\u003e\u003cp\u003eWhen a link to a vignette article is shared, R-universe automatically extracts the title and section headings from the document to generate a more informative description. For example \u003ca href=\"https://bsky.app/profile/jeroenooms.bsky.social/post/3mnprwytac22e\"\u003ethis one\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eAll this won\u0026rsquo;t guarantee your package goes viral, but at least it looks cool :)\u003c/p\u003e\u003ch2 id=\"2-packagesrds-support-or-implementing-r-internals-in-javascript\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#2-packagesrds-support-or-implementing-r-internals-in-javascript\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e2. PACKAGES.rds support (or: implementing R internals in JavaScript)\u003c/h2\u003e\u003cp\u003eThis feature is mostly invisible, but improves performance of installing packages in R, and therefore also the workflow of building packages in R-universe:\u003c/p\u003e\u003cp\u003eEvery CRAN-like repository needs an index file which lists all the content from that repo. This file may be provided in a text-based \u003ca href=\"https://ropensci.r-universe.dev/src/contrib/PACKAGES\"\u003ePACKAGES\u003c/a\u003e format and/or a binary \u003ca href=\"https://ropensci.r-universe.dev/src/contrib/PACKAGES.rds\"\u003ePACKAGES.rds\u003c/a\u003e format (rds is R\u0026rsquo;s internal binary serialization format, see \u003ccode\u003e?saveRDS\u003c/code\u003e).\u003c/p\u003e\u003cp\u003eHistorically R-universe supported only the former text-based format, because all repository metadata is generated on-request in JavaScript on the server side, and emitting DCF text streams from our database is fast and easy. However, on the R side, loading RDS is a bit faster than parsing a text, which becomes noticeable for large repositories like \u003ca href=\"https://bioc.r-universe.dev/\"\u003ehttps://bioc.r-universe.dev/\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eSo therefore we now also serve the \u003ca href=\"https://ropensci.r-universe.dev/src/contrib/PACKAGES.rds\"\u003ePACKAGES.rds\u003c/a\u003e files. The implementation exists in this \u003ca href=\"https://github.com/r-universe-org/packages-rds/blob/main/src/index.js\"\u003eNPM package\u003c/a\u003e which reverse engineers a subset of the R RDS serializer, so that we can easily run it in our \u003ca href=\"https://github.com/r-universe-org/express-frontend\"\u003eexpress stack\u003c/a\u003e. On MacOS and Windows it defaults to the new zstd compression, which makes it even faster than CRAN.\u003c/p\u003e\u003ch2 id=\"3-fancy-sortfilter-bars-in-the-webui\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#3-fancy-sortfilter-bars-in-the-webui\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e3. Fancy sort/filter bars in the WebUI\u003c/h2\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2026/06/07/r-universe-updates/cover.png\" alt=\"A screenshot of the new search bar\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2026/06/07/r-universe-updates/cover.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cp\u003eThe styling of universe-level pages that list packages, articles, and datasets have been improved, gaining some nice interactive filter and sort capabilities. For example the \u003ca href=\"https://ropensci.r-universe.dev/packages\"\u003e\u003ccode\u003e/packages\u003c/code\u003e\u003c/a\u003e page now allows you to do a (fuzzy) search looking for keywords that appear in package descriptions/tags/authors/etc, and sort the packages based on their of stars / downloads / dependents / etc.\u003c/p\u003e\u003cp\u003eA similar filter bar is available on the \u003ca href=\"https://ropensci.r-universe.dev/articles\"\u003e\u003ccode\u003e/articles\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://ropensci.r-universe.dev/datasets\"\u003e\u003ccode\u003e/datasets\u003c/code\u003e\u003c/a\u003e pages to help you search those as well.\u003c/p\u003e\u003ch2 id=\"4-for-the-impatient-trigger-a-sync-manually\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#4-for-the-impatient-trigger-a-sync-manually\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e4. For the impatient: trigger a sync manually\u003c/h2\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2026/06/07/r-universe-updates/sync.png\" alt=\"A screenshot of the new search sync button\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2026/06/07/r-universe-updates/sync.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cp\u003eR-universe automatically checks for updates in upstream git repositories and package registries approximately once per hour. Occasionally, however, you have just pushed a commit, fixed a build issue, updated a vignette, or corrected a typo, and waiting an hour suddenly feels like a very long time.\u003c/p\u003e\u003cp\u003eTo accommodate the impatient among us, a new sync button has been added to the universe sidebar. Clicking the button immediately triggers a sync to check for any updates.\u003c/p\u003e\u003ch2 id=\"5-making-check-results-easier-to-find-and-share\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#5-making-check-results-easier-to-find-and-share\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e5. Making check results easier to find and share\u003c/h2\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2026/06/07/r-universe-updates/checks1.png\" alt=\"A screenshot of the checks table on the R-Universe website\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2026/06/07/r-universe-updates/checks1.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cp\u003eFor some organizations, package checks are among the most important parts of R-universe. We\u0026rsquo;ve made several improvements to make check results easier to access and easier to share with collaborators.\u003c/p\u003e\u003cp\u003eFirst, package pages now support direct links to the check table using the \u003ccode\u003e#checktable\u003c/code\u003e anchor, for example: \u003ca href=\"https://jeroen.r-universe.dev/curl#checktable\"\u003ehttps://jeroen.r-universe.dev/curl#checktable\u003c/a\u003e. Second, build logs and build artifacts linked in this table can now be downloaded without requiring GitHub authentication. The underlying files still live on GitHub Actions, but R-universe now proxies the download links. This means users can access logs and build artifacts directly from the package page, even if they do not have a GitHub account. So \u0026ldquo;I don\u0026rsquo;t have GitHub\u0026rdquo; is no longer available as an excuse for ignoring check failures.\u003c/p\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2026/06/07/r-universe-updates/checks2.png\" alt=\"A screenshot of the checks table as GitHub summary\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2026/06/07/r-universe-updates/checks2.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cp\u003eFinally, build runs now include a deployment summary generated via the \u003ca href=\"https://github.blog/news-insights/product-news/supercharging-github-actions-with-job-summaries/\"\u003eGitHub Actions Job Summaries feature\u003c/a\u003e: navigate to any \u003ca href=\"https://github.com/r-universe/jeroen/actions/runs/26840445416\"\u003ebuild run\u003c/a\u003e and scroll down, there you find a summary table showing exactly the data deployed to R-universe during that run, including package checks and deployment results. This makes it easier to inspect builds directly from GitHub without having to cross-reference multiple pages.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/06/07/r-universe-updates/","date_published":"2026-06-07T00:00:00+00:00","date_modified":"2026-06-07T21:18:59+02:00"},{"id":"https://doi.org/10.59350/w9z54-fv077","title":"A New Guide: Organizing Events for First-time Contributors","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["editor"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["packages","R","community","welcome","contributions","beginner","how-to"],"content_html":"\u003cblockquote\u003e\u003cp\u003eMaking your first contribution to open source can be both empowering and yet very intimidating.\u003c/p\u003e\u003cp\u003e\u0026ndash; \u003ca href=\"https://ftc-guide.ropensci.org/\"\u003erOpenSci FTC Guide\u003c/a\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eLast year we were grateful to receive funding from NumFOCUS\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e to organize a series of events designed to reduce barriers restricting First-Time Contributors to Free and Open Source Software (FOSS).There are many barriers\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e to first time contributions, but making these contributions can be an empowering experience.To help reduce some of these barriers we hosted two types of events: \u003cstrong\u003emini-translathons\u003c/strong\u003e and \u003cstrong\u003emini-hackathons\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eA \u003cstrong\u003emini-translathon\u003c/strong\u003e is a short, live, coworking session, focused on translation and localization contributions.Participants review and improve translations of documentation, websites, or other resources.They also work with guidance from mentors and editors, often collaborating in language-specific groups.The goal is to make content accessible in multiple languages while helping newcomers learn \u003ca href=\"/multilingual-publishing/\"\u003etranslation workflows and tools\u003c/a\u003e.\u003c/p\u003e\u003c!--- cSpell: language en,pt ---\u003e\u003cp\u003eWe paired our mini-translathon with a Portuguese Community Call (\u003ca href=\"/commcalls/translation-portuguese/\"\u003e\u003cem\u003eA comunidade R fala português\u003c/em\u003e\u003c/a\u003e\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e) which preceded the \u003ca href=\"https://latinr.org/en/cronograma/translaton/translaton-en.html\"\u003emini-translathon\u003c/a\u003e at LatinR 2024.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/06/02/ftc-guide/Translathon-LatinR-3.png\"\t\t\talt=\"Screenshot of the Zoom call for the translathon, showing participants and a screenshare of the pull-request translation process.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eDemonstrating the PR process during the translathon\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eSimilarly, a \u003cstrong\u003emini-hackathon\u003c/strong\u003e is a short (typically ~2-hour), live, online coworking session designed to help people make their first contributions to open-source software.Participants work on small, well-prepared tasks such as fixing bugs, improving code, or updating documentation.Maintainers and mentors are available in real time to guide them, answer questions, and support the contribution process.The focus is on learning by doing in a collaborative and supportive environment.\u003c/p\u003e\u003cp\u003eAgain, we paired our mini-hackathons with an English Community Call (\u003ca href=\"/commcalls/first-time-contributor/\"\u003eFrom Novice to Contributor: Making and Supporting First-Time Contributions to FOSS\u003c/a\u003e) which was then followed by the two \u003ca href=\"/events/coworking-2025-02/\"\u003emini-hackathons\u003c/a\u003e to support contributors to coding projects.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/06/02/ftc-guide/Yani-JuanCruz-miniHackathon.jpg\"\t\t\talt=\"Photo of two participants of the mini-hackathon participating on their computers from the same location.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eYani and Juan Cruz participate in the mini-hackathon together\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003ePart of the grant we received also allowed us to write up our processes and findings as a \u003cstrong\u003eguide book\u003c/strong\u003e \u0026ldquo;\u003ca href=\"https://ftc-guide.ropensci.org/\"\u003eFrom User to Contributor: Organizing Events for First-Time Contributors\u003c/a\u003e\u0026rdquo;, which we are excited to share with you!\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/06/02/ftc-guide/ftc_guide.png\"\t\t\talt=\"Screenshot of the introduction to the FTC Guide showing the Table of Contents including \u0026#39;Preface\u0026#39;, \u0026#39;Pilot\u0026#39;, \u0026#39;Events Overview\u0026#39;, \u0026#39;Community Calls\u0026#39;, \u0026#39;Mini-translathons\u0026#39;, \u0026#39;Mini-hackathons\u0026#39;, and \u0026#39;Appendices\u0026#39;\"\u003e\u003c/figure\u003e\u003cp\u003eIn our guide we start by discussing \u003ca href=\"https://ftc-guide.ropensci.org/\"\u003ewhy supporting first time contributors is important\u003c/a\u003e.We describe our \u003ca href=\"https://ftc-guide.ropensci.org/pilot.html\"\u003epilot events\u003c/a\u003e, how they went, feedback we received, and ideas for future improvement.The main chapters of the guide then cover how to run these events in greater detail.This includes \u003ca href=\"https://ftc-guide.ropensci.org/event-overview.html\"\u003eTimelines\u003c/a\u003e, \u003ca href=\"https://ftc-guide.ropensci.org/commcall.html\"\u003eCommunity Calls\u003c/a\u003e, \u003ca href=\"https://ftc-guide.ropensci.org/translathon.html\"\u003eMini-translathons\u003c/a\u003e, and \u003ca href=\"https://ftc-guide.ropensci.org/hackathon.html\"\u003eMini-hackathons\u003c/a\u003e, all from the perspective of supporting first time contributors.In the \u003ca href=\"https://ftc-guide.ropensci.org/resources.html\"\u003eAppendices\u003c/a\u003e we include communication examples and templates.\u003c/p\u003e\u003cp\u003eWe hope that this guide can be useful to other communities beyond rOpenSci.If you use this guide to create your own events to support first time contributors, we hope \u003ca href=\"/usecases/\"\u003eyou\u0026rsquo;ll let us know\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eThanks to NumFOCUS for the Small Development Grant to support this work.\u003c/p\u003e\u003c!--- cSpell: ignore CSCW ---\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003e\u003ca href=\"https://numfocus.org/\"\u003eNumFocus\u003c/a\u003e is rOpenSci\u0026rsquo;s fiscal sponsor.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eSteinmacher et al.identified 13 social barriers.Igor Steinmacher, Tayana Conte, Marco Aurélio Gerosa, and David Redmiles.2015.Social Barriers Faced by Newcomers Placing Their First Contribution in Open Source Software Projects.In Proceedings of the 18th ACM Conference on Computer Supported Cooperative Work \u0026amp; Social Computing (CSCW \u0026lsquo;15).Association for Computing Machinery, New York, NY, USA, 1379\u0026ndash;1392.\u003ca href=\"https://doi.org/10.1145/2675133.2675215%E2%86%A9%EF%B8%8E\"\u003ehttps://doi.org/10.1145/2675133.2675215↩︎\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003e\u0026ldquo;The R community speaks Portuguese\u0026rdquo;\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2026/06/02/ftc-guide/","date_published":"2026-06-02T00:00:00+00:00","date_modified":"2026-06-03T10:51:44-07:00"},{"id":"https://doi.org/10.59350/3ne4y-5sk72","title":"Our goodpractice Package Has New Superpowers","language":"en","authors":[{"name":"Athanasia Mo Mowinckel","url":"https://ropensci.org/author/athanasia-mo-mowinckel/","avatar":"https://github.com/drmowinckels.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["package development","best practice"],"content_html":"\u003cp\u003eThe \u003ca href=\"https://docs.ropensci.org/goodpractice\"\u003egoodpractice package\u003c/a\u003e has been recommended by rOpenSci since it was first started just over 10 years ago by \u003ca href=\"https://gaborcsardi.org/\"\u003eGábor Csárdi\u003c/a\u003e.We used to ask our editors to manually run goodpractice on all packages submitted to software peer-review, and then to ask authors to fix any notable issues flagged by the package.It is now integrated within our own \u003ca href=\"https://docs.ropensci.org/pkgcheck\"\u003epkgcheck system\u003c/a\u003e, and used to automatically identify any goodpractice issues with all new submissions.The package changed maintainers \u003ca href=\"/blog/2024/06/21/ropensci-news-june-2024/#ropensci-takes-over-maintenance-of-the-goodpractice-package\"\u003eseveral times\u003c/a\u003e before the previous maintainers gave the green light for us to take over maintenance of the package \u003ca href=\"https://github.com/ropensci-review-tools/goodpractice/commit/c3f0b8e4c8e2cd7d88361bb670dd79284e6494d1\"\u003etwo years ago (28th May 2024)\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;re really pleased to share that we\u0026rsquo;ve recently rolled out a host of updates and extensions to the package.These make it both easier to use, and more powerful.This was a collaborative effort between new package author, Athanasia Mo Mowinckel, current maintainer, Mark Padgham, and the generative AI tool Claude.We describe the process at the end of this tech note.\u003c/p\u003e\u003ch2 id=\"easier-control-of-checks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#easier-control-of-checks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEasier control of checks\u003c/h2\u003e\u003cp\u003eThe goodpractice package is a convenience wrapper around several other packages including \u003ca href=\"https://rcmdcheck.r-lib.org\"\u003ercmdcheck\u003c/a\u003e, \u003ca href=\"https://lintr.r-lib.org\"\u003elintr\u003c/a\u003e, \u003ca href=\"https://github.com/gaborcsardi/cyclocomp\"\u003ecyclocomp\u003c/a\u003e, and \u003ca href=\"https://desc.r-lib.org/\"\u003edesc\u003c/a\u003e, along with a few hand-coded checks within the package itself.The previous version of goodpractice had a total of 230 checks, generally prefixed with the name of the package which defined each check.Checks were identifiable with the single function, \u003ca href=\"https://docs.ropensci.org/goodpractice/reference/all_checks.html\"\u003e\u003ccode\u003eall_checks()\u003c/code\u003e\u003c/a\u003e.The only way to control which checks were run was to pass a \u003ccode\u003echecks\u003c/code\u003e parameter to the main function as a character vector of the names of checks you wanted to run.So, for example, if you wanted to skip the \u003ca href=\"https://rcmdcheck.r-lib.org\"\u003ercmdcheck\u003c/a\u003e checks, you had to do something like this:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emychecks\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003egrepv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;^rcmdcheck\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eall_checks\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"n\"\u003einvert\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003egp\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003echecks\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emychecks\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThat wasn\u0026rsquo;t easy!And honestly, most people just didn\u0026rsquo;t bother.\u003c/p\u003e\u003cp\u003eThis update finally makes it easier to control checks, by defining them in \u0026ldquo;groups\u0026rdquo;, which generally correspond to the separate packages that run the actual checks.The groups can be seen with the new \u003ca href=\"https://docs.ropensci.org/goodpractice/reference/all_check_groups.html\"\u003e\u003ccode\u003eall_check_groups()\u003c/code\u003e function\u003c/a\u003e, and controlled with the \u003ca href=\"https://docs.ropensci.org/goodpractice/reference/checks_by_group.html\"\u003e\u003ccode\u003echecks_by_group()\u003c/code\u003e function\u003c/a\u003e.Checks can be controlled by simply naming the check groups you want to run, like this:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003egp\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003echecks\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003echecks_by_group\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;lintr\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"new-check-groups\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-check-groups\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew check groups\u003c/h2\u003e\u003cp\u003eThe documentation for the \u003ca href=\"https://docs.ropensci.org/goodpractice/reference/all_check_groups.html\"\u003e\u003ccode\u003eall_check_groups()\u003c/code\u003e function\u003c/a\u003e shows all the new check groups added in this update, including:\u003c/p\u003e\u003ctable\u003e\t\u003cthead\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003cth\u003eGroup name\u003c/th\u003e\t\t\t\t\t\u003cth\u003eRun by default?\u003c/th\u003e\t\t\t\t\t\u003cth\u003eDescription\u003c/th\u003e\t\t\t\u003c/tr\u003e\t\u003c/thead\u003e\t\u003ctbody\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003edescription\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCheck common issues with \u003ccode\u003eDESCRIPTION\u003c/code\u003e files, including formatting issues with URLs, DOIs, package names, and author and contributor roles, along with other common \u003ccode\u003eDESCRIPTION\u003c/code\u003e issues.\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003erd\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCheck whether or not \u003ccode\u003eman/*.Rd\u003c/code\u003e function documentation includes both example code and return values (regardless of whether or not documentation files are generated by \u003ca href=\"https://roxygen2.r-lib.org/\"\u003eroxygen2\u003c/a\u003e).\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://roxygen2.r-lib.org/\"\u003eroxygen2\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCheck for problems with Roxygen2 generated documentation.\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://github.com/r-lib/revdepcheck\"\u003erevdep\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eno\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eReverse-dependency checks.\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003ecode_structure\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eChecks for common issues like duplicated or unused functions.\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003epackage_structure\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eGeneric checks like whether a package has a README, a NEWS file, or whether all files use a \u003ccode\u003e.R\u003c/code\u003e extension, and not \u003ccode\u003e.r\u003c/code\u003e.\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://docs.ropensci.org/spelling/\"\u003espelling\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCheck spelling.\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://tidyverse.org\"\u003etidyverse\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eno\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCheck compliance with the \u003ca href=\"https://style.tidyverse.org/\"\u003e\u003cem\u003eTidyverse style guide\u003c/em\u003e\u003c/a\u003e, mostly \u003ca href=\"https://lintr.r-lib.org/\"\u003elintr\u003c/a\u003e checks.\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://urlchecker.r-lib.org/\"\u003eurlchecker\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCheck whether all URLs are valid.\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003evignette\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eyes\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCheck that vignette code does not use either \u003ccode\u003erm()\u003c/code\u003e or \u003ccode\u003esetwd()\u003c/code\u003e.\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003eMany of these checks are powered by \u003ca href=\"/blog/2026/04/02/tree-sitter-overview/\"\u003etreesitter\u003c/a\u003e, the extremely efficient syntax parsing library used by GitHub — which is genuinely neat to have working in R.The number of checks has been increased from 230 to 338, with all listed in the output of the \u003ca href=\"https://docs.ropensci.org/goodpractice/reference/all_checks.html\"\u003e\u003ccode\u003eall_checks()\u003c/code\u003e function\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"improved-check-reporting\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#improved-check-reporting\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eImproved check reporting\u003c/h2\u003e\u003cp\u003eThe goodpractice package has always been designed for console output.This updated version now provides immediate and consistent detail on check progress while running.The \u003ca href=\"https://cli.r-lib.org\"\u003ecli package\u003c/a\u003e is also used to give consistently formatted output for all check groups.\u003c/p\u003e\u003cp\u003eThe large increase in checks also means that directly printing goodpractice results may fill several screens of output.This update also adds a \u003ccode\u003egroups\u003c/code\u003e parameter to the \u003ca href=\"https://docs.ropensci.org/goodpractice/reference/print.goodPractice.html\"\u003e\u003ccode\u003eprint()\u003c/code\u003e method\u003c/a\u003e, to enable printing check results only for specified groups.This means you can run the main \u003ca href=\"https://docs.ropensci.org/goodpractice/reference/gp.html\"\u003e\u003ccode\u003egp()\u003c/code\u003e function\u003c/a\u003e once, then step through each check group by printing results only for that group, fixing those, and then moving on to the next.We\u0026rsquo;ve found this turns what could feel like an overwhelming wall of output into a manageable to-do list.For example:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003egp\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; Aww! Shining package! Keep up the priceless work!\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;namespace\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; ── It is good practice to ─────────────────────────────────────────────────────────────────────────────────────────────────────────────\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; ✖ remove or use internal functions that are defined but never called. Dead code increases maintenance burden.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt;     R/utils.R:3\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt;     R/utils.R:73\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; ✖ define exported (user-facing) functions before internal helper functions within each R source file.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt;     R/api.R:85\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\u003ch2 id=\"notes-on-the-development-process\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#notes-on-the-development-process\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNotes on the development process\u003c/h2\u003e\u003ch3 id=\"from-mo-athanasia\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#from-mo-athanasia\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFrom Mo (Athanasia)\u003c/h3\u003e\u003cp\u003eI\u0026rsquo;ll be honest with you: a lot of this contribution was done with an AI assistant (Claude Code using Opus 4.5) at my elbow.I want to say something about that, because I think the honest version is more useful than the marketing version.The way Mark approached reviewing this work was very thoughtful and helpful.\u003c/p\u003e\u003cp\u003eBased on his feedback and how it was structured, I\u0026rsquo;ve learned a lot about what a good code review looks like, and it\u0026rsquo;s been absolutely wonderful.As a person who has mainly worked on their own code-bases alone, I have adopted a style of working that often creates diff monsters (hundreds of files changed), which can make reviewing very hard.Indeed, my first PR to this project was such a monster, and Mark pushed back asking for several smaller PRs he could actually manage to review.This is also where I learned about \u003ca href=\"https://git-scm.com/docs/git-worktree\"\u003egit worktrees\u003c/a\u003e (Thank you \u003ca href=\"https://masalmon.eu/2026/04/23/git-worktree-again/\"\u003eMaëlle\u003c/a\u003e!) and asking Claude to split the work up into several worktrees for easier review, was actually the first substantial change to how I now approach working with an AI assistant.Through this collaboration I learned a lot about splitting my work into better sizes and chunks.\u003c/p\u003e\u003cp\u003eThe shape of it was something like this:\u003c/p\u003e\u003cp\u003eI\u0026rsquo;d locate an issue I thought was meaningful to tackle, and provide Claude Code with the issue context and possibly an idea of how to solve it.Once it had a solution, I\u0026rsquo;d review it, push back where it felt off, and we\u0026rsquo;d iterate.Mark would then review the PR and point out the things I\u0026rsquo;d missed.Three-way collaboration, more or less, with the AI doing the typing and me doing the deciding.\u003c/p\u003e\u003cp\u003eWhat worked well was scaffolding.Drafting a new check, wiring up the prep step that goes with it, generating the test cases for the edge paths I\u0026rsquo;d otherwise forget — that kind of work compresses really nicely with an AI.I would often ask it to generate some tests first, then create code that would pass the tests.This way we had a clear idea of what we wanted the new code to do, and then solve it.\u003c/p\u003e\u003cp\u003eWhat worked less well was anything involving judgement I hadn\u0026rsquo;t articulated yet.The first few times Claude opened a PR for me, it left the test-plan checkboxes unticked — even when the tests already passed.That\u0026rsquo;s not wrong exactly, but it\u0026rsquo;s misleading to a reviewer.I had to say \u0026ldquo;no, check the box if the test exists and passes; an unchecked box reads as TODO.\u0026rdquo;Similarly, when Mark left inline code suggestions on a PR, Claude tried to helpfully re-implement them locally — which would have stripped Mark\u0026rsquo;s attribution off his own contribution.We had to agree: suggestions get accepted on GitHub, not retyped.\u003c/p\u003e\u003cp\u003eAnd then there\u0026rsquo;s the unglamorous part.It would often forget instructions, despite having them documented in agents.md and local memory for the project.These were mostly trivial, but at times fairly bad.Some of the first PRs we made, Mark pointed out that the solutions were using regexp rather than AST (Abstrat Syntax Trees).I have to admit, I didn\u0026rsquo;t really know about AST before starting this project, and I am so glad I now know of it.Claude, despite being told very clearly that we wanted AST solutions, would often forget and implement regexp based solutions.It would also often revert to using for-loops rather than vectorization, and creating nested for-loops into the 3rd or 4th level — which is just horrible to follow as a human.\u003c/p\u003e\u003cp\u003eIf you take one thing from this aside, take this: AI-assisted contribution didn\u0026rsquo;t mean handing the package over to a machine.It meant I could move faster on the parts I already understood, explore more confidently on the parts I didn\u0026rsquo;t, and spend my actual attention on the decisions that mattered — what to check for, how to group it, what to call it, and what to leave out.The friction taught me where to watch closely.The speed-ups taught me where I could trust the loop.\u003c/p\u003e\u003cp\u003eIt\u0026rsquo;s a different way of working, and I\u0026rsquo;m still figuring out the shape of it, but it has enabled me to contribute to this project despite some very severe health issues making it hard for me to work as normal.\u003c/p\u003e\u003cp\u003eAnd one thing Claude always does better than me: writing good commit messages.I have found myself writing my own code, but asking Claude to commit them (making it look like Claude wrote the code, but I don\u0026rsquo;t care) because the commit messages are just so much better than what I write.\u003c/p\u003e\u003ch3 id=\"from-mark\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#from-mark\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFrom Mark\u003c/h3\u003e\u003cp\u003eThe entire idea for this major update was initiated and driven by Mo.It was also my first real foray into using generative AI tools directly in rOpenSci packages, and I learnt a lot.After I rejected the initial monster PR, things settled down into much smaller and manageable PRs that were always focussed on one specific thing.\u003c/p\u003e\u003cp\u003eFrom that point, Mo was effectively the coder (assisted by Claude), and I was the reviewer.I never knew how much of the actual code was typed versus machine-generated, but was generally pleasantly surprised that I felt no need to inquire.Nearly every PR was obviously going to improve the package, and many of them were genuinely creative ideas.(That\u0026rsquo;s where I disagree slightly with Mo\u0026rsquo;s general description of the process: I am convinced a lot of the work behind this update came directly from her brilliant insights and experience, rather than her passive description of looking over pre-existing PRs.)\u003c/p\u003e\u003cp\u003eThe process started in Feb 2026, and involved \u003ca href=\"https://github.com/ropensci-review-tools/goodpractice/pulls?q=sort%3Aupdated-desc%20is%3Apr%20is%3Aclosed%20author%3Adrmowinckels\"\u003e70 pull requests\u003c/a\u003e.So many of these really were independent and new ideas.That enabled me to view each one with fresh eyes, and to think about whether I might approach anything in different ways.Over so many PRs, there was a lot of back-and-forth, from pushing back on Claude insisting on nested loops, to figuring out whether code was best parsed and analysed as text, or as a syntax tree.As Mo indicated, a lot of those discussions ultimately converged towards us bringing the power of treesitter into the package, and even helping to replace previous text-based code checks with more efficient and accurate AST approaches.\u003c/p\u003e\u003cp\u003eOur collaboration was very pleasant and enriching, and really felt like a direct cooperation between Mo as the ideas factory, me as the reviewer, and Claude as nothing more than a mediator of our ideas.The key role of Claude throughout the process was in handling all of the fiddly, technical details.We both looked carefully at every single line of code, but the use of Claude enabled our conversations to remain at higher, conceptual levels than what would have happened if we had to actually do all the technical implementation ourselves.I think that is the aspect that I found most surprising: That the use of Claude made our collaboration feel less technical, and therefore somehow even more human.And that gave us the ability to work though 70 pull requests representing over 100 new checks, all ready for everybody to use.\u003c/p\u003e\u003ch2 id=\"let-us-know-what-you-think\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#let-us-know-what-you-think\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLet us know what you think\u003c/h2\u003e\u003cp\u003eLike all rOpenSci packages, goodpractice is a community effort that lives through community use and feedback.We\u0026rsquo;d love to hear what you think, via \u003ca href=\"mailto:mark@ropensci.org\"\u003eemail\u003c/a\u003e, or through issues on the \u003ca href=\"https://github.com/ropensci-review-tools/goodpractice\"\u003eGitHub repository\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/06/01/goodpractice/","date_published":"2026-06-01T00:00:00+00:00","date_modified":"2026-06-01T08:35:48+00:00"},{"id":"https://doi.org/10.59350/8bear-txs95","title":"rOpenSci News Digest, May 2026","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2026/05/28/news-may-2026\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"15-years-of-ropensci-and-were-just-getting-started-\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#15-years-of-ropensci-and-were-just-getting-started-\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e15 Years of rOpenSci, and we\u0026rsquo;re just getting started 🎉\u003c/h3\u003e\u003cp\u003eThis year we celebrate 15 years of rOpenSci! First up we have a coworking session followed by a couple casual virtual community celebrations. Please join us! Read more in our \u003ca href=\"/blog/2026/05/13/anniversary2026/\"\u003eblog post\u003c/a\u003e about these upcoming events.\u003c/p\u003e\u003cp\u003eAlso exciting is that this blog post about our 15 year anniversary was featured in the R Weekly Highlights \u003ca href=\"https://serve.podhome.fm/episodepage/r-weekly-highlights/227\"\u003epodcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas.\u003c/p\u003e\u003ch3 id=\"champions-program-update\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#champions-program-update\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChampions Program update\u003c/h3\u003e\u003cp\u003eThe rOpenSci Champions Program is currently running two very active cohorts, with many activities happening across the program, and everything is on track!\u003c/p\u003e\u003cp\u003eThe \u003cstrong\u003e2025\u0026ndash;2026 cohort\u003c/strong\u003e is wrapping up their projects and outreach activities, with several Champions presenting their work at events such as R/Pharma, useR!, Posit, and LatinR 2026. We also recently held a cohort meeting bringing together Champions and mentors from the 2025\u0026ndash;2026 cohort and one meeting for mentors only, to share mentoring tips and tricks.\u003c/p\u003e\u003cp\u003eMeanwhile, the \u003cstrong\u003e2026\u0026ndash;2027 cohort\u003c/strong\u003e has started their training activities, including three weekly training workshops for Champions and a mentor training workshop. Mentors and Champions have also had their first meetings together to get to know each other and begin planning their collaboration.\u003c/p\u003e\u003cp\u003eStay tuned to our \u003ca href=\"/events\"\u003eevents page\u003c/a\u003e for Champions outreach activities and to our blog to learn more about Champions\u0026rsquo; projects.\u003c/p\u003e\u003ch3 id=\"may-is-maintainer-month\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#may-is-maintainer-month\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMay is Maintainer Month\u003c/h3\u003e\u003cp\u003eOpen source software doesn\u0026rsquo;t sustain itself. Behind every R package, there is at least one person who responds to issues, reviews pull requests, keeps up with dependency changes, and makes sure everything still works.\u003c/p\u003e\u003cp\u003eWe joined the #MaintainerMonth celebration with a month-long series of rOpenSci\u0026rsquo;s maintainer spotlights: \u003cstrong\u003e36 maintainers from 15 countries across 4 continents\u003c/strong\u003e, maintaining more than 50 packages that together serve thousands of researchers and data practitioners around the world.\u003c/p\u003e\u003cp\u003eFollow our social media (\u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon\u003c/a\u003e and \u003ca href=\"https://www.linkedin.com/company/ropensci/\"\u003eLinkedIn\u003c/a\u003e) and the official hashtag (#MaintainerMonth) to learn more about the maintainers who support open source software. \u003cstrong\u003eThank you\u003c/strong\u003e to those who agreed to participate and to all the maintainers in our community.\u003c/p\u003e\u003ch3 id=\"software-review-update\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review-update\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware-Review update\u003c/h3\u003e\u003cp\u003eThis month saw a slight policy shift in the way editors handle new software review submissions, assisted by an internal update to our bot system. Previously, our rotating Editor-in-Chief (EiC) was solely responsible for initial decisions on whether to proceed with submissions. Once a decision was reached, a handling editor took over, and generally guided each submission through to approval. However, recent increases in submissions have been too much for one EiC to handle. Submissions will now be passed on more quickly to handling editors who will then make initial scope and fit decisions.\u003c/p\u003e\u003cp\u003eAs part of this change, the EiC can now ask the bot to \u0026ldquo;ping editors\u0026rdquo;. Editors will receive an email alerting them of this new submission and can then decide whether to take it on as editor. Each time an editor clicks on a link in the email, the EiC will receive an email notification, and once an editor is assigned, all links will be automatically deactivated.\u003c/p\u003e\u003cp\u003eFor anybody interested in how to develop an email alert system like this, please contact us and we\u0026rsquo;ll have happy to share what we learnt along the way. Full code is in \u003ca href=\"https://github.com/ropensci-review-tools/roreviewapi/blob/main/R/editor-search.R\"\u003ethis R file\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"social-media-cards-for-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#social-media-cards-for-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSocial media cards for R-universe\u003c/h3\u003e\u003cp\u003eWhen posting about your package or universe on social media, you can get a pretty social media card featuring important information about (respectively):\u003c/p\u003e\u003cul\u003e\u003cli\u003ethe package such as its maintainer, its \u003ca href=\"https://docs.r-universe.dev/publish/metadata.html#keywords\"\u003ekeywords\u003c/a\u003e, its URL, its version, its number of stars, etc.\u003c/li\u003e\u003c/ul\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"https://ropensci.r-universe.dev/targets/card.png\" width=\"600\"\u003e\u003c/figure\u003e\u003cul\u003e\u003cli\u003ethe universe such as its number of packages and contributors, etc.\u003c/li\u003e\u003c/ul\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"https://ropensci.r-universe.dev/card.png\" width=\"600\"\u003e\u003c/figure\u003e\u003cp\u003e\u003ca href=\"https://docs.r-universe.dev/browse/packages.html#social-media-cards\"\u003eMore information in the R-universe documentation\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday June 2nd 2026, 14:00 Europe Central (12:00 UTC) \u003ca href=\"/events/coworking-2026-06/\"\u003e\u0026ldquo;15 years with rOpenSci\u0026rdquo;\u003c/a\u003e, with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/noam-ross\"\u003eNoam Ross\u003c/a\u003e.\u003cul\u003e\u003cli\u003eExplore rOpenSci projects\u003c/li\u003e\u003cli\u003eDo a deep dive into the rOpenSci blog history\u003c/li\u003e\u003cli\u003eMeet rOpenSci\u0026rsquo;s Executive Director, Noam Ross, and discuss how rOpenSci has evolved over the last 15 years.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday July 7nd 2026, 09:00 Americas Pacific (16:00 UTC) \u003ca href=\"/events/coworking-2026-07/\"\u003e\u0026ldquo;Debugging in R\u0026rdquo;\u003c/a\u003e, with \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e and cohost \u003ca href=\"/author/shannon-pileggi\"\u003eShannon Pileggi\u003c/a\u003e.\u003cul\u003e\u003cli\u003eRead up on debugging in R\u003c/li\u003e\u003cli\u003eMeet community host, Shannon Pileggi, and discuss tips and tricks for debugging in R.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following ten packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (CFF) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v1.4.0\"\u003e\u003ccode\u003ev1.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gutenbergr\" title=\"Download and Process Public Domain Works from Project Gutenberg\"\u003egutenbergr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gutenbergr/releases/tag/v0.5.1\"\u003e\u003ccode\u003ev0.5.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dataset\" title=\"Create Data Frames for Exchange and Reuse\"\u003edataset\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dataset/releases/tag/0.4.4\"\u003e\u003ccode\u003e0.4.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/sofa\" title=\"Connector to CouchDB\"\u003esofa\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/sofa/releases/tag/v0.4.1\"\u003e\u003ccode\u003ev0.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/saperlipopette\" title=\"Create Example Git Messes\"\u003esaperlipopette\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-training/saperlipopette/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/medrxivr\" title=\"Access and Search MedRxiv and BioRxiv Preprint Data\"\u003emedrxivr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/medrxivr/releases/tag/snapshot\"\u003e\u003ccode\u003esnapshot\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/textreuse\" title=\"Detect Text Reuse and Document Similarity\"\u003etextreuse\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/textreuse/releases/tag/v1.0.1\"\u003e\u003ccode\u003ev1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/EDIutils\" title=\"An API Client for the Environmental Data Initiative Repository\"\u003eEDIutils\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/EDIutils/releases/tag/v2.1.0\"\u003e\u003ccode\u003ev2.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rsi\" title=\"Efficiently Retrieve and Process Satellite Imagery\"\u003ersi\u003c/a\u003e (\u003ca href=\"https://github.com/Permian-Global-Research/rsi/releases/tag/v0.3.3\"\u003e\u003ccode\u003ev0.3.3\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/UCSCXenaTools\" title=\"Download and Explore Datasets from UCSC Xena Data Hubs\"\u003eUCSCXenaTools\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/UCSCXenaTools/releases/tag/v1.7.0\"\u003e\u003ccode\u003ev1.7.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eThe writexl package has a \u003ca href=\"https://github.com/ropensci/writexl/pull/98#issuecomment-4191858158\"\u003enew maintainer\u003c/a\u003e, Bill Denney. NLMR is now maintained by \u003ca href=\"https://github.com/ropensci/NLMR/issues/116#issuecomment-4280937012\"\u003eJakub Nowosad\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are eighteen recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/754\"\u003esaperlipopette\u003c/a\u003e, Create Example Git Messes. Submitted by \u003ca href=\"https://masalmon.eu/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%225/awaiting-reviewer(s)-response%22\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/750\"\u003enycOpenData\u003c/a\u003e, Convenient Access to NYC Open Data API Endpoints. Submitted by \u003ca href=\"https://github.com/martinezc1\"\u003eChristian Martinez\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/730\"\u003eernest\u003c/a\u003e, A Toolkit for Nested Sampling. Submitted by \u003ca href=\"https://github.com/kylesnap\"\u003eKyle Dewsnap\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSix at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/760\"\u003epvEBayes\u003c/a\u003e, Empirical Bayes Methods for Pharmacovigilance. Submitted by \u003ca href=\"https://github.com/YihaoTancn\"\u003eYihao Tan\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/743\"\u003eRAMEN\u003c/a\u003e, RAMEN: Regional Association of Methylome variability with the Exposome and geNome. Submitted by \u003ca href=\"https://erick-navarrodelgado.netlify.app\"\u003eErick Navarro-Delgado\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/741\"\u003elogolink\u003c/a\u003e, An Interface for Running NetLogo Simulations. Submitted by \u003ca href=\"http://danielvartan.com\"\u003eDaniel Vartanian\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/718\"\u003ercrisp\u003c/a\u003e, Automate the Delineation of Urban River Spaces. Submitted by \u003ca href=\"https://github.com/cforgaci\"\u003eClaudiu Forgaci\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/704\"\u003epriorsense\u003c/a\u003e, Prior Diagnostics and Sensitivity Analysis. Submitted by \u003ca href=\"https://github.com/n-kall\"\u003eNoa Kallioinen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/765\"\u003eciecl\u003c/a\u003e, International Classification of Diseases ICD-10/ICD-11 for Chile. Submitted by \u003ca href=\"https://github.com/Rodotasso\"\u003eRodolfo Tasso\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%222/seeking-reviewer(s)%22\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/763\"\u003eEpiStrainDynamics\u003c/a\u003e, Infer temporal trends of multiple pathogens. Submitted by \u003ca href=\"http://www.smwindecker.com\"\u003eSaras Windecker\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/762\"\u003elakefetch\u003c/a\u003e, Calculate Fetch and Wave Exposure for Lake Sampling Points. Submitted by \u003ca href=\"https://github.com/jeremylfarrell\"\u003ejeremylfarrell\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/744\"\u003eRAQSAPI\u003c/a\u003e, A Simple Interface to the US EPA Air Quality System Data Mart API. Submitted by \u003ca href=\"https://github.com/mccroweyclinton-EPA\"\u003emccroweyclinton-EPA\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/740\"\u003efcmconfr\u003c/a\u003e, Fuzzy Cognitive Map Analysis in R. Submitted by \u003ca href=\"https://github.com/bhroston\"\u003ebenroston\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/717\"\u003ecoevolve\u003c/a\u003e, Fit Bayesian Generalized Dynamic Phylogenetic Models using Stan. Submitted by \u003ca href=\"https://scottclaessens.github.io/\"\u003eScott Claessens\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/752\"\u003emetasurvey\u003c/a\u003e, Reproducible Survey Data Processing with Step Pipelines. Submitted by \u003ca href=\"https://github.com/mauroloprete\"\u003eMauro Loprete\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/725\"\u003eLBDiscoverAnalysis\u003c/a\u003e, Co-occurrence Discovery Models and Visualization for Biomedical LBD. Submitted by \u003ca href=\"https://github.com/chaoliu-cl\"\u003eChao Liu\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/05/06/mentors-2026\"\u003eNew Mentoring Team with Experienced Mentors and New Voices\u003c/a\u003e by Alber Hamersson Sánchez Ipia, Pablo Paccioretti, Erick Navarro Delgado, Guadalupe Pascal, Andrea Gomez Vargas, Monika Avila Marquez, Luis D. Verde Arregoitia, Francisco Cardozo, Elio Campitelli, Pao Corrales, and Yanina Bellini Saibene. Meet the new team of mentors who will accompany our Champions in their projects for a year, sharing experience, guidance and enthusiasm. Other languages: \u003ca href='/es/blog/2026/05/26/mentoras_es-2026' lang='es'\u003eNuevo equipo de mentor(a|e)s con experiencia y nuevas voces (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/05/13/anniversary2026\"\u003e15 Years of rOpenSci, and We\u0026rsquo;re Just Getting Started 🎉\u003c/a\u003e by The rOpenSci Team.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2026/05/28/news-may-2026/PixelArt15yearrOpenSci.png\"\t\t\talt=\"Retro pixel-art graphic celebrating rOpenSci\u0026#39;s 15th anniversary. The text \u0026#39;rOpenSci\u0026#39; appears at the top in pixel font, flanked by three pixel-art balloons. A browser window frames the central message: \u0026#39;15 YEARS / TRANSFORMING OPEN SCIENCE\u0026#39; in bold pixel letters, overlaid on the rOpenSci geometric network pattern. A pixel badge reads \u0026#39;OMG\u0026#39;. A pixel folder and sparkle icons complete the design.\" width=\"400\"\u003e\u003c/figure\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/charlatan\"\u003echarlatan\u003c/a\u003e, create fake data in R. \u003ca href=\"https://github.com/ropensci/charlatan/issues/150\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/landscapetools\"\u003elandscapetools\u003c/a\u003e, R package for some of the less-glamorous tasks involved in landscape analysis. \u003ca href=\"https://github.com/ropensci/landscapetools/issues/48\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools\"\u003ehddtools\u003c/a\u003e, Tools to discover hydrological data, accessing catalogues and databases from various data providers. \u003ca href=\"https://github.com/ropensci/hddtools/issues/36\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful information for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"devtools-install-functions-now-officially-deprecated\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#devtools-install-functions-now-officially-deprecated\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003edevtools\u0026rsquo; install functions now officially deprecated\u003c/h3\u003e\u003cp\u003eThe \u003ccode\u003edevtools::install_\u003c/code\u003e functions like \u003ca href=\"https://devtools.r-lib.org/reference/install-deprecated.html\"\u003e\u003ccode\u003edevtools::install_github()\u003c/code\u003e\u003c/a\u003e have now been officially \u003ca href=\"https://devtools.r-lib.org/reference/install-deprecated.html\"\u003edeprecated\u003c/a\u003e in favor of \u003ca href=\"https://pak.r-lib.org/\"\u003epak\u003c/a\u003e. The \u003ca href=\"https://devtools.r-lib.org/reference/install-deprecated.html\"\u003emanual page\u003c/a\u003e contains a migration guide. Time to update older READMEs!\u003c/p\u003e\u003ch3 id=\"new-git-commands\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-git-commands\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew Git commands!\u003c/h3\u003e\u003cp\u003eNew in Git: git history! Thanks to Hugo Gruson for bringing this to our attention.\u003c/p\u003e\u003cp\u003eImagine\u0026hellip;\u003c/p\u003e\u003cp\u003e😰 Oops, that old commit\u0026rsquo;s message had a typo! 😌 git history reword \u003ccommit-id\u003e\u003c/p\u003e\u003cp\u003e😰 Oops, that old commit is too big! 😌 git history split \u003ccommit-id\u003e (to split it into two commits)\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://github.blog/open-source/git/highlights-from-git-2-54/#h-rewrite-history-with-git-history\"\u003eGit release notes\u003c/a\u003e; \u003ca href=\"https://git-scm.com/docs/git-history\"\u003eGit docs\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"roxygen2-800\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#roxygen2-800\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eroxygen2 8.0.0\u003c/h3\u003e\u003cp\u003eA new version of roxygen2 hit CRAN. Among the highlights are improvements for R6, S7, inheritance, and better documentation of roxygen2 itself, including the \u003ca href=\"https://roxygen2.r-lib.org/articles/extending.html\"\u003evignette on extending roxygen2 with your own tags and roclets\u003c/a\u003e. \u003ca href=\"https://opensource.posit.co/blog/2026-05-01_roxygen2-8-0-0/\"\u003eRelease announcement\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"comment-description-files\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#comment-description-files\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eComment \u003ccode\u003eDESCRIPTION\u003c/code\u003e files\u003c/h3\u003e\u003cp\u003eHave you noticed this line in the release notes of R 4.6.0?\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"https://rdrr.io/r/base/dcf.html\"\u003e\u003ccode\u003eread.dcf()\u003c/code\u003e\u003c/a\u003e now recognizes lines starting with \u003ccode\u003e#\u003c/code\u003e as comment lines. By Dirk Eddelbuettel, Laurent Gatto and Hugo Gruson.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThis means it\u0026rsquo;s becoming possible to add comments to \u003ccode\u003eDESCRIPTION\u003c/code\u003e files, for instance to note why you added a given dependency.\u003c/p\u003e\u003ch3 id=\"cross-r-package-for-running-code-with-different-package-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#cross-r-package-for-running-code-with-different-package-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e{cross} R package for running code with different package versions\u003c/h3\u003e\u003cp\u003eHave you ever used \u003ca href=\"https://masalmon.eu/2024/01/23/git-worktree/\"\u003eGit worktree\u003c/a\u003e to load several R package versions at once (in different sessions), for instance to create a benchmark? Davis Vaughan made such endeavors much smoother with his \u003ca href=\"https://github.com/DavisVaughan/cross\"\u003ecross R package\u003c/a\u003e. cross uses Git worktree under the hood to install different package versions in temporary libraries and then runs R code with these different versions. Furthermore, it has a user-friendly interface!\u003c/p\u003e\u003cp\u003eFor example, to compare the released version of vctrs to the developement version on GitHub, you could run the following.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecross\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ebench_versions\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epkgs\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;vctrs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;r-lib/vctrs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003evctrs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kc\"\u003eNA\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kc\"\u003eNA\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ebench\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003emark\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emissing\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003evec_detect_missing\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"on-attribution-with-a-footnote\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-attribution-with-a-footnote\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn attribution with a footnote\u003c/h3\u003e\u003cp\u003eJames Balamuta wrote two thoughtful posts on a \u003ca href=\"https://blog.thecoatlessprofessor.com/posts/closing-the-footnote-loop/\"\u003etricky situation and its resolution\u003c/a\u003e. TL;DR James\u0026rsquo; work on portable R was used in another repository with only minimal acknowledgement through a footnote in a comment. However, those involved came together to work out a resolution through meaningful conversation.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e. This guide will help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways such as through sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so though our signup form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us through our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e, \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon\u003c/a\u003e, or \u003ca href=\"https://www.linkedin.com/company/ropensci/\"\u003eLinkedIn\u003c/a\u003e. See you soon!\u003c/p\u003e","url":"https://ropensci.org/blog/2026/05/28/news-may-2026/","date_published":"2026-05-28T00:00:00+00:00","date_modified":"2026-05-28T13:21:40+02:00"},{"id":"https://doi.org/10.59350/cz2sy-c7z69","title":"15 Years of rOpenSci, and We're Just Getting Started 🎉","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["rOpenSci Team","community","welcome"],"content_html":"\u003cp\u003eDigging through our memory box, we came across a conversation from which we tried to piece together when it all began with rOpenSci.\u003c/p\u003e\u003cp\u003eOn July 13, 2011, an email was sent with the idea of a shared blog, a clever domain name, and a way to connect R package developers who cared about open science. The name \u0026ldquo;rOpenSci\u0026rdquo; appear in that email. A few months before that, the first commits had already been pushed to what would become taxize and treeBASE, two packages that quietly planted the seed of something much bigger.\u003c/p\u003e\u003cp\u003eThat was 15 years ago. This year, we celebrate. 🎉\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2026/05/13/anniversary2026/PixelArt15yearrOpenSci.png\"\t\t\talt=\"Retro pixel-art graphic celebrating rOpenSci\u0026#39;s 15th anniversary. The text \u0026#39;rOpenSci\u0026#39; appears at the top in pixel font, flanked by three pixel-art balloons. A browser window frames the central message: \u0026#39;15 YEARS / TRANSFORMING OPEN SCIENCE\u0026#39; in bold pixel letters, overlaid on the rOpenSci geometric network pattern. A pixel badge reads \u0026#39;OMG\u0026#39;. A pixel folder and sparkle icons complete the design.\" width=\"500\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eTemplate design by Lauren Creatives in Canva. Adapted by Yani.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"quinceañera-time-\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#quincea%c3%b1era-time-\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003cem\u003eQuinceañera\u003c/em\u003e time 🎂\u003c/h2\u003e\u003cp\u003eFifteen years\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e is a milestone worth marking properly, that is why we want to celebrate with our community. We have a full year of activities planned, and we want you along for all of it.\u003c/p\u003e\u003cp\u003eExpect several diverse events, retrospectives and a few surprises we\u0026rsquo;re still stitching together. We\u0026rsquo;ll be reflecting on what we\u0026rsquo;ve built, highlighting the work of contributors old and new, and dreaming out loud about the next 15 years.\u003c/p\u003e\u003cp\u003eStay tuned to this blog and our newsletter for announcements as the year unfolds.\u003c/p\u003e\u003ch2 id=\"first-up-co-working-session-and-casual-virtual-community-celebration\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#first-up-co-working-session-and-casual-virtual-community-celebration\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFirst up: co-working session and casual virtual community celebration\u003c/h2\u003e\u003cp\u003eWe\u0026rsquo;re kicking things off with one \u003ca href=\"/events/coworking-2026-06\"\u003eco-working session on Tuesday, June 2\u003c/a\u003e and two virtual celebrations on \u003ca href=\"/events/celebrations-2026-06-10\"\u003eWednesday, June 10\u003c/a\u003e and \u003ca href=\"/events/celebrations-2026-06-17\"\u003eWednesday, June 17\u003c/a\u003e in different timezones, so as many people as possible can join.\u003c/p\u003e\u003cp\u003eEach 90-minute celebration is built around rotating small-group conversations. You\u0026rsquo;ll meet community members you may not know yet, and together you\u0026rsquo;ll dig into questions to reflect on rOpenSci\u0026rsquo;s past and future.\u003c/p\u003e\u003cp\u003eOld friends and new faces alike, we would love to share this celebrations with you. No registration needed.\u003c/p\u003e\u003ch2 id=\"thank-you\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#thank-you\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThank you\u003c/h2\u003e\u003cp\u003eTo everyone who has contributed a package, reviewed code, written a blog post, helped in the forum, showed up to a community call, or simply used our tools in your research, thank you!\u003c/p\u003e\u003cp\u003eHere\u0026rsquo;s to 15 years and to whatever comes next.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eThe fifteenth birthday of young women in many Latin American cultures is a special marker of adulthood called a Quinceañera.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2026/05/13/anniversary2026/","date_published":"2026-05-13T00:00:00+00:00","date_modified":"2026-05-18T10:17:44+02:00"},{"id":"https://doi.org/10.59350/gdrkz-acg32","title":"New Mentoring Team with Experienced Mentors and New Voices","language":"en","authors":[{"name":"Alber Hamersson Sánchez Ipia","url":"https://ropensci.org/author/alber-hamersson-s%C3%A1nchez-ipia/","avatar":"https://github.com/albhasan.png","_role":["author"]},{"name":"Andrea Gomez Vargas","url":"https://orcid.org/0009-0007-8745-3967","avatar":"https://github.com/SoyAndrea.png","_role":["author"]},{"name":"Elio Campitelli","url":"https://ropensci.org/author/elio-campitelli/","avatar":"https://ropensci.org/img/team/elio-campitelli.jpg","_role":["author"]},{"name":"Erick Navarro Delgado","url":"https://orcid.org/0000-0003-1040-3519","avatar":"https://github.com/ErickNavarroD.png","_role":["author"]},{"name":"Francisco Cardozo","url":"https://orcid.org/0000-0002-1925-4954","avatar":"https://github.com/focardozom.png","_role":["author"]},{"name":"Guadalupe Pascal","url":"https://ropensci.org/author/guadalupe-pascal/","avatar":"https://github.com/guadapascal.png","_role":["author"]},{"name":"Luis D. Verde Arregoitia","url":"https://ropensci.org/author/luis-d.-verde-arregoitia/","avatar":"https://github.com/luisDVA.png","_role":["author"]},{"name":"Monika Avila Marquez","url":"https://orcid.org/0009-0004-7720-6135","avatar":"https://github.com/monikavila.png","_role":["author"]},{"name":"Pablo Paccioretti","url":"https://ropensci.org/author/pablo-paccioretti/","avatar":"https://github.com/PPaccioretti.png","_role":["author"]},{"name":"Pao Corrales","url":"https://orcid.org/0000-0003-1923-9129","avatar":"https://ropensci.org/img/team/paola-corrales.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["champions program","mentor","community"],"content_html":"\u003cp\u003eWe are excited to introduce the new team of mentors for the rOpenSci 2026 Champions Program! This year we have eleven individuals committed to open science, bringing together a rich diversity of backgrounds and perspectives. The team is made up of people joining the program for the first time, former Champions returning as mentors, and experienced mentors from previous cohorts returning to continue to strengthen this community.\u003c/p\u003e\u003cp\u003eThis year\u0026rsquo;s mentors come from a variety of disciplines and countries, and are active voices in the R community in Latin America and beyond. With their guidance, the new group of Champions will not only develop their projects, but also grow as leaders in open science and research software development.\u003c/p\u003e\u003ch2 id=\"new-mentors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-mentors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew mentors\u003c/h2\u003e\u003ch3 id=\"alber-hamersson-sánchez-ipia\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#alber-hamersson-s%c3%a1nchez-ipia\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAlber Hamersson Sánchez Ipia\u003c/h3\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/alber-sanchez.jpg\"\t\t\talt=\"Profile photo of Alber Hamersson Sánchez Ipia\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eAlber Hamersson Sánchez Ipia \u003c/br\u003e Instituto Nacional de Investigación Espacial del Brasil \u003c/br\u003e rOpenSci\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHi! I\u0026rsquo;m Alber and I\u0026rsquo;m going to be an rOpenSci mentor this year.\u003c/p\u003e\u003cp\u003eI was born in Colombia, in the department of Cauca, in one of the country\u0026rsquo;s most mountainous regions, called Tierradentro.I am a Cadastral and Geodetic Engineer from the Francisco José de Caldas District University in Colombia, where I earned a Master\u0026rsquo;s in Information and Communication Sciences;additionally, I completed another Master\u0026rsquo;s degree in Geoinformaticsat the University of Münster in Germany, and later earned a PhD in Earth System Science at the National Institute for Space Research (INPE) in Brazil. Currently, I live and work in Brazil and serve as a research assistant at the same INPE.\u003c/p\u003e\u003cp\u003ePart of my daily work involves writing R code to process spatial data and ensure the reproducibility of the scientific experiment results, so I am familiar with R package development.Additionally, I am a co-author of the segmetric package, which is currently available on CRAN,and I maintain one of the Data Carpentry lessons,specifically the introduction to R for geospatial data.\u003c/p\u003e\u003cp\u003eI am interested in sharing the knowledge and experience I have accumulated so far with anyone who is going to write scientific or statistical software,particularly in Spanish.For this reason I am joining rOpenSci,where I hope to be part of and help build a community of developers.\u003c/p\u003e\u003c/br\u003e\u003c/br\u003e\u003ch3 id=\"pablo-paccioretti\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pablo-paccioretti\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePablo Paccioretti\u003c/h3\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/pablo-paccioretti.jpg\"\t\t\talt=\"Profile photo of Pablo Paccioretti\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003ePablo Paccioretti \u003c/br\u003e Universidad Nacional de Córdoba (UNC) \u0026amp; CONICET, Argentina \u003c/br\u003e rOpenSci\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHello! I am Pablo, Agricultural Engineer and PhD from the National University of Córdoba (Argentina), where I work as a researcher and teacher. Since my student years I have been interested in Statistics, which directed my work towards data analysis. In particular, I apply and develop methodologies and software tools to analyze georeferenced data from field trials and agricultural monitoring platforms.\u003c/p\u003e\u003cp\u003eI am interested in the development of open tools for data processing and analysis. I have developed scientific software, including R packages for georeferenced data analysis.\u003c/p\u003e\u003cp\u003eMy participation in the Champions Program arises from an interest in strengthening the links between applied data analysis and programming, and promoting good practices in both areas. Through this program I hope to contribute to the community by sharing experiences and resources, while also learning from other professionals working in different contexts and disciplines.\u003c/p\u003e\u003c/br\u003e\u003c/br\u003e\u003ch2 id=\"champions-to-mentors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#champions-to-mentors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChampions to mentors\u003c/h2\u003e\u003ch3 id=\"erick-navarro-delgado\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#erick-navarro-delgado\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eErick Navarro Delgado\u003c/h3\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/erick-navarro-delgado.jpg\"\t\t\talt=\"Profile photo of Erick Navarro Delgado\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eErick Navarro Delgado \u003c/br\u003e The University of British Columbia \u003c/br\u003e rOpenSci\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHello! My name is Erick Navarro, and I have a degree in biology from the Universidad Nacional Autónoma de México, and I am a PhD candidate in Bioinformatics at The University of British Columbia. I was born and raised in Mexico City, but currently live in Vancouver, Canada. My line of research is focused on developing computational tools to understand how genetic factors and environmental exposures/lived experiences act together or separately to shape our molecular landscape.\u003c/p\u003e\u003cp\u003eI am excited to participate in the rOpenSci Champions Program because I believe that open and accessible science is essential for conducting relevant research whose results benefit everyone in our society. In this program I hope to connect with new members of the open science community, share my programming skills, and drive software development in Latin America.\u003c/p\u003e\u003c/br\u003e\u003ch3 id=\"guadalupe-pascal\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#guadalupe-pascal\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGuadalupe Pascal\u003c/h3\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/guadalupe-pascal.jpg\"\t\t\talt=\"Profile photo of Guadalupe Pascal\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eGuadalupe Pascal \u003c/br\u003e UNLZ-UCA-UGR \u003c/br\u003erOpenSci\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHello! My name is Guadalupe.\u003c/p\u003e\u003cp\u003eI am a researcher and project coordinator in optimization and data science for decision making in social systems, with transfeminist, open science and regional perspectives. I am also an associate professor of optimization and quantitative methods (UNLZ-UCA) and professor in data science and artificial intelligence courses (UGR). I have a Master\u0026rsquo;s in Decision Systems Engineering from URJC (Spain) and am an industrial engineer from UNLZ (Argentina), a PhD student in Information Technology and Engineering (URJC-UNLZ), and hold deplomas in Gender and Society (UNLZ), Cognitive Neuroscience (Neurotransmitting), and Education in the Age of Artificial Intelligence (UMET). I am part of the Matilda Latin American Open Chair and Women in Engineering, as a founding member and representative of the Gender Network of Engineering Faculties of Argentina.\u003c/p\u003e\u003cp\u003eI am also currently part of the rOpenSci community as a 2025-2026 cohort Champion, and I am very excited to be a mentor in this program for several reasons. On the one hand, I have a deep gratification from being engaged with the current cohort. From a simple point of view, the quality and rigor with which the program is implemented in all its instances have a direct impact on the quality and rigor of my own work. And from an holistic point of view, this serves as extremely valuable and compelling evidence of the synergy within communities of practice in developing skills and producing situated knowledge: the rOpenSci Champions Program is a concrete and real example of how communities share knowledge and, fundamentally, values, perspectives and embodied learning. On the other hand, I am looking forward to the challenge of being a mentor in this program because, although it is a role that I have played in other environments, I have never mentored the development of someone else\u0026rsquo;s R package. Finally, I would like to work in this role to share my experiences as both a mentor and mentee with the community. I believe that accompanying each other in a formative and transformative process is one of the most human dimensions of this ecosystem in which we work.\u003c/p\u003e\u003c/br\u003e\u003ch3 id=\"andrea-gomez-vargas\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#andrea-gomez-vargas\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAndrea Gomez Vargas\u003c/h3\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/andrea-vargas.png\"\t\t\talt=\"Profile photo of Andrea Gomez Vargas\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eAndrea Gomez Vargas \u003c/br\u003e INDEC \u003c/br\u003e R-Ladies, rOpenSci\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am Colombian by origin and Argentinean by choice, where today I live, develop my career, and actively participate in the community of R. I am a sociologist and work in the national statistics office of Argentina, in the area of social statistics, where I analyze information about the population to understand inequalities and living conditions.\u003c/p\u003e\u003cp\u003eThe R community is my favorite space to share knowledge and build collectively. Currently, I am co-organizer of \u003ca href=\"https://renbaires.github.io/\"\u003eR in Buenos Aires\u003c/a\u003e and \u003ca href=\"https://rse-argentina.github.io/\"\u003eRSE Argentina\u003c/a\u003e, and I also participate in communities such as R-Ladies, LatinR and rOpenSci, contributing to the strengthening of networks at local, regional and global levels, promoting the learning and use of open tools in data science.\u003c/p\u003e\u003cp\u003eI was a \u003ca href=\"//blog/2025/05/15/puentes-comunidades-campeones-ropensci/\"\u003eChampion in the 2023-2024 cohort.\u003c/a\u003e where I developed \u003ca href=\"https://soyandrea.github.io/arcenso/\"\u003e{ARcenso} a package that facilitates access to historical census data for Argentina\u003c/a\u003e. I am motivated to continue in the program as a mentor to continue promoting open knowledge and to accompany other people in the development of projects with an impact on their communities.\u003c/p\u003e\u003c/br\u003e\u003ch3 id=\"monika-avila-marquez\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#monika-avila-marquez\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMonika Avila Marquez\u003c/h3\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/monika-avila-marquez.jpeg\"\t\t\talt=\"Profile photo of Monika Ávila Márquez\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eMonika Ávila Márquez \u003c/br\u003e Universidad de Ginebra \u003c/br\u003e R-Ladies, rOpenSci\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHi, I am Monika, a postdoctoral researcher in statistics at the University of Geneva, where I work on causal inference and machine learning methods for panel data. I have a PhD in econometrics and my research focuses on the development of semi-parametric estimators that combine machine learning techniques with econometric foundations for estimating panel data models. I also work on mixed effects model selection and causal inference with interference.\u003c/p\u003e\u003cp\u003eI am co-organizer of the R-Ladies Geneva chapter, where I strive to build an inclusive community of practice for people using R in research.\u003c/p\u003e\u003cp\u003eI am participating as a mentor in this program because I want to give back for all that rOpenSci has given me. This community has accompanied me in my professional development - as a source of resources, as a learning space and as an example of what it means to do open science with rigor and generosity. Today I have the opportunity to offer that same support to others, and that excites me deeply.\u003c/p\u003e\u003c/br\u003e\u003ch2 id=\"returning-mentors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#returning-mentors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReturning mentors\u003c/h2\u003e\u003ch3 id=\"luis-d-verde-arregoitia\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#luis-d-verde-arregoitia\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLuis D. Verde Arregoitia\u003c/h3\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/luis-verde.jpeg\"\t\t\talt=\"Profile photo of Luis D. Verde Arregoitia\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eLuis D. Verde Arregoitia\u003c/br\u003eInstituto de Ecología AC - INECOL\u003c/br\u003eLatinR, rOpenSci, The Carpentries\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHi, I\u0026rsquo;m Luis D. Verde Arregoitia, a Mexican living in Xalapa, Mexico. Biologist and PhD in Biological Sciences, I am a mammal specialist with experience in R programming for data analysis, visualization and statistical modeling. I am also a certified instructor and author of several packages.\u003c/p\u003e\u003cp\u003eI was a mentor in two previous cohorts of the program where I have supported software developers in Latin America and I return with much enthusiasm to this new cohort.\u003c/p\u003e\u003c/br\u003e\u003c/br\u003e\u003c/br\u003e\u003c/br\u003e\u003c/br\u003e\u003c/br\u003e\u003ch3 id=\"pao-corrales\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pao-corrales\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePao Corrales\u003c/h3\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/paola-corrales.png\"\t\t\talt=\"Profile photo of Pao Corrales\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003ePao Corrales\u003c/br\u003eAustralian National University \u0026amp; 21st century weather CoE \u003c/br\u003e R-Ladies, LatinR, rOpenSci, The Carpentries, RForwards \u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI have a PhD in Atmospheric Sciences from the University of Buenos Aires (Argentina) and am currently working in Australia at the \u003cem\u003e21st Century Weather Centre\u003c/em\u003e as a research software engineer.\u003c/p\u003e\u003cp\u003eI actively participate in R-Ladies, R Forwards, The Carpentries, LatinR and rOpenSci, learning and sharing knowledge about R in the community. In 2023 I participated in the Champions Program as a Champion, submitting the agroclimate package to the rOpenSci peer review process. I learned a lot and connected with people from all over the world. Tt was an excellent experience!\u003c/p\u003e\u003cp\u003eI am passionate about teaching and helping other people grow in what they do, access new opportunities and develop professionally and as individuals. I am very excited to participate again this year as a mentor in the Latin America Champions Program.\u003c/p\u003e\u003ch3 id=\"francisco-cardozo\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#francisco-cardozo\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFrancisco Cardozo\u003c/h3\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/francisco-cardozo.jpg\"\t\t\talt=\"Profile photo of Francisco Cardozo\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eFrancisco Cardozo\u003c/br\u003e[Afiliacion universidad] \u003c/br\u003e rOpenSci - The Carpentries\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is Francisco Cardozo. I am originally from Colombia and came to the United States to pursue my doctoral studies. I am currently working at the University of Miami as a postdoctoral researcher in the IMPAC research center, an institution dedicated to advancing our understanding of adolescent development. I have participated in the Champions Program on several occasions. Much of my professional work has focused on research design and the application of statistical methods, particularly through the use of the R software environment.\u003c/p\u003e\u003c/br\u003e\u003c/br\u003e\u003c/br\u003e\u003c/br\u003e\u003ch3 id=\"milagros-mendoza\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#milagros-mendoza\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMilagros Mendoza\u003c/h3\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/milagros-mendoza.jpeg\"\t\t\talt=\"Milagros Mendoza\u0026#39;s Profile Picture \" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eMilagros Mendoza \u003c/br\u003e Universidade Federal Rural de Pernambuco\u003c/br\u003e R-Ladies Natal, rOpenSci\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHello, my name is Milagros. I am an ecologist and statistician driven by a desire to understand the complex systems that intertwine nature, society, and data. Throughout my career, I have worked with interdisciplinary data in the fields of climate, demography, and ecology, always striving to translate that data into knowledge that engages with reality and contributes to more informed decision-making. I am currently pursuing a postdoctoral fellowship at the Vale Institute of Technology in Brazil, where I am part of the research group on territories and natural resources.\u003c/p\u003e\u003cp\u003eI decided to serve as a mentor at rOpenSci because I am motivated to help more people develop confidence in using scientific tools, strengthen their critical thinking, and actively engage within the academic community. In this sense, I view mentoring as a learning space focused on dialogue and mutual growth.\u003c/p\u003e\u003ch3 id=\"elio-campitelli\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#elio-campitelli\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eElio Campitelli\u003c/h3\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/elio-campitelli.jpg\"\t\t\talt=\"Profile photo of Elio Campitelli\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eElio Campitelli \u003c/br\u003e Monash University - rOpenSci\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am from Argentina but two years ago I moved to Australia because it is the only other country that starts with A and uses the same type of plug.\u003c/p\u003e\u003cp\u003eI am doing a postdoc at Monash University researching interactions between Antarctic sea ice and the atmosphere.\u003c/p\u003e\u003cp\u003eI have been a mentor to previous cohorts of the program. It was a great experience that I want to repeat once more.\u003c/p\u003e\u003c/br\u003e\u003c/br\u003e\u003c/br\u003e\u003c/br\u003e\u003c/br\u003e\u003c/br\u003e\u003ch2 id=\"whats-next\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#whats-next\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat\u0026rsquo;s next\u003c/h2\u003e\u003cp\u003eWe are happy to have this diverse and talented team of mentors, who embody the values of collaboration and commitment to collective growth. Their support will be key to helping the new Champions move their ideas and projects forward and contribute to the development of a stronger and more diverse open science community.\u003c/p\u003e\u003cp\u003eThe selection of Champions is now complete, and we’ll be announcing them soon.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/05/06/mentors-2026/","date_published":"2026-05-06T00:00:00+00:00","date_modified":"2026-05-06T13:30:08-03:00"},{"id":"https://doi.org/10.59350/4qpnx-96e10","title":"rOpenSci News Digest, April 2026","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2026/04/30/news-april-2026\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"tomáš-kalibera-19782026\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tom%c3%a1%c5%a1-kalibera-19782026\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTomáš Kalibera (1978\u0026ndash;2026)\u003c/h2\u003e\u003cp\u003eThe rOpenSci team is deeply saddened at the loss of Tomáš Kalibera, a member of R-Core and contributor to the R community for almost 10 years. Tomáš passed away on April 1.  Our thoughts are with Tomáš\u0026rsquo;s friends and family at this time. \u003c/p\u003e\u003cp\u003eRead \u003ca href=\"https://prl-prg.github.io/tomas-kalibera.html\"\u003eJan Vitek\u0026rsquo;s remembrance of Tomáš\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"new-editors-alec-robitaille-and-lucy-dagostino-mcgowan\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-editors-alec-robitaille-and-lucy-dagostino-mcgowan\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew editors Alec Robitaille and Lucy D\u0026rsquo;Agostino McGowan\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;re excited to welcome \u003ca href=\"/author/alec-robitaille/\"\u003eAlec Robitaille\u003c/a\u003e and \u003ca href=\"/author/lucy-dagostino-mcgowan/\"\u003eLucy D\u0026rsquo;Agostino McGowan\u003c/a\u003e as new editors. Alec joins our general review team, and Lucy our statistical software review team. Read more in the \u003ca href=\"/blog/2026/04/16/editors2026/\"\u003epost introducing them\u003c/a\u003e!\u003c/p\u003e\u003ch3 id=\"champions-program-update\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#champions-program-update\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChampions Program update\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;re excited to share that we\u0026rsquo;ve finished selecting the new cohort for the rOpenSci Champions Program! This was not an easy process. The quality of the proposals was exceptionally high, which made the selection both challenging and inspiring. We\u0026rsquo;re grateful to everyone who applied and shared their ideas with us. Please join us in welcoming our new Champions: Bastián Olea Herrera, Durga Valentina Linares Herrera, José Daniel Conejeros, Denisse Fierro Arcos, Evelia Lorena Coss Navarrete, Gladys Choque Ulloa, Linda Jazmín Cabrera Orellana, Patricia Andrea Loto, Marina Cecilia Cock, María Florencia Tames, and Estefanía Torrejón.\u003c/p\u003e\u003cp\u003eOver the coming months, they will contribute to the R Community through developing new packages, reviewing packages, and submitting packages for peer review. We\u0026rsquo;re looking forward to working with this amazing group and supporting their projects!\u003c/p\u003e\u003ch3 id=\"collaborating-between-bioconductor-and-r-universe-on-development-of-common-infrastructure\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#collaborating-between-bioconductor-and-r-universe-on-development-of-common-infrastructure\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCollaborating between Bioconductor and R-universe on Development of Common Infrastructure\u003c/h3\u003e\u003cp\u003eBioconductor is collaborating with R-universe to gradually modernize parts of its infrastructure, while accommodating the project\u0026rsquo;s scale, governance, and established processes. In turn, Bioconductor is helping R-universe expand and refine its features as we learn to serve the complex needs of the Bioconductor community. Read more in the \u003ca href=\"/blog/2026/04/08/r-universe-bioc/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"ropensci-staff-presentations\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-staff-presentations\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci Staff presentations\u003c/h3\u003e\u003ch4 id=\"yanina-bellini-saibene-at-rmedicine-2026\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#yanina-bellini-saibene-at-rmedicine-2026\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eYanina Bellini Saibene at R/Medicine 2026\u003c/h4\u003e\u003cp\u003eYani will deliver her keynote talk \u003ca href=\"/events/r-medicine-2026-keynote/\"\u003e\u0026ldquo;Software Sustainability and Community Management\u0026rdquo;\u003c/a\u003e on Thursday May 7th, 11:15AM\u0026ndash;12:15PM ET.\u003c/p\u003e\u003ch4 id=\"jeroen-ooms-at-where-do-r-packages-live\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#jeroen-ooms-at-where-do-r-packages-live\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eJeroen Ooms at \u0026ldquo;Where Do R Packages Live?\u0026rdquo;\u003c/h4\u003e\u003cp\u003eJeroen will take part in an online discussion panel on Wednesday 20 May at 5:00 PM - 6:00 PM (AEST). The panel is organized by the Statistical Computing and Visualisation section of the Statistical Society of Australia (\u003ca href=\"https://statsoc.org.au/event-6653060\"\u003edetails\u003c/a\u003e).\u003c/p\u003e\u003ch3 id=\"updates-to-the-goodpractice-r-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#updates-to-the-goodpractice-r-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdates to the goodpractice R package\u003c/h3\u003e\u003cp\u003eWe have long recommended the \u003ca href=\"https://docs.ropensci.org/goodpractice\"\u003egoodpractice package\u003c/a\u003e, which identifies issues with R packages, and advises how to fix them. Thanks to a huge amount of work by valued community member \u003ca href=\"/author/athanasia-mo-mowinckel/\"\u003eAthanasia Mo Mowinckel\u003c/a\u003e, goodpractice has been extended and improved to include entirely new suites of checks, and improved ability to control which checks are run. A blog post describing the updates will be published soon, but in the meantime, we encourage you to install the current \u003ca href=\"https://docs.ropensci.org/goodpractice/#installation\"\u003edevelopment version\u003c/a\u003e and try it out yourself.\u003c/p\u003e\u003ch3 id=\"analyse-your-targets-pipeline\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#analyse-your-targets-pipeline\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAnalyse your targets pipeline\u003c/h3\u003e\u003cp\u003eFollowing our \u003ca href=\"/blog/2026/04/02/tree-sitter-overview/\"\u003eblog post about tree-sitter\u003c/a\u003e, Tyler Morgan Wall was \u003ca href=\"https://news.ycombinator.com/item?id=47801899\"\u003einspired\u003c/a\u003e to create a \u003ca href=\"https://github.com/tylermorganwall/tarborist\"\u003estatic analysis tool for targets pipelines (as a VS Code extension)\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday May 5th 2026, 9:00 Australia Western (01:00 UTC) \u003ca href=\"/events/coworking-2026-05/\"\u003e\u0026ldquo;Code Review with rOpenSci\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/liz-hare/\"\u003eLiz Hare\u003c/a\u003e.\u003cul\u003e\u003cli\u003eExplore resources for Code Review\u003c/li\u003e\u003cli\u003eSign up to volunteer to do \u003ca href=\"https://airtable.com/app8dssb6a7PG6Vwj/shrnfDI2S9uuyxtDw\"\u003esoftware peer-review\u003c/a\u003e at rOpenSci\u003c/li\u003e\u003cli\u003eMeet cohost, Liz Hare, and discuss resources for Code Review with rOpenSci.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday June 2nd 2026, 14:00 Europe Central (12:00 UTC) [theme to be determined], with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost to be determined.\u003cul\u003e\u003cli\u003eExplore resources related to the theme\u003c/li\u003e\u003cli\u003eMeet the cohost, and other attendees, and discuss the theme or other topics.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch3 id=\"editors-office-hours\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#editors-office-hours\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEditors\u0026rsquo; Office Hours\u003c/h3\u003e\u003cp\u003eWe are exploring hosting a new event, Editors\u0026rsquo; Office Hours, where you can drop in to ask questions about rOpenSci Software Peer Review on or near the third Tuesday of each month, alternating among timezones to accommodate different parts of the world.\u003c/p\u003e\u003cp\u003eUpcoming office hours:\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday May 19, 16:00-17:00 Europe Central (14:00-15:00 UTC) (\u003ca href=\"/events/office-hours-2026-05/\"\u003eevent\u003c/a\u003e)\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"user-2026-diversity-scholarship-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#user-2026-diversity-scholarship-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003euseR! 2026 Diversity Scholarship Program\u003c/h3\u003e\u003cp\u003euseR! 2026 is offering diversity scholarships to support participation from people in underrepresented or historically marginalized groups within the R community. The program includes both registration fee waivers and full needs-based scholarships, which cover conference registration as well as travel and lodging (via reimbursement). Applications are open to eligible participants worldwide \u003cstrong\u003euntil May 10\u003c/strong\u003e, and will be reviewed based on need, eligibility, and potential impact by a committee from Forwards, RLadies+ Global, and rOpenSci.\u003c/p\u003e\u003cp\u003eFound all the details and important links on the conference website: \u003ca href=\"https://user2026.r-project.org/additional/diversity_scholarship.html\"\u003ehttps://user2026.r-project.org/additional/diversity_scholarship.html\u003c/a\u003e\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/reviser\"\u003ereviser\u003c/a\u003e, developed by Marc Burri together with Philipp Wegmueller: Analyzes revisions in real-time time series vintages. The package converts between wide revision triangles and tidy long vintages, extracts selected releases, computes revision series, visualizes vintage paths, and summarizes revision properties such as bias, dispersion, autocorrelation, and news-noise diagnostics. It also identifies efficient releases and estimates state-space models for revision nowcasting. Methods are based on Howrey (1978) \u003ca href=\"https://doi.org/10.2307/1924972\"\u003ehttps://doi.org/10.2307/1924972\u003c/a\u003e, Jacobs and Van Norden (2011) \u003ca href=\"https://doi.org/10.1016/j.jeconom.2010.04.010\"\u003ehttps://doi.org/10.1016/j.jeconom.2010.04.010\u003c/a\u003e, and Kishor and Koenig (2012) \u003ca href=\"https://doi.org/10.1198/jbes.2010.08169\"\u003ehttps://doi.org/10.1198/jbes.2010.08169\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/709\"\u003ereviewed\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following ten packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/osmextract\" title=\"Download and Import Open Street Map Data Extracts\"\u003eosmextract\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmextract/releases/tag/v0.6.0\"\u003e\u003ccode\u003ev0.6.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/Athlytics\" title=\"Academic R Package for Sports Physiology Analysis from Local Strava Data\"\u003eAthlytics\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/Athlytics/releases/tag/v1.0.5\"\u003e\u003ccode\u003ev1.0.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/emodnet.wfs\" title=\"Access EMODnet Web Feature Service Data\"\u003eemodnet.wfs\u003c/a\u003e (\u003ca href=\"https://github.com/EMODnet/emodnet.wfs/releases/tag/v2.1.2\"\u003e\u003ccode\u003ev2.1.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/fellingdater\" title=\"Tree-ring dating and estimating felling dates of historical timbers\"\u003efellingdater\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/fellingdater/releases/tag/v1.2.1\"\u003e\u003ccode\u003ev1.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/readODS\" title=\"Read and Write ODS Files\"\u003ereadODS\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/readODS/releases/tag/v2.3.5\"\u003e\u003ccode\u003ev2.3.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/git2rdata\" title=\"Store and Retrieve Data.frames in a Git Repository\"\u003egit2rdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/git2rdata/releases/tag/v0.5.2\"\u003e\u003ccode\u003ev0.5.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/weatherOz\" title=\"An API Client for Australian Weather and Climate Data Resources\"\u003eweatherOz\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weatherOz/releases/tag/v3.0.0\"\u003e\u003ccode\u003ev3.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/promoutils\" title=\"Utilities for Promoting rOpenSci on Social Media\"\u003epromoutils\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-org/promoutils/releases/tag/v0.5.0\"\u003e\u003ccode\u003ev0.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/allcontributors\" title=\"Acknowledge all Contributors to a Project\"\u003eallcontributors\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/allcontributors/releases/tag/v0.2.3\"\u003e\u003ccode\u003ev0.2.3\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/reviser\" title=\"Analyzing Revisions in Real-Time Time Series Vintages\"\u003ereviser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/reviser/releases/tag/v0.1.1\"\u003e\u003ccode\u003ev0.1.1\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eThe writexl package has a \u003ca href=\"https://github.com/ropensci/writexl/pull/98#issuecomment-4191858158\"\u003enew maintainer\u003c/a\u003e, Bill Denney. NLMR is now maintained by \u003ca href=\"https://github.com/ropensci/NLMR/issues/116#issuecomment-4280937012\"\u003eJakub Nowosad\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are eighteen recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/709\"\u003ereviser\u003c/a\u003e, Tools for Studying Revision Properties in Real-Time Time Series Vintages. Submitted by \u003ca href=\"https://marcburri.github.io/\"\u003eMarc Burri\u003c/a\u003e. (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%225/awaiting-reviewer(s)-response%22\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/754\"\u003esaperlipopette\u003c/a\u003e, Create Example Git Messes. Submitted by \u003ca href=\"https://masalmon.eu/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/760\"\u003epvEBayes\u003c/a\u003e, Empirical Bayes Methods for Pharmacovigilance. Submitted by \u003ca href=\"https://github.com/YihaoTancn\"\u003eYihao Tan\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/741\"\u003elogolink\u003c/a\u003e, An Interface for Running NetLogo Simulations. Submitted by \u003ca href=\"http://danielvartan.com\"\u003eDaniel Vartanian\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/732\"\u003eActiGlobe\u003c/a\u003e, Wearable Recording Processor for Time Shift Adjustment and Data Analysis. Submitted by \u003ca href=\"https://scholar.google.ca/citations?user=T7y9ckwAAAAJ\u0026amp;hl=en\"\u003eC. William Yao\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/750\"\u003enycOpenData\u003c/a\u003e, Convenient Access to NYC Open Data API Endpoints. Submitted by \u003ca href=\"https://github.com/martinezc1\"\u003eChristian Martinez\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/743\"\u003eRAMEN\u003c/a\u003e, RAMEN: Regional Association of Methylome variability with the Exposome and geNome. Submitted by \u003ca href=\"https://erick-navarrodelgado.netlify.app\"\u003eErick Navarro-Delgado\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/730\"\u003eernest\u003c/a\u003e, A Toolkit for Nested Sampling. Submitted by \u003ca href=\"https://github.com/kylesnap\"\u003eKyle Dewsnap\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/718\"\u003ercrisp\u003c/a\u003e, Automate the Delineation of Urban River Spaces. Submitted by \u003ca href=\"https://github.com/cforgaci\"\u003eClaudiu Forgaci\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/704\"\u003epriorsense\u003c/a\u003e, Prior Diagnostics and Sensitivity Analysis. Submitted by \u003ca href=\"https://github.com/n-kall\"\u003eNoa Kallioinen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%222/seeking-reviewer(s)%22\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/763\"\u003eEpiStrainDynamics\u003c/a\u003e, Infer temporal trends of multiple pathogens. Submitted by \u003ca href=\"http://www.smwindecker.com\"\u003eSaras Windecker\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/762\"\u003elakefetch\u003c/a\u003e, Calculate Fetch and Wave Exposure for Lake Sampling Points. Submitted by \u003ca href=\"https://github.com/jeremylfarrell\"\u003ejeremylfarrell\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/740\"\u003efcmconfr\u003c/a\u003e, Fuzzy Cognitive Map Analysis in R. Submitted by \u003ca href=\"https://github.com/bhroston\"\u003ebenroston\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/765\"\u003eciecl\u003c/a\u003e, International Classification of Diseases ICD-10/ICD-11 for Chile. Submitted by \u003ca href=\"https://github.com/Rodotasso\"\u003eRodolfo Tasso\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/744\"\u003eRAQSAPI\u003c/a\u003e, A Simple Interface to the US EPA Air Quality System Data Mart API. Submitted by \u003ca href=\"https://github.com/mccroweyclinton-EPA\"\u003emccroweyclinton-EPA\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/717\"\u003ecoevolve\u003c/a\u003e, Fit Bayesian Generalized Dynamic Phylogenetic Models using Stan. Submitted by \u003ca href=\"https://scottclaessens.github.io/\"\u003eScott Claessens\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/04/13/reviser\"\u003ereviser: Analyzing Real-Time Data Revisions in R\u003c/a\u003e by Marc Burri. A short introduction to reviser for analyzing real-time data vintages and revisions in R.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/04/16/editors2026\"\u003eExpanding the Editorial Team: Alec Robitaille and Lucy D\u0026rsquo;Agostino McGowan Join as Editors\u003c/a\u003e by Alec Robitaille, Lucy D\u0026rsquo;Agostino McGowan, and Yanina Bellini Saibene. Introducing two new editors for rOpenSci statistical software peer review.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/04/08/r-universe-bioc\"\u003eCollaborating between Bioconductor and R-universe on Development of Common Infrastructure\u003c/a\u003e by The rOpenSci Team and The Bioconductor Team. R-consortium ISC top-level project R-universe is working with Bioconductor to help gradually modernize parts of its infrastructure, while accommodating the project\u0026rsquo;s scale, governance, and established processes.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2026/04/02/tree-sitter-overview\"\u003eA Better R Programming Experience Thanks to Tree-sitter\u003c/a\u003e by Maëlle Salmon. Modern tooling for parsing, searching, formatting, editing R code, just like for other programming languages.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/landscapetools\"\u003elandscapetools\u003c/a\u003e, R package for some of the less-glamorous tasks involved in landscape analysis. \u003ca href=\"https://github.com/ropensci/landscapetools/issues/48\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools\"\u003ehddtools\u003c/a\u003e, Tools to discover hydrological data, accessing catalogues and databases from various data providers. \u003ca href=\"https://github.com/ropensci/hddtools/issues/36\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/qualtRics/\"\u003equaltRics\u003c/a\u003e, download Qualtrics survey data. \u003ca href=\"https://github.com/ropensci/qualtRics/issues/383\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful information for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"useless-code-duplicated-function-refactoring-with-jarl\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#useless-code-duplicated-function-refactoring-with-jarl\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUseless code, duplicated function? Refactoring with Jarl\u003c/h3\u003e\u003cp\u003eThe Jarl CLI by Étienne Bacher received several useful new features for package developers:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://jarl.etiennebacher.com/rules/unused_function\"\u003e\u003ccode\u003eunused_function\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jarl.etiennebacher.com/rules/duplicated_function_definition\"\u003e\u003ccode\u003eduplicated_function_definition\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThey are a nice complement to \u003ca href=\"https://jarl.etiennebacher.com/rules/unreachable_code\"\u003e\u003ccode\u003eunreachable_code\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eRead more in the \u003ca href=\"https://www.etiennebacher.com/posts/2026-03-23-jarl-0.5.0/#other-features-for-package-developers\"\u003erelease announcement\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"git-commands-to-get-to-know-a-project\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#git-commands-to-get-to-know-a-project\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGit commands to get to know a project\u003c/h3\u003e\u003cp\u003eAlly Piechowski wrote an insightful post entitled \u003ca href=\"https://piechowski.io/post/git-commands-before-reading-code/\"\u003e\u0026ldquo;The Git Commands I Run Before Reading Any Code\u0026rdquo;\u003c/a\u003e, which suggests Git commands which are useful for understanding the code base. For instance a command to determine which files recently changed the most!\u003c/p\u003e\u003cp\u003eTo complement this post, Garrick Aden-Buie wrote \u003ca href=\"https://gist.github.com/gadenbuie/463ff1e9f3b0f48cddc44db2224d286b\"\u003e\u0026ldquo;a little \u003ccode\u003egit-recon\u003c/code\u003e bash script that runs them in series, complete with some ascii bar plots\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"another-r-mailing-list-archive\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#another-r-mailing-list-archive\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAnother R mailing list archive\u003c/h3\u003e\u003cp\u003eLast month we listed several ways to \u003ca href=\"/blog/2026/03/30/news-mars-2026/#how-to-browse-the-r-mailing-lists\"\u003ebrowse the R mailing lists\u003c/a\u003e. Newsletter reader Florian Kohrt kindly wrote to us to mention the \u003ca href=\"https://github.com/MichaelChirico/r-mailing-list-archive\"\u003eplain text backup\u003c/a\u003e maintained by Michael Chirico.\u003c/p\u003e\u003ch3 id=\"will-r-run-out-of-random-seeds-useful-seed-explainer\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#will-r-run-out-of-random-seeds-useful-seed-explainer\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWill R run out of random seeds? Useful seed explainer\u003c/h3\u003e\u003cp\u003eAndrew Heiss published an useful and interesting deep dive into \u003ca href=\"https://www.andrewheiss.com/blog/2026/04/13/seeds-predetermined-universes/\"\u003erandom seeds\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"enforcing-the-coalesce-operator\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#enforcing-the-coalesce-operator\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEnforcing the coalesce operator\u003c/h3\u003e\u003cp\u003eAre you enjoying the coalesce operator \u003ccode\u003e%||%\u003c/code\u003e introduced in \u003ca href=\"https://cran.r-project.org/bin/windows/base/old/4.4.0/NEWS.R-4.4.0.html\"\u003eR 4.4.0\u003c/a\u003e?\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003ccode\u003eL %||% R\u003c/code\u003e newly in base is an expressive idiom for the phrases \u003ccode\u003eif(!is.null(L)) L else R or if(is.null(L)) R else L\u003c/code\u003e.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eConsider enforcing it via \u003ca href=\"https://jarl.etiennebacher.com/rules/coalesce\"\u003eJarl\u003c/a\u003e or \u003ca href=\"https://lintr.r-lib.org/reference/coalesce_linter.html\"\u003elintr\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eAs a reminder, the operator can be used in older versions of R through the \u003ca href=\"https://github.com/r-lib/backports/pull/81/changes\"\u003ebackports\u003c/a\u003e R package or by importing it from \u003ca href=\"https://rlang.r-lib.org/reference/op-null-default.html\"\u003erlang\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"positive-ai-reading\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#positive-ai-reading\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePositive AI reading\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re feeling some AI dread, you might enjoy:\u003c/p\u003e\u003cul\u003e\u003cli\u003eThe blog post \u003ca href=\"https://vickiboykis.com/2026/03/04/antidote/\"\u003e\u0026ldquo;Antidote\u0026rdquo;\u003c/a\u003e by Vicky Boykis;\u003c/li\u003e\u003cli\u003eThe talk \u003ca href=\"https://www.youtube.com/watch?v=5kTxZMSB9oo\u0026amp;t\"\u003e\u0026ldquo;Is my degree worthless\u0026rdquo;\u003c/a\u003e by Davis Vaughan.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/04/30/news-april-2026/","date_published":"2026-04-30T00:00:00+00:00","date_modified":"2026-04-30T11:53:37+02:00"},{"id":"https://doi.org/10.59350/v939m-qkj86","title":"Expanding the Editorial Team: Alec Robitaille and Lucy D'Agostino McGowan Join as Editors","language":"en","authors":[{"name":"Alec Robitaille","url":"https://orcid.org/0000-0002-4706-1762","avatar":"https://ropensci.org/img/team/alec-robitaille.png","_role":["author"]},{"name":"Lucy D&#39;Agostino McGowan","url":"https://orcid.org/0000-0001-7297-9359","avatar":"https://github.com/LucyMcGowan.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["Software Peer Review","editors","rOpenSci team"],"content_html":"\u003cp\u003eAt rOpenSci, we\u0026rsquo;re continually grateful for the support and engagement of our community, who help make research open-source stronger, more inclusive, and more collaborative. The \u003ca href=\"/software-review/\"\u003esoftware peer review program\u003c/a\u003e continues to grow, and today we announce that our editorial team keeps expanding:\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;re excited to welcome \u003cem\u003eAlec Robitaille\u003c/em\u003e and \u003cem\u003eLucy D\u0026rsquo;Agostino McGowan\u003c/em\u003e as new editors. Alec joins our general review team, and Lucy our statistical software review team. Their expertise and dedication will help sustain and strengthen software peer review, ensuring that software reviews continue to meet the highest standards of quality, transparency, and impact.\u003c/p\u003e\u003cp\u003eMeet our new editors!\u003c/p\u003e\u003ch2 id=\"alec-robitaille\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#alec-robitaille\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAlec Robitaille\u003c/h2\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"/img/team/alec-robitaille.png\"         alt=\"headshot of Alec Robitaille\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  Alec is a graduate student at Memorial University of Newfoundland and Labrador (Canada) studying foraging ecology, habitat selection and social networks in caribou and other ungulates. He has been involved in many projects along the way, from measuring muskrat habitat and lake ice dynamics at McGill University to estimating drought sensitivity in Canada\u0026rsquo;s forests with the Canadian Forestry Service. Passionate about teaching open science and programming, he regularly mentors peers, runs workshops, develops example repositories, and organizes a Bayesian stats colearning group. He maintains the package \u003ca href=\"https://github.com/ropensci/spatsoc\"\u003espatsoc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/software-review/issues/237\"\u003ereviewed\u003c/a\u003e by rOpenSci in 2018) and has developed smaller packages with diverse applications including remote sensing (\u003ca href=\"https://cran.r-project.org/web/packages/irg/\"\u003eirg\u003c/a\u003e), social networks (\u003ca href=\"https://cran.r-project.org/web/packages/hwig/\"\u003ehwig\u003c/a\u003e), camera trap monitoring (\u003ca href=\"https://github.com/robitalec/camtrapmonitoring\"\u003ecamtrapmonitoring\u003c/a\u003e), and animal movement (\u003ca href=\"https://cran.r-project.org/web/packages/distanceto/\"\u003edistanceto\u003c/a\u003e). He reviewed the \u003ca href=\"https://github.com/ropensci/software-review/issues/568\"\u003eohun\u003c/a\u003e, \u003ca href=\"https://github.com/ropensci/software-review/issues/638\"\u003echopin\u003c/a\u003e, and \u003ca href=\"https://github.com/ropensci/software-review/issues/653\"\u003eemodnet.wfs\u003c/a\u003e packages for rOpenSci, guest edited for the \u003ca href=\"https://github.com/ropensci/software-review/issues/663\"\u003erredlist\u003c/a\u003e package and is currently handling the reviews for the \u003ca href=\"https://github.com/ropensci/software-review/issues/732\"\u003eActiGlobe\u003c/a\u003e, and \u003ca href=\"https://github.com/ropensci/software-review/issues/754\"\u003esaperlipopette\u003c/a\u003e packages.                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003cp\u003eAlec on \u003ca href=\"https://github.com/robitalec\"\u003eGitHub\u003c/a\u003e, \u003ca href=\"http://robitalec.ca/\"\u003eWebsite\u003c/a\u003e.\u003c/p\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eI first connected with the rOpenSci community through the review process for the package spatsoc in 2018 as part of our manuscript submission at Methods in Ecology and Evolution. During the review, I was thoroughly impressed by how welcoming the community was, and how effective the process was in helping me learn how to improve the package. rOpenSci is a landmark in the R and open science ecosystems with an ever evolving community to learn from and to be a part of. I am very grateful to be given the opportunity to continue contributing to rOpenSci in this new role as editor.\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eAlec L. Robitaille \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"lucy-dagostino-mcgowan\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#lucy-dagostino-mcgowan\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLucy D\u0026rsquo;Agostino McGowan\u003c/h2\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"/img/team/lucy-dagonstino-mcgowan.jpg\"         alt=\"headshot of Lucy D\u0026#39;Agostino McGowan\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  Lucy D’Agostino McGowan is an associate professor in the Department of Statistical Sciences at Wake Forest University. She received her PhD in Biostatistics from Vanderbilt University and completed her postdoctoral training at Johns Hopkins University Bloomberg School of Public Health. Her research focuses on causal inference, statistical communication, analytic design theory, and data science pedagogy. Lucy can be found blogging at \u003ca href=\"https://livefreeordichotomize.com/\"\u003elivefreeordichotomize.com\u003c/a\u003e, on Blue Sky \u003ca href=\"https://bsky.app/profile/lucystats.bsky.social\"\u003e@LucyStats.bsky.social\u003c/a\u003e, and podcasting on \u003ca href=\"https://open.spotify.com/show/1L8TqB17Peo7jNgXuPObwi\"\u003eCasual Inference\u003c/a\u003e.                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003cp\u003eLucy on \u003ca href=\"https://github.com/LucyMcGowan\"\u003eGitHub\u003c/a\u003e, \u003ca href=\"https://www.lucymcgowan.com/\"\u003eWebsite\u003c/a\u003e.\u003c/p\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eI am so thrilled to join the rOpenSci editorial team! I love the rOpenSci community and mission and am grateful for the opportunity to contribute.\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eLucy D\u0026rsquo;Agostino McGowan \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"about-the-software-peer-review-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#about-the-software-peer-review-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAbout the Software Peer Review Program\u003c/h2\u003e\u003cp\u003erOpenSci\u0026rsquo;s software peer review program brings together volunteers to collaboratively review scientific and statistical software according to transparent, constructive, and open standards. Editors manage submissions, coordinate reviewers, and help guide packages through review to improve code quality, documentation, and usability.\u003c/p\u003e\u003cp\u003eThis program is possible thanks to the many community members: authors submitting their packages, reviewers volunteering their time and expertise, and editors like Alec and Lucy who help managing reviews and maintaining a supportive process.\u003c/p\u003e\u003ch2 id=\"get-involved\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#get-involved\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGet Involved\u003c/h2\u003e\u003cp\u003eAre you considering submitting your package for review? These resources will help:\u003c/p\u003e\u003cul\u003e\u003cli\u003eAbout \u003ca href=\"/software-review/\"\u003erOpenSci Software Peer Review\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eBrowse the online book \u003ca href=\"https://devguide.ropensci.org/\"\u003erOpenSci Packages: Development, Maintenance, and Peer Review\u003c/a\u003e and \u003ca href=\"https://stats-devguide.ropensci.org\"\u003erOpenSci Statistical Software Peer Review\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eRead public \u003ca href=\"https://github.com/ropensci/software-review/issues\"\u003esoftware review threads on GitHub\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWould you like to review packages? Fill out the \u003ca href=\"https://airtable.com/app8dssb6a7PG6Vwj/shrnfDI2S9uuyxtDw\"\u003erOpenSci Reviewer Sign-Up Form\u003c/a\u003e to volunteer to review.\u003c/p\u003e\u003cp\u003eWelcome again \u003cstrong\u003eAlec and Lucy\u003c/strong\u003e! We\u0026rsquo;re thrilled to have you join the editorial team.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/04/16/editors2026/","date_published":"2026-04-16T00:00:00+00:00","date_modified":"2026-04-16T13:48:46+10:00"},{"id":"https://doi.org/10.59350/v8qtz-mmw80","title":"reviser: Analyzing Real-Time Data Revisions in R","language":"en","authors":[{"name":"Marc Burri","url":"https://ropensci.org/author/marc-burri/","avatar":"https://ropensci.org/img/community/marc-burri.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["Software Peer Review","tech notes","community","packages","reviser","R","Economics"],"content_html":"\u003cp\u003eEconomic data are rarely static.Gross domestic product (GDP), inflation, employment, and other official statistics arrive as early estimates, then get revised as new source data arrive, seasonal adjustment is updated, or benchmarking changes are applied.Those revisions matter because they can change the narrative around turning points, policy mistakes, and forecast performance.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/reviser/\"\u003e\u003ccode\u003ereviser\u003c/code\u003e\u003c/a\u003e is an R package by Marc Burri and Philipp Wegmüller for working with these vintage datasets directly.A vintage dataset records multiple published versions of the same time series, so you can compare what was known at each release date with what was reported later.\u003ccode\u003ereviser\u003c/code\u003e gives you a consistent workflow to:\u003c/p\u003e\u003cul\u003e\u003cli\u003ereshape release vintages between wide and tidy formats;\u003c/li\u003e\u003cli\u003eextract revisions relative to earlier or final releases;\u003c/li\u003e\u003cli\u003esummarize bias, dispersion, and serial dependence in revisions;\u003c/li\u003e\u003cli\u003eidentify the first release that is statistically close to the eventual benchmark;\u003c/li\u003e\u003cli\u003enowcast future revisions with state-space models.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe package is aimed at users who already work with real-time macroeconomic data and want tools that go beyond plotting revision triangles by hand.One design goal is to keep that workflow in pure R.\u003c/p\u003e\u003cp\u003e\u003ccode\u003ereviser\u003c/code\u003e was reviewed through \u003ca href=\"https://github.com/ropensci/software-review/issues/709\"\u003erOpenSci statistical software peer review\u003c/a\u003e.Many thanks to reviewers \u003ca href=\"https://github.com/AlexGibberd\"\u003eAlex Gibberd\u003c/a\u003e, and \u003ca href=\"https://github.com/TanguyBarthelemy\"\u003eTanguy Barthelemy\u003c/a\u003e, and to editor \u003ca href=\"https://github.com/rkillick\"\u003eRebecca Killick\u003c/a\u003e, for feedback that improved the package.\u003c/p\u003e\u003ch2 id=\"why-revision-analysis-deserves-its-own-workflow\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-revision-analysis-deserves-its-own-workflow\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy revision analysis deserves its own workflow\u003c/h2\u003e\u003cp\u003eRevisions are not just measurement noise.They encode how information enters the data-production process.\u003c/p\u003e\u003cul\u003e\u003cli\u003eSome revisions reflect genuinely new information.\u003c/li\u003e\u003cli\u003eOthers reflect noise that could, in principle, have been reduced earlier.\u003c/li\u003e\u003cli\u003eStill others come from methodological changes or benchmark updates.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThese distinctions matter if you are evaluating early data releases, building nowcasts, or asking whether first releases are already efficient summaries of the available information.\u003c/p\u003e\u003cp\u003eThe \u003ccode\u003ereviser\u003c/code\u003e vignettes organize this workflow into three layers:\u003c/p\u003e\u003col\u003e\u003cli\u003eStructure vintages consistently.\u003c/li\u003e\u003cli\u003eMeasure and test revision properties.\u003c/li\u003e\u003cli\u003eModel the revision process when you want to predict future changes.\u003c/li\u003e\u003c/ol\u003e\u003ch2 id=\"a-compact-example-with-gdp-vintages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-compact-example-with-gdp-vintages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA compact example with GDP vintages\u003c/h2\u003e\u003cp\u003eThe first step is to reshape the data into a tidy vintage format, where each row corresponds to an observed value, the date it refers to, and the publication date of that estimate.\u003c/p\u003e\u003cp\u003eThe package ships with a GDP example dataset in long vintage format.Suppose we want to focus on U.S. GDP growth, visualize how estimates moved during the 2008-09 global financial crisis, and then ask whether early releases were systematically biased relative to a later benchmark.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ereviser\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etsbox\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egdp_us\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003egdp\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;US\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etsbox\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ets_pc\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etsbox\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ets_span\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estart\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;1980-01-01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egdp_wide\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003evintages_wide\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egdp_us\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egdp_long\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003evintages_long\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egdp_wide\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ekeep_na\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWith the vintages in tidy form, we can plot how the published path changed over time.The y-axis in the figure reports quarter-on-quarter GDP growth rates.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eplot_vintages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003egdp_long\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003epub_date\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan class=\"nf\"\u003eas.Date\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;2009-01-01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003epub_date\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"nf\"\u003eas.Date\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;2010-01-01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003etime\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nf\"\u003eas.Date\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;2008-01-01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003etime\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"nf\"\u003eas.Date\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;2010-01-01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;line\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Revisions of GDP during the 2008-09 global financial crisis\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eylab\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Quarter-on-quarter GDP growth rate\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/04/13/reviser/gdp-example-plot-1.svg\"\t\t\talt=\"Multiple vintage paths for U.S. GDP growth, highlighting how estimates published in 2009 changed over time.\" width=\"100%\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eGDP growth vintages for the United States during the 2008-09 global financial crisis.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eDuring volatile periods, the vintage paths can diverge enough that the story told by the first release is noticeably different from the story told a year later.\u003c/p\u003e\u003cp\u003eOnce the data are in tidy vintage form, you can compare a set of early releases to a later benchmark release.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efinal_release\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_nth_release\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egdp_long\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e10\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eearly_releases\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_nth_release\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egdp_long\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e6\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esummary_tbl\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_revision_analysis\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eearly_releases\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efinal_release\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eWarning: Both \u0026#39;release\u0026#39; and \u0026#39;pub_date\u0026#39; columns are present in \u0026#39;df.      The \u0026#39;release\u0026#39; column will be used for grouping.\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esummary_tbl\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erelease\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003e`Bias \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"n\"\u003e`, `\u003c/span\u003e\u003cspan class=\"nf\"\u003eBias \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erobust\u003c/span\u003e \u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"n\"\u003e`, `Noise\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003eSignal`\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e=== Revision Analysis Summary ===# A tibble: 7 × 5  id    release   `Bias (mean)` `Bias (robust p-value)` `Noise/Signal`  \u0026lt;chr\u0026gt; \u0026lt;chr\u0026gt;             \u0026lt;dbl\u0026gt;                   \u0026lt;dbl\u0026gt;          \u0026lt;dbl\u0026gt;1 US    release_0        -0.014                   0.52           0.22 2 US    release_1        -0.015                   0.425          0.2023 US    release_2        -0.013                   0.507          0.2054 US    release_3        -0.003                   0.851          0.1945 US    release_4        -0.014                   0.326          0.1576 US    release_5        -0.021                   0.181          0.1527 US    release_6        -0.018                   0.202          0.13 === Interpretation ===id=US, release=release_0:  • No significant bias detected (p = 0.52 )  • Moderate revision volatility (Noise/Signal = 0.22 )id=US, release=release_1:  • No significant bias detected (p = 0.425 )  • Moderate revision volatility (Noise/Signal = 0.202 )id=US, release=release_2:  • No significant bias detected (p = 0.507 )  • Moderate revision volatility (Noise/Signal = 0.205 )id=US, release=release_3:  • No significant bias detected (p = 0.851 )  • Moderate revision volatility (Noise/Signal = 0.194 )id=US, release=release_4:  • No significant bias detected (p = 0.326 )  • Moderate revision volatility (Noise/Signal = 0.157 )id=US, release=release_5:  • No significant bias detected (p = 0.181 )  • Moderate revision volatility (Noise/Signal = 0.152 )id=US, release=release_6:  • No significant bias detected (p = 0.202 )  • Moderate revision volatility (Noise/Signal = 0.13 )\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis is where \u003ccode\u003ereviser\u003c/code\u003e moves beyond a reshape-and-plot package.The revision summary reports quantities that applied work often needs but usually rebuilds ad hoc: mean bias, quantiles, volatility, noise-to-signal ratios, and hypothesis tests for bias, serial correlation, and news-versus-noise interpretations.\u003c/p\u003e\u003cp\u003eIn the bundled example, the early U.S. GDP releases over this sample show little evidence of systematic bias relative to the later benchmark.The package also supports efficient-release diagnostics, where the question is not only whether revisions exist, but when additional revisions stop adding meaningful information.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eefficient_release\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_first_efficient_release\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eearly_releases\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efinal_release\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003esummary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eefficient_release\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eEfficient release:  0 Model summary: Call:stats::lm(formula = formula, data = df_wide)Residuals:     Min       1Q   Median       3Q      Max -0.89186 -0.12669  0.02046  0.11475  0.97986 Coefficients:            Estimate Std. Error t value Pr(\u0026gt;|t|)    (Intercept)  0.00299    0.02223   0.134    0.893    release_0    0.97412    0.01692  57.567   \u0026lt;2e-16 ***---Signif. codes:  0 \u0026#39;***\u0026#39; 0.001 \u0026#39;**\u0026#39; 0.01 \u0026#39;*\u0026#39; 0.05 \u0026#39;.\u0026#39; 0.1 \u0026#39; \u0026#39; 1Residual standard error: 0.2518 on 166 degrees of freedom  (10 observations deleted due to missingness)Multiple R-squared:  0.9523,\tAdjusted R-squared:  0.952 F-statistic:  3314 on 1 and 166 DF,  p-value: \u0026lt; 2.2e-16Test summary: Linear hypothesis test:(Intercept) = 0release_0 = 1Model 1: restricted modelModel 2: final ~ release_0Note: Coefficient covariance matrix supplied.  Res.Df Df      F Pr(\u0026gt;F)1    168                 2    166  2 1.9283 0.1486\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThat is exactly the kind of result that is hard to see from a revision triangle alone but straightforward to formalize once the workflow is standardized.In this sample, the result points to the first release as already being statistically close to the later benchmark, which suggests subsequent revisions add relatively little systematic information.\u003c/p\u003e\u003ch2 id=\"from-descriptive-analysis-to-revision-nowcasting\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#from-descriptive-analysis-to-revision-nowcasting\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFrom descriptive analysis to revision nowcasting\u003c/h2\u003e\u003cp\u003eFor many users, revision summaries will be the main use case.But \u003ccode\u003ereviser\u003c/code\u003e also includes model-based tools for users who want to treat revisions as an explicit latent-data problem.That matters if you need to make decisions on preliminary data but also want a structured way to estimate how those figures are likely to change later.\u003c/p\u003e\u003cp\u003eTwo vignettes walk through nowcasting revisions with:\u003c/p\u003e\u003cul\u003e\u003cli\u003ethe generalized Kishor-Koenig family via \u003ccode\u003ekk_nowcast()\u003c/code\u003e;\u003c/li\u003e\u003cli\u003ethe Jacobs-Van Norden model via \u003ccode\u003ejvn_nowcast()\u003c/code\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eBoth approaches cast the revision problem into state-space form, which makes it possible to estimate the dynamics of news and noise in successive data releases.For technical users, this is the part of the package that turns revision analysis from retrospective diagnosis into a forecasting problem.\u003c/p\u003e\u003cp\u003eHere is a compact \u003ccode\u003ekk_nowcast()\u003c/code\u003e example following the Kishor-Koenig workflow from the \u003ca href=\"https://docs.ropensci.org/reviser/articles/nowcasting-revisions-kk.html\"\u003evignette\u003c/a\u003e for the Euro Area (EA).\u003cbr\u003eThe key idea is to first identify an efficient release \u003ccode\u003ee\u003c/code\u003e, then estimate the revision system on the corresponding panel of releases.In this euro area example, the efficient-release step selects \u003ccode\u003ee = 2\u003c/code\u003e, so the model treats the third published release as the earliest one that is already close to the later benchmark.That is a useful substantive result on its own: it suggests that most of the economically relevant signal arrives within the first few releases, while later revisions are smaller adjustments around that path.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egdp_ea\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ereviser\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003egdp\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etsbox\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ets_pc\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eid\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;EA\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etime\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan class=\"nf\"\u003emin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epub_date\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etime\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan class=\"nf\"\u003eas.Date\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;2020-01-01\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ereleases\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_nth_release\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egdp_ea\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e14\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efinal_release\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_nth_release\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egdp_ea\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e15\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eefficient_release\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_first_efficient_release\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ereleases\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efinal_release\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efit_kk\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ekk_nowcast\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003edf\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eefficient_release\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ee\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eefficient_release\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ee\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003emodel\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;KK\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003emethod\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;MLE\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003esummary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efit_kk\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e=== Kishor-Koenig Model ===Convergence: Success Log-likelihood: 125.7 AIC: -231.41 BIC: -198.23 Parameter Estimates: Parameter Estimate Std.Error        F0    0.633     0.131      G0_0    0.950     0.031      G0_1   -0.037     0.152      G0_2   -0.181     0.220      G1_0   -0.009     0.011      G1_1    0.594     0.061      G1_2    0.194     0.092        v0    0.380     0.068      eps0    0.008     0.001      eps1    0.001     0.000\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efit_kk\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/04/13/reviser/kk-nowcast-example-1.svg\"\t\t\talt=\"Diagnostic plot from a Kishor-Koenig nowcast model for euro area GDP revisions, summarizing the fitted revision dynamics.\" width=\"100%\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eDiagnostic plot from the Kishor-Koenig nowcast example.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThe fitted object contains estimated parameters, filtered and smoothed latent states, and plotting methods for the implied efficient-release path.That gives you a direct route from descriptive revision analysis to a state-space nowcast of future revisions.For a broader audience, the main takeaway is not the individual coefficients.It is that the model converges cleanly on this sample, summarizes the revision process in a compact latent-state form, and provides a practical way to judge whether a new release is likely to be revised materially later on.Substantively, the model separates persistent signal from transitory revision noise, so the output is useful when you want to judge whether new releases are likely to be revised materially.\u003c/p\u003e\u003ch2 id=\"what-reviser-adds\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-reviser-adds\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat reviser adds\u003c/h2\u003e\u003cp\u003eWhat stands out in \u003ccode\u003ereviser\u003c/code\u003e is not a single function, but the coherence of the workflow:\u003c/p\u003e\u003cul\u003e\u003cli\u003ethe package has explicit conventions for vintage data;\u003c/li\u003e\u003cli\u003edescriptive revision analysis and formal testing sit in the same API;\u003c/li\u003e\u003cli\u003eefficient-release analysis connects directly to applied questions about which release to trust;\u003c/li\u003e\u003cli\u003enowcasting tools extend the same workflow rather than forcing a separate modeling stack.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIf you work with real-time macroeconomic data, that combination is useful because revision analysis is usually fragmented across custom scripts, one-off spreadsheets, and package combinations that do not share a common data structure.\u003c/p\u003e\u003ch2 id=\"try-it-and-push-it-further\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#try-it-and-push-it-further\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTry it and push it further\u003c/h2\u003e\u003cp\u003eYou can install the package from the rOpenSci R-universe:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003einstall.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s\"\u003e\u0026#34;reviser\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://ropensci.r-universe.dev\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;https://cloud.r-project.org\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThen start with the package site and vignettes:\u003c/p\u003e\u003cul\u003e\u003cli\u003edocs: \u003ca href=\"https://docs.ropensci.org/reviser\"\u003ehttps://docs.ropensci.org/reviser\u003c/a\u003e\u003c/li\u003e\u003cli\u003esource: \u003ca href=\"https://github.com/ropensci/reviser\"\u003ehttps://github.com/ropensci/reviser\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe would be happy to hear feedback from those of you trying out the package with different datasets.If you have a real-time dataset with a different release structure, that would be a good stress test for the package.If you find gaps in the workflow or have a use case to share, open an issue or contribute an example.Revision analysis gets more useful as it becomes easier to compare workflows across datasets rather than rebuilding them from scratch each time.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/04/13/reviser/","date_published":"2026-04-13T00:00:00+00:00","date_modified":"2026-04-13T17:18:26+02:00"},{"id":"https://doi.org/10.59350/sj9wy-g8055","title":"Collaborating between Bioconductor and R-universe on Development of Common Infrastructure","language":"en","authors":[{"name":"The Bioconductor Team","url":"https://ropensci.org/author/the-bioconductor-team/","avatar":"https://github.com/Bioconductor.png","_role":["author"]},{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["r-universe","infrastructure","bioconductor"],"content_html":"\u003cp\u003eFor more than two decades, the \u003ca href=\"https://www.bioconductor.org/\"\u003eBioconductor project\u003c/a\u003e has been a cornerstone of the R ecosystem, providing high-quality, peer-reviewed tools for bioinformatics and computational biology. Its curated repository model, rigorous review standards, and tightly coordinated release process have helped establish Bioconductor as one of the most trusted distribution channels in scientific computing.\u003c/p\u003e\u003cp\u003eHowever, the infrastructure that supports such a long-standing and large-scale project inevitably accumulates technical debt. Legacy build systems, bespoke tooling, and historically grown workflows add up to costly and unsustainable maintenance work. For this reason, Bioconductor is collaborating with \u003ca href=\"https://r-universe.dev/\"\u003eR-universe\u003c/a\u003e to gradually modernize parts of its infrastructure, while accommodating the project’s scale, governance, and established processes. In turn, Bioconductor is helping R-universe expand and refine its features as we learn to serve the complex needs of the Bioconductor community.\u003c/p\u003e\u003cp\u003eThis collaboration reflects a core principle of R-universe as an R Consortium \u003ca href=\"https://r-consortium.org/all-projects/\"\u003eInfrastructure Steering Committee (ISC)\u003c/a\u003e top-level project: supporting reviewed package repositories such as rOpenSci and Bioconductor, and providing modern, open, and reusable infrastructure that strengthens the broader R ecosystem.\u003c/p\u003e\u003ch2 id=\"a-shared-mission-tooling-for-managed-repositories\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-shared-mission-tooling-for-managed-repositories\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA shared mission: Tooling for managed repositories\u003c/h2\u003e\u003cp\u003eR-universe was designed as a next-generation package distribution and build system for R. It provides:\u003c/p\u003e\u003cul\u003e\u003cli\u003eContinuous building and checking of R packages across platforms\u003c/li\u003e\u003cli\u003eBinary packages for Windows, macOS, Linux, and WebAssembly\u003c/li\u003e\u003cli\u003eTransparent and reproducible build environments managed via GitHub actions\u003c/li\u003e\u003cli\u003eDashboards and metadata APIs for monitoring ecosystem health and activity\u003c/li\u003e\u003cli\u003eCRAN-like package repositories with discoverable metrics and documentation\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFrom the outset, a key objective has been to support curated and reviewed communities — such as rOpenSci and Bioconductor — by offering modern infrastructure without requiring them to redesign their governance model or review processes.\u003c/p\u003e\u003cp\u003eFor Bioconductor, this means incrementally introducing piece-wise functionality, with consideration for established release cycles and quality control mechanisms:\u003c/p\u003e\u003col\u003e\u003cli\u003eSetting up independent build and dashboard tooling, replicating processes from the current Bioconductor build systems on R-universe infrastructure\u003c/li\u003e\u003cli\u003eMirroring Windows and macOS binaries produced on R-universe to Bioconductor\u003c/li\u003e\u003cli\u003eExploring further integration of results and metadata produced by R-universe for Bioconductor health/activity monitoring and aiding the curation processes\u003c/li\u003e\u003cli\u003ePotential future steps toward deeper automation and harmonization\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eBy taking small gradual steps towards adopting R-universe components, everyone gets the opportunity to experiment with new tooling and evaluate where adjustments may be needed in order to minimize disruption to existing practices.\u003c/p\u003e\u003cp\u003eAn important milestone in this venture is that Bioconductor now uses R-universe to build the Windows and macOS binaries, which significantly reduces costs and the maintenance load on the Bioconductor team. Beyond binary distribution, we are currently exploring deeper integration of R-universe’s continuous check results into Bioconductor’s quality control and release processes.\u003c/p\u003e\u003ch2 id=\"two-universes-release-and-development\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#two-universes-release-and-development\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTwo Universes: Release and Development\u003c/h2\u003e\u003cp\u003eBioconductor maintains two distinct repositories:\u003c/p\u003e\u003cul\u003e\u003cli\u003eA \u003cstrong\u003erelease\u003c/strong\u003e branch for stable packages\u003c/li\u003e\u003cli\u003eA \u003cstrong\u003edevel\u003c/strong\u003e branch for ongoing development and the next release cycle\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eTo mirror this structure, we currently operate two dedicated R-universe instances:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eDevelopment branch:\u003c/strong\u003e \u003ca href=\"https://bioc.r-universe.dev\"\u003ehttps://bioc.r-universe.dev\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eRelease branch:\u003c/strong\u003e \u003ca href=\"https://bioc-release.r-universe.dev\"\u003ehttps://bioc-release.r-universe.dev\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThese universes integrate directly with Bioconductor’s existing Git infrastructure and provide continuous builds for packages in both branches.\u003c/p\u003e\u003cp\u003eThrough the R-universe dashboard, package maintainers and users can:\u003c/p\u003e\u003cul\u003e\u003cli\u003eInspect cross-platform check results\u003c/li\u003e\u003cli\u003eReview extended BiocCheck diagnostics\u003c/li\u003e\u003cli\u003eMonitor build logs and dependency graphs\u003c/li\u003e\u003cli\u003eExplore rich package metadata and metrics\u003c/li\u003e\u003cli\u003ePublish binary packages for Windows, macOS, and Linux\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThis provides a familiar yet modern interface for Bioconductor contributors, aligned with what users increasingly expect from contemporary R package infrastructure.\u003c/p\u003e\u003cp\u003eInformation about each package is available on \u003ccode\u003ehttps://bioc.r-universe.dev/{pkgname}\u003c/code\u003e. For example,  \u003ca href=\"https://bioc.r-universe.dev/DESeq2\"\u003ehttps://bioc.r-universe.dev/DESeq2\u003c/a\u003e provides details on the DESeq2 package as shown below:\u003c/p\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"https://docs.r-universe.dev/img/bioc-pkg.png\" alt=\"screenshot of r-universe package\"/\u003e    \u003c/div\u003e    \u003ca href=\"https://docs.r-universe.dev/img/bioc-pkg.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cp\u003eIf this is your first time visiting R-universe, we recommend clicking the \u0026ldquo;Website Tour\u0026rdquo; button which will walk you through the most important information in 1 or 2 minutes.\u003c/p\u003e\u003ch2 id=\"technical-documentation-for-bioconductor-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#technical-documentation-for-bioconductor-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTechnical Documentation for Bioconductor Maintainers\u003c/h2\u003e\u003cp\u003eThe R-universe project maintains comprehensive technical documentation at \u003ca href=\"https://docs.r-universe.dev\"\u003ehttps://docs.r-universe.dev\u003c/a\u003e. For Bioconductor specifically, we created a dedicated section summarizing the most relevant topics for developers to get started with R-universe: \u003ca href=\"https://docs.r-universe.dev/bioconductor/\"\u003ehttps://docs.r-universe.dev/bioconductor/\u003c/a\u003e\u003c/p\u003e\u003cp\u003eAs the collaboration evolves and new components get introduced, the documentation will continue to be expanded. The goal is to provide Bioconductor maintainers with a clear reference point for understanding how R-universe fits into their development workflow, while maintaining compatibility with the established practices that have made Bioconductor a successful project within the R community.\u003c/p\u003e\u003ch2 id=\"looking-ahead\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#looking-ahead\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLooking Ahead\u003c/h2\u003e\u003cp\u003eAdopting new infrastructure inevitably involves adjustments. For Bioconductor developers, integrating with a new build and distribution system will likely require some changes to workflows, and time to become familiar with new or different package checks, build diagnostics, and binary distribution.\u003c/p\u003e\u003cp\u003eHowever, by gradually moving toward common infrastructure, the Bioconductor project will benefit from improvements that are being continuously developed and maintained for the broader R ecosystem. A system based on modern continuous integration (CI) will provide developers with improved tooling, and will give the core team more time to focus on community coordination and quality control, rather than on maintaining costly infrastructure. At the same time, the shared platform provided by R-universe can help to increase the visibility and accessibility of Bioconductor software to the greater R community.\u003c/p\u003e\u003cp\u003eWe look forward to continuing this alliance and to working with the Bioconductor community to ensure that the next generation of infrastructure supports the project for many years to come.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/04/08/r-universe-bioc/","date_published":"2026-04-08T00:00:00+00:00","_relationships":[{"url":"https://blog.bioconductor.org/","title":"Bioconductor","relation":"IsIdenticalTo"},{"url":"https://r-consortium.org/blog/","title":"R-Consortium","relation":"IsIdenticalTo"}],"date_modified":"2026-04-08T10:57:01+02:00"},{"id":"https://doi.org/10.59350/57mzc-7e212","title":"A Better R Programming Experience Thanks to Tree-sitter","language":"en","authors":[{"name":"Davis Vaughan","url":"https://orcid.org/0000-0003-4777-038X","avatar":"https://github.com/DavisVaughan.png","_role":["editor"]},{"name":"Etienne Bacher","url":"https://orcid.org/0000-0002-9271-5075","avatar":"https://github.com/etiennebacher.png","_role":["editor"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["package development","tech notes","best practice"],"content_html":"\u003cp\u003eA little bit less than two years ago, building on work by Jim Hester and Kevin Ushey, Davis Vaughan completed a very impactful JavaScript file for the R community: an R grammar for the Tree-sitter parsing generator. He even got a round of applause for it during a talk at the useR! 2024 conference! So, did he get cheered for\u0026hellip; grammatical rules in a \u003ca href=\"https://github.com/r-lib/tree-sitter-r/blob/next/grammar.js\"\u003eJavaScript file\u003c/a\u003e? \u0026#x1f605;\u003c/p\u003e\u003cp\u003eNo, the audience was excited about the \u003cem\u003eimproved developer experience for R\u003c/em\u003e that this file unlocked. R tooling around Tree-sitter is how you get\u003c/p\u003e\u003cul\u003e\u003cli\u003ereformatting through \u003ca href=\"https://posit-dev.github.io/air/\"\u003eAir\u003c/a\u003e and linting through \u003ca href=\"https://jarl.etiennebacher.com/\"\u003eJarl\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eauto-completion or help on hover in the \u003ca href=\"https://lionel-.github.io/slidedecks/2024-07-11-ark\"\u003ePositron IDE\u003c/a\u003e;\u003c/li\u003e\u003cli\u003ebetter \u003ca href=\"https://github.com/orgs/community/discussions/120397\"\u003esearch\u003c/a\u003e for R on GitHub;\u003c/li\u003e\u003cli\u003eand more!\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIn this post, we\u0026rsquo;ll explain what Tree-sitter is, and how tools built on Tree-sitter can benefit your R development workflow.\u003c/p\u003e\u003ch2 id=\"code-parsing-what-is-tree-sitter\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#code-parsing-what-is-tree-sitter\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCode parsing: what is Tree-sitter?\u003c/h2\u003e\u003cp\u003e\u003ca href=\"https://tree-sitter.github.io/tree-sitter/\"\u003eTree-sitter\u003c/a\u003e is a code parsing generator written in C, with bindings existing in several languages including Rust (and R!).\u003c/p\u003e\u003cp\u003eLet\u0026rsquo;s rewind a little bit. What does it mean to parse code?\u003c/p\u003e\u003cp\u003eBasically, given a string of code like\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ena.rm\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eHow do you know that \u003ccode\u003emean\u003c/code\u003e is a function name, \u003ccode\u003ena.rm\u003c/code\u003e an argument name, \u003ccode\u003eTRUE\u003c/code\u003e a logical? You have to \u003cem\u003eparse\u003c/em\u003e that code into what\u0026rsquo;s called a parse tree. You do that in your head when reading R code. \u0026#x1f638;\u003c/p\u003e\u003cp\u003eR itself can obviously parse R code, thanks to its \u003ca href=\"https://github.com/wch/r-source/blob/trunk/src/main/gram.y\"\u003egrammar\u003c/a\u003e. See for instance the \u003ca href=\"https://github.com/wch/r-source/commit/a1425adea54bcc98eef86081522b5dbb3e149cdc#diff-ba804d7fa3fa053c1f57d46369f4432cb55c9c4f69f46ae6510d0d1fcc59f382\"\u003ecommit that introduced R\u0026rsquo;s native pipe\u003c/a\u003e, which necessitated extending R\u0026rsquo;s syntax thus modifying its grammar.\u003c/p\u003e\u003cp\u003eYou can use \u003ca href=\"https://rdrr.io/r/base/parse.html\"\u003e\u003ccode\u003eparse()\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://rdrr.io/r/utils/getParseData.html\"\u003e\u003ccode\u003egetParseData()\u003c/code\u003e\u003c/a\u003e to parse R code.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/parse.html'\u003eparse\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  text \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='s'\u003e\"a \u0026lt;- mean(x, na.rm = TRUE)\"\u003c/span\u003e,\u003c/span\u003e\u003cspan\u003e  keep.source \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='kc'\u003eTRUE\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/utils/getParseData.html'\u003egetParseData\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;    line1 col1 line2 col2 id parent                token terminal  text\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 23     1    1     1   26 23      0                 expr    FALSE      \u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 1      1    1     1    1  1      3               SYMBOL     TRUE     a\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 3      1    1     1    1  3     23                 expr    FALSE      \u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 2      1    3     1    4  2     23          LEFT_ASSIGN     TRUE    \u0026lt;-\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 21     1    6     1   26 21     23                 expr    FALSE      \u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 4      1    6     1    9  4      6 SYMBOL_FUNCTION_CALL     TRUE  mean\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 6      1    6     1    9  6     21                 expr    FALSE      \u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 5      1   10     1   10  5     21                  '('     TRUE     (\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 7      1   11     1   11  7      9               SYMBOL     TRUE     x\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 9      1   11     1   11  9     21                 expr    FALSE      \u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 8      1   12     1   12  8     21                  ','     TRUE     ,\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 13     1   14     1   18 13     21           SYMBOL_SUB     TRUE na.rm\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 14     1   20     1   20 14     21               EQ_SUB     TRUE     =\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 15     1   22     1   25 15     16            NUM_CONST     TRUE  TRUE\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 16     1   22     1   25 16     21                 expr    FALSE      \u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 17     1   26     1   26 17     21                  ')'     TRUE     )\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eOr you could transform that same data into XML using Gábor Csárdi\u0026rsquo;s \u003ca href=\"https://r-lib.github.io/xmlparsedata/\"\u003e{xmlparsedata}\u003c/a\u003e:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/parse.html'\u003eparse\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  text \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='s'\u003e\"a \u0026lt;- mean(x, na.rm = TRUE)\"\u003c/span\u003e,\u003c/span\u003e\u003cspan\u003e  keep.source \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='kc'\u003eTRUE\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='nf'\u003exmlparsedata\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/pkg/xmlparsedata/man/xml_parse_data.html'\u003exml_parse_data\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003epretty \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='kc'\u003eTRUE\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='nf'\u003exml2\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='http://xml2.r-lib.org/reference/read_xml.html'\u003eread_xml\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/character.html'\u003eas.character\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/cat.html'\u003ecat\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u0026lt;?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u0026lt;exprlist\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;   \u0026lt;expr line1=\"1\" col1=\"1\" line2=\"1\" col2=\"26\" start=\"28\" end=\"53\"\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;     \u0026lt;expr line1=\"1\" col1=\"1\" line2=\"1\" col2=\"1\" start=\"28\" end=\"28\"\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       \u0026lt;SYMBOL line1=\"1\" col1=\"1\" line2=\"1\" col2=\"1\" start=\"28\" end=\"28\"\u0026gt;a\u0026lt;/SYMBOL\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;     \u0026lt;/expr\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;     \u0026lt;LEFT_ASSIGN line1=\"1\" col1=\"3\" line2=\"1\" col2=\"4\" start=\"30\" end=\"31\"\u0026gt;\u0026amp;lt;-\u0026lt;/LEFT_ASSIGN\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;     \u0026lt;expr line1=\"1\" col1=\"6\" line2=\"1\" col2=\"26\" start=\"33\" end=\"53\"\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       \u0026lt;expr line1=\"1\" col1=\"6\" line2=\"1\" col2=\"9\" start=\"33\" end=\"36\"\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;         \u0026lt;SYMBOL_FUNCTION_CALL line1=\"1\" col1=\"6\" line2=\"1\" col2=\"9\" start=\"33\" end=\"36\"\u0026gt;mean\u0026lt;/SYMBOL_FUNCTION_CALL\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       \u0026lt;/expr\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       \u0026lt;OP-LEFT-PAREN line1=\"1\" col1=\"10\" line2=\"1\" col2=\"10\" start=\"37\" end=\"37\"\u0026gt;(\u0026lt;/OP-LEFT-PAREN\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       \u0026lt;expr line1=\"1\" col1=\"11\" line2=\"1\" col2=\"11\" start=\"38\" end=\"38\"\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;         \u0026lt;SYMBOL line1=\"1\" col1=\"11\" line2=\"1\" col2=\"11\" start=\"38\" end=\"38\"\u0026gt;x\u0026lt;/SYMBOL\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       \u0026lt;/expr\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       \u0026lt;OP-COMMA line1=\"1\" col1=\"12\" line2=\"1\" col2=\"12\" start=\"39\" end=\"39\"\u0026gt;,\u0026lt;/OP-COMMA\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       \u0026lt;SYMBOL_SUB line1=\"1\" col1=\"14\" line2=\"1\" col2=\"18\" start=\"41\" end=\"45\"\u0026gt;na.rm\u0026lt;/SYMBOL_SUB\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       \u0026lt;EQ_SUB line1=\"1\" col1=\"20\" line2=\"1\" col2=\"20\" start=\"47\" end=\"47\"\u0026gt;=\u0026lt;/EQ_SUB\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       \u0026lt;expr line1=\"1\" col1=\"22\" line2=\"1\" col2=\"25\" start=\"49\" end=\"52\"\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;         \u0026lt;NUM_CONST line1=\"1\" col1=\"22\" line2=\"1\" col2=\"25\" start=\"49\" end=\"52\"\u0026gt;TRUE\u0026lt;/NUM_CONST\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       \u0026lt;/expr\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       \u0026lt;OP-RIGHT-PAREN line1=\"1\" col1=\"26\" line2=\"1\" col2=\"26\" start=\"53\" end=\"53\"\u0026gt;)\u0026lt;/OP-RIGHT-PAREN\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;     \u0026lt;/expr\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;   \u0026lt;/expr\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u0026lt;/exprlist\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eIn both cases, you recognize words such as \u003ccode\u003eLEFT_ASSIGN\u003c/code\u003e or \u003ccode\u003eSYMBOL_FUNCTION_CALL\u003c/code\u003e. Parsing is an essential step before the code is actually executed, but parsed code can also be used for other purposes, such as analyzing code without brittle regular expressions (does it call a particular \u003ca href=\"https://nrennie.rbind.io/blog/how-to-make-your-own-rstats-wrapped/\"\u003efunction\u003c/a\u003e?), navigating code (going from a function call to the definition of that function), or modifying code (replacing all occurrences of a function with another one).\u003c/p\u003e\u003cp\u003eNow, Tree-sitter performs this same code parsing but \u003cstrong\u003efaster\u003c/strong\u003e especially thanks to its support of incremental parsing \u0026ndash; which is key to updating the syntax tree as you are typing in your editor for instance! Tree-sitter is agnostic in that it can parse any code as long as there is a grammar for it (think, Rosetta Stone plugins). It\u0026rsquo;s been used for many languages which means many tools have been built around it.\u003c/p\u003e\u003cp\u003eTo have Tree-sitter \u0026ldquo;learn\u0026rdquo; a new language you need to give it a file containing the definition of the syntax of that language, what\u0026rsquo;s called a \u003cem\u003egrammar\u003c/em\u003e. This is where the aforementioned JavaScript file by Davis Vaughan and collaborators comes into play! The \u003ca href=\"https://github.com/r-lib/tree-sitter-r\"\u003etreesitter-r repo\u003c/a\u003e, which provides a translation of the R grammar in the format expected by Tree-sitter, is the base of all tools presented in this post which use R code as their input.\u003c/p\u003e\u003cp\u003eHere\u0026rsquo;s how to use the {treesitter} R package for the same code as earlier. The {treesitter} R package allows us to use Tree-sitter from R. To parse R code with it, we need the \u003ccode\u003elanguage()\u003c/code\u003e function from {treesitter.r}\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='kr'\u003e\u003ca href='https://rdrr.io/r/base/library.html'\u003elibrary\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003e\u003ca href='https://github.com/DavisVaughan/r-tree-sitter'\u003etreesitter\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; Attaching package: 'treesitter'\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; The following object is masked from 'package:base':\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;     range\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nv'\u003elanguage\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nf'\u003etreesitter.r\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/pkg/treesitter.r/man/language.html'\u003elanguage\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nv'\u003eparser\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nf'\u003e\u003ca href='https://davisvaughan.github.io/r-tree-sitter/reference/parser.html'\u003eparser\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003elanguage\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nv'\u003etext\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='s'\u003e\"a \u0026lt;- mean(x, na.rm = TRUE)\"\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nf'\u003e\u003ca href='https://davisvaughan.github.io/r-tree-sitter/reference/parser-parse.html'\u003eparser_parse\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003eparser\u003c/span\u003e, \u003cspan class='nv'\u003etext\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u0026lt;tree_sitter_tree\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; ── Text ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; a \u0026lt;- mean(x, na.rm = TRUE)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; ── S-Expression ────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #0000BB;'\u003e(\u003c/span\u003eprogram \u003cspan style='color: #555555;'\u003e[(0, 0), (0, 26)]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;   \u003cspan style='color: #00BB00;'\u003e(\u003c/span\u003ebinary_operator \u003cspan style='color: #555555;'\u003e[(0, 0), (0, 26)]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;     lhs: \u003cspan style='color: #BB0000;'\u003e(\u003c/span\u003eidentifier \u003cspan style='color: #555555;'\u003e[(0, 0), (0, 1)]\u003c/span\u003e\u003cspan style='color: #BB0000;'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;     operator: \"\u0026lt;-\" \u003cspan style='color: #555555;'\u003e[(0, 2), (0, 4)]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;     rhs: \u003cspan style='color: #BB0000;'\u003e(\u003c/span\u003ecall \u003cspan style='color: #555555;'\u003e[(0, 5), (0, 26)]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       function: \u003cspan style='color: #00BBBB;'\u003e(\u003c/span\u003eidentifier \u003cspan style='color: #555555;'\u003e[(0, 5), (0, 9)]\u003c/span\u003e\u003cspan style='color: #00BBBB;'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       arguments: \u003cspan style='color: #00BBBB;'\u003e(\u003c/span\u003earguments \u003cspan style='color: #555555;'\u003e[(0, 9), (0, 26)]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;         open: \"(\" \u003cspan style='color: #555555;'\u003e[(0, 9), (0, 10)]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;         argument: \u003cspan style='color: #BBBB00;'\u003e(\u003c/span\u003eargument \u003cspan style='color: #555555;'\u003e[(0, 10), (0, 11)]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;           value: \u003cspan style='color: #BB00BB;'\u003e(\u003c/span\u003eidentifier \u003cspan style='color: #555555;'\u003e[(0, 10), (0, 11)]\u003c/span\u003e\u003cspan style='color: #BB00BB;'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;         \u003cspan style='color: #BBBB00;'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;         \u003cspan style='color: #BBBB00;'\u003e(\u003c/span\u003ecomma \u003cspan style='color: #555555;'\u003e[(0, 11), (0, 12)]\u003c/span\u003e\u003cspan style='color: #BBBB00;'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;         argument: \u003cspan style='color: #BBBB00;'\u003e(\u003c/span\u003eargument \u003cspan style='color: #555555;'\u003e[(0, 13), (0, 25)]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;           name: \u003cspan style='color: #BB00BB;'\u003e(\u003c/span\u003eidentifier \u003cspan style='color: #555555;'\u003e[(0, 13), (0, 18)]\u003c/span\u003e\u003cspan style='color: #BB00BB;'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;           \"=\" \u003cspan style='color: #555555;'\u003e[(0, 19), (0, 20)]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;           value: \u003cspan style='color: #BB00BB;'\u003e(\u003c/span\u003etrue \u003cspan style='color: #555555;'\u003e[(0, 21), (0, 25)]\u003c/span\u003e\u003cspan style='color: #BB00BB;'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;         \u003cspan style='color: #BBBB00;'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;         close: \")\" \u003cspan style='color: #555555;'\u003e[(0, 25), (0, 26)]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       \u003cspan style='color: #00BBBB;'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;     \u003cspan style='color: #BB0000;'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;   \u003cspan style='color: #00BB00;'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #0000BB;'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eTree-sitter is the workhorse of many tools, that are mentioned in the diagram below. All of them are dependent on tree-sitter and the R grammar provided to it. Some of them are command-line interfaces (CLIs), while others are R packages.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/04/02/tree-sitter-overview/tree-sitter.png\"\t\t\talt=\"Diagram of Tree-sitter tooling for R. At the center is Tree-sitter especially its Rust bindings and the R grammar for treesitter. At the top is the input, R scripts. At the bottom from treesitter is the treesitter R package,; ast-grep that is used by astgrepr which is used by flir and that is used by the CLAUDE.md instructions for parsing code; Air that is used by Jarl; Ark that is used by the Positron IDE; R code browsing on GitHub.\"\u003e\u003c/figure\u003e\u003ch2 id=\"browsing-code-interactively-positron-ide-github\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#browsing-code-interactively-positron-ide-github\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBrowsing code interactively: Positron IDE, GitHub\u003c/h2\u003e\u003cp\u003eThe real reason why the audience applauded Davis Vaughan is that he explained how the R grammar for Tree-sitter had been \u003ca href=\"https://github.com/orgs/community/discussions/120397\"\u003edeployed to GitHub\u003c/a\u003e so that we get almost as good experience browsing R code on GitHub as browsing, say, JS code. If we search for a function name in a repository for instance, its definition will be indicated in the search results. See \u003ca href=\"https://www.youtube.com/watch?v=Gm0ikRBAfwc\"\u003eDavis\u0026rsquo; slides\u003c/a\u003e (also available in \u003ca href=\"https://github.com/DavisVaughan/2024-07-09_useR-2024\"\u003ePDF\u003c/a\u003e), or refer to the video below showing how typing \u003ccode\u003evetiver_model\u003c/code\u003e in the search bar from the R vetiver repo makes the function definition the first result, on which one can click to land into the definition.\u003c/p\u003e\u003cvideo controls preload=\"auto\" width=\"100%\"  playsinline class=\"html-video\"\u003e    \u003csource src=\"/blog/2026/04/02/tree-sitter-overview/searching-for-vetiver-model-r-new.mp4\" type=\"video/mp4\"\u003e  \u003cspan\u003e\u003c/span\u003e\u003c/video\u003e\u003cp\u003eAlso very useful is the use of Tree-sitter by \u003ca href=\"https://github.com/posit-dev/ark\"\u003eArk\u003c/a\u003e, the R kernel \u003ca href=\"https://lionel-.github.io/slidedecks/2024-07-11-ark/#/language-server-protocol-1\"\u003eused in the Positron IDE\u003c/a\u003e. Ark is how you get autocompletion and help on hover in Positron. The video below shows how you can extend the selection to further steps of a pipeline in Positron.\u003c/p\u003e\u003cvideo controls preload=\"auto\" width=\"100%\"  playsinline class=\"html-video\"\u003e    \u003csource src=\"/blog/2026/04/02/tree-sitter-overview/expand-selection-2.mp4\" type=\"video/mp4\"\u003e  \u003cspan\u003e\u003c/span\u003e\u003c/video\u003e\u003cp\u003eThis use case of Tree-sitter is also featured in \u003ca href=\"https://www.youtube.com/watch?v=Gm0ikRBAfwc\"\u003eDavis\u0026rsquo; slides\u003c/a\u003e. See also Lionel Henry\u0026rsquo;s and Davis Vaughan\u0026rsquo;s talk about Ark at \u003ca href=\"https://youtu.be/8uRcB34Hhsw?si=UeWqIi9PtEOWqRsp\u0026amp;t=2109\"\u003eposit conf 2024\u003c/a\u003e, especially the part about \u003ca href=\"https://youtu.be/8uRcB34Hhsw?si=GBqntC6tW7D2WhBN\u0026amp;t=2455\"\u003ecode assistance\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eOther development environments such as \u003ca href=\"https://lists.gnu.org/archive/html/emacs-devel/2022-11/msg01443.html\"\u003eEmacs\u003c/a\u003e also have support for Tree-sitter.\u003c/p\u003e\u003ch2 id=\"searchingbrowsing-code\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#searchingbrowsing-code\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSearching/browsing code\u003c/h2\u003e\u003cp\u003eYou can parse and search R code using the {treesitter} R package and \u003ca href=\"https://tree-sitter.github.io/tree-sitter/4-code-navigation.html\"\u003etreesitter query syntax\u003c/a\u003e. The {treesitter} R package is a dependency of the \u003ca href=\"https://simonpcouch.github.io/gander/\"\u003e{gander} package\u003c/a\u003e by Simon Couch, that is meant to be used for a better experience with LLMs when writing R code. Another use case of the {treesitter} R package is the {igraph.r2cdocs} \u003ca href=\"https://roxygen2.r-lib.org/dev/articles/extending.html\"\u003eextension\u003c/a\u003e to {roxygen2} for the {igraph} package, that \u003ca href=\"https://github.com/igraph/igraph.r2cdocs/blob/6be2a327a18deb823302caeab8b60a916f6fac62/R/roxygen.R#L119\"\u003eparses all of igraph R code\u003c/a\u003e to then be able to identify, for each exported function, whether it (in)directly calls a function whose name ends with \u003ccode\u003e_impl\u003c/code\u003e, indicating a wrapper to a C igraph function whose docs can be then be linked from the manual of the R function.\u003c/p\u003e\u003cp\u003eThe {pkgdepends} package calls Tree-sitter (\u003ca href=\"https://github.com/r-lib/pkgdepends/blob/main/src/tree-sitter.c\"\u003eC\u003c/a\u003e) to detect \u003ca href=\"https://github.com/r-lib/pkgdepends/blob/634661a7d91b41476fd1ab653fe3087a6e40b8a9/R/scan-deps.R#L340\"\u003edependencies in files\u003c/a\u003e. Below we run it on the source of the \u003ca href=\"https://docs.ropensci.org/saperlipopette/\"\u003esaperlipopette R package\u003c/a\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='nf'\u003epkgdepends\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://r-lib.github.io/pkgdepends/reference/scan_deps.html'\u003escan_deps\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='s'\u003e\"../../../../../CHAMPIONS/saperlipopette\"\u003c/span\u003e,\u003c/span\u003e\u003cspan\u003e  \u003cspan class='s'\u003e\"../../../../../CHAMPIONS\"\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #BBBB00;'\u003eDependencies:\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003ebrio          \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ R/blame.R, R/check-editor.R, R/clean-dir.R, R/committed-to-main.R, R/committed-to-wrong-branch.R, R/conflict…\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003ecli           \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ inst/exo_bisect-Rprofile.en.R, inst/exo_bisect-Rprofile.es.R, inst/exo_bisect-Rprofile.fr.R, inst/exo_blame-…\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003edevtools      \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ saperlipopette.Rproj\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003efs            \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ R/blame.R, R/check-editor.R, R/clean-dir.R, R/committed-to-main.R, R/committed-to-wrong-branch.R, R/conflict…\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003egert          \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ inst/exo_check_editor-Rprofile.en.R, inst/exo_check_editor-Rprofile.es.R, inst/exo_check_editor-Rprofile.fr.…\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003eknitr         \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ README.Rmd\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003eparsedate     \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ R/utils-git.R\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003epurrr         \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ R/create-all.R, R/debug.R, R/log-deleted-file.R, R/log-deleted-line.R, R/revparse.R, R/roxygen2.R, R/worktre…\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003erlang         \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ R/create-all.R, R/roxygen2.R, R/utils-fs.R, R/utils-usethis.R, R/zzz.R\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003ermarkdown     \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ README.Rmd, vignettes/saperlipopette.qmd\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003eroxygen2      \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ R/roxygen2.R, saperlipopette.Rproj\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003esaperlipopette\u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ README.Rmd, vignettes/saperlipopette.qmd\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003etibble        \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ R/roxygen2.R\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003eusethis       \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ R/blame.R, R/check-editor.R, R/clean-dir.R, R/committed-to-main.R, R/committed-to-wrong-branch.R, R/conflict…\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003evctrs         \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ R/roxygen2.R\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003ewithr         \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ R/blame.R, R/check-editor.R, R/clean-dir.R, R/committed-to-main.R, R/committed-to-wrong-branch.R, R/conflict…\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #BBBB00;'\u003eTest dependencies:\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003efs            \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ tests/testthat/test-blame.R, tests/testthat/test-check-editor.R, tests/testthat/test-clean-dir.R, tests/test…\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003egert          \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ tests/testthat/test-blame.R, tests/testthat/test-clean-dir.R, tests/testthat/test-committed-to-main.R, tests…\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003erlang         \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ tests/testthat/test-blame.R, tests/testthat/test-check-editor.R, tests/testthat/test-clean-dir.R, tests/test…\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003esaperlipopette\u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ tests/testthat.R\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003etestthat      \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ tests/testthat.R\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #555555;'\u003e+ \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003ewithr         \u003c/span\u003e\u003cspan style='color: #555555;'\u003e @ tests/testthat/test-blame.R, tests/testthat/test-check-editor.R, tests/testthat/test-clean-dir.R, tests/test…\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003ca href=\"https://ast-grep.github.io/\"\u003east-grep\u003c/a\u003e is a useful tool built on Tree-sitter for searching and re-writing code, with a clearer query syntax than Tree-sitter\u0026rsquo;s. Its name is reminiscent of grep, but with ast-grep we do not need to write brittle regular expressions \u0026#x1f638;. \u003ca href=\"https://astgrepr.etiennebacher.com/\"\u003e{astgrepr}\u003c/a\u003e by Etienne Bacher is an R wrapper to the Rust bindings of ast-grep, and is used in Etienne\u0026rsquo;s \u003ca href=\"https://flir.etiennebacher.com/\"\u003e{flir} package\u003c/a\u003e for \u003ca href=\"https://flir.etiennebacher.com/articles/adding_rules\"\u003erefactoring\u003c/a\u003e code.\u003c/p\u003e\u003cp\u003eThe ast-grep command-line interface (CLI) itself is featured in a useful \u003ca href=\"https://emilhvitfeldt.com/post/ast-grep-r-claude-code/\"\u003eblog post by Emil Hvitfeldt\u003c/a\u003e where he explains how to document the usage of ast-grep for Claude.\u003c/p\u003e\u003ch2 id=\"formatting-and-linting-air-jarl\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#formatting-and-linting-air-jarl\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFormatting and linting: Air, Jarl\u003c/h2\u003e\u003cp\u003eSpeaking of CLIs\u0026hellip;\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/04/02/tree-sitter-overview/meme.png\"\t\t\talt=\"Cute kitten attacked by robots. The text says \u0026#39;Everytime you use Claude for something a CLI can do, a kitten dies\u0026#39;.\"\u003e\u003c/figure\u003e\u003cp\u003e\u003ca href=\"https://posit-dev.github.io/air/cli.html\"\u003eAir\u003c/a\u003e, by Davis Vaughan and Lionel Henry, is a CLI built on Tree-sitter, in Rust. It \u003cem\u003ereformats\u003c/em\u003e code blazingly fast.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://jarl.etiennebacher.com/\"\u003eJarl\u003c/a\u003e, by Etienne Bacher, is a CLI built on Air, therefore also on Tree-sitter, in Rust. It \u003cem\u003elints\u003c/em\u003e and \u003cem\u003efixes\u003c/em\u003e code, also blazingly fast. It can even detect \u003ca href=\"https://jarl.etiennebacher.com/rules/unreachable_code\"\u003eunreachable code\u003c/a\u003e, \u003ca href=\"https://jarl.etiennebacher.com/rules/unused_function\"\u003eunused functions\u003c/a\u003e and \u003ca href=\"https://jarl.etiennebacher.com/rules/duplicated_function_definition\"\u003eduplicated function definitions\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIn both of these examples, the creation of \u003cem\u003eCLIs\u003c/em\u003e wrapping Rust bindings was more efficient than the creation of R packages wrapping the {treesitter} R package, for several reasons:\u003c/p\u003e\u003cul\u003e\u003cli\u003eRust CLIs can edit code very fast\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e;\u003c/li\u003e\u003cli\u003eCLIs are integrated in extensions for popular IDEs (for instance Positron);\u003c/li\u003e\u003cli\u003ea CLI is easier to install on CI than an R package that needs, well, an R installation.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"more-tools\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#more-tools\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMore tools\u003c/h2\u003e\u003cp\u003eA brief mention of some other interesting tools we\u0026rsquo;ve explored a bit less.\u003c/p\u003e\u003ch3 id=\"configuring-ts-for-parsing-json-and-toml-not-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#configuring-ts-for-parsing-json-and-toml-not-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConfiguring: {ts} for parsing JSON and TOML (not R!)\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://github.com/r-lib/ts\"\u003e{ts}\u003c/a\u003e package by Gábor Csárdi is the backbone of two R packages used for editing and manipulating:\u003c/p\u003e\u003cul\u003e\u003cli\u003eTOML \u003ca href=\"https://gaborcsardi.github.io/tstoml/\"\u003e{tstoml}\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eJSON \u003ca href=\"https://gaborcsardi.github.io/tsjsonc/\"\u003e{tsjson}\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eCompared to existing parsers in R for those formats, these two packages preserve comments.\u003c/p\u003e\u003ch3 id=\"testing-code-muttest\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#testing-code-muttest\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTesting code: {muttest}\u003c/h3\u003e\u003cp\u003e\u003ca href=\"https://en.wikipedia.org/wiki/Mutation_testing\"\u003eMutation testing\u003c/a\u003e is a kind of testing where you, say, randomly swap \u003ccode\u003e+\u003c/code\u003e with \u003ccode\u003e-\u003c/code\u003e in your code (you \u003cem\u003emutate\u003c/em\u003e it) and you run your tests to see whether they catch the mutant. The \u003ca href=\"https://github.com/jakubsob/muttest\"\u003e{muttest} package\u003c/a\u003e by Jakub Sobolewski is an R package for mutation testing, that depends on the {treesitter} R package.\u003c/p\u003e\u003ch3 id=\"diffing-code-difftastic\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#diffing-code-difftastic\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDiffing code: difftastic\u003c/h3\u003e\u003cp\u003eThe difftastic CLI by Wilfred Hughes is \u0026ldquo;a structural diff tool that understands syntax\u0026rdquo;. ✨ This means that difftastic doesn\u0026rsquo;t only compare line or \u0026ldquo;words\u0026rdquo; but actual syntax by looking at lines around the lines that changed (by default, 3). Even better, it understands R out of the box. See this \u003ca href=\"https://masalmon.eu/2026/03/30/difftastic/\"\u003eblog post with examples of R code diffing\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"conclusion-more-to-come\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion-more-to-come\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion: more to come?\u003c/h2\u003e\u003cp\u003eIn this post, we\u0026rsquo;ve presented an overview of Tree-sitter based tooling for R or in R.\u003c/p\u003e\u003cp\u003eNote that this ecosystem of tools is very actively developed, so some tools might come and go. However, the idea that plugging the R grammar into a general parsing generator brings cool features to us R developers, will remain true. Maybe \u003cem\u003eyou\u003c/em\u003e will contribute to this ecosystem, either through an existing tool or by creating a new one?\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eWe could also parse C code with it using \u003ca href=\"https://sounkou-bioinfo.github.io/treesitter.c/\"\u003e{treesitter.c}\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eRust is a lower level language than R so has less overhead; furthermore this kind of Rust code can be easily parallelized.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2026/04/02/tree-sitter-overview/","date_published":"2026-04-02T00:00:00+00:00","date_modified":"2026-04-02T11:59:17+02:00"},{"id":"https://doi.org/10.59350/fe3c2-6zc80","title":"rOpenSci News Digest, March 2026","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2026/03/30/news-mars-2026\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"ropensci-dev-guide-100-trilingual-and-improved\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-dev-guide-100-trilingual-and-improved\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci Dev Guide 1.0.0: Trilingual and Improved\u003c/h3\u003e\u003cp\u003erOpenSci Software Peer Review\u0026rsquo;s guidance is gathered in an online book that keeps improving! It is now available in \u003ca href=\"https://devguide.ropensci.org/\"\u003eEnglish\u003c/a\u003e, \u003ca href=\"https://devguide.ropensci.org/es/index.es.html\"\u003eSpanish\u003c/a\u003e and \u003ca href=\"https://devguide.ropensci.org/pt/index.pt.html\"\u003ePortuguese\u003c/a\u003e. Read more in the \u003ca href=\"/blog/2026/03/02/devguide-1.0.0/\"\u003erelease announcement\u003c/a\u003e\u003c/p\u003e\u003ch3 id=\"champions-program-update\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#champions-program-update\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChampions Program Update\u003c/h3\u003e\u003cp\u003eWe are still going through the Champions selection process, and we\u0026rsquo;re excited to share that the new group of mentors has already been selected and is now actively reviewing Champions applications.\u003c/p\u003e\u003cp\u003eThis cohort brings together a wonderful mix of returning Champions stepping into mentorship roles, mentors continuing their contributions, and new members joining the program. The 2026 mentors are Andrea Gómez Vargas, Pablo Paccioretti, Alber Hamersson Sánchez Ipia, Erick Isaac Navarro Delgado, Francisco Cardozo, Luis Verde Arregoitia, Monika Ávila Márquez, Guadalupe Pascal, Pao Corrales, and Elio Campitelli. Together, they represent a diverse and vibrant community across Colombia, Mexico, Argentina, Brazil, and Bolivia, with some currently based in Switzerland, Canada, the United States, and Australia. We\u0026rsquo;re very happy to see this growing, interconnected network supporting the next cohort of Champions.\u003c/p\u003e\u003ch3 id=\"r-universe-update\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-update\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-Universe update\u003c/h3\u003e\u003cp\u003eYou can now download artifacts and log files from R-Universe without being logged in with a GitHub account, for example \u003ca href=\"https://ropensci.r-universe.dev/opencv#checktable\"\u003ehttps://ropensci.r-universe.dev/opencv#checktable\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"software-review-and-usage-of-ai-tools\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review-and-usage-of-ai-tools\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware review and usage of AI tools\u003c/h3\u003e\u003cp\u003eAuthors submitting new software for \u003ca href=\"/software-review/\"\u003epeer review\u003c/a\u003e are now required to explain potential usage of generative AI tools in their package development. All submission templates now include a mandatory check-box:\u003c/p\u003e\u003cpre\u003e\u003ccode\u003e- [ ] Generative AI tools were used to produce some of the material in this submission.If so, please describe usage, and include links to any relevant aspects of your repository.\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis is the start of our updates to accommodate generative AI tools in package development, as described in our \u003ca href=\"/blog/2026/02/26/ropensci-ai-policy/\"\u003erecent blog post\u003c/a\u003e. The next phase will involve updates to our \u003ca href=\"https://devguide.ropensci.org\"\u003e\u003cem\u003eDev Guide\u003c/em\u003e\u003c/a\u003e, explaining requirements and recommendations for authors, reviewers, and editors. All updates are intended to permit generative AI tools to be used in any useful way, while minimising the burden on those who volunteer their own time to keep our software peer review service running.\u003c/p\u003e\u003ch3 id=\"software-review-bot-updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review-bot-updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware review bot updates\u003c/h3\u003e\u003cp\u003eThe \u003ccode\u003eropensci-review-bot\u003c/code\u003e now delivers an initial report to all new software pre-submissions and submissions, identifying the five most similar packages from both all rOpenSci packages, and all CRAN packages. The matches are generated by our \u003ca href=\"https://docs.ropensci.org/pkgmatch\"\u003eropensci-review-tools/pkgmatch package\u003c/a\u003e (itself reviewed in \u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003ethis review issue\u003c/a\u003e). Matching is based on an \u003ca href=\"https://en.wikipedia.org/wiki/Tf%E2%80%93idf\"\u003e\u0026ldquo;term frequency-inverse document frequency\u0026rdquo; algorithm\u003c/a\u003e, using inverse document frequencies from all rOpenSci and CRAN packages. Similar package reports can also be manually triggered (by editors only) with \u003ccode\u003e@ropensci-review-bot similar packages\u003c/code\u003e, like in \u003ca href=\"https://github.com/ropensci/software-review/issues/671#issuecomment-4117805740\"\u003ethis example for the pkgmatch package itself\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday April 7th 2026, 9:00 Americas Pacific (16:00 UTC) \u003ca href=\"/events/coworking-2026-04/\"\u003e\u0026ldquo;Getting to know the CSID Network\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohosts \u003ca href=\"/author/irene-ramos/\"\u003eIrene Ramos\u003c/a\u003e and \u003ca href=\"/author/adamu-saleh-saidu\"\u003eAdamu Saleh Saidu\u003c/a\u003e.\u003cul\u003e\u003cli\u003eLearn more about the \u003ca href=\"https://csidnet.org/\"\u003eCSID Network\u003c/a\u003e\u003c/li\u003e\u003cli\u003eMeet cohosts, Irene Ramos and Adamu Saleh Saidu, and learn more about the CSID Network and how you might get involved.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday May 5th 2026, 9:00 Australia Western (01:00 UTC) \u003ca href=\"/events/coworking-2026-05/\"\u003e\u0026ldquo;Code Review with rOpenSci\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/liz-hare/\"\u003eLiz Hare\u003c/a\u003e.\u003cul\u003e\u003cli\u003eExplore resources for Code Review\u003c/li\u003e\u003cli\u003eSign up to volunteer to do \u003ca href=\"https://airtable.com/app8dssb6a7PG6Vwj/shrnfDI2S9uuyxtDw\"\u003esoftware peer-review\u003c/a\u003e at rOpenSci\u003c/li\u003e\u003cli\u003eMeet cohost, Liz Hare, and discuss resources for Code Review with rOpenSci.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/suwo\"\u003esuwo\u003c/a\u003e, developed by Marcelo Araya-Salas together with Jorge Elizondo-Calvo and Alejandro Rico-Guevara: Streamline searching/downloading of nature media files (e.g. audios, photos) from online repositories. The package offers functions for obtaining media metadata from online repositories, downloading associated media files and updating data sets with new records. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/729\"\u003ereviewed\u003c/a\u003e by Eric R. Scott and Hugo Gruson.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following eleven packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (cff) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v1.3.0\"\u003e\u003ccode\u003ev1.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pkgmatch\" title=\"Find R Packages Matching Either Descriptions or Other R Packages\"\u003epkgmatch\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/pkgmatch/releases/tag/v0.5.2\"\u003e\u003ccode\u003ev0.5.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.14.1\"\u003e\u003ccode\u003e0.14.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgbif\" title=\"Interface to the Global Biodiversity Information Facility API\"\u003ergbif\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgbif/releases/tag/v3.8.5\"\u003e\u003ccode\u003ev3.8.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/saperlipopette\" title=\"Create Example Git Messes\"\u003esaperlipopette\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-training/saperlipopette/releases/tag/v0.1.1\"\u003e\u003ccode\u003ev0.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gutenbergr\" title=\"Download and Process Public Domain Works from Project Gutenberg\"\u003egutenbergr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gutenbergr/releases/tag/v0.5.0\"\u003e\u003ccode\u003ev0.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/trud\" title=\"Query the NHS TRUD API\"\u003etrud\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/trud/releases/tag/v0.2.1\"\u003e\u003ccode\u003ev0.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/naijR\" title=\"Operations to Ease Data Analyses Specific to Nigeria\"\u003enaijR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/naijR/releases/tag/v0.7.0\"\u003e\u003ccode\u003ev0.7.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/sasquatch\" title=\"Use SAS, R, and quarto Together\"\u003esasquatch\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/sasquatch/releases/tag/v0.1.3\"\u003e\u003ccode\u003ev0.1.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lingtypology\" title=\"Linguistic Typology and Mapping\"\u003elingtypology\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lingtypology/releases/tag/v1.1.25\"\u003e\u003ccode\u003ev1.1.25\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/rerddap\" title=\"General Purpose Client for ERDDAP™ Servers\"\u003ererddap\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rerddap/releases/tag/v1.2.3\"\u003e\u003ccode\u003ev1.2.3\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003cp\u003ePost on dfms release: \u003ca href=\"https://sebkrantz.github.io/Rblog/2026/01/29/releasing-dfms-1-0-fast-and-feature-rich-estimation-of-dynamic-factor-models-in-r/\"\u003eReleasing dfms 1.0: Fast and Feature-Rich Estimation of Dynamic Factor Models in R\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are fifteen recently closed and active submissions and 5 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/729\"\u003esuwo\u003c/a\u003e, Access Nature Media Repositories Through R. Submitted by \u003ca href=\"https://marce10.github.io/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%225/awaiting-reviewer(s)-response%22\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/741\"\u003elogolink\u003c/a\u003e, An Interface for Running NetLogo Simulations. Submitted by \u003ca href=\"http://danielvartan.com\"\u003eDaniel Vartanian\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSix at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/760\"\u003epvEBayes\u003c/a\u003e, Empirical Bayes Methods for Pharmacovigilance. Submitted by \u003ca href=\"https://github.com/YihaoTancn\"\u003eYihao Tan\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/754\"\u003esaperlipopette\u003c/a\u003e, Create Example Git Messes. Submitted by \u003ca href=\"https://masalmon.eu/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/730\"\u003eernest\u003c/a\u003e, A Toolkit for Nested Sampling. Submitted by \u003ca href=\"https://github.com/kylesnap\"\u003eKyle Dewsnap\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/718\"\u003ercrisp\u003c/a\u003e, Automate the Delineation of Urban River Spaces. Submitted by \u003ca href=\"https://github.com/cforgaci\"\u003eClaudiu Forgaci\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/709\"\u003ereviser\u003c/a\u003e, Tools for Studying Revision Properties in Real-Time Time Series Vintages. Submitted by \u003ca href=\"https://marcburri.github.io/\"\u003eMarc Burri\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/704\"\u003epriorsense\u003c/a\u003e, Prior Diagnostics and Sensitivity Analysis. Submitted by \u003ca href=\"https://github.com/n-kall\"\u003eNoa Kallioinen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%222/seeking-reviewer(s)%22\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/750\"\u003enycOpenData\u003c/a\u003e, Convenient Access to NYC Open Data API Endpoints. Submitted by \u003ca href=\"https://github.com/martinezc1\"\u003eChristian Martinez\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/743\"\u003eRAMEN\u003c/a\u003e, RAMEN: Regional Association of Methylome variability with the Exposome and geNome. Submitted by \u003ca href=\"https://erick-navarrodelgado.netlify.app\"\u003eErick Navarro-Delgado\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/744\"\u003eRAQSAPI\u003c/a\u003e, A Simple Interface to the US EPA Air Quality System Data Mart API. Submitted by \u003ca href=\"https://github.com/mccroweyclinton-EPA\"\u003emccroweyclinton-EPA\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/740\"\u003efcmconfr\u003c/a\u003e, Fuzzy Cognitive Map Analysis in R. Submitted by \u003ca href=\"https://github.com/bhroston\"\u003ebenroston\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/717\"\u003ecoevolve\u003c/a\u003e, Fit Bayesian Generalized Dynamic Phylogenetic Models using Stan. Submitted by \u003ca href=\"https://scottclaessens.github.io/\"\u003eScott Claessens\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/02/26/ropensci-ai-policy\"\u003eSoftware Review in the Era of AI: What We Are Testing at rOpenSci\u003c/a\u003e by Mark Padgham, Noam Ross, Maëlle Salmon, Yanina Bellini Saibene, Mauro Lepore, Emily Riederer, Jouni Helske, and Francisco Rodriguez-Sanchez. rOpenSci is testing preliminary policies on the use of generative AI tools, with proposed updates to documentation and procedures for authors submitting software for review, for editors, and for reviewers.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/03/02/devguide-1.0.0\"\u003erOpenSci Dev Guide 1.0.0: Trilingual and Improved\u003c/a\u003e by Maëlle Salmon, Mark Padgham, and Noam Ross. Updates in version 1.0.0 of the online book \u0026lsquo;rOpenSci Packages: Development, Maintenance, and Peer Review\u0026rsquo;. Other languages: \u003ca href='/es/blog/2026/03/02/r_open_sci_dev_guide_1_0_0_trilingüe_y_mejorada' lang='es'\u003erOpenSci Dev Guide 1.0.0: Trilingüe y mejorada (es)\u003c/a\u003e, \u003ca href='/pt/blog/2026/03/02/guia_de_desenvolvimento_da_r_open_sci_1_0_0_trilíngue_e_aprimorado' lang='pt'\u003eGuia de desenvolvimento da rOpenSci 1.0.0: trilíngue e aprimorado (pt)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2026/03/30/news-mars-2026/cover.png\"\t\t\talt=\"cover of rOpenSci dev guide, showing a package production line with small humans discussing, examining and promoting packages\" width=\"400\"\u003e\u003c/figure\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2026/03/10/patentsview-breaking-release\"\u003eBreaking Release of the patentsview R Package\u003c/a\u003e by Russ Allen and Chris Baker. Breaking Release of the patentsview R Package.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/NLMR\"\u003eNLMR\u003c/a\u003e, R package to simulate neutral landscape models. \u003ca href=\"https://github.com/ropensci/NLMR/issues/116\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/landscapetools\"\u003elandscapetools\u003c/a\u003e, R package for some of the less-glamorous tasks involved in landscape analysis. \u003ca href=\"https://github.com/ropensci/landscapetools/issues/48\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools\"\u003ehddtools\u003c/a\u003e, Tools to discover hydrological data, accessing catalogues and databases from various data providers. \u003ca href=\"https://github.com/ropensci/hddtools/issues/36\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/qualtRics/\"\u003equaltRics\u003c/a\u003e, download Qualtrics survey data. \u003ca href=\"https://github.com/ropensci/qualtRics/issues/383\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"a-new-r-core-member\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-new-r-core-member\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA new R core member!\u003c/h3\u003e\u003cp\u003eThe R Foundation announced that \u003ca href=\"https://uk.linkedin.com/in/heathrturnr\"\u003eHeather Turner\u003c/a\u003e has joined the \u003ca href=\"https://www.r-project.org/contributors.html\"\u003eR Core Team\u003c/a\u003e! \u0026#x1f389;\u003c/p\u003e\u003ch3 id=\"how-to-browse-the-r-mailing-lists\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-browse-the-r-mailing-lists\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to browse the R mailing lists\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://www.r-project.org/mail.html\"\u003eofficial mailing lists of the R project\u003c/a\u003e like \u003ca href=\"https://blog.r-hub.io/2019/04/11/r-package-devel/\"\u003eR-package-devel\u003c/a\u003e are full of important and useful information. How to browse them, given that the default website is not easy to search? You can use the \u003ca href=\"https://mail-archive.com/r-devel@r-project.org/\"\u003email-archive\u003c/a\u003e website (thanks to Hugo Gruson for the reminder!) or a new project by James Balamuta: the \u003ca href=\"https://r-mailing-lists.thecoatlessprofessor.com/\"\u003eR Mailing Lists Archive\u003c/a\u003e!\u003c/p\u003e\u003ch3 id=\"claude-code-setting-up-ast-grep-with-r-support\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#claude-code-setting-up-ast-grep-with-r-support\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u0026ldquo;Claude Code: Setting up ast-grep with R support\u0026rdquo;\u003c/h3\u003e\u003cp\u003eThanks to Mauro Lepore for sharing this blog post by Emil Hvitfeldt: \u003ca href=\"https://emilhvitfeldt.com/post/ast-grep-r-claude-code/\"\u003e\u0026ldquo;Claude Code: Setting up ast-grep with R support\u0026rdquo;\u003c/a\u003e. ast-grep is a tool for querying code by syntax rather than brittle regular expressions. The blog post describes how to add R support to this tool, and how to take advantage of it when using Claude.\u003c/p\u003e\u003ch3 id=\"on-muffling-messages-from-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-muffling-messages-from-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn muffling messages from packages\u003c/h3\u003e\u003cp\u003eA follow-up on our post \u003ca href=\"/blog/2024/02/06/verbosity-control-packages/\"\u003e\u0026ldquo;Please Shut Up! Verbosity Control in Packages\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eWith the {cli} R package you can change the default handler for messages. See the \u003ca href=\"https://cli.r-lib.org/articles/semantic-cli.html#cli-messages\"\u003edocs\u003c/a\u003e. It seems mostly used to muffle messages, e.g. in \u003ca href=\"https://github.com/etiennebacher/flir/blob/9254cd01d258d0bafcee41a44e5caa7104fed832/R/lint.R#L104\"\u003eflir\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eHere\u0026rsquo;s how the usethis R package \u003ca href=\"https://github.com/r-lib/usethis/commit/f0f3f91494a1b15c1b08ee78dc73ab7d1cf8b6a8\"\u003emuffles gert message selectively\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/03/30/news-mars-2026/","date_published":"2026-03-30T00:00:00+00:00","date_modified":"2026-03-30T10:28:39+02:00"},{"id":"https://doi.org/10.59350/7m5q0-0mm59","title":"Breaking Release of the patentsview R Package","language":"en","authors":[{"name":"Chris Baker","url":"https://ropensci.org/author/chris-baker/","avatar":"https://github.com/crew102.png","_role":["author"]},{"name":"Russ Allen","url":"https://ropensci.org/author/russ-allen/","avatar":"https://github.com/mustberuss.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["Software Peer Review","packages","R","community","tech notes","Patents","PatentsView","API","API client","USPTO"],"content_html":"\u003cp\u003eThe \u003ca href=\"http://docs.ropensci.org/patentsview/\"\u003epatentsview\u003c/a\u003e R package was created by Chris Baker to simplify interactions with thePatentsView API as announced in Chris\u0026rsquo;\u003ca href=\"/blog/2017/09/19/patentsview/\"\u003eblog post\u003c/a\u003ein 2017.  The API can be queried for data from US patents granted since 1976 as well aspatent applications since 2001 (not all going on to become granted patents).\u003cbr\u003eAs shown in the package\u0026rsquo;s vignettes, location data can be mapped, charts ofassignees can be created etc. using other R packages, only limited by thedeveloper\u0026rsquo;s imagination.\u003c/p\u003e\u003cp\u003eFast-forwarding to today finds us in a precariousposition as the PatentsView API team had made breaking changes and obsoletedthe original API (all calls to the original endpoints return 410 Gone).As such we have spent some time now updating patentsview to work with these API changes.The updated patentsview package is now on CRAN but, unfortunately, as this Tech Note was being preparedthe PatentsView API team made troubling changes.\u003c/p\u003e\u003cp\u003eIn late February they replaced their\u003ca href=\"https://patentsview.org/forum\"\u003eforum\u003c/a\u003e with a message saying the page was temporarilyunavailable.  Further, they have also removed the link to request an API key, so it\u0026rsquo;s unclearwhether they\u0026rsquo;d honor requests for API keys using the link below.  Nothing has been officiallyannounced but the long term viability of the API seems uncertain.\u003c/p\u003e\u003cp\u003e\u0026#x1f374; Here you\u0026rsquo;ve come to a fork (and knife) in the road, continue readingif you are/were using the original version of the patentsview package, and we\u0026rsquo;ll guideyou through the necessary changes.  If you have an interest in US patent data but haven\u0026rsquo;tused the patentsview package yet (and are willing to take the risk!), check out the \u003ca href=\"https://docs.ropensci.org/patentsview/articles/ropensci-blog-post.html\"\u003evignette\u003c/a\u003e reworked from Chris\u0026rsquo; original blog post to use the new version of the R package and API.\u003c/p\u003e\u003ch2 id=\"new-changes-to-the-api\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-changes-to-the-api\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew changes to the API:\u003c/h2\u003e\u003col\u003e\u003cli\u003eUsers will need to \u003ca href=\"https://patentsview-support.atlassian.net/servicedesk/customer/portals\"\u003erequest an API key\u003c/a\u003e and set an environmental variable PATENTSVIEW_API_KEY to this value.\u003c/li\u003e\u003cli\u003eEndpoint changes:\u003cul\u003e\u003cli\u003eThe \u003ccode\u003enber_subcategories\u003c/code\u003e, one of the original seven endpoints, was removed\u003c/li\u003e\u003cli\u003e\u003ccode\u003ecpc_subsections\u003c/code\u003e is now \u003ccode\u003ecpc_group\u003c/code\u003e\u003c/li\u003e\u003cli\u003eThe remaining five original endpoints went from plural to singular, \u003ccode\u003epatents\u003c/code\u003e is now \u003ccode\u003epatent\u003c/code\u003e, for example.Interestingly, the returned data structures are still plural for the most part.\u003c/li\u003e\u003cli\u003eThere are now 27 endpoints, and more than one may need to be called to retrieve fields that wereavailable from a single call to one of the original endpoints\u003c/li\u003e\u003cli\u003eSome of the endpoints now return HATEOAS (Hypermedia as the Engine of Application State) links that can be called to retrieve additional data\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eSome fields are now nested and need to be fully qualified when used in a query,for instance, \u003ccode\u003esearch_pv('{\u0026quot;cpc_current.cpc_group_id\u0026quot;:\u0026quot;A01B1/00\u0026quot;}')\u003c/code\u003e when using the patent endpoint.In the fields parameter, nested fields can be fully qualified or a new API shorthand can be used,which allows you to specify group names. When group names are used, all of the group\u0026rsquo;s nested fields will be returned.For example, defining \u003ccode\u003efields = c(\u0026quot;assignees\u0026quot;)\u003c/code\u003e whenusing the patent endpoint means that all nested assignees\u0026rsquo; fields will be returned by the API.\u003c/li\u003e\u003cli\u003eSome field names have changed, most significantly, \u003ccode\u003epatent_number\u003c/code\u003e is now \u003ccode\u003epatent_id\u003c/code\u003e,and some fields were removed entirely, for instance, \u003ccode\u003erawinventor_first_name\u003c/code\u003e and \u003ccode\u003erawinventor_last_name\u003c/code\u003e.\u003c/li\u003e\u003cli\u003eThe original version of the API had queryable fields and additional fields which could beretrieved but couldn\u0026rsquo;t be part of a conditional query.  That notion does not apply to thenew version of the API as all fields are now queryable.  You may be ableto simplify your code if you found yourself doing post processing on returned databecause a field you were interested in was not queryable.\u003c/li\u003e\u003cli\u003eNow there isn\u0026rsquo;t supposed to be a difference betweenoperators used on strings vs full text fields, as there was in the originalversion of the API.  See the tip below the \u003ca href=\"https://search.patentsview.org/docs/docs/Search%20API/SearchAPIReference/#syntax\"\u003eSyntax section\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eResult set paging has changed significantly.  This only matter to users implementing their ownpaging, as the package continues to handle result set paging with \u003ccode\u003esearch_pv()\u003c/code\u003e\u0026rsquo;s \u003ccode\u003eall_pages = TRUE\u003c/code\u003e.There is a new \u003ca href=\"https://docs.ropensci.org/patentsview/articles/result-set-paging.html\"\u003eResult set paging\u003c/a\u003e vignette to explain the API\u0026rsquo;s paging,using the \u003ccode\u003esize\u003c/code\u003e and \u003ccode\u003eafter\u003c/code\u003e parameters rather than \u003ccode\u003epage\u003c/code\u003e and \u003ccode\u003eper_page\u003c/code\u003e.\u003c/li\u003e\u003cli\u003eResult set sizes are seemingly unbounded now.  The original version of the API capped result sets at100,000 rows.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eThe API team also \u003ca href=\"https://search.patentsview.org/docs/#naming-update\"\u003erenamed the API\u003c/a\u003e,PatentsView\u0026rsquo;s Search API is now the PatentSearch API.Note that the R package will retain its name, continue to use \u003ccode\u003elibrary(patentsview)\u003c/code\u003e to load the package.\u003c/p\u003e\u003ch2 id=\"new-changes-to-the-r-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-changes-to-the-r-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew changes to the R package:\u003c/h2\u003e\u003col\u003e\u003cli\u003eThrottling is now enforced by the API and handled by the R package (sleep as specified by the throttle response before a retry)\u003c/li\u003e\u003cli\u003eThere are five new vignettes\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/patentsview/articles/api-changes.html\"\u003eAPI Changes\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/patentsview/articles/converting-an-existing-script.html\"\u003eConverting an existing script\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/patentsview/articles/result-set-paging.html\"\u003eResult set paging\u003c/a\u003e, should custom paging be needed\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/patentsview/articles/understanding-the-api.html\"\u003eUnderstanding the API\u003c/a\u003e, the API team\u0026rsquo;s jupyter notebook converted to R and enhanced\u003c/li\u003e\u003cli\u003e\u003ca href=\"/blog/2017/09/19/patentsview/\"\u003eAccessing patent data with the patentsview package\u003c/a\u003e, the blog post that announced the original version of the R package has been updated to work with the new version of the API\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eThe R package changed internally from using httr to httr2.  This only affects users ifthey passed additional arguments (\u003ccode\u003e...\u003c/code\u003e) to \u003ccode\u003esearch_pv()\u003c/code\u003e.  Previously if they passed \u003ccode\u003econfig = httr::timeout(40)\u003c/code\u003ethey\u0026rsquo;d now pass \u003ccode\u003etimeout = 40\u003c/code\u003e (name-value pairs of valid curl options, as found in \u003ccode\u003ecurl::curl_options()\u003c/code\u003e see \u003ca href=\"https://httr2.r-lib.org/reference/req_options.html\"\u003ereq_options\u003c/a\u003e)\u003c/li\u003e\u003cli\u003eNow that the R package is using httr2, users can make use of its \u003ccode\u003elast_request()\u003c/code\u003e method to see what was sent to the API.  This could be useful when trying to fix an invalid request.  Also fun would be seeing the raw API response.\u003c/li\u003e\u003c/ol\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ehttr2::last_request()httr2::last_response()httr2::last_response() |\u0026gt; httr2::resp_body_json() \u003c/code\u003e\u003c/pre\u003e\u003col start=\"5\"\u003e\u003cli\u003eA new function was added\u003ccode\u003eretrieve_linked_data()\u003c/code\u003e to retrieve data from a HATEOAS link the API sent back, retrying if throttled\u003c/li\u003e\u003cli\u003eAn existing function was removed.  With the API changes, there is less of a need for\u003ccode\u003ecast_pv_data()\u003c/code\u003e which was previously part of the R package.  The API now returns most fields as appropriatetypes, boolean, numeric etc., instead of always returning strings.\u003c/li\u003e\u003c/ol\u003e\u003ch2 id=\"online-api-documentation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#online-api-documentation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOnline API documentation\u003c/h2\u003e\u003cp\u003eThe PatentsView API team has thoughtfully provided a Swagger UI page for the new version of the API at \u003ca href=\"https://search.patentsview.org/swagger-ui/\"\u003ehttps://search.patentsview.org/swagger-ui/\u003c/a\u003e.Think of it as an online version of Postman already loaded with the API\u0026rsquo;s new endpoints and returns.The Swagger UI page documents what fields are returned by each endpoint on a successful call(http response code 200).You can even send in requests and see actual API responses if you enter your API key and pressan endpoint\u0026rsquo;s \u0026ldquo;Try it out\u0026rdquo; and \u0026ldquo;Execute\u0026rdquo; buttons.  Even error responses can be informative, the API\u0026rsquo;s X-Status-Reason response headerusually points out what went wrong.\u003c/p\u003e\u003cp\u003eIn a similar format, the \u003ca href=\"https://search.patentsview.org/docs/docs/Search%20API/EndpointDictionary/\"\u003eupdated API documentation\u003c/a\u003elists what each endpoint does.  Additionally, the R package\u0026rsquo;s \u003ccode\u003efieldsdf\u003c/code\u003e data frame has been updated,now listing the new set of endpoints and fields that can be queried and/or returned.  The R package\u0026rsquo;sreference pages have also been updated.\u003c/p\u003e\u003ch2 id=\"final-thoughts\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#final-thoughts\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFinal thoughts\u003c/h2\u003e\u003cp\u003eAs shown in the updated \u003ca href=\"https://docs.ropensci.org/patentsview/articles/top-assignees.html\"\u003eTop Assignees\u003c/a\u003e vignette, there will be occasions now where multiple API calls are needed to retrieve the same data as in a single API call in the original version of the API and R package.Additionally, the \u003ca href=\"https://docs.ropensci.org/patentsview/articles/ropensci-blog-post.html\"\u003ereworked rOpenSci post\u003c/a\u003e explains what changes had to be made since assignee latitudeand longitude are no longer available from the patent endpoint.\u003c/p\u003e\u003cp\u003eIssues for the R package can be raised in the \u003ca href=\"https://github.com/ropensci/patentsview/issues\"\u003epatentsview repo\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eAs we mentioned at the start, the future of the PatentsView API is a bit uncertain. PatentsView is funded by the \u003ca href=\"https://www.uspto.gov/\"\u003eUSPTO\u003c/a\u003e, who may be looking to cut costs. However, until we know for certain, we hope patentsview serves you well. If nothing else,it\u0026rsquo;s been a great run, starting in 2015 for the API and 2017 for the R package!\u003c/p\u003e","url":"https://ropensci.org/blog/2026/03/10/patentsview-breaking-release/","date_published":"2026-03-10T00:00:00+00:00","date_modified":"2026-03-10T09:25:41-05:00"},{"id":"https://doi.org/10.59350/pthhe-b9v52","title":"rOpenSci Dev Guide 1.0.0: Trilingual and Improved","language":"en","authors":[{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["author"]}],"tags":["Software Peer Review","dev guide","multilingual"],"content_html":"\u003cp\u003erOpenSci Software Peer Review\u0026rsquo;s guidance is gathered in an \u003ca href=\"https://devguide.ropensci.org/booknews\"\u003eonline book\u003c/a\u003e that keeps improving!This blog post summarises what\u0026rsquo;s new in our Dev Guide 1.0.0, with all changes listed in the \u003ca href=\"https://devguide.ropensci.org/booknews.html\"\u003echangelog\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"now-available-in-portuguese\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#now-available-in-portuguese\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNow available in Portuguese!\u003c/h2\u003e\u003cp\u003eOur guide is now trilingual (\u003ca href=\"https://devguide.ropensci.org/index.html\"\u003eEnglish\u003c/a\u003e, \u003ca href=\"https://devguide.ropensci.org/es/index.es.html\"\u003eSpanish\u003c/a\u003e, \u003ca href=\"https://devguide.ropensci.org/pt/index.pt\"\u003ePortuguese\u003c/a\u003e)!\u003c/p\u003e\u003cp\u003eFind more about the awesome Portuguese translation project, initiated and powered by our Lusophone members in our \u003ca href=\"/blog/2025/11/25/translation-devguide-pt/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe translation project and ongoing multilingual maintenance uses our \u003ca href=\"https://docs.ropensci.org/babelquarto/\"\u003ebabelquarto package\u003c/a\u003e to render multilingual Quarto books and websites.It was recently \u003ca href=\"https://github.com/ropensci/software-review/issues/720\"\u003epeer-reviewed\u003c/a\u003e by Ella Kaye and João Granja-Correia.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;re actively working on our \u003ca href=\"https://docs.ropensci.org/babeldown/\"\u003ebabeldown package\u003c/a\u003e to create and update translations using the DeepL API.\u003c/p\u003e\u003cp\u003eIn the \u003ca href=\"https://github.com/ropensci/dev_guide/pull/940/files\"\u003edev guide\u003c/a\u003e itself, tools useful for internationalizing \u003cem\u003epackages\u003c/em\u003e are mentioned: \u003ca href=\"https://michaelchirico.github.io/potools/\"\u003epotools\u003c/a\u003e, the experimental \u003ca href=\"https://eliocamp.github.io/rhelpi18n/\"\u003erhelpi18n\u003c/a\u003e package, selecting a \u003ca href=\"https://pkgdown.r-lib.org/articles/translations.html\"\u003elanguage\u003c/a\u003e for a pkgdown website.\u003c/p\u003e\u003ch2 id=\"policy-updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#policy-updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePolicy Updates\u003c/h2\u003e\u003cp\u003eWe made some changes to rOpenSci policies and scope:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eNew category for \u003ca href=\"https://devguide.ropensci.org/softwarereview_policies#package-categories#:~:text=rOpenSci%20internal%20tools\"\u003erOpenSci internal and peer-review tools\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eUpdates to the \u003ca href=\"https://devguide.ropensci.org/softwarereview_policies#package-categories#:~:text=data%20retrieval\"\u003edata retrieval category\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eNew explicit rule to only \u003ca href=\"https://devguide.ropensci.org/softwarereview_author#lifecycle#:~:text=do%20not%20submit%20several\"\u003esubmit one package at a time\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eNew requirement to not call the \u003ca href=\"https://devguide.ropensci.org/pkg_building#version-control#:~:text=not%20be%20master\"\u003edefault branch \u0026ldquo;master\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eRemoved requirement to use a \u003ccode\u003ecodemeta.json\u003c/code\u003e file, now deprecated. Codemeta continues to be \u003ca href=\"https://codemeta.github.io/\"\u003eactively used and developed\u003c/a\u003e, but we have found it redundant with other metadata and Codemeta can generate these data as-needed from DESCRIPTION files.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"editor-guide-author-guide--reviewer-guide\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#editor-guide-author-guide--reviewer-guide\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEditor Guide, Author Guide \u0026amp; Reviewer Guide\u003c/h2\u003e\u003cp\u003eThe guides that live in our guide. \u0026#x1f638;\u003c/p\u003e\u003cp\u003eThe whole \u003ca href=\"https://devguide.ropensci.org/softwarereview_editor\"\u003eeditor guide\u003c/a\u003e was has been restructured to follow the typical flow of submissions,and to better explain how to use the \u003ca href=\"https://dashboard.ropensci.org/\"\u003esoftware-review dashboard\u003c/a\u003e.We added a section on challenges, and documented how to put the system on vacation (which we generally do over the new year period).\u003c/p\u003e\u003cp\u003eLikewise, we improved the organization and content of the \u003ca href=\"https://devguide.ropensci.org/softwarereview_author\"\u003eauthor guide\u003c/a\u003e (thanks to \u003ca href=\"https://github.com/robitalec\"\u003eAlec Robitaille\u003c/a\u003e and \u003ca href=\"https://github.com/jmaspons\"\u003eJoan Maspons\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eIn the \u003ca href=\"https://devguide.ropensci.org/softwarereview_reviewer\"\u003ereviewer guide\u003c/a\u003e, we removed the external link to the no-longer maintained Mozilla Review guide (one of our early design sources for peer-review) in favor of explicit enumerated items.\u003c/p\u003e\u003ch2 id=\"packaging-best-practices\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#packaging-best-practices\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackaging Best Practices\u003c/h2\u003e\u003cp\u003eIn the packaging guide (another guide within the guide!), we added guidance for choosing \u003ca href=\"https://devguide.ropensci.org/pkg_building#example-datasets\"\u003eexample datasets\u003c/a\u003e.Furthermore, we created a section for \u003ca href=\"https://devguide.ropensci.org/pkg_building#external-software\"\u003ePackages wrapping external software\u003c/a\u003e.The \u003ca href=\"https://devguide.ropensci.org/pkg_building#licence\"\u003elicencing section\u003c/a\u003e now explicitly requires acknowledging authors of bundled code.Last but not least, the \u003ca href=\"https://devguide.ropensci.org/pkg_building#pkgdependencies\"\u003esection about dependencies\u003c/a\u003e recommends checking the development status of dependencies.\u003c/p\u003e\u003cp\u003eThe whole book now mentions the \u003ca href=\"https://posit-dev.github.io/air/\"\u003eAir CLI\u003c/a\u003e every time it mentions the styler package, as Air can be viewed as styler\u0026rsquo;s successor.\u003c/p\u003e\u003cp\u003eIn the chapter about Package evolution, we added guidance on \u003ca href=\"https://devguide.ropensci.org/maintenance_evolution#data-deprecate\"\u003edeprecating \u003cem\u003edata\u003c/em\u003e\u003c/a\u003e, and explained the \u003ca href=\"https://devguide.ropensci.org/maintenance_evolution#renaming-packages\"\u003edrawbacks of renaming a widely-used package\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"testing-guidance\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#testing-guidance\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTesting guidance\u003c/h2\u003e\u003cp\u003eWe updated our \u003ca href=\"https://devguide.ropensci.org/pkg_building.html#testing\"\u003etesting guidance\u003c/a\u003e with\u003c/p\u003e\u003cul\u003e\u003cli\u003ea \u003ca href=\"https://devguide.ropensci.org/pkg_building.html#testing#:~:text=tinytest\"\u003emention of tinytest\u003c/a\u003e as an alternative to testthat;\u003c/li\u003e\u003cli\u003ea note on keeping tests written with testthat \u003ca href=\"https://devguide.ropensci.org/pkg_building.html#testing#:~:text=self-contained\"\u003eself-contained\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"package-documentation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-documentation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage Documentation\u003c/h2\u003e\u003cp\u003eWith particular thanks to \u003ca href=\"https://github.com/rmgpanw\"\u003eAlasdair Warwick \u003c/a\u003e, we improved the documentation \u0026#x1f609; of our documentation building system, including:\u003c/p\u003e\u003cul\u003e\u003cli\u003eMore details on the \u003ca href=\"https://devguide.ropensci.org/pkg_ci#rodocsci\"\u003etechnical aspects\u003c/a\u003e of docs building for rOpenSci packages;\u003c/li\u003e\u003cli\u003eUpdated \u003ca href=\"https://devguide.ropensci.org/pkg_building.html#mathjax\"\u003emath guidance\u003c/a\u003e following pkgdown\u0026rsquo;s update.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe also clarified different strategies to \u003ca href=\"https://devguide.ropensci.org/pkg_building#:~:text=nord\"\u003edocument internal functions\u003c/a\u003e, thanks to \u003ca href=\"https://github.com/cforgaci\"\u003eClaudiu Forgaci\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"metadata--package-information\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#metadata--package-information\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMetadata \u0026amp; Package Information\u003c/h2\u003e\u003cp\u003eWe documented more ways to acknowledge contributors:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003ein the \u003ca href=\"https://devguide.ropensci.org/pkg_building.html#authorship\"\u003eauthorship\u003c/a\u003e section of the packaging guide, with \u003ca href=\"/blog/2025/05/09/ror/\"\u003eResearch Organization Registry (ROR) IDs\u003c/a\u003e;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003ein the chapter about \u003ca href=\"https://devguide.ropensci.org/maintenance_collaboration.html#attributions\"\u003ecollaboration\u003c/a\u003e, the \u003ca href=\"https://docs.ropensci.org/allcontributors/\"\u003eallcontributors R package\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we summarized the changes in the latest version of our book \u003ca href=\"https://devguide.ropensci.org\"\u003e“rOpenSci Packages: Development, Maintenance, and Peer Review”\u003c/a\u003e.We are thankful for all contributions that created this release.We are already working on the next version.Don\u0026rsquo;t hesitate to help us shape it by opening an \u003ca href=\"https://github.com/ropensci/dev_guide/issues\"\u003eissue\u003c/a\u003e!\u003c/p\u003e","url":"https://ropensci.org/blog/2026/03/02/devguide-1.0.0/","date_published":"2026-03-02T00:00:00+00:00","date_modified":"2026-03-02T11:07:41+01:00"},{"id":"https://doi.org/10.59350/fe3c2-6zc80","title":"rOpenSci News Digest, February 2026","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2026/02/26/news-february-2026\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"strong-engagement-in-the-champions-program-call\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#strong-engagement-in-the-champions-program-call\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStrong Engagement in the Champions Program Call\u003c/h3\u003e\u003cp\u003eThe Champions Program call closed on February 23, and the response \u003cem\u003ewas fantastic\u003c/em\u003e. We received \u003cstrong\u003e81 Champion\u003c/strong\u003e and \u003cstrong\u003e14 Mentor applications\u003c/strong\u003e from \u003cstrong\u003e23 countries\u003c/strong\u003e, with \u003cstrong\u003e74%\u003c/strong\u003e of applicants proposing to develop a \u003cstrong\u003enew package\u003c/strong\u003e. We\u0026rsquo;re now kicking off the selection process, starting with mentors so they can support the evaluation of Champion proposals. Confirmation emails have already been sent to all applicants. Thank you to everyone who applied!\u003c/p\u003e\u003ch3 id=\"policy-updates-for-use-of-generative-ai-tools\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#policy-updates-for-use-of-generative-ai-tools\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePolicy Updates for use of Generative AI Tools\u003c/h3\u003e\u003cp\u003eWe published an \u003ca href=\"/blog/2026/02/26/ropensci-ai-policy/\"\u003einitial blog post\u003c/a\u003e about planned updates to our policies and practices for use of generative AI tools in rOpenSci packages. This follows recent policy updates at both the \u003ca href=\"https://blog.joss.theoj.org/2026/01/preparing-joss-for-a-generative-ai-future\"\u003eJournal of Open Source Software\u003c/a\u003e and \u003ca href=\"https://www.pyopensci.org/blog/generative-ai-peer-review-policy.html\"\u003epyOpenSci\u003c/a\u003e. We are seeking feedback on the \u003ca href=\"/blog/2026/02/26/ropensci-ai-policy/\"\u003eblog post\u003c/a\u003e, and on the policy changes proposed there, via \u003ca href=\"https://github.com/ropensci/software-review-meta/issues/107\"\u003ethis decidated GitHub issue\u003c/a\u003e. The blog explains our intention to permit the use of generative AI tools throughout package development, and during the review process. Our policies aim to maintain our culture of openness and transparency, and we have already started informally asking submitting authors about any use of generative AI tools.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday March 3rd 2026, 14:00 Europe Central (13:00 UTC), \u003ca href=\"/events/coworking-2026-03/\"\u003e\u0026ldquo;rOpenSci Editors\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/mark-padgham/\"\u003eMark Padgham\u003c/a\u003e.\u003cul\u003e\u003cli\u003eLearn more about \u003ca href=\"/software-review/\"\u003erOpenSci Software Peer Review\u003c/a\u003e\u003c/li\u003e\u003cli\u003eMeet cohost Mark Padgham, and discuss what it\u0026rsquo;s like being an Editor for rOpenSci Software Peer Review.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday April 7th 2026, 9:00 Americas Pacific (16:00 UTC) \u003ca href=\"/events/coworking-2026-04/\"\u003e\u0026ldquo;Getting to know the CSID Network\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/irene-ramos/\"\u003eIrene Ramos\u003c/a\u003e.\u003cul\u003e\u003cli\u003eLearn more about the \u003ca href=\"https://csidnet.org/\"\u003eCSID Network\u003c/a\u003e\u003c/li\u003e\u003cli\u003eMeet cohost, Irene Ramos, and learn more about the CSID Network and how you might get involved.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday May 5th 2026, 9:00 Australia Western (01:00 UTC) \u003ca href=\"/events/coworking-2026-05/\"\u003e\u0026ldquo;Code Review with rOpenSci\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/liz-hare/\"\u003eLiz Hare\u003c/a\u003e.\u003cul\u003e\u003cli\u003eExplore resources for Code Review\u003c/li\u003e\u003cli\u003eSign up to volunteer to do \u003ca href=\"https://airtable.com/app8dssb6a7PG6Vwj/shrnfDI2S9uuyxtDw\"\u003esoftware peer-review\u003c/a\u003e at rOpenSci\u003c/li\u003e\u003cli\u003eMeet cohost, Liz Hare, and discuss resources for Code Review with rOpenSci.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch3 id=\"community-dashboard-for-your-own-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-dashboard-for-your-own-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity Dashboard for your own R-Universe\u003c/h3\u003e\u003cp\u003eLast year we published a \u003ca href=\"/blog/2025/09/11/repometrics-call-help\"\u003eblog post\u003c/a\u003e on an \u003ca href=\"https://ropensci-review-tools.github.io/orgmetrics-ropensci/\"\u003eorganization-level dashboard\u003c/a\u003e for all rOpenSci packages and community contributors. We have now developed the \u003ca href=\"https://github.com/ropensci-review-tools/orgmetricsDashboard\"\u003eorgmetricsDashboard repository\u003c/a\u003e to enable anybody to deploy their own organizational dashboard directly from their \u003ca href=\"https://docs.r-universe.dev/publish/set-up.html\"\u003eR-Universe repository\u003c/a\u003e. The only input needed is an \u003ca href=\"https://docs.r-universe.dev/publish/set-up.html#registry-file\"\u003eR-Universe \u0026ldquo;packages.json\u0026rdquo; file\u003c/a\u003e, and you can deploy either via GitHub actions, or a local Docker workflow. Try it out!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following two packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/Athlytics\"\u003eAthlytics\u003c/a\u003e, developed by Zhiang He: An open-source computational framework for longitudinal analysis of exercise physiology metrics using local Strava data exports. Designed for personal analysis and sports science applications, this package provides standardized functions to calculate and visualize key physiological indicators including Acute:Chronic Workload Ratio (ACWR), Efficiency Factor (EF), and training load metrics. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/728\"\u003ereviewed\u003c/a\u003e by Eunseop Kim and Simon Nolte.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/orgmetrics\"\u003eorgmetrics\u003c/a\u003e, developed by Mark Padgham: Metrics for your GitHub organization. Call one function to generate an interactive dashboard displaying the state of your organization.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following thirteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/dittodb\" title=\"A Test Environment for Database Requests\"\u003edittodb\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dittodb/releases/tag/v0.1.11\"\u003e\u003ccode\u003ev0.1.11\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.12.0\"\u003e\u003ccode\u003e1.12.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/RSelenium\" title=\"R Bindings for Selenium WebDriver\"\u003eRSelenium\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/RSelenium/releases/tag/v1.7.10\"\u003e\u003ccode\u003ev1.7.10\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/Athlytics\" title=\"Academic R Package for Sports Physiology Analysis from Local Strava Data\"\u003eAthlytics\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/Athlytics/releases/tag/v1.0.4\"\u003e\u003ccode\u003ev1.0.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pkgstats\" title=\"Metrics of R Packages\"\u003epkgstats\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/pkgstats/releases/tag/v0.2.2\"\u003e\u003ccode\u003ev0.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmapiR\" title=\"OpenStreetMap API\"\u003eosmapiR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmapiR/releases/tag/v0.2.5\"\u003e\u003ccode\u003ev0.2.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dbparser\" title=\"Drugs Databases Parser\"\u003edbparser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dbparser/releases/tag/v2.2.1\"\u003e\u003ccode\u003ev2.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/taxize\" title=\"Taxonomic Information from Around the Web\"\u003etaxize\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/taxize/releases/tag/v0.10.1\"\u003e\u003ccode\u003ev0.10.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rangr\" title=\"Mechanistic Simulation of Species Range Dynamics\"\u003erangr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rangr/releases/tag/v1.0.9\"\u003e\u003ccode\u003ev1.0.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/wikitaxa\" title=\"Taxonomic Information from Wikipedia\"\u003ewikitaxa\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/wikitaxa/releases/tag/v0.5.0\"\u003e\u003ccode\u003ev0.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/mantis\" title=\"Multiple Time Series Scanner\"\u003emantis\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/mantis/releases/tag/v1.0.2\"\u003e\u003ccode\u003ev1.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.14.0\"\u003e\u003ccode\u003e0.14.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/tidyhydat\" title=\"Extract and Tidy Canadian Hydrometric Data\"\u003etidyhydat\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidyhydat/releases/tag/1.0.0\"\u003e\u003ccode\u003e1.0.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003cp\u003ePost on dfms release: \u003ca href=\"https://sebkrantz.github.io/Rblog/2026/01/29/releasing-dfms-1-0-fast-and-feature-rich-estimation-of-dynamic-factor-models-in-r/\"\u003eReleasing dfms 1.0: Fast and Feature-Rich Estimation of Dynamic Factor Models in R\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are seventeen recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/728\"\u003eAthlytics\u003c/a\u003e, Academic R Package for Sports Physiology Analysis from Local Strava Data. Submitted by \u003ca href=\"https://github.com/HzaCode\"\u003eAng\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%225/awaiting-reviewer(s)-response%22\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/729\"\u003esuwo\u003c/a\u003e, Access Nature Media Repositories Through R. Submitted by \u003ca href=\"https://marce10.github.io/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSeven at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/704\"\u003epriorsense\u003c/a\u003e, Prior Diagnostics and Sensitivity Analysis. Submitted by \u003ca href=\"https://github.com/n-kall\"\u003eNoa Kallioinen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/741\"\u003elogolink\u003c/a\u003e, An Interface for Running NetLogo Simulations. Submitted by \u003ca href=\"http://danielvartan.com\"\u003eDaniel Vartanian\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/732\"\u003eActiGlobe\u003c/a\u003e, Wearable Recording Processor for Time Shift Adjustment and Data Analysis. Submitted by \u003ca href=\"https://scholar.google.ca/citations?user=T7y9ckwAAAAJ\u0026amp;hl=en\"\u003eC. William Yao\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/730\"\u003eernest\u003c/a\u003e, A Toolkit for Nested Sampling. Submitted by \u003ca href=\"https://github.com/kylesnap\"\u003eKyle Dewsnap\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/718\"\u003ercrisp\u003c/a\u003e, Automate the Delineation of Urban River Spaces. Submitted by \u003ca href=\"https://github.com/cforgaci\"\u003eClaudiu Forgaci\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/709\"\u003ereviser\u003c/a\u003e, Tools for Studying Revision Properties in Real-Time Time Series Vintages. Submitted by \u003ca href=\"https://marcburri.github.io/\"\u003eMarc Burri\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/704\"\u003epriorsense\u003c/a\u003e, Prior Diagnostics and Sensitivity Analysis. Submitted by \u003ca href=\"https://github.com/n-kall\"\u003eNoa Kallioinen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSix at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/750\"\u003enycOpenData\u003c/a\u003e, Convenient Access to NYC Open Data API Endpoints. Submitted by \u003ca href=\"https://github.com/martinezc1\"\u003eChristian Martinez\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/746\"\u003epvEBayes\u003c/a\u003e, Empirical Bayes Methods for Pharmacovigilance. Submitted by \u003ca href=\"https://github.com/YihaoTancn\"\u003eYihao Tan\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/744\"\u003eRAQSAPI\u003c/a\u003e, A Simple Interface to the US EPA Air Quality System Data Mart API. Submitted by \u003ca href=\"https://github.com/mccroweyclinton-EPA\"\u003emccroweyclinton-EPA\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/743\"\u003eRAMEN\u003c/a\u003e, RAMEN: Regional Association of Methylome variability with the Exposome and geNome. Submitted by \u003ca href=\"https://erick-navarrodelgado.netlify.app\"\u003eErick Navarro-Delgado\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/740\"\u003efcmconfr\u003c/a\u003e, Fuzzy Cognitive Map Analysis in R. Submitted by \u003ca href=\"https://github.com/bhroston\"\u003ebenroston\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/717\"\u003ecoevolve\u003c/a\u003e, Fit Bayesian Generalized Dynamic Phylogenetic Models using Stan. Submitted by \u003ca href=\"https://scottclaessens.github.io/\"\u003eScott Claessens\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/02/03/editors2025\"\u003eAnnouncing New Statistical Software Peer Review Editors: Natalia da Silva and Andrew Heiss\u003c/a\u003e by Natalia da Silva, Andrew Heiss, and Yanina Bellini Saibene. Introducing two new editors for rOpenSci statistical software peer review.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/02/26/ropensci-ai-policy\"\u003eSoftware Review in the Era of AI: What We Are Testing at rOpenSci\u003c/a\u003e by Mark Padgham, Noam Ross, Maëlle Salmon, Yanina Bellini Saibene, Mauro Lepore, Emily Riederer, Jouni Helske, and Francisco Rodriguez-Sanchez. rOpenSci is testing preliminary policies on the use of generative AI tools, with proposed updates to documentation and procedures for authors submitting software for review, for editors, and for reviewers.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/02/05/palaeoverse-ssi-grant\"\u003ePaleontology R Packages to Benefit from Software Sustainability Institute Grant\u003c/a\u003e by Will Gearty and The Palaeoverse Team. A grant from the Software Sustainability Institute will go towards improving the sustainability and maintainability of R packages used in paleontological research.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/02/23/forum-closing\"\u003eOur forum is closed but our community is not!\u003c/a\u003e by The rOpenSci Team. Why we\u0026rsquo;re closing our forum, how to keep participating in our community.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/NLMR\"\u003eNLMR\u003c/a\u003e, R package to simulate neutral landscape models. \u003ca href=\"https://github.com/ropensci/NLMR/issues/116\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/landscapetools\"\u003elandscapetools\u003c/a\u003e, R package for some of the less-glamorous tasks involved in landscape analysis. \u003ca href=\"https://github.com/ropensci/landscapetools/issues/48\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools\"\u003ehddtools\u003c/a\u003e, Tools to discover hydrological data, accessing catalogues and databases from various data providers. \u003ca href=\"https://github.com/ropensci/hddtools/issues/36\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/qualtRics/\"\u003equaltRics\u003c/a\u003e, download Qualtrics survey data. \u003ca href=\"https://github.com/ropensci/qualtRics/issues/383\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/photosearcher\"\u003ephotosearcher\u003c/a\u003e, searches Flickr for photographs and metadata. \u003ca href=\"https://github.com/ropensci/photosearcher/issues/22\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"the-r-foundation-on-oss\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-r-foundation-on-oss\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe R Foundation on OSS\u003c/h3\u003e\u003cp\u003eThe R Foundation answered a \u003ca href=\"https://ec.europa.eu/info/law/better-regulation/have-your-say/initiatives/16213-European-Open-Digital-Ecosystems_en\"\u003eCall for Evidence from the EU about open-source\u003c/a\u003e, after asking for examples of the added value of R in the public or private sectors. You can read the \u003ca href=\"https://ec.europa.eu/info/law/better-regulation/have-your-say/initiatives/16213-European-Open-Digital-Ecosystems/F33370610_en\"\u003efull response of the R Foundation\u003c/a\u003e, including a discussion of useful ideas for the future of R and open-source in general.\u003c/p\u003e\u003ch3 id=\"on-sitrep-situation-report-functions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-sitrep-situation-report-functions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn sitrep (situation report) functions\u003c/h3\u003e\u003cp\u003eAthanasia Monika Mowinckel wrote a post on \u003ca href=\"https://drmowinckels.io/blog/2026/sitrep-functions/\"\u003esitrep functions\u003c/a\u003e: functions that help the user check their setup and provide them with useful diagnostics. The blog post includes two examples.\u003c/p\u003e\u003ch3 id=\"new-version-of-the-jarl-cli\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-version-of-the-jarl-cli\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew version of the jarl CLI\u003c/h3\u003e\u003cp\u003eThe jarl CLI by Etienne Bacher \u0026ldquo;finds inefficient, hard-to-read, and suspicious patterns of R code across dozens of files and thousands of lines of code in milliseconds\u0026rdquo;. Read about the new features in \u003ca href=\"https://www.etiennebacher.com/posts/2026-02-03-jarl-0.4.0/\"\u003ejarl 0.4.0\u003c/a\u003e, like the ability to find \u0026ldquo;unreachable code\u0026rdquo;.\u003c/p\u003e\u003ch3 id=\"futurize-r-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#futurize-r-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003efuturize R package\u003c/h3\u003e\u003cp\u003eHenrik Bengtsson released \u003ca href=\"https://www.jottr.org/2026/01/22/futurize-0.1.0/\"\u003efuturize\u003c/a\u003e that allows you to parallelize execution with minimal changes to code, by simply adding a call to \u003ccode\u003efuturize()\u003c/code\u003e: \u003ccode\u003ey \u0026lt;- lapply(x, fcn) |\u0026gt; futurize()\u003c/code\u003e.\u003c/p\u003e\u003ch3 id=\"on-ai-agents-and-open-source\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-ai-agents-and-open-source\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn AI agents and open-source\u003c/h3\u003e\u003cp\u003eScott Shambaugh, an open-source maintainer, wrote about his being targeted by an AI agent after closing a PR for an issue that was intended for human newbies. Initial blog post: \u003ca href=\"https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/\"\u003e\u0026ldquo;An AI Agent Published a Hit Piece on Me\u0026rdquo;\u003c/a\u003e, \u003ca href=\"https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me-part-2/\"\u003eUpdated\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/02/26/news-february-2026/","date_published":"2026-02-26T00:00:00+00:00","date_modified":"2026-02-26T12:28:37+01:00"},{"id":"https://doi.org/10.59350/5tavw-mke71","title":"Software Review in the Era of AI: What We Are Testing at rOpenSci","language":"en","authors":[{"name":"Emily Riederer","url":"https://ropensci.org/author/emily-riederer/","avatar":"https://github.com/emilyriederer.png","_role":["author"]},{"name":"Francisco Rodriguez-Sanchez","url":"https://orcid.org/0000-0002-7981-1599","avatar":"https://ropensci.org/img/team/francisco-rodriguez-sanchez.jpg","_role":["author"]},{"name":"Jouni Helske","url":"https://orcid.org/0000-0001-7130-793X","avatar":"https://github.com/helske.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Mauro Lepore","url":"https://orcid.org/0000-0002-1986-7988","avatar":"https://ropensci.org/img/team/mauro-lepore.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["governance","Software Peer Review","community","maintenance","rOpenSci team"],"content_html":"\u003cp\u003eThe advent of large language models (LLMs) and generative AI tools has changed the nature of software development and of software review.These developments are complex, challenging, and controversial, but require action to maintain and grow rOpenSci\u0026rsquo;s programs and community.In response, we are starting with a preliminary set of policies to clarify our expectations for use of generative AI tools by authors, reviewers, and editors in software peer-review.This blog post describes the challenges ahead and initial changes we are making.\u003c/p\u003e\u003ch2 id=\"challenge-maintaining-our-core-values\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#challenge-maintaining-our-core-values\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChallenge: Maintaining our core values\u003c/h2\u003e\u003cp\u003eOur top challenge is maintaining our core values.\u003c/p\u003e\u003cp\u003eA central value for rOpenSci is fostering a welcoming community, in particular through supporting and encouraging people who might otherwise feel excluded. Generative AI tools can help with that.Large language models and generative AI tools may make many coding tasks easier and quicker, and can expand the community of people able to contribute to open source software and the OSS community.\u003c/p\u003e\u003cp\u003eYet there are many downsides to generative AI tools which challenge our core values. pyOpenSci has done an excellent job \u003ca href=\"https://www.pyopensci.org/blog/generative-ai-peer-review-policy.html\"\u003eexploring these in this blog post\u003c/a\u003e.They fall into two broad areas.\u003c/p\u003e\u003cp\u003eFirst, use of AI can in many cases degrade the quality of both open-source scientific code and the process by which we create it.LLMs can in many cases produce incorrect outputs, fail to generate time or efficiency benefits, or degrade the process of learning to code or the social cohesion of the community.A core design of our software peer-review is to drive community building through healthy interactions between authors, reviewers, and contributors.We aim to improve and promote the quality of research software, to facilitate good development practices among researchers, to foster collaboration, and to curate a community of practice.Any use of AI must be compatible with that goal.\u003c/p\u003e\u003cp\u003eSecond, AI has the potential for tremendous broader impacts or externalities: environmental impacts, amplification of bias, infringement of creative and intellectual rights, or even driving increases in \u003ca href=\"https://pluralistic.net/2025/12/05/pop-that-bubble/#u-washington\"\u003esocial and economic inequality\u003c/a\u003e.We have both collective and individual responsibilities to address these impacts, which include the right to opt out of uses of AI.\u003c/p\u003e\u003ch2 id=\"challenge-changing-the-focus-of-software-reviews\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#challenge-changing-the-focus-of-software-reviews\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChallenge: Changing the focus of software reviews\u003c/h2\u003e\u003cp\u003eEditors and reviewers at rOpenSci are volunteers who devote their own time to help others improve the quality of their software.Our review system works because they have always been able to assume that all aspects of code submitted for review have reflected decisions made by the human authors of software.That, in turn, has ensured that the efforts of editors and reviewers are proportional to the primary efforts of software authors.\u003c/p\u003e\u003cp\u003eGenerative AI tools potentially change both of these situations.They enable software to be produced with relatively little human input or oversight, which means editors and reviewers may put more consideration into software design, structure, and function than submitting authors.We do not want software review to become a service in which our human volunteers validate largely AI-generated software.That would put at risk the equal and constructive interaction of review, and likely reduce the motivation of editors and reviewers.We need to ensure that our software review process remains focused on the decisions, designs, and implementations of the submitting authors.\u003c/p\u003e\u003cp\u003eOne option is requesting authors to outline the areas that have been AI generated, and specifying the scope of their own work.However, this could result in our previously holistic process becoming one where only defined aspects or sections of software end up being reviewed.Authors declaring that a certain tool was used to generate all tests may lead one reviewer to completely ignore those tests, while another reviewer may be passionately engaged in the ways by which exactly that tool writes tests.\u003c/p\u003e\u003cp\u003eIn any case, this will require everybody to be as open as possible about what, where, and how generative AI tools may have been used.\u003c/p\u003e\u003ch2 id=\"response-preliminary-policies\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#response-preliminary-policies\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eResponse: Preliminary policies\u003c/h2\u003e\u003cp\u003eOur initial policy updates are not intended to restrict use of generative AI tools, but to encourage the rOpenSci community to approach these tools in ways that encourage, rather than diminish, healthy community interactions.\u003c/p\u003e\u003cp\u003eSimilar updates have already been implemented by both the \u003ca href=\"https://blog.joss.theoj.org/2026/01/preparing-joss-for-a-generative-ai-future\"\u003eJournal of Open Source Software\u003c/a\u003e and \u003ca href=\"https://www.pyopensci.org/blog/generative-ai-peer-review-policy.html\"\u003epyOpenSci\u003c/a\u003e, and we are indebted to the work of all those who contributed to these policy statements.\u003c/p\u003e\u003cp\u003eImportantly, our software review policies and practices have evolved over many years in response to community engagement and feedback.The introduction of policies addressing generative AI tools is a part of that evolution, and these policies will also evolve further in responses to community engagement, and changing community practices.\u003c/p\u003e\u003ch3 id=\"no-change-in-scope\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#no-change-in-scope\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNo change in scope\u003c/h3\u003e\u003cp\u003eOne potential response would be a change in the scope of packages we review.JOSS has updated their \u003ca href=\"https://joss.theoj.org/about#ai-policy\"\u003escope definition\u003c/a\u003e to, among other things, require a longer record of continuous development, along with other criteria, such as evidence of impact and design.At rOpenSci, authors often seek feedback on early-stage software.Our review process commonly involves deep and broad consideration through extensive exchanges between authors, reviewers, and editors.We are confident that this extends to many of the areas emphasized by JOSS\u0026rsquo;s updated criteria, and we therefore see no need to explicitly change either the scope or focus of review.\u003c/p\u003e\u003ch3 id=\"requiring-openness-of-ai-usage\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#requiring-openness-of-ai-usage\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRequiring openness of AI usage\u003c/h3\u003e\u003cp\u003eOur policy updates aim to retain the same degree of openness and transparency we have always practiced, while extending to the new area of generative AI tools and practices.We cannot know the eventual impact that generative AI tools may have on software review processes and practices at rOpenSci, and can ask only for an utmost degree of transparency from all involved.\u003c/p\u003e\u003cp\u003eWe now describe specific updates to both our practices and policies for authors, for editors, and for reviewers.Software review aims to provide authors with feedback on their practices and choices, and not just on the lines of code they or an AI generated.We also value the time and effort of editors and reviewers, and want them to be able to focus on the practices and choices of authors.\u003c/p\u003e\u003ch3 id=\"practical-application-for-authors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#practical-application-for-authors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePractical application: for authors\u003c/h3\u003e\u003cp\u003eAuthors who do not use generative AI tools will submit as always, with no extra requirements.Those who do use such tools will be asked to describe their use, and to affirm that all generated material has been carefully reviewed by the authors.We want these descriptions to help reviewers and editors to understand how they can best review code and provide useful feedback.\u003c/p\u003e\u003cp\u003eWe will be modifying our submission template to include this required section, and will be updating the \u003ca href=\"https://devguide.ropensci.org/softwarereview_author.html\"\u003eGuide for Authors\u003c/a\u003e with additional guidance.\u003c/p\u003e\u003cp\u003eA minimal example might be a statement that “we’re not very proficient in C, so we used an LLM to generate most of the code for the C algorithm.”This might guide reviewers to pay particular attention to the tests for that part of the package.A more extensive description might be that, “We used \u0026lt;tool-of-choice\u0026gt; to generate all tests, but have read, edited, and manually stepped through each test ourselves.”This can help reviewers decide whether to pay more or less attention to the tests depending on their interests.Either way, knowing that tests were generated by AI tools is useful and important to the review process.\u003c/p\u003e\u003cp\u003eDescriptions may refer to relevant documentation in the repository, such as:\u003c/p\u003e\u003cul\u003e\u003cli\u003eDesign documents which highlight key components and explain their design;\u003c/li\u003e\u003cli\u003e\u0026ldquo;agents.md\u0026rdquo; or equivalent files, along with explanations of how these have been used, along with clear description of the roles of the submitting authors;\u003c/li\u003e\u003cli\u003eOverviews of developmental histories, for example in \u0026ldquo;NEWS.md\u0026rdquo; or equivalent files.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe intend to maintain our requirement for “CONTRIBUTING.md” files, as any generative AI tools can also be directed to treat that as an “agents.md” file.\u003c/p\u003e\u003cp\u003eThis is our intended addition to the templates for authors submitting software for review:\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## Use of Generative AI- [ ] Generative AI tools were used to produce some of the material in this submission.If so, please describe: \u0026lt;!-- refer to our AI policies at http:// ... --\u0026gt;If your repository includes an \u0026#34;agents.md\u0026#34; file or equivalent, please provide a link, and describe how this has been used in the development of your package.\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAn example of such a description can be found in this \u003ca href=\"https://github.com/ropensci/software-review/issues/752#issuecomment-3938097125\"\u003erecent software review submission\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"practical-application-for-editors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#practical-application-for-editors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePractical application: for editors\u003c/h3\u003e\u003cp\u003eEditors are the first to view software submitted to rOpenSci, and generally complete an initial \u003ca href=\"https://devguide.ropensci.org/editortemplate.html\"\u003eEditors checklist\u003c/a\u003e indicating whether they think a package may proceed to review.This checklist will also include an additional item:\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e- [ ] **Use of generative AI tools**: If the authors have used generative AI tools, have they sufficiently described their usage?\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis item will also require no additional action by editors unless authors have used generative AI tools.\u003c/p\u003e\u003cp\u003eInitial editorial considerations have until now been largely technical, including many of the aspects now automated by \u003ca href=\"https://docs.ropensci.org/pkgcheck/\"\u003eour \u003ccode\u003epkgcheck\u003c/code\u003e system\u003c/a\u003e.In response to this new checklist item, editors may broaden their consideration to whether a package has had sufficient human contribution to be worth reviewing, alongside considerations of additional factors such as:\u003c/p\u003e\u003cul\u003e\u003cli\u003eClear statements of package motivation and importance.\u003c/li\u003e\u003cli\u003ePackage development history.\u003c/li\u003e\u003cli\u003eEvidence of design decisions motivating the software.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWhen recruiting reviewers for a package, editors may describe authors’ AI usage where relevant to help them understand the nature of the package and demands of review.\u003c/p\u003e\u003ch3 id=\"practical-application-for-reviewers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#practical-application-for-reviewers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePractical application: for reviewers\u003c/h3\u003e\u003cp\u003eReview processes at rOpenSci frequently involve reviewers recommending potential improvements, and authors then implementing those.In adapting to use of generative AI tools, we will strive to maintain the same culture of constructive feedback.We hope that authors will provide sufficient information on any use of generative AI tools to guide reviewers towards aspects of their software requiring particular attention.\u003c/p\u003e\u003cp\u003eReviewers are permitted to use generative AI tools in preparing reviews for rOpenSci, but their use must meet the same criteria of supporting the goals of review.Our \u003ca href=\"https://devguide.ropensci.org/softwarereview_reviewer.html\"\u003eGuide for Reviewers\u003c/a\u003e will be updated to note the following points:\u003c/p\u003e\u003cul\u003e\u003cli\u003eGenerative AI tools may be used to aid the review process, but all review text must reflect the judgement of the reviewer.\u003c/li\u003e\u003cli\u003eTypical and acceptable use of generative AI tools in software review includes getting an overview of software design, structure, and function.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eUpdates to the \u003ca href=\"https://devguide.ropensci.org/softwarereview_reviewer.html\"\u003eGuide for Reviewers\u003c/a\u003e will also include examples of productive use of generative AI tools in the review process.We aim to run pilots over the course of this year to test where in the review process AI can best be used to improve everyone\u0026rsquo;s experience, and to provide more robust guidelines and custom tools.\u003c/p\u003e\u003cp\u003eReviewers may also consider AI use in choosing whether to volunteer as a reviewer of a package, and authors should be aware that extensive AI use could increase the time to find reviewers.\u003c/p\u003e\u003ch2 id=\"moving-forward\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#moving-forward\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMoving forward\u003c/h2\u003e\u003cp\u003eThis is our first pass at providing guidelines governing the use of generative AI to ensure rOpenSci software review continues to improve while retaining its essential values.\u003c/p\u003e\u003cp\u003eWith more package submissions having some component of AI contribution, the editorial board thought it essential to provide these updates to manage the process as we learn more about what works and what does not.\u003c/p\u003e\u003cp\u003eWe invite you to further discuss the evolving role of AI in software review in \u003ca href=\"https://github.com/ropensci/software-review-meta/issues/107\"\u003ethis issue\u003c/a\u003e, and more importantly to join us as an author or reviewer in peer review, so we can learn together!\u003c/p\u003e","url":"https://ropensci.org/blog/2026/02/26/ropensci-ai-policy/","date_published":"2026-02-26T00:00:00+00:00","date_modified":"2026-02-26T10:40:28+00:00"},{"id":"https://doi.org/10.59350/5xebv-dbx46","title":"Our forum is closed but our community is not!","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["community","forum","help"],"content_html":"\u003cp\u003eAs of this week, we are closing our forum at \u003ccode\u003ediscuss.ropensci.org\u003c/code\u003e.The forum has become largely inactive in recent years, so we are consolidating our conversations to our other online spaces to reduce maintenance and moderation burden.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;re not putting our community building aside or behind a wall! We remain committed to our \u003ca href=\"/blog/2025/02/05/no-science-without-deia/\"\u003evalues\u003c/a\u003e and to maintaining an open community.We\u0026rsquo;ve migrated the most active part of the forum, the use cases collection, to our \u003ca href=\"/usecases\"\u003ewebsite\u003c/a\u003e, and we will continue to collect them via \u003ca href=\"https://github.com/orgs/ropensci/discussions/categories/use-cases\"\u003eGitHub discussions\u003c/a\u003e.Don\u0026rsquo;t forget that there are still many other ways to be part of the \u003ca href=\"https://contributing.ropensci.org/\"\u003erOpenSci Community\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003eYour contributions to our \u003ca href=\"/help-wanted\"\u003eR packages\u003c/a\u003e, \u003ca href=\"/r-universe\"\u003einfrastructure\u003c/a\u003e, projects such as the \u003ca href=\"/champions\"\u003eChampions Program\u003c/a\u003e and \u003ca href=\"/software-review\"\u003esoftware-review\u003c/a\u003e, are always welcome!\u003c/li\u003e\u003cli\u003eYou can meet with us at \u003ca href=\"/events\"\u003eevents\u003c/a\u003e including \u003ca href=\"/coworking\"\u003ecoworking\u003c/a\u003e and \u003ca href=\"/commcalls\"\u003ecommunity calls\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eYou can also reach us at \u003ca href=\"mailto:info@ropensci.org\"\u003einfo@ropensci.org\u003c/a\u003e and to hear from us, subscribe to our RSS feed or our \u003ca href=\"/news\"\u003enewsletter\u003c/a\u003e!\u003c/li\u003e\u003cli\u003eCheck out our \u003ca href=\"https://contributing.ropensci.org\"\u003econtributing guide\u003c/a\u003e for more ideas!\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe look forward to a continuing collaboration with our evergrowing community.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/02/23/forum-closing/","date_published":"2026-02-23T00:00:00+00:00","date_modified":"2026-02-23T09:43:12+01:00"},{"id":"https://doi.org/10.59350/h828e-z5p64","title":"Paleontology R Packages to Benefit from Software Sustainability Institute Grant","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"The Palaeoverse Team","url":"https://ropensci.org/author/the-palaeoverse-team/","avatar":"https://github.com/palaeoverse.png","_role":["author"]},{"name":"Will Gearty","url":"https://orcid.org/0000-0003-0076-3262","avatar":"https://github.com/willgearty.png","_role":["author"]}],"tags":["community","sustainability","reproducibility","paleontology","earth science","grant","fossils","maintenance","open science","welcome","package development"],"content_html":"\u003cp\u003e\u003ca href=\"https://palaeoverse.org/\"\u003ePalaeoverse\u003c/a\u003e, a grassroots organization that develops R packages for paleontology, has been \u003ca href=\"https://www.software.ac.uk/rsmf-round-1-projects\"\u003eawarded a Large Grant\u003c/a\u003e from the \u003ca href=\"https://www.software.ac.uk/\"\u003eSoftware Sustainability Institute\u003c/a\u003e, via the \u003ca href=\"https://www.software.ac.uk/programmes/research-software-maintenance-fund\"\u003eResearch Software Maintenance Fund\u003c/a\u003e, for the project \u0026lsquo;Converting Users to Contributors: Enabling Sustainable Maintenance and Development of Palaeoverse\u0026rsquo;.This funding will support efforts to improve the sustainability and maintainability of several key R packages used in paleontological research.\u003c/p\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2026/02/05/palaeoverse-ssi-grant/palaeoverse.png\"\t\t\talt=\"The Palaeoverse logo\"\u003e\u003c/figure\u003e\u003ch2 id=\"welcome-to-palaeoverse\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#welcome-to-palaeoverse\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWelcome to Palaeoverse\u003c/h2\u003e\u003cp\u003e\u003ca href=\"https://palaeoverse.org/\"\u003ePalaeoverse\u003c/a\u003e is an initiative aiming to unite the paleontological community through shared resources, agreed standards, and a collective commitment to improving reproducibility in paleontological research.The project began in 2022 when a group of early-career researchers, including myself, recognized a common challenge: many of us were independently developing similar programmatic workflows for cleaning and preparing paleontological data due to a lack of standardized tools and protocols, leading to duplicated work that was difficult to reproduce.In response, we came together to develop the \u003ca href=\"https://palaeoverse.palaeoverse.org/\"\u003epalaeoverse R package\u003c/a\u003e—a toolkit designed to streamline data preparation and exploration in paleontological research.Since then, Palaeoverse has evolved into a formally organized initiative with a growing scope.We maintain multiple \u003ca href=\"https://github.com/palaeoverse\"\u003eR packages\u003c/a\u003e, curate \u003ca href=\"https://palaeoverse.org/external\"\u003eresources\u003c/a\u003e, host \u003ca href=\"https://www.youtube.com/@ThePalaeoverse\"\u003electures\u003c/a\u003e, and run \u003ca href=\"https://workshop.palaeoverse.org/\"\u003etraining workshops\u003c/a\u003e.These resources have been developed entirely through the \u003ca href=\"https://palaeoverse.org/#about-us\"\u003ecurrent team\u003c/a\u003e’s voluntary efforts.\u003c/p\u003e\u003ch3 id=\"the-palaeoverse-toolkit\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-palaeoverse-toolkit\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe Palaeoverse toolkit\u003c/h3\u003e\u003cp\u003eThe Palaeoverse toolkit currently includes several R packages that address various aspects of paleontological data pipelines:\u003c/p\u003e\u003cul\u003e\u003cli\u003eThe \u003ca href=\"https://palaeoverse.palaeoverse.org/\"\u003epalaeoverse\u003c/a\u003e package\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e provides functionality to support data preparation and exploration for paleobiological analyses, improving code reproducibility and accessibility.The aim of palaeoverse is to generate a community-driven software package of generic functions for the paleobiological community.The package does not provide implementations of statistical analyses, rather it provides auxiliary functions to help streamline analyses and improve code readability and reproducibility.\u003c/li\u003e\u003cli\u003eThe \u003ca href=\"https://rphylopic.palaeoverse.org/\"\u003erphylopic\u003c/a\u003e package\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e allows users to add silhouettes of organisms from the \u003ca href=\"https://www.phylopic.org/\"\u003ePhyloPic database\u003c/a\u003e to plots generated in base R and ggplot2.rphylopic was originally developed and maintained by \u003ca href=\"/author/scott-chamberlain/\"\u003eScott Chamberlain\u003c/a\u003e for rOpenSci.In 2023 the Palaeoverse team took on maintenance of rphylopic, refactored the entire package, and released v1.0.0.\u003c/li\u003e\u003cli\u003eThe \u003ca href=\"https://rmacrostrat.palaeoverse.org/\"\u003ermacrostrat\u003c/a\u003e package\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e provides streamlined and improved accessibility to the geological database \u003ca href=\"https://macrostrat.org/\"\u003eMacrostrat\u003c/a\u003e.The package provides functionality for querying the database via the dedicated API and retrieving various geological data (such as lithostratigraphic units) and definitions/metadata associated with those data and Macrostrat more broadly.\u003c/li\u003e\u003cli\u003eThe \u003ca href=\"https://sepkoski.palaeoverse.org/\"\u003esepkoski\u003c/a\u003e package\u003csup id=\"fnref:4\"\u003e\u003ca href=\"#fn:4\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e4\u003c/a\u003e\u003c/sup\u003e provides access to Sepkoski’s fossil marine animal genera compendium\u003csup id=\"fnref:5\"\u003e\u003ca href=\"#fn:5\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e5\u003c/a\u003e\u003c/sup\u003e\u003csup id=\"fnref:6\"\u003e\u003ca href=\"#fn:6\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e6\u003c/a\u003e\u003c/sup\u003e.The aim of the package is to offer a light and easily-accessible solution to working with Sepkoski’s compendium to support teaching exercises.\u003c/li\u003e\u003c/ul\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2026/02/05/palaeoverse-ssi-grant/sepkoski_curve.png\"\t\t\talt=\"A stacked area plot showing the number of marine animal genera across the Phanerozoic; the genera are split by color into Sepkoski\u0026#39;s evolutionary fauna: Cambrian, Paleozoic, Modern (plus an Unassigned category); the x-axis has a geological timescale on it\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eSepkoski\u0026rsquo;s evolutionary fauna, using the Sepkoski fossil marine animal genera compendium, as plotted by the \u003ccode\u003esepkoski_curve_base()\u003c/code\u003e function in the sepkoski R package. Number of genera are counted per international geological stage bin. The timescale on the x-axis comes from the \u003ccode\u003eaxis_geo()\u003c/code\u003e function in the palaeoverse R package.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"funding-the-next-generation-of-contributors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#funding-the-next-generation-of-contributors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFunding the next generation of contributors\u003c/h2\u003e\u003cp\u003eComputational methods play an increasingly central role in paleontology, creating a pressing need for reliable, community-endorsed software that supports reproducible research.Palaeoverse was established to address this demand, but its continued success now depends on broader community engagement to ensure its longevity and that its development reflects the diverse needs of the field, rather than those of its core contributors.As the project expands, reducing maintenance overhead and strengthening long-term sustainability remain critical challenges for safeguarding its future.Our vision, therefore, is to evolve Palaeoverse into a community-driven project, where users actively contribute to the development, maintenance, and review of Palaeoverse software and resources.\u003c/p\u003e\u003cp\u003eTo achieve our vision, we have identified two strategic priorities for the organization:\u003c/p\u003e\u003col\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eFoster a contributor-friendly environment\u003c/strong\u003e. This involves auditing and updating our software packages to improve internal structure, code readability, and maintainability.We also want to develop comprehensive contributor guidelines and documentation to establish transparent and accessible standards.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eGrow community engagement and build a contributor network\u003c/strong\u003e. We want to supplement our existing program of Palaeoverse workshops with bespoke training and community-building initiatives focused on software development and maintenance.Given the low prevalence of these skills in paleontology, these events will be critical for equipping researchers with the knowledge and confidence needed to contribute to open-source scientific software, including Palaeoverse.\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eThrough these efforts we will set clear expectations for contributions, streamline contributor submissions, and cultivate a contributor network.Our hope is that this will spur a new community-sustaining growth phase for Palaeoverse.Unfortunately, these lofty goals require a lot of time and money, and funding for maintenance of preexisting software is scarce (large research grants are usually looking for novel software) and all of the core contributors are busy with many other responsibilities\u0026hellip;\u003c/p\u003e\u003ch3 id=\"research-software-maintenance-fund\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#research-software-maintenance-fund\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eResearch Software Maintenance Fund\u003c/h3\u003e\u003cp\u003eLast April, the \u003ca href=\"https://www.software.ac.uk/\"\u003eSoftware Sustainability Institute\u003c/a\u003e announced a call for proposals for the first round of the \u003ca href=\"https://www.software.ac.uk/programmes/research-software-maintenance-fund\"\u003eResearch Software Maintenance Fund\u003c/a\u003e.This fund aims to support the maintenance and sustainability of research software that is already in use by the community (that\u0026rsquo;s us!).The Palaeoverse team put together a proposal for a Large Grant to cover these two strategic priorities.Then, in December, we found out that our proposal, \u0026lsquo;Converting Users to Contributors: Enabling Sustainable Maintenance and Development of Palaeoverse\u0026rsquo;, was chosen as one of four Large Awards\u003csup id=\"fnref:7\"\u003e\u003ca href=\"#fn:7\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e7\u003c/a\u003e\u003c/sup\u003e to be funded!The funding, totaling ~£480,000 (~650,000 USD) over two years, will go towards:\u003c/p\u003e\u003col\u003e\u003cli\u003eA dedicated, full-time Research Software Engineer who will audit and refactor the entire Palaeoverse toolkit, with a focus on improving standardization, accessibility, and reducing future maintenance needs.\u003c/li\u003e\u003cli\u003eA dedicated, full-time Community Engagement Coordinator who will develop and run bespoke community training events on research software development (like \u003ca href=\"https://carpentries.org\"\u003eThe Carpentries\u003c/a\u003e), hackathons, and a dedicated mentorship program (modeled after the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e) to train the next generation of Palaeoverse contributors.\u003c/li\u003e\u003cli\u003eFunds for travel and subsistence for the community training events, hackathons, and mentorship program.\u003c/li\u003e\u003c/ol\u003e\u003ch3 id=\"getting-involved-in-palaeoverse\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#getting-involved-in-palaeoverse\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGetting involved in Palaeoverse\u003c/h3\u003e\u003cp\u003eWe are extremely excited for the future of Palaeoverse, and we invite you to join us for this next chapter, whether or not you are a paleontologist!There are several ways to get involved:\u003c/p\u003e\u003cul\u003e\u003cli\u003eYou can contribute to the functionality of the Palaeoverse R toolkit.Our \u003ca href=\"https://palaeoverse.palaeoverse.org/CONTRIBUTING.html\"\u003econtributing guide\u003c/a\u003e is a great place to start.You can also check out our \u003ca href=\"https://github.com/palaeoverse\"\u003eGitHub repositories\u003c/a\u003e to find issues that speak to you. For example, we have a lot of \u003ca href=\"https://github.com/palaeoverse/palaeoverse/issues\"\u003eissues\u003c/a\u003e for the palaeoverse package that would be great for new contributors.\u003c/li\u003e\u003cli\u003eBecome a \u003ca href=\"https://palaeoverse.org/form/reviewer\"\u003ePalaeoverse Reviewer\u003c/a\u003e to help review code, documentation, and resources.We particularly value community input to ensure that the toolkit has a smooth user experience.\u003c/li\u003e\u003cli\u003eContribute to Palaeoverse databases like the \u003ca href=\"https://palaeoverse.org/directory\"\u003eDirectory\u003c/a\u003e and \u003ca href=\"https://palaeoverse.org/funding\"\u003eGrant Track\u003c/a\u003e, which aim to centralize useful information for the community.\u003c/li\u003e\u003cli\u003eBe active in community spaces such as the \u003ca href=\"https://groups.google.com/g/palaeoverse\"\u003ePalaeoverse Google Group\u003c/a\u003e, where you can share ideas and resources, advertise opportunities, and network with colleagues.Help us build a stronger community in computation paleontology!The Google Group has been fairly quiet lately, but we\u0026rsquo;re hoping to breath new life into it as part of our new community initiatives!\u003c/li\u003e\u003cli\u003eFollow us on \u003ca href=\"https://bsky.app/profile/palaeoverse.bsky.social\"\u003esocial media\u003c/a\u003e and enjoy the ride!\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAltogether, we hope that, by devoting these resources to Palaeoverse over the next two years, we will build a strong community of users and contributors that will sustain the Palaeoverse R packages and broader organization for many years to come.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eJones, L.A., Gearty, W., Allen, B.J., Eichenseer, K., Dean, C.D., Galván S., Kouvari, M., Godoy, P.L., Nicholl, C., Dillon, E.M., Flannery-Sutherland, J.T., Chiarenza, A.A. (2023). palaeoverse: A community-driven R package to support palaeobiological analysis. \u003cem\u003eMethods in Ecology and Evolution\u003c/em\u003e. 14(9): 2205–2215. \u003ca href=\"https://doi.org/10.1111/2041-210X.14099\"\u003ehttps://doi.org/10.1111/2041-210X.14099\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eGearty, W. and Jones, L.A. (2023). rphylopic: An R package for fetching, transforming, and visualising PhyloPic silhouettes. \u003cem\u003eMethods in Ecology and Evolution\u003c/em\u003e. 14(11): 2700-2708. \u003ca href=\"https://doi.org/10.1111/2041-210X.14221\"\u003ehttps://doi.org/10.1111/2041-210X.14221\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eJones, L.A., Dean, C.D., Gearty, W., and Allen, B.J. (2024). rmacrostrat: An R package for accessing and retrieving data from the Macrostrat geological database. \u003cem\u003eGeosphere\u003c/em\u003e. 20(6): 1456–1467. \u003ca href=\"https://doi.org/10.1130/GES02815.1\"\u003ehttps://doi.org/10.1130/GES02815.1\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:4\"\u003e\u003cp\u003eJones L.A. (2022). sepkoski: Sepkoski\u0026rsquo;s Fossil Marine Animal Genera Compendium. R package version 0.0.1. \u003ca href=\"https://github.com/LewisAJones/sepkoski/\"\u003ehttps://github.com/LewisAJones/sepkoski/\u003c/a\u003e. \u003ca href=\"https://doi.org/10.5281/zenodo.7342194\"\u003ehttps://doi.org/10.5281/zenodo.7342194\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:4\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:5\"\u003e\u003cp\u003eSepkoski, J. J. (1981). A factor analytic description of the Phanerozoic marine fossil record. \u003cem\u003ePaleobiology\u003c/em\u003e. 7(1): pp. 36–53. \u003ca href=\"https://doi.org/10.1017/S0094837300003778\"\u003ehttps://doi.org/10.1017/S0094837300003778\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:5\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:6\"\u003e\u003cp\u003eSepkoski, J. J. (2002). A compendium of fossil marine animal genera. \u003cem\u003eBulletins of American Paleontology\u003c/em\u003e. 363: 1-560. \u003ca href=\"https://doi.org/10.1017/S2475262200000335\"\u003ehttps://doi.org/10.1017/S2475262200000335\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:6\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:7\"\u003e\u003cp\u003eThe Research Software Maintenance Fund also awarded a similarly sized grant to R-Core for a similar project titled \u003ca href=\"https://blog.r-project.org/2025/12/17/rsmf-enabling-the-next-generation-of-contributors-to-r/\"\u003e\u0026lsquo;Enabling the Next Generation of Contributors to R\u0026rsquo;\u003c/a\u003e. We\u0026rsquo;re honored to be in such esteemed company!\u0026#160;\u003ca href=\"#fnref:7\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2026/02/05/palaeoverse-ssi-grant/","date_published":"2026-02-05T00:00:00+00:00","date_modified":"2026-02-05T17:18:34+01:00"},{"id":"https://doi.org/10.59350/zr8js-yrh73","title":"Announcing New Statistical Software Peer Review Editors: Natalia da Silva and Andrew Heiss","language":"en","authors":[{"name":"Andrew Heiss","url":"https://ropensci.org/author/andrew-heiss/","avatar":"https://github.com/andrewheiss.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["editor"]},{"name":"Natalia da Silva","url":"https://ropensci.org/author/natalia-da-silva/","avatar":"https://github.com/natydasilva.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["Software Peer Review","editors","rOpenSci team"],"content_html":"\u003cp\u003eAt rOpenSci we’re continually grateful for the support and engagement of our community who help make our open-source ecosystem stronger, more inclusive, and more collaborative. The \u003ca href=\"/software-review/\"\u003esoftware peer review program\u003c/a\u003e is one of the best examples of this: bringing together people from diverse expertise and backgrounds to improve the quality, reproducibility, and usability of scientific software across the R ecosystem.\u003c/p\u003e\u003cp\u003eToday we’re excited to welcome \u003cem\u003eNatalia da Silva\u003c/em\u003e and \u003cem\u003eAndrew Heiss\u003c/em\u003e as new editors for our Statistical Software Peer Review team. Their expertise and dedication will help grow and sustain this important program, ensuring that statistical software reviews maintain high standards and continue to improve in quality and impact.\u003c/p\u003e\u003cp\u003eMeet our new editors!\u003c/p\u003e\u003ch2 id=\"natalia-da-silva\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#natalia-da-silva\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNatalia da Silva\u003c/h2\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"/img/team/natalia-da-silva.jpg\"         alt=\"headshot of Natalia da Silva\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  Natalia is an assistant professor of statistics in the Department of Quantitative Methods at Universidad de la República in Montevideo, Uruguay (UDELAR-IESTA).\u003cbr\u003eShe has a Ph.D. in Statistics from Iowa State University. Her research interests include supervised learning methods, prediction, exploratory data analysis, statistical graphics, reproducible research, and meta-analysis. She has developed some R packages like\u003ca href=\"https://github.com/natydasilva/PPforest\"\u003ePPforest\u003c/a\u003e,\u003ca href=\"https://github.com/natydasilva/PPtreeExt\"\u003ePPtreeExt\u003c/a\u003e,\u003ca href=\"https://github.com/natydasilva/SpICE\"\u003eSpICE\u003c/a\u003e and colaborate in others.She has served as an Associate Editor for Reproducibility at the Journal of the American Statistical Association since 2022.She co-founded the Latinamerican Conference About the Use of R in R\u0026amp;D, \u003ca href=\"https://latinr.org\"\u003eLatinR\u003c/a\u003e, in 2018. She also co-founded the R-Ladies Montevideo chapter and the R User Group in Montevideo, known as GURU.She teaches courses in statistics and economy, data science with R, statistical learning and inference. Most of the courses she teaches involve coding in R at various levels.                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003cp\u003eNatalia on \u003ca href=\"https://github.com/natydasilva\"\u003eGitHub\u003c/a\u003e, \u003ca href=\"https://natydasilva.github.io/natydasilva/\"\u003eWebsite\u003c/a\u003e.\u003c/p\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eI have known about rOpenSci for a long time now, but at useR! 2017 I met Maëlle. She presented a talk, \u003cem\u003e\u0026ldquo;rOpenSci Onboarding System for Packages\u0026rdquo;\u003c/em\u003e, through which I became more interested in what rOpenSci was doing and how close they were to the software philosophy that Di Cook and Heike Hofmann were teaching us at Iowa State University at that time.At this point, I asked Maëlle if I could submit the package I was working on to be reviewed, but she told me they were not doing statistical software reviews. I\u0026rsquo;m happy that everything is moving forward, and I’m excited to help as a statistical software editor in this great community.\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eNatalia da Silva \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"andrew-heiss\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#andrew-heiss\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAndrew Heiss\u003c/h2\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"/img/team/andrew-heiss.jpg\"         alt=\"headshot of Andrew Heiss\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  \u003cp\u003eAndrew is an assistant professor of public policy at the Andrew Young School of Policy Studies at Georgia State University. He has a PhD in public policy from Duke University. His research focuses on the role of civil society and international nongovernmental organizations in global politics, and his with published work spans international relations, comparative politics, public administration, and nonprofit management. He also researches applied social science methods and writes (\u003ca href=\"https://github.com/andrewheiss/quRan\"\u003equRan\u003c/a\u003e, \u003ca href=\"https://github.com/andrewheiss/scriptuRs\"\u003escriptuRs\u003c/a\u003e), maintains (\u003ca href=\"https://profmusgrave.github.io/qatarcars/\"\u003eqatarcars\u003c/a\u003e, \u003ca href=\"https://cloud.r-project.org/web/packages/colourlovers/index.html\"\u003ecolourlovers\u003c/a\u003e), and contributes to (\u003ca href=\"https://marginaleffects.com/\"\u003emarginaleffects\u003c/a\u003e, \u003ca href=\"https://datalorax.github.io/equatiomatic/\"\u003eequatiomatic\u003c/a\u003e) many R packages. He has also developed several Quarto extensions (\u003ca href=\"https://github.com/andrewheiss/hikmah-academic-quarto\"\u003ehikmah-academic-quarto\u003c/a\u003e, \u003ca href=\"https://github.com/andrewheiss/quarto-wordcount\"\u003equarto-wordcount\u003c/a\u003e, \u003ca href=\"https://github.com/andrewheiss/fancy-epigraphs-quarto\"\u003efancy-epigraphs\u003c/a\u003e, \u003ca href=\"https://github.com/andrewheiss/language-name\"\u003elanguage-name\u003c/a\u003e). \u003ca href=\"https://www.andrewheiss.com/teaching/\"\u003eHe teaches\u003c/a\u003e courses in statistics, data science, data visualization, economics, and global politics. He is also an RStudio certified instructor and Posit Academy mentor.\u003c/p\u003e\u003cp\u003eAndrew on \u003ca href=\"https://www.andrewheiss.com/\"\u003ewebsite\u003c/a\u003e, \u003ca href=\"https://bsky.app/profile/andrew.heiss.phd\"\u003eBluesky\u003c/a\u003e, \u003ca href=\"https://github.com/andrewheiss\"\u003eGitHub\u003c/a\u003e\u003c/p\u003e                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eI learned about rOpenSci in 2019 when I reviewed rtweet and I loved the whole review process and how transparent and collaborative everything felt—it was a wild contrast from standard academic peer review! Since then, I\u0026rsquo;ve held rOpenSci\u0026rsquo;s package guidelines, documentation standards, and review process as a gold standard for my own work. I love the rOpenSci community and everything they do to contribute to the broader R community and open science movement and I\u0026rsquo;m thrilled to be able to join in as an editor!\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eAndrew Heiss \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"about-the-statistical-software-peer-review-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#about-the-statistical-software-peer-review-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAbout the Statistical Software Peer Review Program\u003c/h2\u003e\u003cp\u003erOpenSci’s software peer review program brings together volunteers to collaboratively review scientific and statistical software according to transparent, constructive, and open standards. Editors manage submissions, coordinate reviewers, and help guide packages through review to improve code quality, documentation, and usability.\u003c/p\u003e\u003cp\u003eThis program is possible thanks to the many community members: authors submitting their packages, reviewers volunteering their time and expertise, and editors like Natalia and Andrew who help shepherd reviews and maintain a supportive process.\u003c/p\u003e\u003ch2 id=\"get-involved\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#get-involved\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGet Involved\u003c/h2\u003e\u003cp\u003eAre you considering submitting your package for review? These resources will help:\u003c/p\u003e\u003cul\u003e\u003cli\u003eAbout \u003ca href=\"/software-review/\"\u003erOpenSci Software Peer Review\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eBrowse the online book \u003ca href=\"https://devguide.ropensci.org/\"\u003erOpenSci Packages: Development, Maintenance, and Peer Review\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eRead public \u003ca href=\"https://github.com/ropensci/software-review/issues\"\u003esoftware review threads on GitHub\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWould you like to review packages? Fill out the \u003ca href=\"https://airtable.com/app8dssb6a7PG6Vwj/shrnfDI2S9uuyxtDw\"\u003erOpenSci Reviewer Sign-Up Form\u003c/a\u003e to volunteer to review.\u003c/p\u003e\u003cp\u003eWelcome again \u003cstrong\u003eNatalia and Andrew\u003c/strong\u003e! We’re thrilled to have you join the editorial team.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/02/03/editors2025/","date_published":"2026-02-03T00:00:00+00:00","date_modified":"2026-02-03T12:10:54-03:00"},{"id":"https://doi.org/10.59350/z8dpp-06623","title":"rOpenSci News Digest, January 2026","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2026/01/29/news-january-2026\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"open-call-for-the-ropensci-champions-program-2026\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#open-call-for-the-ropensci-champions-program-2026\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOpen call for the rOpenSci Champions Program 2026!\u003c/h3\u003e\u003cp\u003eWe are pleased to announce the opening of a new call for applications for the \u003cstrong\u003erOpenSci Champions Program in Spanish\u003c/strong\u003e, which will begin in 2026. We are accepting applications for both the roles of \u003cstrong\u003eChampion\u003c/strong\u003e as well as \u003cstrong\u003eMentor\u003c/strong\u003e. The application deadline is \u003cstrong\u003eFebruary 20, 2026\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eAs in the previous cohort, the 2026 program will be developed \u003cstrong\u003eentirely in Spanish\u003c/strong\u003e and will have a \u003cstrong\u003eregional focus on Latin America\u003c/strong\u003e with the objective of further strengthening the research and open science software in this region.\u003c/p\u003e\u003cp\u003eDid you miss last Wednesday\u0026rsquo;s \u003cstrong\u003eCommunity Call: Research Software in Latin America\u003c/strong\u003e (Spanish)? \u003ca href=\"/es/commcalls/champions-latino-2026/\"\u003eWatch the video\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eUpcoming:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/events/clinica-champions-2026/\"\u003e\u003cstrong\u003eApplication Clinic:\u003c/strong\u003e Thursday, February 5, 2026\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eClosing date:\u003c/strong\u003e Friday, February 20, 2026\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eRead more, including application instructions, in our \u003ca href=\"/blog/2026/01/12/programchamps2026/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"ropensci-2025-wrap-up\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-2025-wrap-up\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci 2025 wrap-up\u003c/h3\u003e\u003cp\u003eRead our reflections on our work last year, and our plans for this year: \u003ca href=\"/blog/2026/01/22/yearinreview2025/\"\u003eClosing The Loop with Our 2025 Wrap-up\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"code-of-conduct\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#code-of-conduct\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCode of Conduct\u003c/h3\u003e\u003cp\u003eAt the beginning of each year, the Code of Conduct Committee reviews the past year and prepares two reports for the community: the \u003ca href=\"/blog/2026/01/07/conduct2025/\"\u003eCoC updates\u003c/a\u003e and the \u003ca href=\"/blog/2026/01/06/transparencycoc2025/\"\u003etransparency report\u003c/a\u003e, both available on our blog. This is also the time to review the Committee\u0026rsquo;s composition and confirm its members. We are especially grateful to \u003ca href=\"/author/natalia-morandeira/\"\u003eNatalia Morandeira\u003c/a\u003e for renewing her commitment as a Committee member.\u003c/p\u003e\u003ch3 id=\"testing-the-r-universe-build-workflow-from-your-own-github-repository\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#testing-the-r-universe-build-workflow-from-your-own-github-repository\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTesting the R-universe build workflow from your own GitHub repository\u003c/h3\u003e\u003cp\u003eWe refactored the R-universe CI workflows to make it possible to run the exact same workflow from your own GitHub repository. This allows you to test or debug the build and check process on your R package, exactly as it will happen on R-universe, but without actually deploying to \u003ca href=\"https://r-universe.dev\"\u003ehttps://r-universe.dev\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eRead more in our \u003ca href=\"/blog/2026/01/03/r-universe-workflows/\"\u003etech note\u003c/a\u003e and in the \u003ca href=\"https://docs.r-universe.dev/publish/troubleshoot-build.html#how-to-test-the-r-universe-build-workflow-from-your-own-github-repository\"\u003eR-universe docs\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday February 3rd 2026, 9:00 Australia Western (01:00 UTC), \u003ca href=\"/events/coworking-2026-02/\"\u003e\u0026ldquo;Share your Positron setup!\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/noam-ross/\"\u003eNoam Ross\u003c/a\u003e.\u003cul\u003e\u003cli\u003eSetup Positron and explore extensions and custom settings;\u003c/li\u003e\u003cli\u003eMeet cohost Noam Ross, share how you have set up Positron for your workflow and learn from others.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eThursday February 5th 2026, 16:00 - 18:00 (UTC), \u003ca href=\"/events/clinica-champions-2026/\"\u003eClinica de Aplicación para el Programa de Campeon(e|a)s de rOpenSci\u003c/a\u003e\u003c/li\u003e\u003cli\u003eTuesday March 3rd 2026, 14:00 Europe Central (13:00 UTC), \u003ca href=\"/events/coworking-2026-03/\"\u003e\u0026ldquo;rOpenSci Editors\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/mark-padgham/\"\u003eMark Padgham\u003c/a\u003e.\u003cul\u003e\u003cli\u003eLearn more about \u003ca href=\"/software-review/\"\u003erOpenSci Software Peer Review\u003c/a\u003e\u003c/li\u003e\u003cli\u003eMeet cohost Mark Padgham, and discuss what it\u0026rsquo;s like being an Editor for rOpenSci Software Peer Review.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday April 7th 2026, 9:00 Americas Pacific (16:00 UTC) \u003ca href=\"/events/coworking-2026-04/\"\u003e\u0026ldquo;Getting to know the CSID Network\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/irene-ramos/\"\u003eIrene Ramos\u003c/a\u003e.\u003cul\u003e\u003cli\u003eLearn more about the \u003ca href=\"https://csidnet.org/\"\u003eCSID Network\u003c/a\u003e\u003c/li\u003e\u003cli\u003eMeet community host, Irene Ramos, and learn more about the CSID Network and how you might get involved.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following two packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/read.abares\"\u003eread.abares\u003c/a\u003e, developed by Adam H. Sparks: Downloads and imports agricultural data from the Australian Bureau of Agricultural and Resource Economics and Sciences (ABARES) \u003ca href=\"https://www.agriculture.gov.au/abares\"\u003ehttps://www.agriculture.gov.au/abares\u003c/a\u003e and the Australian Bureau of Statistics (ABS) \u003ca href=\"https://www.abs.gov.au\"\u003ehttps://www.abs.gov.au\u003c/a\u003e. Supports multiple data formats including spreadsheets, comma‑separated value (CSV) files, and geospatial data such as shapefiles and GeoTIFFs. Covers topics such as broadacre crops, livestock, soils, commodities and related agricultural information. The package standardises field names and data formats to improve interoperability and simplify analysis. It also streamlines the import of geospatial data and corrects common issues found in these data sources upon loading. It is available on \u003ca href=\"https://CRAN.R-project.org/package=read.abares\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/667\"\u003ereviewed\u003c/a\u003e by Nicholas Potter and María Paula Caldas.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/dfms\"\u003edfms\u003c/a\u003e, developed by Sebastian Krantz together with Rytis Bagdziunas: Efficient estimation of Dynamic Factor Models using the Expectation Maximization (EM) algorithm or Two-Step (2S) estimation, supporting datasets with missing data and mixed-frequency nowcasting applications. Factors follow a stationary VAR process of order p. Estimation options include: running the Kalman Filter and Smoother once with PCA initial values (2S) as in Doz, Giannone and Reichlin (2011) \u003ca href=\"https://doi.org/10.1016/j.jeconom.2011.02.012\"\u003ehttps://doi.org/10.1016/j.jeconom.2011.02.012\u003c/a\u003e; iterated Kalman Filtering and Smoothing until EM convergence as in Doz, Giannone and Reichlin (2012) \u003ca href=\"https://doi.org/10.1162/REST_a_00225\"\u003ehttps://doi.org/10.1162/REST_a_00225\u003c/a\u003e; or the adapted EM algorithm of Banbura and Modugno (2014) \u003ca href=\"https://doi.org/10.1002/jae.2306\"\u003ehttps://doi.org/10.1002/jae.2306\u003c/a\u003e, allowing arbitrary missing-data patterns and monthly-quarterly mixed-frequency datasets. The implementation uses the Armadillo C++ library and the collapse package for fast estimation. A comprehensive set of methods supports interpretation and visualization, forecasting, and decomposition of the news content of macroeconomic data releases following Banbura and Modugno (2014). Information criteria to choose the number of factors are also provided, following Bai and Ng (2002) \u003ca href=\"https://doi.org/10.1111/1468-0262.00273\"\u003ehttps://doi.org/10.1111/1468-0262.00273\u003c/a\u003e. It is available on \u003ca href=\"https://CRAN.R-project.org/package=dfms\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003ereviewed\u003c/a\u003e by Santtu Tikka and Eli Holmes.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following seventeen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/sits\" title=\"Satellite Image Time Series Analysis for Earth Observation Data Cubes\"\u003esits\u003c/a\u003e (\u003ca href=\"https://github.com/e-sensing/sits/releases/tag/v1.5.4\"\u003e\u003ccode\u003ev1.5.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (cff) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v1.2.1\"\u003e\u003ccode\u003ev1.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/charlatan\" title=\"Make Fake Data\"\u003echarlatan\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/charlatan/releases/tag/v0.6.2\"\u003e\u003ccode\u003ev0.6.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dataset\" title=\"Create Data Frames for Exchange and Reuse\"\u003edataset\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dataset/releases/tag/0.4.2\"\u003e\u003ccode\u003e0.4.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dbparser\" title=\"Drugs Databases Parser\"\u003edbparser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dbparser/releases/tag/v2.2.1\"\u003e\u003ccode\u003ev2.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dfms\" title=\"Dynamic Factor Models\"\u003edfms\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dfms/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dittodb\" title=\"A Test Environment for Database Requests\"\u003edittodb\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dittodb/releases/tag/v0.1.10\"\u003e\u003ccode\u003ev0.1.10\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/EDIutils\" title=\"An API Client for the Environmental Data Initiative Repository\"\u003eEDIutils\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/EDIutils/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gutenbergr\" title=\"Download and Process Public Domain Works from Project Gutenberg\"\u003egutenbergr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gutenbergr/releases/tag/v0.4.1\"\u003e\u003ccode\u003ev0.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/mantis\" title=\"Multiple Time Series Scanner\"\u003emantis\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/mantis/releases/tag/v1.0.1\"\u003e\u003ccode\u003ev1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/openalexR\" title=\"Getting Bibliographic Records from OpenAlex Database Using DSL API\"\u003eopenalexR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/openalexR/releases/tag/v3.0.1\"\u003e\u003ccode\u003ev3.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/patentsview\" title=\"An R Client to the PatentsView API\"\u003epatentsview\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/patentsview/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/read.abares\" title=\"Read Australian Agricultural Data from Government Agencies\"\u003eread.abares\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/read.abares/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rerddap\" title=\"General Purpose Client for ERDDAP™ Servers\"\u003ererddap\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rerddap/releases/tag/v1.2.2\"\u003e\u003ccode\u003ev1.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rnaturalearth\" title=\"World Map Data from Natural Earth\"\u003ernaturalearth\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rnaturalearth/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rotl\" title=\"Interface to the Open Tree of Life API\"\u003erotl\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rotl/releases/tag/v3.1.1\"\u003e\u003ccode\u003ev3.1.1\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/weathercan\" title=\"Download Weather Data from Environment and Climate Change Canada\"\u003eweathercan\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weathercan/releases/tag/v0.7.8\"\u003e\u003ccode\u003ev0.7.8\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are eighteen recently closed and active submissions and 2 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/667\"\u003eread.abares\u003c/a\u003e, Provides simple downloading, parsing and importing of Australian Bureau of Agricultural and Resource Economics and Sciences (ABARES) data sources. Submitted by \u003ca href=\"https://adamhsparks.netlify.app/\"\u003eAdam H. Sparks\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%225/awaiting-reviewer(s)-response%22\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/729\"\u003esuwo\u003c/a\u003e, Access Nature Media Repositories Through R. Submitted by \u003ca href=\"https://marce10.github.io/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/728\"\u003eAthlytics\u003c/a\u003e, Academic R Package for Sports Physiology Analysis from Local Strava Data. Submitted by \u003ca href=\"https://github.com/HzaCode\"\u003eAng\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/724\"\u003ecowfootR\u003c/a\u003e, Tools to Estimate the Carbon Footprint of Dairy Farms. Submitted by \u003ca href=\"https://github.com/juanmarcosmoreno-arch\"\u003eJuan Moreno\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/714\"\u003eopenFDA\u003c/a\u003e, openFDA API. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/730\"\u003eernest\u003c/a\u003e, A Toolkit for Nested Sampling. Submitted by \u003ca href=\"https://github.com/kylesnap\"\u003eKyle Dewsnap\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/718\"\u003ercrisp\u003c/a\u003e, Automate the Delineation of Urban River Spaces. Submitted by \u003ca href=\"https://github.com/cforgaci\"\u003eClaudiu Forgaci\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/709\"\u003ereviser\u003c/a\u003e, Tools for Studying Revision Properties in Real-Time Time Series Vintages. Submitted by \u003ca href=\"https://marcburri.github.io/\"\u003eMarc Burri\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://sebastiankrantz.com\"\u003eSebastian Krantz\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSeven at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/744\"\u003eRAQSAPI\u003c/a\u003e, A Simple Interface to the US EPA Air Quality System Data Mart API. Submitted by \u003ca href=\"https://github.com/mccroweyclinton-EPA\"\u003emccroweyclinton-EPA\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/741\"\u003elogolink\u003c/a\u003e, An Interface for Running NetLogo Simulations. Submitted by \u003ca href=\"http://danielvartan.com\"\u003eDaniel Vartanian\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/740\"\u003efcmconfr\u003c/a\u003e, Fuzzy Cognitive Map Analysis in R. Submitted by \u003ca href=\"https://github.com/bhroston\"\u003ebenroston\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/732\"\u003eActiGlobe\u003c/a\u003e, Wearable Recording Processor for Time Shift Adjustment and Data Analysis. Submitted by \u003ca href=\"https://scholar.google.ca/citations?user=T7y9ckwAAAAJ\u0026amp;hl=en\"\u003eC. William Yao\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/717\"\u003ecoevolve\u003c/a\u003e, Fit Bayesian Generalized Dynamic Phylogenetic Models using Stan. Submitted by \u003ca href=\"https://scottclaessens.github.io/\"\u003eScott Claessens\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/704\"\u003epriorsense\u003c/a\u003e, Prior Diagnostics and Sensitivity Analysis. Submitted by \u003ca href=\"https://github.com/n-kall\"\u003eNoa Kallioinen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/645\"\u003ecapybara\u003c/a\u003e, Fast and Memory Efficient Fitting of Linear Models With High-Dimensional. Submitted by \u003ca href=\"https://pacha.dev\"\u003eMauricio \u0026ldquo;Pachá\u0026rdquo; Vargas Sepúlveda\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/01/03/r-universe-workflows\"\u003eTesting the R-universe build workflow from your own GitHub repository\u003c/a\u003e by Jeroen Ooms. We refactored the R-universe CI workflows to make it possible to run the exact same workflow from your own GitHub repository.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/01/06/transparencyCoC2025\"\u003erOpenSci 2025 Code of Conduct Transparency Report\u003c/a\u003e by Yanina Bellini Saibene, Natalia Morandeira, and Mark Padgham. rOpenSci 2025 Code of Conduct Transparency Report. Other languages: \u003ca href='/es/blog/2026/01/06/transparenciaCoC2025' lang='es'\u003eReporte de Transparencia del Código de Conducta de rOpenSci 2025 (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/01/07/conduct2025\"\u003erOpenSci Code of Conduct Annual Review\u003c/a\u003e by Yanina Bellini Saibene, Natalia Morandeira, and Mark Padgham. Updates for version 2.5 of rOpenSci\u0026rsquo;s Code of Conduct. Other languages: \u003ca href='/es/blog/2026/01/07/conducta2025' lang='es'\u003eRevisión anual del código de conducta de rOpenSci (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/01/12/programchamps2026\"\u003eOpen call for the rOpenSci Champions Program 2026!\u003c/a\u003e by Yanina Bellini Saibene. You can now apply to participate in the 2026 Champions Program. We are looking for people to participate in mentoring roles and to become Champions. Other languages: \u003ca href='/es/blog/2026/01/12/programachamps2026' lang='es'\u003eConvocatoria abierta al Programa de Campeonas y Campeones de rOpenSci 2026 (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/01/22/yearinreview2025\"\u003eClosing The Loop with Our 2025 Wrap-up\u003c/a\u003e by The rOpenSci Team. a post where we reflect on a year of shared learning and collaboration. Take a look at our wrap-up and our plans for 2026.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/es/blog/2026/01/26/commcallchamps\"\u003eSoftware Libre de Investigación en América Latina, conversaciones con la comunidad de Campeon(a|e)s de rOpenSci\u003c/a\u003e by Yanina Bellini Saibene. De cara al llamado 2026 del Programa de Campeon(a|e)s de rOpenSci, conversamos con integrantes de la cohorte en español sobre sus experiencias, aprendizajes y el valor de participar en una comunidad de software libre y ciencia abierta.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/01/27/new-maintainer\"\u003eHow to Recruit a New Maintainer for Your Package\u003c/a\u003e by Yanina Bellini Saibene, Noam Ross, and Maëlle Salmon. Finding a new maintainer for your R package can be a overwhelming task. In this post, we share practical tips and strategies to help you find people that can contribute and take over your package. . Other languages: \u003ca href='/es/blog/2026/01/27/new-maintainer' lang='es'\u003eCómo sumar nuevas personas al mantenimiento de tu paquete (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/12/17/beyond-github\"\u003eCode Hosting Options Beyond GitHub\u003c/a\u003e by Mark Padgham and Steffi LaZerte. How to manage and mirror code repositories across different platforms.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2026/01/20/introducing-distionary\"\u003eIntroducing distionary for Building and Probing Distributions\u003c/a\u003e by Vincenzo Coia. The distionary package is on CRAN and brings a new way to build and probe probability distributions in R, forming the building blocks of the probaverse ecosystem.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools\"\u003ehddtools\u003c/a\u003e, Tools to discover hydrological data, accessing catalogues and databases from various data providers. \u003ca href=\"https://github.com/ropensci/hddtools/issues/36\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/qualtRics/\"\u003equaltRics\u003c/a\u003e, download Qualtrics survey data. \u003ca href=\"https://github.com/ropensci/qualtRics/issues/383\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/photosearcher\"\u003ephotosearcher\u003c/a\u003e, searches Flickr for photographs and metadata. \u003ca href=\"https://github.com/ropensci/photosearcher/issues/22\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"recap-from-an-advent-calendar-about-package-development\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#recap-from-an-advent-calendar-about-package-development\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRecap from an advent calendar about package development\u003c/h3\u003e\u003cp\u003eAthanasia Monika Mowinckel has been curating an Advent Calendar about R Package Development. Read the full recap of all the tips on her \u003ca href=\"https://drmowinckels.io/blog/2025/rpackage-dev-calendar/\"\u003eblog\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"good-news-for-r-enabling-the-next-generation-of-contributors-to-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#good-news-for-r-enabling-the-next-generation-of-contributors-to-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGood news for R: \u0026ldquo;Enabling the Next Generation of Contributors to R\u0026rdquo;\u003c/h3\u003e\u003cp\u003eRead Heather Turner\u0026rsquo;s \u003ca href=\"https://blog.r-project.org/2025/12/17/rsmf-enabling-the-next-generation-of-contributors-to-r/\"\u003eblog post\u003c/a\u003e on the funding granted to the project \u0026ldquo;Enabling the Next Generation of Contributors to R\u0026rdquo;. The team (Heather Turner, Ella Kaye, Simon Urbanek, Peter Dalgaard, Gabe Becker, Kylie Bemis, Mikael Jagan, and Jeroen Ooms) will focus on addressing \u0026ldquo;the challenge of sustaining the R Project\u0026rdquo; through direct contributions among other aspects.\u003c/p\u003e\u003ch3 id=\"coverage-badge-without-a-third-party\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coverage-badge-without-a-third-party\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoverage badge without a third-party\u003c/h3\u003e\u003cp\u003eAdam Sparks wrote up his \u003ca href=\"https://adamhsparks.netlify.app/2026/01/24/look-ma-no-codecov-io/\"\u003estrategy\u003c/a\u003e for generating a README badge displaying test coverage, without using a third-party such as codecov.io.\u003c/p\u003e\u003ch3 id=\"dynamic-content-in-rd-files\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#dynamic-content-in-rd-files\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDynamic content in Rd files\u003c/h3\u003e\u003cp\u003eAs \u003ca href=\"https://github.com/eliocamp/rhelpi18n/issues/25\"\u003enoted by Elio Campitelli\u003c/a\u003e,\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eDocumentation can have code that is run dynamically either at install, build or render time\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eAn example can be found in \u003ca href=\"https://github.com/cran/dplyr/blob/99a15aec2a93face9b9006db166bd5b0f9ce37d0/R/pull.R#L19\"\u003edplyr\u003c/a\u003e where code lists relevant methods present in loaded package. That code is run when the user loads the help page (render time).\u003c/p\u003e\u003cp\u003eOther examples for \u003ca href=\"https://github.com/search?q=owner%3Acran+Sexpr%5Bstage%3Drender\u0026amp;type=code\"\u003erender\u003c/a\u003e, \u003ca href=\"https://github.com/search?q=owner%3Acran+Sexpr%5Bstage%3Dinstall\u0026amp;type=code\"\u003einstall\u003c/a\u003e and \u003ca href=\"https://github.com/search?q=owner%3Acran+Sexpr%5Bstage%3Dbuild\u0026amp;type=code\"\u003ebuild\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"on-issues-and-prs\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-issues-and-prs\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn issues and PRs\u003c/h3\u003e\u003cp\u003eThe ghostty project was recently featured on \u003ca href=\"https://news.ycombinator.com/item?id=46460319\"\u003eHacker News\u003c/a\u003e for its \u003ca href=\"https://github.com/ghostty-org/ghostty/issues/3558\"\u003eissue tracker policy\u003c/a\u003e. The process is to have users open a discussion using GitHub Discussions, then to convert the discussion to an issue if relevant.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u0026ldquo;This approach is based on years of experience maintaining open source projects and observing that 80-90% of what users think are bugs are either misunderstandings, environmental problems, or configuration errors by the users themselves. For what\u0026rsquo;s left, the majority are often feature requests (unimplemented features) and not bugs (malfunctioning features). Of the features requests, almost all are underspecified and require more guidance by a maintainer to be worked on.\u0026rdquo;\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThe tldraw project announced that they no longer \u003ca href=\"https://github.com/tldraw/tldraw/issues/7695\"\u003eaccept PRs from external contributors\u003c/a\u003e. In this case, the motivation is to not waste precious developers\u0026rsquo; time on AI slop.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u0026ldquo;Like many other open-source projects on GitHub, we\u0026rsquo;ve recently seen a significant increase in contributions generated entirely by AI tools. While some of these pull requests are formally correct, most suffer from incomplete or misleading context, misunderstanding of the codebase, and little to no follow-up engagement from their authors.\u0026rdquo;\u003c/p\u003e\u003c/blockquote\u003e\u003ch3 id=\"new-joss-policy-on-ai\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-joss-policy-on-ai\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew JOSS policy on AI\u003c/h3\u003e\u003cp\u003eRead about the Journal of Open Source Software updated its \u003ca href=\"https://blog.joss.theoj.org/2026/01/preparing-joss-for-a-generative-ai-future\"\u003esubmission requirements\u003c/a\u003e to adapt JOSS for a world with heavy AI use for software development.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/01/29/news-january-2026/","date_published":"2026-01-29T00:00:00+00:00","date_modified":"2026-01-29T11:33:59+01:00"},{"id":"https://doi.org/10.59350/teckx-0v214","title":"How to Recruit a New Maintainer for Your Package","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["package development","tech notes","maintenance","contributors","community"],"content_html":"\u003cp\u003eMaintaining an open source package is rewarding work, but it\u0026rsquo;s also a \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003e\u003cstrong\u003elot\u003c/strong\u003e of work\u003c/a\u003e.Life and careers change, interests shift, and sometimes you simply don\u0026rsquo;t have the time or energy to keep working on your R package (and that\u0026rsquo;s okay!\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e).When that happens, one of the most responsible things you can do for package users, \u003cem\u003eand\u003c/em\u003e for yourself, is to \u003cstrong\u003eproactively look for a new maintainer or co-maintainer.\u003c/strong\u003e\u003c/p\u003e\u003cp\u003e\u0026lsquo;How do I recruit a new maintainer?\u0026rsquo; is a question we hear a lot at rOpenSci.Over the years, we\u0026rsquo;ve supported rOpenSci\u0026rsquo;s package authors through this transition, helping them connect with potential maintainers, clarify expectations around the role, and make handovers smoother and more sustainable.\u003c/p\u003e\u003cp\u003eIn this post, we share practical tips and strategies to help you find people that can contribute and eventually take over your package, based on what we have learned through supporting maintainers of packages that are part of the rOpenSci suite.\u003c/p\u003e\u003ch2 id=\"start-early\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#start-early\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStart early\u003c/h2\u003e\u003cp\u003eThe best time to start looking for a new maintainer is well before you actually need one, and the best place to look for a new maintainer is among existing contributors to your package.For this reason, it\u0026rsquo;s a good idea to make planning for succession part of your package design and maintenance strategy from the beginning.\u003c/p\u003e\u003cp\u003eWe encourage package authors to write a \u003ca href=\"https://stats-devguide.ropensci.org/standards.html#G1_2\"\u003e\u0026ldquo;life cycle statement\u0026rdquo;\u003c/a\u003e to describe your medium- to long-term vision of package development maintenance.This can be just a few sentences in a \u003ccode\u003eCONTRIBUTING.md\u003c/code\u003e or \u003ccode\u003eREADME.md\u003c/code\u003e file that outlines your intentions for development, including how long you anticipate maintaining the package.Even if the future is uncertain, this helps set expectations for yourself as well as potential contributors.\u003c/p\u003e\u003ch2 id=\"make-the-package-contributor-friendly\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#make-the-package-contributor-friendly\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMake the package contributor-friendly\u003c/h2\u003e\u003cp\u003eIf you want to attract contributors who can become maintainers in the short- or long-term, your package needs to be \u003cstrong\u003eapproachable\u003c/strong\u003e.Our \u003ca href=\"https://devguide.ropensci.org/maintenance_collaboration.html\"\u003eDev Guide has an entire chapter on making packages contributor-friendly\u003c/a\u003e and we also have a Community Call \u003ca href=\"/commcalls/apr2021-pkg-community/\"\u003e\u0026ldquo;Set Up Your Package to Foster a Community\u0026rdquo;\u003c/a\u003e. Essentially, here are some key points to consider.\u003c/p\u003e\u003cp\u003eAsk yourself:\u003c/p\u003e\u003cul\u003e\u003cli\u003eCould a new person understand how to build, test, and release this package from your repo alone?\u003c/li\u003e\u003cli\u003eIs there enough documentation to make contributing clear and friendly?\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAdding or improving contributing guidelines is a great way to lower barriers to someone starting to act like a maintainer, even before they officially take on the role.A good \u003ccode\u003eCONTRIBUTING.md\u003c/code\u003e can cover:\u003c/p\u003e\u003cul\u003e\u003cli\u003eHow to set up a development environment.\u003c/li\u003e\u003cli\u003eWorkflow preferences: Issue before a Pull Request?\u003c/li\u003e\u003cli\u003eHow you prefer to receive PRs (e.g., one feature per Pull Request, must include tests, etc.).\u003c/li\u003e\u003cli\u003eCode style or formatting guidelines.\u003c/li\u003e\u003cli\u003eAny tests and how to run them.\u003c/li\u003e\u003cli\u003eAny release process notes, including scripts, CI workflows, or manual steps you take to release a new version.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe more you have documented clearly, the less hard it will feel for someone to say \u0026ldquo;yes\u0026rdquo; to maintaining.\u003c/p\u003e\u003cp\u003eDepending on your ability to do so, you can also actively invest in growing contributors in a number of ways, for example:\u003c/p\u003e\u003cul\u003e\u003cli\u003eMentor a beginning contributor through their first pull request\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e.\u003c/li\u003e\u003cli\u003eHost a \u0026ldquo;bug bash\u0026rdquo; or \u0026ldquo;documentation sprint\u0026rdquo; to encourage contributions. Our \u003ca href=\"https://ftc-guide.ropensci.org\"\u003eguide on organizing events for first-time contributors\u003c/a\u003e has resources to help you plan.\u003c/li\u003e\u003cli\u003eHighlight \u0026ldquo;good first issues\u0026rdquo; and \u003ca href=\"/blog/2023/09/19/help-wanted/\"\u003e\u0026ldquo;help wanted issues\u0026rdquo;\u003c/a\u003e in your issue tracker.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThese activities help expand your community of contributors and potential future maintainers, but will be most effective if you start well ahead of package handover, when you still have plenty of time and energy to invest.\u003c/p\u003e\u003ch2 id=\"clarify-what-youre-willing-and-not-willing-to-do\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#clarify-what-youre-willing-and-not-willing-to-do\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eClarify what you\u0026rsquo;re willing (and not willing) to do\u003c/h2\u003e\u003cp\u003ePotential new maintainers will wonder:\u003c/p\u003e\u003cul\u003e\u003cli\u003eWill you still be around for questions?\u003c/li\u003e\u003cli\u003eWill you keep some level of control, or are you fully handing over? (i.e. are you looking for a \u003cstrong\u003eco-maintainer\u003c/strong\u003e or a new \u003cstrong\u003emaintainer\u003c/strong\u003e?\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eBe explicit.For example:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u0026ldquo;I\u0026rsquo;ll help out and will be available during the transition, but plan to fully remove myself as maintainer once the transition is complete.\u0026rdquo;\u003c/li\u003e\u003cli\u003e\u0026ldquo;I\u0026rsquo;m fully handing over maintenance but am happy to answer a few questions during the transition.\u0026rdquo;\u003c/li\u003e\u003cli\u003e\u0026ldquo;I\u0026rsquo;d like to hand over fully and remove myself as maintainer as soon as possible.\u0026rdquo;\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eSetting clear boundaries helps others decide whether to volunteer and prevents misunderstandings later.\u003c/p\u003e\u003ch2 id=\"open-an-issue-seeking-new-maintainer\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#open-an-issue-seeking-new-maintainer\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOpen an issue: \u0026ldquo;Seeking New Maintainer\u0026rdquo;\u003c/h2\u003e\u003cp\u003eOnce you\u0026rsquo;ve decided to look for new maintainers or co-maintainers, and how you plan to be involve with the project in the future, communicate that clearly.A visible first step is to open an issue in your repository dedicated to this topic.\u003c/p\u003e\u003cp\u003eCreate an issue with a clear title, such as: \u0026ldquo;Seeking new maintainer(s)\u0026rdquo;, \u0026ldquo;New maintainer wanted\u0026rdquo;, \u0026ldquo;New co-maintainer(s) welcome\u0026rdquo; or \u0026ldquo;Looking for co-maintainers\u0026rdquo;.\u003c/p\u003e\u003cp\u003eIn the body, you can include:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eWhat level of maintenance\u003c/strong\u003e is needed (bug fixes only, feature development, documentation, etc.).\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eWhat you\u0026rsquo;re looking for\u003c/strong\u003e in a new contributor/co-maintainer:\u003cul\u003e\u003cli\u003eFamiliarity with the language/ecosystem?\u003c/li\u003e\u003cli\u003eExperience with testing or CI?\u003c/li\u003e\u003cli\u003eComfort with releasing new versions?\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eHow to express interest\u003c/strong\u003e (comment on the issue, email you, etc.).\u003c/li\u003e\u003cli\u003eAny \u003cstrong\u003etimeline\u003c/strong\u003e you have in mind for the transition.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eOptionally you can also explain \u003cem\u003eWhy\u003c/em\u003e you’re stepping back (at a high level: time, interest, job change, etc.).\u003c/p\u003e\u003cp\u003eThis issue becomes the central place to discuss ownership changes and can later serve as a public record of the transition.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/rentrez/issues/203\"\u003eThe rentrez package \u0026ldquo;New Maintainer(s)\u0026rdquo; issue\u003c/a\u003e is a good example of content, resources and followup conversation.\u003c/p\u003e\u003cp\u003eIf your repo is on GitHub you can \u003cem\u003epin\u003c/em\u003e this issue and it will be shown at the top of the Issues tab, making it more visible to visitors.\u003c/p\u003e\u003ch2 id=\"update-your-readme-to-reflect-the-packages-status\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#update-your-readme-to-reflect-the-packages-status\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdate your README to reflect the package\u0026rsquo;s status\u003c/h2\u003e\u003cp\u003eThe README is the other place that many users will see.Add a short, highly visible note near the top, for example:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e⚠️ \u003cspan class=\"gs\"\u003e**Project status:**\u003c/span\u003e we are looking for a new maintainer.  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eIf you\u0026#39;re interested in helping maintain this package, \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eplease see [\u003cspan class=\"nt\"\u003ethis issue\u003c/span\u003e](\u003cspan class=\"na\"\u003elink-to-issue\u003c/span\u003e) or \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eget in touch at your_email\u003cspan class=\"ni\"\u003e@example\u003c/span\u003e.com.\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThis message will:\u003c/p\u003e\u003cul\u003e\u003cli\u003eSets expectations for users.\u003c/li\u003e\u003cli\u003eInvites potential maintainers directly from your repo front page.\u003c/li\u003e\u003cli\u003eIt reduces the chance that someone assumes the package is abandoned without explanation (\u003ca href=\"/blog/2022/07/01/evaluating-github-activity-for-contributors/\"\u003ethis blog post list the sources of information we advise people to check to understand package status\u003c/a\u003e).\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eYou can also add a \u003cstrong\u003e\u0026ldquo;Project Status\u0026rdquo;\u003c/strong\u003e section in the README that gives a bit more context (e.g., \u0026ldquo;maintenance mode,\u0026rdquo; \u0026ldquo;new features unlikely without new maintainers,\u0026rdquo; etc.).\u003c/p\u003e\u003ch2 id=\"reach-out-to-existing-contributors-and-power-users\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#reach-out-to-existing-contributors-and-power-users\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReach out to existing contributors and power users\u003c/h2\u003e\u003cp\u003eThe best candidates for new maintainers are often already nearby:\u003c/p\u003e\u003cul\u003e\u003cli\u003ePeople who have submitted PRs.\u003c/li\u003e\u003cli\u003ePeople who have filed useful, detailed issues.\u003c/li\u003e\u003cli\u003ePeople you know use the package in their work.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eYou can:\u003c/p\u003e\u003cul\u003e\u003cli\u003eSend a short, polite email or message to a few people who have been especially active. Even if they say no, they may know someone else who would be a good fit.\u003c/li\u003e\u003cli\u003eIf you don\u0026rsquo;t have an email or other way of contact then tag contributors directly in the \u0026ldquo;Seeking new maintainer\u0026rdquo; issue, like the \u003ca href=\"https://github.com/ropensci/rentrez/issues/203\"\u003erentrez package maintainer did\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"announce-it-where-your-users-are\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#announce-it-where-your-users-are\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAnnounce it where your users are\u003c/h2\u003e\u003cp\u003eNow that your package repo has clear messages and a place to express interest and a clear way of communicate with you, is a good idea to spread the word beyond your repo.\u003c/p\u003e\u003cp\u003eConsider posting a brief announcement in places where your users or contributors are likely to see it:\u003c/p\u003e\u003cul\u003e\u003cli\u003eCommunity forums, mailing lists, Slack/Discord channels relevant to your language/ecosystem.\u003c/li\u003e\u003cli\u003eSocial media (e.g., Mastodon, Bluesky, LinkedIn) using specific hashtags like #RStats.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFor example, rOpenSci \u003ca href=\"/help-wanted/\"\u003elists \u0026ldquo;New maintainers\u0026rdquo; issues in our website\u003c/a\u003e, we share them on our social media and in our \u003ca href=\"/blog/2025/12/18/news-december-2025/#calls-for-contributions\"\u003enewsletter\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"add-a-package-startup-message\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#add-a-package-startup-message\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAdd a package startup message\u003c/h2\u003e\u003cp\u003eAt certain point, you can consider adding a startup message that informs users about the maintainer search.\u003c/p\u003e\u003cp\u003eIn this message you can link to the \u0026ldquo;Seeking new maintainer\u0026rdquo; issue and encourage users to check it out if they\u0026rsquo;re interested in helping.\u003c/p\u003e\u003cp\u003eThis is an aggressive move and may annoy some users, so consider it only if your package has a lot of active users and you haven\u0026rsquo;t had much luck finding a new maintainer through other channels.\u003c/p\u003e\u003ch2 id=\"last-resort-archive-your-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-resort-archive-your-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast resort: archive your package\u003c/h2\u003e\u003cp\u003eIf after a reasonable amount of time you were not able to find a new maintainer for your package,you might have to make the difficult decision to archive it, on your code forge, e.g. \u003ca href=\"https://docs.github.com/en/repositories/archiving-a-github-repository/archiving-repositories\"\u003eGitHub\u003c/a\u003e \u0026ndash; and CRAN if relevant.Archiving the package puts an, albeit sad, end on your maintenance efforts.\u003c/p\u003e\u003cp\u003eBefore archiving your package, take time to add an explanatory comment in all issues and PRs and to close them all.You can create a new README to explain the new status.You could add how to get in touch with you in case someone would like to revive the repository and take on maintenance.\u003c/p\u003e\u003cp\u003eMaybe your software will be replaced by other packages,\u003ca href=\"https://github.com/ropensci/nodbi/issues/48\"\u003emaybe someone will end up reaching out to you to request you transfer the repository to them\u003c/a\u003e,maybe someone will create a replacement with the same name (and hopefully correct authorship and licensing if they reuse your code).In all cases, you will have done your best and the fate of the R package is out of your hands.\u003c/p\u003e\u003ch2 id=\"its-okay-to-step-back\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#its-okay-to-step-back\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIt\u0026rsquo;s okay to step back\u003c/h2\u003e\u003cp\u003eStepping down from maintaining a package is a normal part of the open source life cycle.\u003c/p\u003e\u003cp\u003eBy:\u003c/p\u003e\u003cul\u003e\u003cli\u003eMake plans for succession from the beginning,\u003c/li\u003e\u003cli\u003eMaking the package contributor-friendly,\u003c/li\u003e\u003cli\u003eClarifying your own boundaries,\u003c/li\u003e\u003cli\u003eOpening a clear \u0026ldquo;Seeking new maintainer\u0026rdquo; issue,\u003c/li\u003e\u003cli\u003eUpdating your README,\u003c/li\u003e\u003cli\u003eReaching out to contributors,\u003c/li\u003e\u003cli\u003eAnnouncing the search in the right channels,\u003c/li\u003e\u003cli\u003eand if needed, archiving your package,\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eyou give your project the best chance to continue, while also respecting your own time and energy.\u003c/p\u003e\u003cp\u003eDo you have any other tips or ideas?Please share them.We would love to know!\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eIf you feel guilty, remember that all your hard work up until now isn\u0026rsquo;t negated by taking a step back in future.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eThis can be a great way to discover if you contributing guide is sufficiently detailed.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2026/01/27/new-maintainer/","date_published":"2026-01-27T00:00:00+00:00","date_modified":"2026-01-27T14:36:16-03:00"},{"id":"https://doi.org/10.59350/64nwh-acr21","title":"Closing The Loop with Our 2025 Wrap-up","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["community"],"content_html":"\u003cp\u003eAt the beginning of 2025, we outlined our goals for the year, our \u003ca href=\"/blog/2025/01/22/year-in-review-2024/\"\u003e2024 Highlights\u003c/a\u003e. As the year started, our work took place in a far more challenging global context than many of us anticipated. Across many countries, science and research faced funding cuts, layoffs, and attacks on diversity, equity, accessibility, and inclusion. These conditions reshaped timelines and capacities for institutions and for the people doing the work, but also reinforced why community-driven, open, and care-centered spaces matter.\u003c/p\u003e\u003cp\u003eThis post looks back at what we said we would do and how that work played out in practice throughout 2025. We also share our plans for 2026.\u003c/p\u003e\u003ch2 id=\"software-peer-review-steady-growth-and-shared-responsibility\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review-steady-growth-and-shared-responsibility\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware peer review: steady growth and shared responsibility\u003c/h2\u003e\u003cp\u003eThroughout 2025, \u003ca href=\"/software-review/\"\u003esoftware peer review\u003c/a\u003e remained a core activity at rOpenSci, with \u003cem\u003e24\u003c/em\u003e submissions peer-reviewed and approved. We had a continuous flow of package submissions, approvals, and ongoing reviews, reflecting both the demand for high-quality research software and the commitment of our editors and reviewers.\u003c/p\u003e\u003cp\u003eNew packages joined rOpenSci in the fields of environmental and climate data, geospatial analysis, linguistics, and statistics, among others. Existing packages received more than \u003cem\u003e7000\u003c/em\u003e commits from \u003cem\u003e239\u003c/em\u003e unique users, with \u003cem\u003e62\u003c/em\u003e of them contributing for the first time to rOpenSci! Package maintainers released new versions, performed ongoing maintenance and responded to user inquiries and issues.\u003c/p\u003e\u003cp\u003eBuilding on last year\u0026rsquo;s commitments, we further improved the efficiency and usefulness of our software peer review system, and explored its potential as a model for other communities.\u003c/p\u003e\u003cp\u003eWe enhanced the review process by \u003ca href=\"https://dashboard.ropensci.org\"\u003eimproving dashboards\u003c/a\u003e, \u003ca href=\"https://devguide.ropensci.org\"\u003eupdating guides\u003c/a\u003e, and refining \u003ca href=\"https://docs.ropensci.org/pkgcheck/\"\u003epkgcheck\u003c/a\u003e and its GitHub Action, making participation easier for authors and reviewers.\u003c/p\u003e\u003cp\u003eLeadership transitions within the program editorial team helped distribute responsibility and ensure continuity, while ongoing community participation demonstrated that peer review remains a collective effort.\u003c/p\u003e\u003cp\u003eIncreasing submissions mean we hope to add more editors to our board in 2026. We will also expand our automation processes, and formulate policies on the use of AI/LLMs in developing and maintaining rOpenSci packages.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/01/22/yearinreview2025/editorial_team.png\"\t\t\talt=\"Pictures of 17 people that are part of the software peer review editorial team\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003erOpenSci Software Peer Review Editorial Team\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"strengthening-shared-infrastructure-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#strengthening-shared-infrastructure-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStrengthening shared infrastructure: R-Universe\u003c/h2\u003e\u003cp\u003eA major milestone in the R-Universe trajectory was its \u003ca href=\"/blog/2024/12/03/r-universe-r-consortium-tlp/\"\u003edesignation as a Top-Level Project by the R Consortium\u003c/a\u003e in late 2024. This status provides guaranteed funding and institutional support for at least three more years and reflects R-Universe’s role as critical infrastructure in the R community. Alongside this, Jeroen Ooms, the R-Universe project lead, gained a seat on the consortium’s Infrastructure Steering Committee, reinforcing R-Universe’s influence on broader R ecosystem development.\u003c/p\u003e\u003cp\u003eDocumentation has been a key focus area as R-Universe has matured. In early 2025, the R-Universe team launched a \u003ca href=\"https://docs.r-universe.dev\"\u003ecentralized documentation website\u003c/a\u003e hosted as a Quarto book, funded in part by Google Season of Docs. This resource consolidates dispersed tutorials, READMEs, and technical notes into a more navigable structure covering browsing, installation, publishing, and infrastructure topics. The goal was not only to improve clarity for new users but also to make contributions to the documentation itself easier for the community.\u003c/p\u003e\u003cp\u003eA refreshed web frontend has improved user experience and maintainability. This redesign streamlined the interface, improved performance, and made it easier for contributors to propose improvements, addressing long-standing usability challenges through the incremental additions of features over time. We are continuing to rewrite and consolidate other pieces of the infrastructure such as the \u003ca href=\"/blog/2026/01/03/r-universe-workflows/\"\u003ebuild workflows\u003c/a\u003e to make it easier to understand the R-Universe build process, and enable the community to hack workflows and actions to contribute improvements.\u003c/p\u003e\u003cp\u003eFinally a key focus in 2025 that continues in 2026 is expanding collaboration with other organizations managing sizable R package ecosystems. A notable emerging initiative is \u003ca href=\"/commcalls/r-multiverse/\"\u003eR-Multiverse\u003c/a\u003e, which explores large-scale collaborative package repositories built on R-Universe’s infrastructure. R-Multiverse aims to support curated collections with developmental and production branches, customizable checks, and manual governance steps—features critical to institutional collaboration and stable release practices. In addition, we are helping the \u003ca href=\"https://bioc.r-universe.dev/builds\"\u003eBioConductor\u003c/a\u003e project modernize their infrastructure and gradually offload some of their build maintenance to us. These illustrate R-Universe\u0026rsquo;s evolving role not just as a repository, but as an interactive ecosystem management tool.\u003c/p\u003e\u003ch2 id=\"multilingual-work-as-infrastructure-not-an-add-on\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#multilingual-work-as-infrastructure-not-an-add-on\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMultilingual work as infrastructure, not an add-on\u003c/h2\u003e\u003cp\u003eIn 2024, we framed multilingualism as foundational to open science, not supplementary. We committed to expanding translations, improving workflows, and supporting communities working in languages other than English.\u003c/p\u003e\u003cp\u003eIn 2025, following our 2024 commitment, we completed the \u003ca href=\"/blog/2025/11/25/translation-devguide-pt/\"\u003ePortuguese translations of the rOpenSci Dev Guide\u003c/a\u003e and continued Spanish revisions of key content, blogs, program materials, and training.\u003c/p\u003e\u003cp\u003eWe translated 32,794 words into Portuguese for the Dev Guide and published 14 blog posts on our website, bringing the total to 16 blog posts in Portuguese. In Spanish, we have 62 blog posts and all main website pages are fully translated. Additionally, we host blog content in other languages, including 8 posts in French and 1 in Turkish.\u003c/p\u003e\u003cp\u003eBeyond translation itself, we continued to treat multilingual publishing as infrastructure: refining AI-assisted workflows through the \u003ca href=\"https://docs.ropensci.org/babeldown/\"\u003ebabeldown\u003c/a\u003e package; facilitating multilingual Quarto projects through the now \u003ca href=\"https://github.com/ropensci/software-review/issues/720\"\u003epeer-reviewed\u003c/a\u003e \u003ca href=\"https://docs.ropensci.org/babelquarto/\"\u003ebabelquarto\u003c/a\u003e package; enabling our website to support \u003ca href=\"/blog/2025/04/28/news-april-2025/#more-languages-more-access-discover-ropensci-in-spanish\"\u003emultilingual content\u003c/a\u003e; \u003ca href=\"/blog/2024/12/17/localization-guide/\"\u003edocumenting processes\u003c/a\u003e and \u003ca href=\"/blog/2025/06/23/translation-faq/\"\u003esharing lessons\u003c/a\u003e so that other open science communities can adapt and reuse this work.\u003c/p\u003e\u003cp\u003eWe also hosted \u003ca href=\"/es/commcalls/\"\u003ecommunity calls\u003c/a\u003e, \u003ca href=\"/coworking\"\u003eco-working sessions\u003c/a\u003e, and mini-hackathons in Spanish and Portuguese, offering our content and programming to Spanish- and Lusophone-speaking community members.\u003cbr\u003eThese events and resources reinforce rOpenSci’s commitment to multilingual participation and to meeting communities where they are.\u003c/p\u003e\u003cp\u003eIn 2026, we will continue working on English and Spanish content generation and expand Portuguese content and processes, piloting a fully Portuguese software peer review and translating Champions Program Training material into Portuguese.\u003c/p\u003e\u003cp\u003eWe will continue our collaborations with other organizations and groups that translate and localize R content and offer not only content but also other aspects of our programs in languages other than English.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/01/22/yearinreview2025/multilingual.png\"\t\t\talt=\"The preface of the Dev Guide in English, Portuguese and Spanish\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003erOpenSci Dev Guide Preface in three languages\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"the-champions-program-with-latin-american-focus\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-champions-program-with-latin-american-focus\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe Champions Program with Latin American Focus\u003c/h2\u003e\u003cp\u003eOne of our clearest goals for 2025 was to run the first fully Spanish-language cohort of the rOpenSci Champions Program, with a focus on Latin America.\u003c/p\u003e\u003cp\u003eThe 2025 cohort launched with an \u003ca href=\"https://champions-program.ropensci.org/resources/resources.html\"\u003eimproved Spanish curriculum\u003c/a\u003e, \u003ca href=\"/es/commcalls/champions-latino-2025/\"\u003eSpanish-language community calls\u003c/a\u003e, outreach activities, and mentoring. To accomplish this, we translated all training materials and the infrastructure and artifacts necessary to run a successful cohort into Spanish. The program emphasized sustainable research software as a pillar of open science in the region, while strengthening peer networks among Champions, mentors, and alumni.\u003c/p\u003e\u003cp\u003eAlongside \u003ca href=\"/blog/2025/07/03/champions-2025/\"\u003ethe new cohort\u003c/a\u003e, we also evaluated the \u003ca href=\"/blog/2024/02/15/champions-program-champions-2024/\"\u003esecond cohort\u003c/a\u003e to improve the program and better understand its impact. We conducted anonymous surveys and 1:1 interviews with Champions and mentors and used their feedback to improve the program.\u003c/p\u003e\u003cp\u003eThe analysis of the survey and interview information shows high satisfaction among participants, both mentors and Champions. All participants agreed that the program prepared Champions to develop their own R packages, improve the quality of their packages, and participate in the software peer review. They also  expressed a desire to remain connected with rOpenSci, including participating in the Champions Program again in the future as mentors.\u003c/p\u003e\u003cp\u003eAll Champions interviewed reported positive professional outcomes after participating in the program, ranging from employment opportunities, internships, grants, and conference scholarships to presentations at international and local events, generating interest in their project and the program.\u003c/p\u003e\u003cp\u003eParticipants also provided constructive feedback on challenges they experienced, including staying in touch with other participants, defining the scope of the project, and time zones. In response, we made adjustments to the program to try to address these challenges for the 2025-2026 cohort.\u003c/p\u003e\u003cp\u003eIn 2026, we will \u003ca href=\"/blog/2026/01/12/programchamps2026/\"\u003ehave a second cohort in Spanish\u003c/a\u003e and will take steps toward longer-term sustainability for the program: testing new formats, strengthening partnerships, and beginning follow-up work with earlier cohorts to better understand the program\u0026rsquo;s long-term impact.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/01/22/yearinreview2025/countriesApplications.png\"\t\t\talt=\"World map showing applications levels by country, with a color gradient from dark purple (1) to yellow (30). North America, parts of South America, and Australia show higher values in yellow-green, while parts of Asia, and Africa appear in darker purple tones indicating lower values.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eCountries of origin of applications to the Champions Program\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"community-participation-and-pathways-into-open-source\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-participation-and-pathways-into-open-source\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity participation and pathways into open source\u003c/h2\u003e\u003cp\u003eThroughout 2025, our blog, newsletters, and social media outreach continued to amplify community voices. These highlighted not only software releases but also the people, practices, and contexts behind them, reinforcing our focus on community participation.\u003c/p\u003e\u003cp\u003eDuring 2025, we published 49 posts on the rOpenSci blog. These included 41 blog posts and 8 technotes, with 18 posts authored or co-authored by community members, reflecting the continued openness of the blog to contributions beyond the staff team and the great participation of our community. Also, 60 authors contributed to the blog, 39 of them writing for rOpenSci for the first time, an encouraging sign of ongoing renewal and engagement!\u003c/p\u003e\u003cp\u003eOur content was published in four languages: 13 posts were available in more than one language, and 16 posts were published in at least one non-English language, helping us reach a broader and more diverse audience.\u003c/p\u003e\u003cp\u003eWe organized \u003cem\u003e3\u003c/em\u003e community calls and \u003cem\u003e13\u003c/em\u003e co-working sessions with \u003cem\u003e21\u003c/em\u003e unique presenters and more than \u003cem\u003e200\u003c/em\u003e attendees, with topics ranging from technical skills such as testing, version control, and package development to broader conversations about accessibility, contribution pathways, and getting to know other communities and organizations.\u003c/p\u003e\u003cp\u003eOne of the goals for 2025 was to create more opportunities for people to engage with rOpenSci, especially first-time contributors.\u003c/p\u003e\u003cp\u003eIn 2025, this took shape through \u003ca href=\"/blog/2025/01/24/coworking-hackathons/\"\u003emini-hackathons\u003c/a\u003e designed to lower barriers to participation. These events combined practical contribution opportunities with mentoring and social connection, reinforcing the idea that open source work is collaborative and learned through doing. \u003ca href=\"https://ftc-guide.ropensci.org\"\u003eWe wrote a guide to share our lessons learned organizing this type of event\u003c/a\u003e. Hosting multiple events with this goal throughout the year helped emphasize that open source participation is not a one-off event, but an ongoing practice that grows with continued support.\u003c/p\u003e\u003cp\u003eWe also attended and supported several other conferences and events throughout the year, including keynotes at \u003ca href=\"https://ropensci.org/events/user-2025/\"\u003euseR!2025\u003c/a\u003e and \u003ca href=\"https://ropensci.org/events/uros2025/\"\u003euRos2025\u003c/a\u003e, among several \u003ca href=\"https://ropensci.org/talks-papers/\"\u003etalk and workshops\u003c/a\u003e from our staff and community members. These events provided opportunities to connect with community members in person, share our work, and learn from others in the open science ecosystem.\u003c/p\u003e\u003cp\u003eIn 2026, we plan to continue organizing community calls in multiple spoken languages, co-working sessions, and mini-hackathons. If you want to collaborate in any of these spaces, please get in touch with us.  We also hope to see you in some of the R, open science, and open source conferences around the world: follow our \u003ca href=\"/events\"\u003eevents page\u003c/a\u003e and our \u003ca href=\"/news\"\u003enewsletter\u003c/a\u003e to learn which ones we will attend!\u003c/p\u003e\u003cp\u003eWe made progress on developing a prototype dashboard that aims to help organizations maintain complex systems of interdependent software components. Our initial \u003ca href=\"https://ropensci-review-tools.github.io/repometrics-demo/\"\u003eprototype organizational dashboard\u003c/a\u003e provides insights into code contributors, their repositories, and maintenance status and needs.We are in conversation with several groups about adopting and adapting the dashboard to highlight the importance of communities in creating and maintaining software.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/01/22/yearinreview2025/conferences.png\"\t\t\talt=\"rOpenSci Staff and Community members presenting at several international conferences\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003erOpenSci Staff and Community members at international conferences\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"strengthening-ties-with-open-science-partners\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#strengthening-ties-with-open-science-partners\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStrengthening ties with open science partners\u003c/h2\u003e\u003cp\u003eIn 2025, we continued to build and strengthen partnerships with organizations that share our commitment to open science, open source, and community-driven development.\u003c/p\u003e\u003cp\u003eWe used our co-working sessions to connect rOpenSci members with like-minded communities, holding joint events with the \u003ca href=\"/events/coworking-2025-06/\"\u003eData Science Learning Community\u003c/a\u003e and \u003ca href=\"/events/coworking-2025-12/\"\u003eThe Carpentries\u003c/a\u003e. We also organized a \u003ca href=\"/events/datasci-careers-feds/\"\u003ediscussion and networking event for and with current and former U.S. federal government data scientists\u003c/a\u003e with \u003ca href=\"https://openscapes.org/\"\u003eOpenScapes\u003c/a\u003e.\u003c/p\u003e\u003cp\u003erOpenSci staff served on the \u003ca href=\"https://r-consortium.org/about/governance.html#infrastructure-steering-committee\"\u003eR Consortium Infrastructure Steering Committee\u003c/a\u003e, \u003ca href=\"https://rladies.org/about-us/global-team/\"\u003eR-Ladies\u003c/a\u003e global leadership, \u003ca href=\"https://r-multiverse.org/team.html\"\u003eR-Multiverse\u003c/a\u003e administration, \u003ca href=\"https://csidnet.org\"\u003eCSIDNet Collaborative Committee\u003c/a\u003e, [The Carpentries](the carpentries board of directors) Board of Directors, as well as the UseR! \u003ca href=\"https://user2025.r-project.org/about/organizers\"\u003e2025\u003c/a\u003e, \u003ca href=\"https://user2026.r-project.org\"\u003e2026\u003c/a\u003e and \u003ca href=\"https://latinr.org/sobre/equipo/\"\u003eLatinR\u003c/a\u003e organizing committees.\u003c/p\u003e\u003cp\u003eTogether with a \u003ca href=\"/blog/2025/09/15/collaboration-communities/\"\u003ecoalition of open science organizations, we held a convening\u003c/a\u003e to map out gaps in ecosystem sustainability and to start a long-term process of developing shared support approaches. Finally, as mentioned above, we are working with BioConductor to make R-Universe a larger part of their core infrastructure.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/01/22/yearinreview2025/communities.jpg\"\t\t\talt=\"pyOpenSci, rOpenSci, OLS, The Carpentries and PreReview Executive Teams and Community Managers\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eExecutive Teams and Community Managers from pyOpenSci, rOpenSci, OLS, The Carpentries and PreReview at the Open Science Communities Convening in September 2025\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"what-we-learned\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-we-learned\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat we learned\u003c/h2\u003e\u003cp\u003eLooking back over 2025, we focused on being true to our core community values and delivering on commitments made the year before. Where plans evolved, they did so in response to capacity, collaboration, and community feedback.\u003c/p\u003e\u003cp\u003eClosing the loop between intention and action is a practice of accountability and learning. It helps us see which activities and strategies complement each other over time, which structures enable others to lead, and where care and sustainability matter most.\u003c/p\u003e\u003cp\u003eAs we look ahead, we do so grounded in what 2025 demonstrated: \u003cem\u003ethat open science is built through steady, collective work, with Diversity, Equity, Inclusion, and Accessibility at the center.\u003c/em\u003e We believe that sharing what we plan to do has a greater impact if we return to show what we actually did, all the while staying true to the principles that hold this community together.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/01/22/yearinreview2025/","date_published":"2026-01-22T00:00:00+00:00","date_modified":"2026-01-22T16:33:54-03:00"},{"id":"https://doi.org/10.59350/pg1t4-ty826","title":"Introducing distionary for Building and Probing Distributions","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Vincenzo Coia","url":"https://orcid.org/0000-0002-2930-0723","avatar":"https://github.com/vincenzocoia.png","_role":["author"]}],"tags":["tech notes","distributions","peer-reviewed","community","distionary","probaverse","packages"],"content_html":"\u003cp\u003eAfter passing through rOpenSci peer review, the \u003ca href=\"https://docs.ropensci.org/distionary/\"\u003edistionary\u003c/a\u003e package is now newly available on CRAN.It allows you to make probability distributions quickly – either from a few inputs or from its built-in library – and then probe them in detail.\u003c/p\u003e\u003cp\u003eThese distributions form the building blocks that piece together advanced statistical models with the wider \u003ca href=\"https://probaverse.com\"\u003eprobaverse\u003c/a\u003e ecosystem, which is built to release modelers from low-level coding so production pipelines stay human-friendly.Right now, the other probaverse packages are \u003ca href=\"https://distplyr.probaverse.com\"\u003edistplyr\u003c/a\u003e, allowing you to morph distributions into new forms, and \u003ca href=\"https://famish.probaverse.com\"\u003efamish\u003c/a\u003e, allowing you to tune distributions to data.Developed with risk analysis use cases like climate and insurance in mind, the same tools translate smoothly to simulations, teaching, and other applied settings.\u003c/p\u003e\u003cp\u003eThis post highlights the top 3 features of this youngest version of distionary.Let’s start by loading the package.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edistionary\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"feature-1-more-than-just-base-r-distributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#feature-1-more-than-just-base-r-distributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFeature 1: more than just Base R distributions\u003c/h2\u003e\u003cp\u003eOf course, all the Base R distributions are available in distionary.Here’s everyone’s favourite Normal distribution.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003edst_norm\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003eNormal distribution (continuous) --Parameters--mean   sd    0    1 \u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003edst_norm\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/01/20/introducing-distionary/normal-1.png\"\t\t\talt=\"Normal distribution density.\"\u003e\u003c/figure\u003e\u003cp\u003eAnd good old Poisson.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003edst_pois\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003ePoisson distribution (discrete) --Parameters--lambda      3 \u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003edst_pois\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/01/20/introducing-distionary/poisson-1.png\"\t\t\talt=\"Poisson distribution probability mass function.\"\u003e\u003c/figure\u003e\u003cp\u003eBut there are additional game-changing distributions included, too.\u003c/p\u003e\u003cp\u003eA \u003cstrong\u003eNull distribution\u003c/strong\u003e, which always evaluates to \u003ccode\u003eNA\u003c/code\u003e.When you’re running an algorithm that encounters an issue, you can return a Null distribution instead of throwing an error.Even downstream evaluation steps won’t error out because the code still sees a distribution rather than a bare \u003ccode\u003eNA\u003c/code\u003e or \u003ccode\u003eNULL\u003c/code\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Make a Null distribution.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003edst_null\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Null distributions always evaluate to NA.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eeval_quantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eat\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e0.25\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.75\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e[1] NA NA NA\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e[1] NA\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003eEmpirical distributions\u003c/strong\u003e, where the data \u003cem\u003eare\u003c/em\u003e the distribution.These respect observed behaviour without forcing a specific shape, and are also commonly used as a benchmark for comparison against other models.Here’s an example using the Ozone concentration from the \u003ccode\u003eairquality\u003c/code\u003e dataset that comes loaded with R.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Empirical distribution of Ozone from the `airquality` dataset.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eemp\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003edst_empirical\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eairquality\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eOzone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ena_action_y\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;drop\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Inspect\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eemp\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003eFinite distribution (discrete) --Parameters--# A tibble: 67 × 2  outcomes   probs     \u0026lt;int\u0026gt;   \u0026lt;dbl\u0026gt;1        1 0.008622        4 0.008623        6 0.008624        7 0.0259 5        8 0.00862# ℹ 62 more rows\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eCompare its \u003ca href=\"https://en.wikipedia.org/wiki/Cumulative_distribution_function\"\u003ecumulative distribution function (CDF)\u003c/a\u003e to that of a Gamma distribution fitted to the Ozone levels, borrowing the probaverse’s famish package for the fitting task.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Fit a Gamma distribution to Ozone using the famish package.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efamish\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egamma\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003efit_dst_gamma\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eairquality\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eOzone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ena_action\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;drop\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Plot the cumulative distribution functions (CDFs) together.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eemp\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;cdf\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1000\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003exlab\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Ozone Levels (ppb)\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egamma\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;cdf\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eadd\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecol\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;red\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elegend\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s\"\u003e\u0026#34;bottomright\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003elegend\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Empirical\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Fitted Gamma\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ecol\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;black\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;red\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003elty\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/01/20/introducing-distionary/gamma_empirical_comparison-1.png\"\t\t\talt=\"Comparison of Empirical CDF and fitted Gamma CDF for Ozone levels.\"\u003e\u003c/figure\u003e\u003cp\u003eThese textbook distributions become much more useful once they become building blocks for building up a system.For example, they could form predictive distributions in a machine learning context, or be related to other variables.This is what the probaverse seeks to make possible.\u003c/p\u003e\u003ch2 id=\"feature-2-friendly-towards-tidy-tabular-workflows\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#feature-2-friendly-towards-tidy-tabular-workflows\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFeature 2: friendly towards tidy tabular workflows\u003c/h2\u003e\u003cp\u003eFirst, load the tidyverse to activate tidy tabular workflows.And yes, probaverse is named after the tidyverse because it aims to be a “tidyverse for probability”.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etidyverse\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eYou can safely ignore this next chunk unless you want to see how I’m wrangling some financial data for you.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Wrangle the stocks data frame using tidyverse.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003estocks\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eas_tibble\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eEuStockMarkets\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eacross\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eeverything\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"nf\"\u003e\\\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"m\"\u003e100\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"nf\"\u003elag\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e))))\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003edrop_na\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe \u003ccode\u003estocks\u003c/code\u003e data I’ve wrangled is a table of \u003cem\u003edaily percent loss\u003c/em\u003e for four major European stock indices.The dates don’t matter for this example, so they’ve been omitted.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003estocks\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e# A tibble: 1,859 × 4      DAX    SMI     CAC    FTSE    \u0026lt;dbl\u0026gt;  \u0026lt;dbl\u0026gt;   \u0026lt;dbl\u0026gt;   \u0026lt;dbl\u0026gt; 1  0.928 -0.620  1.26   -0.679  2  0.441  0.586  1.86    0.488  3 -0.904 -0.328  0.576  -0.907  4  0.178 -0.148 -0.878  -0.579  5  0.467  0.889  0.511   0.720  6 -1.25  -0.676 -1.18   -0.855  7 -0.578 -1.23  -1.32   -0.824  8  0.287  0.358  0.193  -0.0837 9 -0.637 -1.11  -0.0171  0.522 10 -0.118 -0.437 -0.314  -1.41  # ℹ 1,849 more rows\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eFirst, let’s focus on the DAX stock index.Fit an empirical distribution like last time (notice I’m using a data mask\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e in \u003ccode\u003edst_empirical()\u003c/code\u003e this time).\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Fit an empirical distribution to the DAX stock index.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edax\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003edst_empirical\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eDAX\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estocks\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Inspect the CDF.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edax\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003exlab\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Daily Loss (%)\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/01/20/introducing-distionary/empirical_dax-1.png\"\t\t\talt=\"Empirical CDF of DAX stock index daily losses.\"\u003e\u003c/figure\u003e\u003cp\u003eYou can easily calculate some standard quantiles in tabular format so that the inputs are placed alongside the calculated outputs: just use the \u003ccode\u003eenframe_\u003c/code\u003e prefix instead of \u003ccode\u003eeval_\u003c/code\u003e as we did above with the Null distribution.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eenframe_quantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edax\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eat\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e0.25\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.75\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003earg_name\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;prob\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e# A tibble: 3 × 2   prob quantile  \u0026lt;dbl\u0026gt;    \u0026lt;dbl\u0026gt;1  0.25  -0.638 2  0.5   -0.04733  0.75   0.468 \u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOr, more to the point here – and appealing to probaverse’s soft spot for risk-focused work – you can calculate return levels (also known as “Value at Risk” in financial applications) for specific return periods.If you don’t know what these are, they are just fancy names for quantiles.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ereturn_periods\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e50\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e200\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e500\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eenframe_return\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003edax\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eat\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ereturn_periods\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003earg_name\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;return_period\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003efn_prefix\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;daily_loss_pct\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e# A tibble: 5 × 2  return_period daily_loss_pct          \u0026lt;dbl\u0026gt;          \u0026lt;dbl\u0026gt;1             5          0.6212            50          2.17 3           100          2.75 4           200          3.08 5           500          3.71 \u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe tabular output becomes even more powerful when inserted into a table of models, because it facilitates comparisons and trends.To demonstrate, build a model for each stock. First, lengthen the data for this task.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Lengthen the data using tidyverse.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003estocks2\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003epivot_longer\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003estocks\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eeverything\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003enames_to\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;stock\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003evalues_to\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;daily_loss_pct\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Inspect\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003estocks2\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e# A tibble: 7,436 × 2   stock daily_loss_pct   \u0026lt;chr\u0026gt;          \u0026lt;dbl\u0026gt; 1 DAX            0.928 2 SMI           -0.620 3 CAC            1.26  4 FTSE          -0.679 5 DAX            0.441 6 SMI            0.586 7 CAC            1.86  8 FTSE           0.488 9 DAX           -0.90410 SMI           -0.328# ℹ 7,426 more rows\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eBuild a model for each stock using a \u003ccode\u003egroup_by\u003c/code\u003e + \u003ccode\u003esummarise\u003c/code\u003e workflow from the tidyverse (please excuse the current need to wrap the distribution in \u003ccode\u003elist()\u003c/code\u003e). Notice that distributions become table entries, indicated here by their class \u003ccode\u003e\u0026lt;dst\u0026gt;\u003c/code\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create an Empirical distribution for each stock.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emodels\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003estocks2\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estock\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003esummarise\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emodel\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003edst_empirical\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edaily_loss_pct\u003c/span\u003e\u003cspan class=\"p\"\u003e)))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Inspect\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emodels\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e# A tibble: 4 × 2  stock model   \u0026lt;chr\u0026gt; \u0026lt;list\u0026gt;1 CAC   \u0026lt;dst\u0026gt; 2 DAX   \u0026lt;dst\u0026gt; 3 FTSE  \u0026lt;dst\u0026gt; 4 SMI   \u0026lt;dst\u0026gt; \u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow you can use a tidyverse workflow to calculate tables of quantiles for each model, and expand them.In fact, this workflow is common enough that I’m considering adding a dedicated verb for it.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ereturn_levels\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003emodels\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003edf\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003emap\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003emodel\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eenframe_return\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eat\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ereturn_periods\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003earg_name\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;return_period\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003efn_prefix\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;daily_loss_pct\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eunnest\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"n\"\u003emodel\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Inspect\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ereturn_levels\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eInf\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e# A tibble: 20 × 3   stock return_period daily_loss_pct   \u0026lt;chr\u0026gt;         \u0026lt;dbl\u0026gt;          \u0026lt;dbl\u0026gt; 1 CAC               5          0.757 2 CAC              50          2.37  3 CAC             100          2.78  4 CAC             200          3.41  5 CAC             500          3.97  6 DAX               5          0.621 7 DAX              50          2.17  8 DAX             100          2.75  9 DAX             200          3.08 10 DAX             500          3.71 11 FTSE              5          0.54212 FTSE             50          1.58 13 FTSE            100          2.05 14 FTSE            200          2.31 15 FTSE            500          2.87 16 SMI               5          0.55217 SMI              50          2.03 18 SMI             100          2.52 19 SMI             200          2.91 20 SMI             500          3.55 \u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe result is a tidy dataset that’s ready for most analyses.For example, you can easily plot a comparison of the return levels of each stock.I make these plots all the time to facilitate risk-informed decision-making.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ereturn_levels\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estock\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003efct_reorder2\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estock\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ereturn_period\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edaily_loss_pct\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ereturn_period\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edaily_loss_pct\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecolour\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003estock\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etheme_bw\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003escale_x_log10\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s\"\u003e\u0026#34;Return Period (days)\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eminor_breaks\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e10\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e10\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"m\"\u003e10\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e10\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"m\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003escale_y_continuous\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Daily Loss\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elabel\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003escales\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003elabel_number\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esuffix\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;%\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eannotation_logticks\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eside\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;b\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003escale_colour_discrete\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Stock Index\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/01/20/introducing-distionary/return_period_plot-1.png\"\t\t\talt=\"Return Level Plot for Daily Loss Percentages of Stock Indices.\"\u003e\u003c/figure\u003e\u003ch2 id=\"feature-3-make-the-distribution-you-need\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#feature-3-make-the-distribution-you-need\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFeature 3: make the distribution you need\u003c/h2\u003e\u003cp\u003eYou can create your own distributions with distionary by specifying only a minimal set of properties; all other properties are derived automatically and can be retrieved when needed.\u003c/p\u003e\u003cp\u003eLet’s say you need an Inverse Gamma distribution but it’s not available in distionary.Currently, distionary assumes you’ll at least provide the \u003ca href=\"https://en.wikipedia.org/wiki/Probability_density_function\"\u003edensity\u003c/a\u003e and CDF; you could retrieve these from the \u003ca href=\"https://cran.r-project.org/web/packages/extraDistr/index.html\"\u003eextraDistr\u003c/a\u003e package (functions \u003ccode\u003edinvgamma()\u003c/code\u003e and \u003ccode\u003epinvgamma()\u003c/code\u003e).Plug them into distionary’s \u003ccode\u003edistribution()\u003c/code\u003e function and enjoy access to a variety of properties you didn’t specify, like the mean, variance, skewness, and hazard function.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Make an Inverse Gamma distribution (minimal example).\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eig\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003edistribution\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003edensity\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003eextraDistr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003edinvgamma\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebeta\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e20\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ecdf\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003eextraDistr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epinvgamma\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebeta\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e20\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003e.vtype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;continuous\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Calculate anything.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eig\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e[1] 5\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003evariance\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eig\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e[1] 8.333333\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eskewness\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eig\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e[1] 3.464085\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eig\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;hazard\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e20\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1000\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003exlab\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Outcome\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2026/01/20/introducing-distionary/inverse_gamma-1.png\"\t\t\talt=\"Hazard function of an Inverse Gamma distribution.\"\u003e\u003c/figure\u003e\u003cp\u003eYou might also consider giving the distribution a \u003ccode\u003e.name\u003c/code\u003e – it pays off when you’re juggling multiple models.Adding \u003ccode\u003e.parameters\u003c/code\u003e provides additional specificity to the distribution \u003ccode\u003e.name\u003c/code\u003e, but are otherwise not yet used for functional purposes.\u003c/p\u003e\u003cp\u003eHere is a more complete implementation of the Inverse Gamma distribution, this time implemented as a function of the two parameters.Notice I also check that the parameters are positive (cheers to the \u003ca href=\"https://mllg.github.io/checkmate/\"\u003echeckmate\u003c/a\u003e package).\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edst_invgamma\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ealpha\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebeta\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003echeckmate\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eassert_number\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ealpha\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elower\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003echeckmate\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eassert_number\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ebeta\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003elower\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003edistribution\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003edensity\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003e\\\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003eextraDistr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003edinvgamma\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebeta\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ebeta\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecdf\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003e\\\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003eextraDistr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epinvgamma\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebeta\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ebeta\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003equantile\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003e\\\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003eextraDistr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eqinvgamma\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebeta\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ebeta\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erandom\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003e\\\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"n\"\u003eextraDistr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003erinvgamma\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebeta\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ebeta\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003e.name\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Inverse Gamma\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003e.parameters\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebeta\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ebeta\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003e.vtype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;continuous\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNow we can make that same Inverse Gamma distribution as before:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eig2\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003edst_invgamma\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e20\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Inspect\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eig2\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003eInverse Gamma distribution (continuous) --Parameters--alpha  beta     5    20 \u003c/code\u003e\u003c/pre\u003e\u003cp\u003eBy the way, this feature – being able to inspect other distribution properties even when they are not specified – is great for learning about probability.That’s because you can see the many ways distributions can be represented, not just by the usual density or probability mass functions seen in textbooks.\u003c/p\u003e\u003cp\u003eThis feature also allows for extensibility of the probaverse.For example, the probaverse’s distplyr package creates mixture distributions, which do not have an explicit formula for the quantile function.However, this is not problematic – the distribution can still be defined, and distionary will figure out what the quantiles are.\u003c/p\u003e\u003ch2 id=\"whats-to-come\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#whats-to-come\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat’s to come?\u003c/h2\u003e\u003cp\u003eCurrently, the distionary package provides key functionality to define and evaluate distribution objects. Future goals include:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eBroader coverage.\u003c/strong\u003e Extending beyond univariate continuous distributions so mixed discrete/continuous and multivariate use cases feel first-class.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eRisk-native metrics.\u003c/strong\u003e Making cost functions, tail expectations, and other decision metrics evaluate more naturally.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eWorkflow ergonomics.\u003c/strong\u003e Relaxing the requirement to supply density/CDF pairs and adding verbs that streamline common \u003ccode\u003emutate\u003c/code\u003e-\u003ccode\u003emap\u003c/code\u003e-\u003ccode\u003eunnest\u003c/code\u003e patterns.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIf this excites you, join the conversation by opening an issue or \u003ca href=\"https://distionary.probaverse.com/contributing\"\u003econtributing\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eSpecial thanks to the rOpenSci reviewers \u003ca href=\"https://github.com/katrinabrock\"\u003eKatrina Brock\u003c/a\u003e and \u003ca href=\"https://github.com/dutangc\"\u003eChristophe Dutang\u003c/a\u003e for \u003ca href=\"https://github.com/ropensci/software-review/issues/688\"\u003einsightful comments\u003c/a\u003e that improved this package.Also thanks to \u003ca href=\"https://bgcengineering.ca/\"\u003eBGC Engineering Inc.\u003c/a\u003e, the \u003ca href=\"https://r-consortium.org/all-projects/callforproposals.html\"\u003eR Consortium\u003c/a\u003e, and the \u003ca href=\"https://technology.esa.int/page/funding-your-ideas\"\u003eEuropean Space Agency\u003c/a\u003e together with the \u003ca href=\"https://www.polimi.it/\"\u003ePolitecnico di Milano\u003c/a\u003e for supporting this project.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eMeaning I’m referring directly to the column ‘DAX’ without \u003ccode\u003estocks$\u003c/code\u003e as in our above examples.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2026/01/20/introducing-distionary/","date_published":"2026-01-20T00:00:00+00:00","date_modified":"2026-01-20T16:21:06+01:00"},{"id":"https://doi.org/10.59350/1mmc4-bqp35","title":"Open call for the rOpenSci Champions Program 2026!","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["champions program"],"content_html":"\u003cp\u003eWe are pleased to announce the opening of a new call for applications for the \u003cstrong\u003erOpenSci Champions Program in Spanish\u003c/strong\u003e, which will begin in 2026. We will be accepting applications beginning in \u003cstrong\u003eJanuary 12, 2026\u003c/strong\u003e and until \u003cstrong\u003eFebruary 20, 2026\u003c/strong\u003e for both the roles of \u003cstrong\u003eChampion\u003c/strong\u003e as well as \u003cstrong\u003eMentor\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eAs in the previous cohort, the 2026 program will be developed \u003cstrong\u003eentirely in Spanish\u003c/strong\u003e and will have a \u003cstrong\u003eregional focus on Latin America\u003c/strong\u003e with the objective of further strengthening the research and open science software in this region.\u003c/p\u003e\u003ch2 id=\"key-dates-of-the-2026-call\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#key-dates-of-the-2026-call\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eKey dates of the 2026 call\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eOpening of the call:\u003c/strong\u003e Monday, January 12, 2026\u003c/li\u003e\u003cli\u003e\u003ca href=\"/es/commcalls/champions-latino-2026/\"\u003e\u003cstrong\u003eCommunity Call: Research Software in Latin America\u003c/strong\u003e Wednesday, January 21, 2026. In Spanish\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/events/clinica-champions-2026/\"\u003e\u003cstrong\u003eApplication Clinic:\u003c/strong\u003e Thursday, February 5, 2026\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eClosing date:\u003c/strong\u003e Friday, February 20, 2026\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe \u003cem\u003eCommunity Call\u003c/em\u003e on January 21 will feature the participation of \u003cstrong\u003eChampions and Mentors from previous cohorts.\u003c/strong\u003e They will share their experiences and answer questions about the program, and we invite you to join us! See the \u003ca href=\"/es/commcalls/champions-latino-2025/\"\u003erecording of last year\u0026rsquo;s event\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eDuring February we will hold one \u003cstrong\u003eapplication clinic\u003c/strong\u003e. It is an open space where you will be able to receive help to complete the application form, resolve doubts and receive direct guidance from the program team.\u003c/p\u003e\u003ch2 id=\"what-is-the-champions-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-the-champions-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is the Champions Program?\u003c/h2\u003e\u003cp\u003eThis program seeks to identify, support and recognize people who are already leading, or who want to take a step further, in building open science and sustainable research software communities.\u003c/p\u003e\u003cp\u003eThroughout \u003cstrong\u003e12 months\u003c/strong\u003e the selected individuals will participate in:\u003c/p\u003e\u003cul\u003e\u003cli\u003eAn initial cohort-based training of 13 2-hour workshops.\u003c/li\u003e\u003cli\u003eThe development of a research software project: creation of a new R package, submission of an existing R package to rOpenSci peer review, or as part of a team of reviewers of other R packages.\u003c/li\u003e\u003cli\u003e1-on-1 mentoring and cohort events.\u003c/li\u003e\u003cli\u003eLeading community building activities, outreach and communications, and exchange of experiences and strengthening of regional networks.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe program also offers a \u003cstrong\u003estipend\u003c/strong\u003e to recognize the time and work of participants for those who complete the program and a certificate of participation.\u003c/p\u003e\u003ch2 id=\"who-is-it-for\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#who-is-it-for\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWho is it for?\u003c/h2\u003e\u003ch3 id=\"champions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#champions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChampions\u003c/h3\u003e\u003cp\u003ePotential Champions are people who:\u003c/p\u003e\u003cul\u003e\u003cli\u003eAre from or live and work in \u003cstrong\u003eLatin America\u003c/strong\u003e;\u003c/li\u003e\u003cli\u003eUse R and have previous experience in software development, reproducible analysis or open science;\u003c/li\u003e\u003cli\u003eAre interested in developing an open research software project and strengthening their local or regional communities;\u003c/li\u003e\u003cli\u003eAre able to communicate effectively in Spanish (oral and written);\u003c/li\u003e\u003cli\u003eAccept our \u003ca href=\"/code-of-conduct/\"\u003eCode of Conduct\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eCommit to participating in the program activities organized for Champions during these 12 months.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"mentors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mentors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMentors\u003c/h3\u003e\u003cp\u003ePotential Mentors are people who:\u003c/p\u003e\u003cul\u003e\u003cli\u003eHave experience developing, maintaining or contributing to R packages (ideally within the rOpenSci ecosystem, although this is not required);\u003c/li\u003e\u003cli\u003eHave participated in software peer review processes;\u003c/li\u003e\u003cli\u003eHave relevant mentoring experience;\u003c/li\u003e\u003cli\u003eHave an interest in mentoring others, sharing experiences and actively contributing to the growth of the program;\u003c/li\u003e\u003cli\u003eAre able to communicate effectively in Spanish (oral and written);\u003c/li\u003e\u003cli\u003eAccept our \u003ca href=\"/code-of-conduct/\"\u003eCode of Conduct\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eCommit to participating in the program activities organized for mentors during these 12 months.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"why-participate\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-participate\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy participate?\u003c/h2\u003e\u003cp\u003eBeing part of the rOpenSci Champions Program means:\u003c/p\u003e\u003cul\u003e\u003cli\u003eHaving the opportunity to develop or strengthen a research software project with expert accompaniment.\u003c/li\u003e\u003cli\u003eBeing part of a regional network of people committed to open science and open software.\u003c/li\u003e\u003cli\u003eAcquiring technical tools and community leadership skills.\u003c/li\u003e\u003cli\u003eReceiving support to share your work and experiences with your community or institution and at regional and international events.\u003c/li\u003e\u003cli\u003eActively contributing to a more diverse, sustainable and inclusive open software ecosystem.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"how-to-apply\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-apply\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to apply?\u003c/h2\u003e\u003cp\u003eApplications will be made through online forms:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://airtable.com/appF6OXmxkk8VmR8a/shrlvgcNz1R4CoaQN\"\u003eComplete this form to apply to become a Champion\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://airtable.com/appF6OXmxkk8VmR8a/shrZnWDRKxXUEmLRM\"\u003eComplete this form to apply to become a Mentor\u003c/a\u003e,\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThese forms are also available on the \u003ca href=\"https://champions-program.ropensci.org\"\u003eprogram website\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe forms must be completed \u003cstrong\u003ein Spanish\u003c/strong\u003e. On the program\u0026rsquo;s website you will also find more details regarding the requirements for \u003ca href=\"https://champions-program.ropensci.org/champions/#informaci%C3%B3n-requerida-en-el-formulario\"\u003eChampions\u003c/a\u003e and \u003ca href=\"https://champions-program.ropensci.org/mentors/#informaci%C3%B3n-requerida-en-el-formulario\"\u003eMentors\u003c/a\u003e, as well as \u003ca href=\"https://champions-program.ropensci.org/resources/faq.html\"\u003eanswers to frequently asked questions\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"learn-more-about-our-work\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#learn-more-about-our-work\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLearn more about our work\u003c/h2\u003e\u003cp\u003eOn our \u003ca href=\"https://champions-program.ropensci.org/\"\u003eChampion\u0026rsquo;s Program website\u003c/a\u003e you can find the detailed schedule of activities and the complete information of the program, as well as \u003ca href=\"https://champions-program.ropensci.org/galeria/#proyectos\"\u003eprojects carried out by previous cohorts\u003c/a\u003e and the other types of activities carried out by the participants.\u003c/p\u003e\u003cp\u003eIf you have any questions, we invite you to participate in the \u003cem\u003eCommunity Call\u003c/em\u003e in January, join us in the \u003cem\u003eapplication clinic\u003c/em\u003e in February, or contact our \u003ca href=\"mailto:yabellini@gmail.com\"\u003eCommunity Manager\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe look forward to your applications with great enthusiasm! We want to continue building community in Latin America together with you.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/01/12/programchamps2026/","date_published":"2026-01-12T00:00:00+00:00","date_modified":"2026-01-12T12:51:34-03:00"},{"id":"https://doi.org/10.59350/medx5-c3v86","title":"rOpenSci Code of Conduct Annual Review","language":"en","authors":[{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Natalia Morandeira","url":"https://ropensci.org/author/natalia-morandeira/","avatar":"https://github.com/nmorandeira.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["code of conduct","governance","community"],"content_html":"\u003cp\u003erOpenSci’s activities and spaces are supported by a \u003ca href=\"/code-of-conduct/\"\u003eCode of Conduct\u003c/a\u003ethat applies to all people participating in the rOpenSci community,including rOpenSci staff and leadership.It applies to all modes of interaction including GitHub project repositories,the rOpenSci discussion forum, Slack, Community Calls, Co-working and social sessions, training and mentoring sessions,and in person at rOpenSci-hosted events, including affiliated social gatherings.Our Code of Conduct is developed and enforced by a committee including rOpenSci staff and an independent community member.\u003c/p\u003e\u003cp\u003eHere we report our annual review of rOpenSci\u0026rsquo;s Code of Conduct,reporting process, and internal guidelines for handling reports and enforcement.\u003c/p\u003e\u003ch2 id=\"updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdates\u003c/h2\u003e\u003col\u003e\u003cli\u003e\u003cp\u003eNo changes of Committee members for 2026.The committee members are \u003ca href=\"/author/natalia-morandeira/\"\u003eNatalia Morandeira\u003c/a\u003e (independent member),\u003ca href=\"/author/mark-padgham\"\u003eMark Padgham\u003c/a\u003e (rOpenSci Software Research Scientist) and\u003ca href=\"/author/yanina-bellini-saibene\"\u003eYanina Bellini Saibene\u003c/a\u003e (rOpenSci Community Manager).We are responsible for receiving, investigating, adjudicating, enforcing,and responding to all reports of potential violations of our Code.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eNo changes have been made to the text of the Code in English, Spanish or Portuguese.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eBecause the text has remained unchanged, the version number is kept at 2.5, dated January 30, 2024.\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003ch2 id=\"committee-members-activities\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#committee-members-activities\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommittee Members Activities\u003c/h2\u003e\u003cp\u003eAn important aspect of our work as Committee members is to make sure that the processes we follow are transparent, consistent, and fair. To support this work we’ve developed a set of templates that guide us through different stages of incident response and reporting. We shared openly these templates and explain them in detail in the \u003ca href=\"https://ropensci.org/blog/2025/09/30/coc-templates/\"\u003eblog post \u0026ldquo;rOpenSci Code of Conduct Committee Templates\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eYanina Bellini Saibene attended the \u003cem\u003eBoF \u0026ldquo;Community safety and wellbeing: Can we do more than “good enough”?\u003c/em\u003e at the Open Science CZI meeting to discuss Code of Conduct best practices with other organizations in the Open Science movement.\u003c/p\u003e\u003ch2 id=\"contact-information\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#contact-information\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eContact Information\u003c/h2\u003e\u003cp\u003eWe welcome your feedback by \u003ca href=\"mailto:conduct@ropensci.org\"\u003eemail\u003c/a\u003e to conduct at ropensci.org,and we thank you for continuing to work with us to ensure that rOpenSci remains a safe, enjoyable, friendly and enriching environment for everyone who participates.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/01/07/conduct2025/","date_published":"2026-01-07T00:00:00+00:00","date_modified":"2026-01-07T08:35:53-03:00"},{"id":"https://doi.org/10.59350/men1g-apf59","title":"rOpenSci 2025 Code of Conduct Transparency Report","language":"en","authors":[{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Natalia Morandeira","url":"https://ropensci.org/author/natalia-morandeira/","avatar":"https://github.com/nmorandeira.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","code of conduct","governance"],"content_html":"\u003ch2 id=\"maintaining-community-trust-and-safety\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#maintaining-community-trust-and-safety\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMaintaining Community Trust and Safety\u003c/h2\u003e\u003cp\u003eThe rOpenSci community is supported by our \u003ca href=\"/code-of-conduct\"\u003eCode of Conduct\u003c/a\u003ewith a clear description of unacceptable behaviors,instructions on how to make a report,and information on how reports are handled.\u003c/p\u003e\u003cp\u003eWe, the Code of Conduct Committee,are responsible for receiving, investigating, deciding,enforcing and reporting on all reports of potential violations of our Code.We are committed to transparency with our community while upholding the privacyof people who experience or report incidents.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eIn 2025, we didn\u0026rsquo;t received any Code of Conduct incident report.\u003c/strong\u003e\u003c/p\u003e\u003ch2 id=\"community-feedback-and-contact-information\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-feedback-and-contact-information\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity Feedback and Contact Information\u003c/h2\u003e\u003cp\u003eThe Code of Conduct Committee continues our commitment to maintaining awelcoming space where all members of the rOpenSci community can participate fully and confidently.\u003c/p\u003e\u003cp\u003eThis code of conduct belongs to the community.We welcome your feedback at any time by emailing \u003ca href=\"mailto:conduct@ropensci.org\"\u003econduct@ropensci.org\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/01/06/transparencycoc2025/","date_published":"2026-01-06T00:00:00+00:00","date_modified":"2026-01-06T08:58:35-03:00"},{"id":"https://doi.org/","title":"Testing the R-universe build workflow from your own GitHub repository","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","infrastructure"],"content_html":"\u003cp\u003eWe refactored the R-universe CI workflows to make it possible to run the exact same workflow from your own GitHub repository. This allows you to test or debug the build and check process on your R package, exactly as it will happen on R-universe, but without actually deploying to \u003ca href=\"https://r-universe.dev\"\u003ehttps://r-universe.dev\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe instructions on \u003ca href=\"https://github.com/r-universe-org/workflows\"\u003er-universe-org/workflows\u003c/a\u003e explain how it works: simply create a file \u003ccode\u003e/.github/workflows/r-universe-test.yml\u003c/code\u003e in your R package git repo with the following config:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eTest R-universe\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003epush\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003epull_request\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003ejobs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ebuild\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eR-universe testing\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003euses\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003er-universe-org/workflows/.github/workflows/build.yml@v3\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ewith\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003euniverse\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e${{ github.repository_owner }}\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThat is everything. The workflow will use the fully automated R-universe setup to build and check the package on a range of R versions on Linux, Windows, and MacOS configurations very similar to CRAN.\u003c/p\u003e\u003cp\u003eIt is possible to use this workflow in your R package for pushes and/or pull requests alongside those from \u003ca href=\"https://github.com/r-lib/actions\"\u003er-lib/actions\u003c/a\u003e. Both will check your R package, but note that the purpose is very different: workflows from \u003ca href=\"https://github.com/r-lib/actions\"\u003er-lib/actions\u003c/a\u003e are highly configurable and can test R packages using countless options and environments. The R-universe workflow on the other hand is, just like CRAN, not customizable at all: it uses the exact setup and process as it happens on R-universe, nothing else.\u003c/p\u003e\u003cp\u003eThe ability to test-run the build workflow has been recurring feature request, and I hope that it will indeed help package maintainers with debugging problems. I also hope the refactoring might make it a little bit easier to understand the R-universe build process, and enable the community to hack on the workflows and actions to contribute improvements.\u003c/p\u003e","url":"https://ropensci.org/blog/2026/01/03/r-universe-workflows/","date_published":"2026-01-03T00:00:00+00:00","date_modified":"2026-01-03T19:34:18+01:00"},{"id":"https://doi.org/10.59350/vx1mc-ps208","title":"rOpenSci News Digest, December 2025","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2025/12/18/news-december-2025\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"ropensci-at-latinr\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-at-latinr\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci at LatinR\u003c/h3\u003e\u003cp\u003eWe proudly continued supporting LatinR as a community partner in 2025. Here we share a list of resources and recordings for the \u003ca href=\"/training/\"\u003etutorials\u003c/a\u003e and \u003ca href=\"/talks/\"\u003etalks\u003c/a\u003e delivered by our staff and community memebers at LatinR. Discover more on the \u003ca href=\"https://www.youtube.com/@LatinR\"\u003eLatinR YouTube channel\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u0026ldquo;R-multiverse\u0026rdquo; by Maëlle Salmon, Will Landau, Yanina Bellini Saibene, \u003ca href=\"https://www.youtube.com/watch?v=Nb6owmY5Iec\"\u003erecording\u003c/a\u003e, \u003ca href=\"https://latinr25-multiverse.netlify.app/#/\"\u003eslides\u003c/a\u003e;\u003c/li\u003e\u003cli\u003e\u0026ldquo;R-universe Q\u0026amp;A\u0026rdquo; by Jeroen Ooms, Maëlle Salmon, \u003ca href=\"https://www.youtube.com/watch?v=nWUwQM_5Hxo\"\u003erecording\u003c/a\u003e;\u003c/li\u003e\u003cli\u003e\u0026ldquo;Mejor código, sin esfuerzos, sin siquiera IA\u0026rdquo; by Maëlle Salmon, Hugo Gruson, Etienne Bacher, \u003ca href=\"https://www.youtube.com/watch?v=sJT_omvdtZQ\"\u003erecording\u003c/a\u003e, \u003ca href=\"https://masalmon.eu/talks/2025-12-04-latinr-mejor-codigo/\"\u003eslides\u003c/a\u003e;\u003c/li\u003e\u003cli\u003e\u0026ldquo;Estrategias de divulgación para proyectos de software e infraestructuras abiertas\u0026rdquo; by Alejandra Bellini, Yanina Bellini Saibene, \u003ca href=\"https://www.youtube.com/watch?v=3QeN5S4OKbQ\"\u003erecording\u003c/a\u003e;\u003c/li\u003e\u003cli\u003e\u0026ldquo;Comunidades de líderes de código abierto\u0026rdquo; by Yanina Bellini Saibene, Noam Ross, \u003ca href=\"https://www.youtube.com/watch?v=rAcO2jE_RyM\"\u003erecording\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"ropensci-at-uros\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-at-uros\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci at uRos\u003c/h3\u003e\u003cp\u003eFind Maëlle Salmon\u0026rsquo;s slidedecks from the \u003ca href=\"https://r-project.ro/conference2025.html\"\u003euRos (Use of R in Official Statistics) 2025\u003c/a\u003e conference:\u003c/p\u003e\u003cul\u003e\u003cli\u003etutorial \u003ca href=\"https://uros-git.netlify.app/#/\"\u003e\u0026ldquo;Painlessly Improve Your Git History\u0026rdquo;\u003c/a\u003e;\u003c/li\u003e\u003cli\u003ekeynote talk \u003ca href=\"https://maelle-uros.netlify.app/#/\"\u003e\u0026ldquo;R packages, good vibes only\u0026rdquo;\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"yani-on-the-give-me-5-podcast\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#yani-on-the-give-me-5-podcast\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eYani on the Give Me 5 Podcast\u003c/h3\u003e\u003cp\u003erOpenSci\u0026rsquo;s community manager, Yani (Yanina Bellini Saibene), was recently interviewed on NumFOCUS\u0026rsquo;s new podcast, Give Me 5. You can watch the \u003ca href=\"https://youtu.be/SqafLv6CYPI?si=ck9SP5maloKiRl2L\"\u003e5-minute episode\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eYani\u0026rsquo;s central message: people are the heart of open source. And when we invest in those people\u0026mdash;maintainers, contributors, educators, and organizers\u0026mdash;we strengthen the global scientific community.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday January 13th, 9:00 Americas Pacific (17:00 UTC), \u003ca href=\"/events/coworking-2026-01/\"\u003e\u0026ldquo;Let it go!\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e.\u003cul\u003e\u003cli\u003eSpend some time reviewing the forums, Slack workspaces, Newsletters, RSS feeds (etc. etc.) you\u0026rsquo;re subscribed to;\u003c/li\u003e\u003cli\u003eUnsubscribe to all you no longer need (Let it go!);\u003c/li\u003e\u003cli\u003eMeet co-host, Yanina Bellini Saibene, and discuss strategies for this New Year decluttering of your digital (or perhaps not-so-digital) life.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday February 2nd, 9:00 Australia Western (01:00 UTC), \u003ca href=\"/events/coworking-2026-02/\"\u003e\u0026ldquo;Share your Positron setup!\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/noam-ross/\"\u003eNoam Ross\u003c/a\u003e.\u003cul\u003e\u003cli\u003eSetup Positron and explore extensions and custom settings;\u003c/li\u003e\u003cli\u003eMeet community host, Noam Ross, share how you have set up Positron for your workflow and learn from others.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/mantis\"\u003emantis\u003c/a\u003e, developed by T. Phuong Quan: Generate interactive html reports that enable quick visual review of multiple related time series stored in a data frame. For static datasets, this can help to identify any temporal artefacts that may affect the validity of subsequent analyses. For live data feeds, regularly scheduled reports can help to pro-actively identify data feed problems or unexpected trends that may require action. The reports are self-contained and shareable without a web server. It is available on \u003ca href=\"https://CRAN.R-project.org/package=mantis\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/710\"\u003ereviewed\u003c/a\u003e by Rodrigo Pires and Margaret Siple.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following twelve packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/distionary\" title=\"Create and Evaluate Probability Distributions\"\u003edistionary\u003c/a\u003e (\u003ca href=\"https://github.com/probaverse/distionary/releases/tag/v0.1.0\"\u003e\u003ccode\u003ev0.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pkgstats\" title=\"Metrics of R Packages\"\u003epkgstats\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/pkgstats/releases/tag/v0.2.1\"\u003e\u003ccode\u003ev0.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/aRxiv\" title=\"Interface to the arXiv API\"\u003eaRxiv\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/aRxiv/releases/tag/0.18\"\u003e\u003ccode\u003e0.18\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/comtradr\" title=\"Interface with the United Nations Comtrade API\"\u003ecomtradr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/comtradr/releases/tag/v1.0.5\"\u003e\u003ccode\u003ev1.0.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/DataPackageR\" title=\"Construct Reproducible Analytic Data Sets as R Packages\"\u003eDataPackageR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/DataPackageR/releases/tag/v0.16.2\"\u003e\u003ccode\u003ev0.16.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dwctaxon\" title=\"Edit and Validate Darwin Core Taxon Data\"\u003edwctaxon\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dwctaxon/releases/tag/v2.0.3.9001\"\u003e\u003ccode\u003ev2.0.3.9001\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/git2rdata\" title=\"Store and Retrieve Data.frames in a Git Repository\"\u003egit2rdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/git2rdata/releases/tag/v0.5.1\"\u003e\u003ccode\u003ev0.5.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gutenbergr\" title=\"Download and Process Public Domain Works from Project Gutenberg\"\u003egutenbergr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gutenbergr/releases/tag/v0.3.1\"\u003e\u003ccode\u003ev0.3.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/hdcuremodels\" title=\"High-Dimensional Cure Models\"\u003ehdcuremodels\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/hdcuremodels/releases/tag/hdcuremodels_0.0.6\"\u003e\u003ccode\u003ehdcuremodels_0.0.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.14.0\"\u003e\u003ccode\u003ev0.14.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spatsoc\" title=\"Group Animal Relocation Data by Spatial and Temporal Relationship\"\u003espatsoc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spatsoc/releases/tag/v0.2.12\"\u003e\u003ccode\u003ev0.2.12\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/vcr\" title=\"Record HTTP Calls to Disk\"\u003evcr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/vcr/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are fourteen recently closed and active submissions and 3 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/710\"\u003emantis\u003c/a\u003e, Multiple Time Series Scanner. Submitted by \u003ca href=\"https://github.com/phuongquan\"\u003ePhuong Quan\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%225/awaiting-reviewer(s)-response%22\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/667\"\u003eread.abares\u003c/a\u003e, Provides simple downloading, parsing and importing of Australian Bureau of Agricultural and Resource Economics and Sciences (ABARES) data sources. Submitted by \u003ca href=\"https://adamhsparks.netlify.app/\"\u003eAdam H. Sparks\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/724\"\u003ecowfootR\u003c/a\u003e, Tools to Estimate the Carbon Footprint of Dairy Farms. Submitted by \u003ca href=\"https://github.com/juanmarcosmoreno-arch\"\u003eJuan Moreno\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/714\"\u003eopenFDA\u003c/a\u003e, openFDA API. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/730\"\u003eernest\u003c/a\u003e, A Toolkit for Nested Sampling. Submitted by \u003ca href=\"https://github.com/kylesnap\"\u003eKyle Dewsnap\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/729\"\u003esuwo\u003c/a\u003e, Access Nature Media Repositories Through R. Submitted by \u003ca href=\"https://marce10.github.io/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/718\"\u003ercrisp\u003c/a\u003e, Automate the Delineation of Urban River Spaces. Submitted by \u003ca href=\"https://github.com/cforgaci\"\u003eClaudiu Forgaci\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/709\"\u003ereviser\u003c/a\u003e, Tools for Studying Revision Properties in Real-Time Time Series Vintages. Submitted by \u003ca href=\"https://marcburri.github.io/\"\u003eMarc Burri\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/728\"\u003eAthlytics\u003c/a\u003e, Academic R Package for Sports Physiology Analysis from Local Strava Data. Submitted by \u003ca href=\"https://github.com/HzaCode\"\u003eAng\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/717\"\u003ecoevolve\u003c/a\u003e, Fit Bayesian Generalized Dynamic Phylogenetic Models using Stan. Submitted by \u003ca href=\"https://scottclaessens.github.io/\"\u003eScott Claessens\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/704\"\u003epriorsense\u003c/a\u003e, Prior Diagnostics and Sensitivity Analysis. Submitted by \u003ca href=\"https://github.com/n-kall\"\u003eNoa Kallioinen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/645\"\u003ecapybara\u003c/a\u003e, Fast and Memory Efficient Fitting of Linear Models With High-Dimensional Fixed Effects. Submitted by \u003ca href=\"https://pacha.dev\"\u003eMauricio \u0026ldquo;Pachá\u0026rdquo; Vargas Sepúlveda\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/12/11/package-usage\"\u003eHow to Assess Usage of your Package\u003c/a\u003e by Maëlle Salmon. Ways to evaluate use of your package, and their downsides. This post was featured in the \u003ca href=\"https://serve.podhome.fm/episodepage/r-weekly-highlights/216\"\u003eR Weekly Highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/12/15/better-code\"\u003eBetter Code, Without Any Effort, Without Even AI\u003c/a\u003e by Maëlle Salmon. Useful local, free, deterministic tools to improve your code.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/12/17/beyond-github\"\u003eCode Hosting Options Beyond GitHub\u003c/a\u003e by Mark Padgham and Steffi LaZerte. How to manage and mirror code repositories across different platforms.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/gutenbergr/\"\u003egutenbergr\u003c/a\u003e, download and process public domain works from the Project Gutenberg collection. \u003ca href=\"https://github.com/ropensci/gutenbergr/issues/95\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/mregions2/\"\u003emregions2\u003c/a\u003e, streamlined interface to access data from Marine Regions in R for researchers, marine scientists, and geospatial analysts seeking marine geographical information. \u003ca href=\"https://github.com/ropensci/mregions2/issues/30\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/qualtRics/\"\u003equaltRics\u003c/a\u003e, download Qualtrics survey data. \u003ca href=\"https://github.com/ropensci/qualtRics/issues/383\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/photosearcher\"\u003ephotosearcher\u003c/a\u003e, searches Flickr for photographs and metadata. \u003ca href=\"https://github.com/ropensci/photosearcher/issues/22\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"an-advent-calendar-about-package-development\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#an-advent-calendar-about-package-development\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAn Advent Calendar about Package Development\u003c/h3\u003e\u003cp\u003e\u003ca href=\"https://drmowinckels.io/\"\u003eAthanasia Monika Mowinckel\u003c/a\u003e has been curating an Advent Calendar about R Package Development! Follow her on \u003ca href=\"https://bsky.app/profile/drmowinckels.io/post/3m6tnwu2bfv27\"\u003eBluesky\u003c/a\u003e, \u003ca href=\"https://fosstodon.org/@Drmowinckels/115638077367401410\"\u003eMastodon\u003c/a\u003e, \u003ca href=\"https://www.linkedin.com/in/drmowinckels/\"\u003eLinkedIn\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"a-new-operator-in-base-r-notin\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-new-operator-in-base-r-notin\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA new operator in base R: notin\u003c/h3\u003e\u003cp\u003eComing soon, a \u003ca href=\"https://developer.r-project.org/blosxom.cgi/R-devel/NEWS/2025/12/05\"\u003enew operator\u003c/a\u003e!\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u0026lsquo;x %notin% table\u0026rsquo; newly in \u0026lsquo;base\u0026rsquo; is an idiom for \u0026lsquo;!(x %in% table)\u0026rsquo; and provided almost entirely for convenience and code readability, from an R-devel suggestion, after many years of private definitions mostly hidden in packages, including in R\u0026rsquo;s \u0026rsquo;tools\u0026rsquo; package.\u003c/p\u003e\u003c/blockquote\u003e\u003ch3 id=\"new-version-of-the-jarl-cli\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-version-of-the-jarl-cli\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew version of the jarl CLI\u003c/h3\u003e\u003cp\u003eEtienne Bacher released a new version of jarl, the CLI for linting R code. See the \u003ca href=\"https://jarl.etiennebacher.com/changelog#section\"\u003echangelog\u003c/a\u003e, including rules specific to testthat such as \u003ca href=\"https://jarl.etiennebacher.com/rules/expect_length\"\u003e\u003ccode\u003eexpect_length\u003c/code\u003e\u003c/a\u003e, to help you keep up with new testthat expectations.\u003c/p\u003e\u003ch3 id=\"a-safer-gitignore-thanks-to-usethisgit_vaccinate\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-safer-gitignore-thanks-to-usethisgit_vaccinate\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA safer \u003ccode\u003e.gitignore\u003c/code\u003e thanks to \u003ccode\u003eusethis::git_vaccinate()\u003c/code\u003e\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://usethis.r-lib.org/reference/git_vaccinate.html\"\u003e\u003ccode\u003eusethis::git_vaccinate()\u003c/code\u003e\u003c/a\u003e will vaccinate your global \u003ccode\u003e.gitignore\u003c/code\u003e file, making sure you for instance no longer commit those pesky \u003ccode\u003e.DS_Store\u003c/code\u003e files, or your \u003ccode\u003e.Rhistory\u003c/code\u003e. Tell your friends about it!\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/12/18/news-december-2025/","date_published":"2025-12-18T00:00:00+00:00","date_modified":"2025-12-18T09:54:04+01:00"},{"id":"https://doi.org/10.59350/bhr5x-d3429","title":"Code Hosting Options Beyond GitHub","language":"en","authors":[{"name":"Adam Sparks","url":"https://ropensci.org/author/adam-sparks/","avatar":"https://github.com/adamhsparks.png","_role":["editor"]},{"name":"Doug Kelkhoff","url":"https://orcid.org/0009-0003-7845-4061","avatar":"https://ropensci.org/img/team/doug-kelkhoff.jpg","_role":["editor"]},{"name":"Eric Scott","url":"https://orcid.org/0000-0002-7430-7879","avatar":"https://github.com/Aariq.png","_role":["editor"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["editor"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]}],"tags":["tech notes","github","maintenance","help","infrastructure","git"],"content_html":"\u003cp\u003erOpenSci makes heavy use of GitHub for our projects and services, including \u003ca href=\"https://github.com/ropensci/software-review/issues?q=sort%3Aupdated-desc%20is%3Aissue%20state%3Aclosed\"\u003esoftware peer-review\u003c/a\u003e.GitHub is by far the most widely used git or code-hosting platform, and the combination of its popularity and freemium services have made it central to open-source and R communities.However, for a variety of reasons, some of our community members or potential members may prefer or need to use other platforms.These reasons may include concerns about being forced into \u003ca href=\"https://www.techspot.com/news/109040-microsoft-ai-push-tightens-grip-github-after-ceo.html\"\u003eMicrosoft\u0026rsquo;s AI division\u003c/a\u003e, a desire to support platforms with \u003ca href=\"https://ziglang.org/news/migrating-from-github-to-codeberg/\"\u003edifferent ownership or business models\u003c/a\u003e, which are based in other countries, or a general desire to support alternatives to avoid the risk of hegemony.\u003c/p\u003e\u003cp\u003eGitHub remains our primary code platform and we have no immediate plans to migrate, but we are keenly aware of the trade-offs our community is considering and that they vary from member to member.We want to provide opportunities to help users not using  GitHub to participate in rOpenSci activities,  and we also want to continually explore alternative platforms and models for the future.\u003c/p\u003e\u003cp\u003eIn this post, we describe one approach which allows rOpenSci members to use alternative platforms while still staying connected to rOpenSci operations on GitHub.This is most applicable to current or future developers of rOpenSci peer-reviewed packages, but we hope also serves as a useful guide for those testing approaches for managing code across multiple platforms more generally.\u003c/p\u003e\u003cp\u003eThis approach involves \u0026ldquo;mirroring\u0026rdquo; repositories from GitHub to another platform.We\u0026rsquo;ll start by exploring what this means and will end with some guidance on setting up multiple mirrors and some words of warning.\u003c/p\u003e\u003ch2 id=\"some-background\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#some-background\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSome background\u003c/h2\u003e\u003ch3 id=\"code-mirroring\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#code-mirroring\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCode Mirroring\u003c/h3\u003e\u003cp\u003eDifferent remote instances of a Git repository are often referred to as \u0026ldquo;mirrors\u0026rdquo;, which are nothing more than duplicate copies.Every remote instance is a mirror.We will generally presume here that a repository has a primary remote home (such as GitHub), and some number of other mirrors.The primary remote home is also a \u0026ldquo;mirror\u0026rdquo;, but it is generally useful to treat that primary home differently to other, secondary mirror locations, as explained below.\u003c/p\u003e\u003cp\u003eThe sole aim of this post is to explain how you can set up additional, secondary mirror locations beyond GitHub alone.You can still retain GitHub as your primary mirror, or migrate your primary mirror elsewhere if you like.However you structure your code mirroring, the use of multiple code hosting sites instead of a single platform decreases your dependence on that single platform.Should that platform become unusable or undesirable for you, you\u0026rsquo;ll already have the infrastructure in place to help your coding practices survive and thrive across multiple platforms.\u003c/p\u003e\u003ch3 id=\"mirroring-versus-migration\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mirroring-versus-migration\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMirroring versus Migration\u003c/h3\u003e\u003cp\u003eThe term \u0026ldquo;mirroring\u0026rdquo; is used here, and \u003ca href=\"https://git-scm.com/search/results?search=mirror\u0026amp;language=en\"\u003ethroughout the official git documentation\u003c/a\u003e, to imply a duplication of code, generally from local to remote locations.\u0026ldquo;Migration\u0026rdquo; implies moving code away from one location to a new location.Migration is neither necessary nor encouraged here, yet some sites nevertheless use this term, presumably as an implicit encouragement to do exactly that.Wherever \u0026ldquo;migration\u0026rdquo; is used below, please just think of a process of \u0026ldquo;mirroring\u0026rdquo; in which you code will always remain intact in the original location too.\u003c/p\u003e\u003ch3 id=\"updating-code-mirrors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#updating-code-mirrors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdating Code Mirrors\u003c/h3\u003e\u003cp\u003eCode mirrors are only ever updated through \u003ccode\u003egit push\u003c/code\u003e events from local versions, or from other \u003ccode\u003egit\u003c/code\u003e events on the primary remote mirror.Change events originating on the primary remote are generally incorporated in a local version via \u003ccode\u003egit pull\u003c/code\u003e, and then pushed out to all mirrored versions.A \u003ccode\u003egit pull\u003c/code\u003e command should only ever be applied to the primary remote version, and never to any alternative mirror versions.In this diagram, the large yellow arrow between the primary remote and local represents the only connection where both \u003ccode\u003epush\u003c/code\u003e and \u003ccode\u003epull\u003c/code\u003e events are allowed.All other arrows are \u003ccode\u003epush\u003c/code\u003e events only, and code is never \u003ccode\u003epull\u003c/code\u003eed from non-primary mirrors.\u003c/p\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2025/12/17/beyond-github/local-remote.png\"\t\t\talt=\"Git interaction directions between local and remote repositories.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eGit interaction directions between local and remote repositories.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"mirroring-to-codeberg-or-gitlab\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mirroring-to-codeberg-or-gitlab\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMirroring to Codeberg or GitLab\u003c/h2\u003e\u003cp\u003eLet\u0026rsquo;s get started! The first step is to set up a repository mirror on a non-GitHub platform.The easiest platforms to mirror to are currently \u003ca href=\"https://codeberg.org\"\u003eCodeberg\u003c/a\u003e and \u003ca href=\"https://gitlab.com\"\u003eGitLab\u003c/a\u003e, both of which have inbuilt options to mirror repositories directly from a large number of other platforms, including GitHub.Both of these platforms can also mirror additional information including issues, issue labels, pull requests, and releases.There are, however, some limitations, such as that GitHub\u0026rsquo;s auto-links within and between issues and pull requests may be lost.\u003c/p\u003e\u003cp\u003eCodeberg uses the term \u0026ldquo;migration\u0026rdquo; rather than mirroring.We use the same term throughout this section, but keep in mind that it really is just a \u0026ldquo;mirroring\u0026rdquo; process, and everything can and should remain intact in the original location from which you are \u0026ldquo;migrating\u0026rdquo;.To start the process, click the large \u0026ldquo;+\u0026rdquo; button on the top right of the main menu bar, and select \u0026ldquo;New migration\u0026rdquo;.\u003c/p\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2025/12/17/beyond-github/codeberg-new-migration.png\"\t\t\talt=\"Codeberg new repository migration button.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eCodeberg new repository migration button.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThat will then open up a grid of options from where you want to migrate your repository.\u003c/p\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2025/12/17/beyond-github/codeberg-migration-options.png\"\t\t\talt=\"Codeberg repository migration options shown as icons including Git, GitHub, GitLab, Forgejo, Gitea, Gogs, OneDev, and GitBucket\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eCodeberg repository migration options.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eTo migrate from GitHub, click the symbol to open a migration and fill in some details. You can also paste a GitHub token into \u0026ldquo;access token\u0026rdquo; (ensuring that it has at least read access to all aspects you want transferred), and migrate almost all other aspects, including issues, pull requests, and releases.Note that the migration process may take 10 minutes or more.\u003c/p\u003e\u003cp\u003eOn GitLab, the equivalent \u0026ldquo;+\u0026rdquo; button is on the top left, where \u0026ldquo;\u003cem\u003eNew project/repository\u003c/em\u003e\u0026rdquo; should be clicked.\u003c/p\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2025/12/17/beyond-github/gitlab-new.png\"\t\t\talt=\"GitLab new repository button.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eGitLab new repository button.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThat will lead to a series of options, in which \u0026ldquo;Import project\u0026rdquo; should be clicked.\u003c/p\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2025/12/17/beyond-github/gitlab-import.png\"\t\t\talt=\"GitLab repository import options: Create blank project; Create from template; Import project; Run CI/CD for external repository.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eGitLab repository import options.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThat then leads to a list of platforms from which you can import projects, including code, issues, pull requests, releases, and other information.GitLab transfers issues, pull requests, tags, and releases by default, with even more possible through provision of a GitHub access token.As with Codeberg, this transfer can take some time (10-20 minutes or more).\u003c/p\u003e\u003ch3 id=\"a-note-on-transferring-issues\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-note-on-transferring-issues\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA note on transferring issues\u003c/h3\u003e\u003cp\u003eIssues, pull requests, and other information on GitHub can be transferred both to Codeberg and GitLab, but only when a repository is first \u0026ldquo;migrated\u0026rdquo; (Codeberg) or \u0026ldquo;imported\u0026rdquo; (GitLab).\u003c/p\u003e\u003cp\u003eBoth Codeberg and GitLab enable all information on all issues and pull requests to be transferred across, although generally without hyperlinks other than those those linking within or between issues of the same repository.All other hyperlinks, including any to GitHub users, or to other repositories, will be lost.The transfer will be of information at the time the migration or import was initiated.From that time point on, any activity via issues or pull requests on any hosting platform will be specific to that platform only.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e\u003c/p\u003e\u003ch3 id=\"migrating-elsewhere\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#migrating-elsewhere\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMigrating elsewhere\u003c/h3\u003e\u003cp\u003eNo other platforms currently offer the one-click migration functionality of Codeberg or GitLab.To migrate in all other cases, you\u0026rsquo;ll need to:\u003c/p\u003e\u003col\u003e\u003cli\u003eCreate a new repository on the desired platform.\u003c/li\u003e\u003cli\u003eSet a \u003ccode\u003egit remote\u003c/code\u003e URL to the new destination.\u003c/li\u003e\u003cli\u003e\u003ccode\u003egit push\u003c/code\u003e to new remote.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eThe \u003ca href=\"https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes\"\u003egit remote web page\u003c/a\u003e provides more detail on working with remotes.\u003c/p\u003e\u003cp\u003eWe are also not currently aware of any platforms other than Codeberg and GitLab which offer inbuilt ability to import additional information on issues and pull requests, although other people have implemented things such as \u003ca href=\"https://github.com/marketplace/actions/sourcehut-issue-maker\"\u003eissue mirroring from GitHub to SourceHut\u003c/a\u003e.Other code hosting platforms like \u003ca href=\"https://sr.ht/\"\u003eSourceHut\u003c/a\u003e, or the distributed hosting system \u003ca href=\"https://tangled.org/\"\u003etangled\u003c/a\u003e, do not provide facilities for directly transferring or mirroring issues or pull requests (and in fact generally don\u0026rsquo;t even have such things, as they really are specific to the GitHub platform; \u003ca href=\"https://sr.ht\"\u003eSourceHut\u003c/a\u003e, for example, implements its own systems of \u0026ldquo;todos\u0026rdquo; and \u0026ldquo;patches\u0026rdquo;).\u003c/p\u003e\u003ch2 id=\"mirroring-managing-one-repository-across-multiple-platforms\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mirroring-managing-one-repository-across-multiple-platforms\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMirroring: Managing one repository across multiple platforms\u003c/h2\u003e\u003cp\u003eThe goal here is to move from having code hosted on a single platform to distributing code across multiple platforms through \u003cem\u003emirroring\u003c/em\u003e. This reduces the risk of dependence on a single platform creating a single point of failure. Mirroring also allows you to use alternative platforms to GitHub, while still benefiting from GitHub operations used by other organizations (like rOpenSci!). To achieve this goal, after setting up your mirrors you\u0026rsquo;ll next need to add the new remote locations to your local git configuration, and then synchronize those remotes.\u003c/p\u003e\u003cp\u003eAs depicted in the first figure above, all remotes other than your \u0026ldquo;primary\u0026rdquo; code home should be considered \u003ccode\u003epush\u003c/code\u003e mirrors only, and never \u003ccode\u003epull\u003c/code\u003e.In the rare case that conflicts from other sources arise, you may need to \u003ccode\u003egit push --force\u003c/code\u003e to \u003cem\u003eother\u003c/em\u003e remotes (or the \u003ca href=\"https://git-scm.com/docs/git-push#Documentation/git-push.txt---force-with-leaserefnameexpect\"\u003esafer version, \u003ccode\u003egit push --force-with-lease\u003c/code\u003e\u003c/a\u003e).You should never \u003ccode\u003egit push --force\u003c/code\u003e to the main branch of your primary source.\u003c/p\u003e\u003ch3 id=\"adding-multiple-remotes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#adding-multiple-remotes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAdding multiple remotes\u003c/h3\u003e\u003cp\u003eFor each additional remote source, you\u0026rsquo;ll need to add a remote URL with \u003ca href=\"https://git-scm.com/docs/git-remote\"\u003e\u003ccode\u003egit remote add\u003c/code\u003e\u003c/a\u003e.There are many ways to do this\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eThe pure Git way of managing multiple remote sources is to take advantage of \u003ccode\u003egit remote set-url --add\u003c/code\u003e to add additional URLs to a single remote identifier.\u003ca href=\"https://jeffkreeftmeijer.com/git-multiple-remotes/\"\u003eJeff Kreeftmeijer\u0026rsquo;s blog post\u003c/a\u003e details how to do that safely, to ensure only one primary remote is configured to \u003ccode\u003efetch\u003c/code\u003e, while allowing \u003ccode\u003epush\u003c/code\u003e events to all others.\u003c/p\u003e\u003cp\u003eAn alternative option would be to initially create an additional remote like \u003ccode\u003egit remote add other https://codeberg.org/ropensci/my-package\u003c/code\u003e.A single \u003ccode\u003egit remote\u003c/code\u003e can also be assigned to multiple URLs.The first URL must be set with \u003ccode\u003egit add\u003c/code\u003e (or \u003ccode\u003egit set-url\u003c/code\u003e) to add or update the URL of an existing remote.Additional URLs can then be added by using \u003ccode\u003egit set-url --add\u003c/code\u003e followed by the name of the remote.For example, \u003ccode\u003egit set-url --add other https://gitlab.com/ropensci/my-package\u003c/code\u003e would then specify both the Codeberg and GitLab URLs with the single \u003ccode\u003eother\u003c/code\u003e remote.Running \u003ccode\u003egit push other \u0026lt;branch\u0026gt;\u003c/code\u003e will then push that branch to both of these remote URLs.\u003c/p\u003e\u003ch3 id=\"synchronizing-multiple-remotes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#synchronizing-multiple-remotes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSynchronizing multiple remotes\u003c/h3\u003e\u003cp\u003eAs with the \u003ccode\u003egit remote\u003c/code\u003e setups described in the previous section, there are several ways to synchronize multiple remote instances of a single repository.The pure Git way is to use local commands like those described and linked to above, to \u003ccode\u003egit push\u003c/code\u003e changes to all remote locations.(This is the approach recommended by GitHub, but GitHub is an anomaly among code hosting platforms in offering no easy ability to interact with other platforms.)\u003c/p\u003e\u003cp\u003eHowever, both Codeberg and GitLab offer mirroring services to enable these sites to be used as a primary site, and to mirror all code changes directly across to alternative sites such as GitHub.Codeberg has a \u0026ldquo;Mirror settings\u0026rdquo; option near the top of the general repository \u0026ldquo;\u003cem\u003eSettings\u003c/em\u003e\u0026rdquo; panel, where you can easily specify an arbitrary number of mirror locations, and click \u0026ldquo;\u003cem\u003eSync when commits are pushed\u003c/em\u003e\u0026rdquo;.The GitLab settings are under \u0026ldquo;\u003cem\u003eSettings\u003c/em\u003e\u0026rdquo; → \u0026ldquo;\u003cem\u003eRepository\u003c/em\u003e\u0026rdquo;, where you should see options for \u0026ldquo;\u003cem\u003eMirroring repositories\u003c/em\u003e\u0026rdquo;.Depending on how you configure your other repositories, you may need to add additional information such as public SSH keys to authenticate \u003ccode\u003egit push\u003c/code\u003e events.Common options are described in \u003ca href=\"https://docs.gitlab.com/user/project/repository/mirror/\"\u003eGitLab\u0026rsquo;s documentation\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eFinally, if you want to keep GitHub as your primary home while avoiding having to remember to use \u003ccode\u003egit pushall\u003c/code\u003e or whatever other local setup you may have or need, you can easily set up a GitHub action to automatically push your code across to any other locations.While there are \u0026ldquo;marketplace\u0026rdquo; actions available to do this, we do not recommend those, as the procedure is very straightforward, and implementing your own is generally easier.An example is \u003ca href=\"https://github.com/ropensci/osmdata/blob/main/.github/workflows/push-to-elsewhere.yaml\"\u003ethis workflow\u003c/a\u003e which is run on every \u003ccode\u003epush\u003c/code\u003e event to the main branch and mirrors the \u003ca href=\"https://github.com/ropensci/osmdata/tree/main\"\u003e\u003ccode\u003egithub.com/ropensci/osmdata\u003c/code\u003e\u003c/a\u003e repository across to both \u003ca href=\"https://codeberg.org/ropensci/osmdata\"\u003e\u003ccode\u003ecodeberg.org/ropensci/osmdata\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://gitlab.com/ropensci/osmdata\"\u003e\u003ccode\u003egitlab.com/ropensci/osmdata\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"advertising-your-primary-code-home\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#advertising-your-primary-code-home\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAdvertising your primary code home\u003c/h2\u003e\u003cp\u003eRegardless of how your structure and disperse your code across multiple platforms, it\u0026rsquo;s generally useful to maintain a single, primary \u0026ldquo;home\u0026rdquo;.(This is of course not at all necessary; if you enjoy dividing your attention across different platforms, please do so, and ignore this section.)We recommend advertising your primary code location at the top of your README.md document, something along the lines of \u003ca href=\"https://github.com/ropensci/osmdata#:~:text=primary%20location\"\u003ethis example\u003c/a\u003e, and clearly stating whether or not you will respond to \u0026ldquo;issues\u0026rdquo; (or whatever platform-specific interactions may be called) on any other platforms.\u003c/p\u003e\u003cp\u003eIf your primary home is \u003cem\u003enot\u003c/em\u003e GitHub, then you can create an additional GitHub-specific \u003ccode\u003e.github/README.md\u003c/code\u003e file which will then be displayed on GitHub only, while all other platforms will display the root README contents.An example is Doug Kelkhoff\u0026rsquo;s \u003ca href=\"https://github.com/dgkf/options\"\u003e\u003ccode\u003egithub.com/dgkf/options\u003c/code\u003e package\u003c/a\u003e which has a \u003ca href=\"https://github.com/dgkf/options/tree/main/.github\"\u003e\u003ccode\u003e.github/README.md\u003c/code\u003e\u003c/a\u003e explaining that GitHub hosts a read-only mirror of the repository, and directing people to the primary location at \u003ca href=\"https://codeberg.org/dgkf/options\"\u003e\u003ccode\u003ecodeberg.org/dgkf/options\u003c/code\u003e\u003c/a\u003e.That primary location then displays the full contents of the root README file.This trick only works for GitHub - all other platforms display the root README file at all times.\u003c/p\u003e\u003ch2 id=\"words-of-warning\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#words-of-warning\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWords of warning\u003c/h2\u003e\u003cp\u003eWhatever approach you decide to explore, you\u0026rsquo;re bound to realise that managing code distributed across multiple platforms is more difficult than on a single site.Many features you might be used to on GitHub, for example, may not be implemented on other platforms, or may have other names and inconsistent behaviours.One example is \u0026ldquo;Releases\u0026rdquo;, which GitHub associates with Git tags, and then enables you to upload additional data to be associated with a release.This whole procedure has little to do with Git, and a lot to do with design decisions by GitHub.Other platforms offer similar functionality, but even then with caveats like:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eCodeberg can mirror all GitHub releases, but does not do so by default.You need to:\u003c/p\u003e\u003cul\u003e\u003cli\u003eGo to repository \u0026ldquo;\u003cem\u003eSettings\u003c/em\u003e\u0026rdquo; to enable releases\u003c/li\u003e\u003cli\u003eExplicitly \u003ccode\u003egit push --tags codeberg \u0026lt;branch-name\u0026gt;\u003c/code\u003e to push all Git tags, as they are not by default included in Codeberg\u0026rsquo;s mirroring process.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eYou should then see a mirror of all GitHub releases, including all (\u0026ldquo;LFS\u0026rdquo; = \u0026ldquo;Large File Storage\u0026rdquo;) data.From that point on, you will be able to create releases with additional data on Codeberg just like on GitHub.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eGitLab also does not mirror releases by default, and does not (currently) automatically track tags like Codeberg does.To mirror releases on GitLab, you need to.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003egit push --tags gitlab \u0026lt;branch_name\u0026gt;\u003c/code\u003e, just like on Codeberg, to explicitly push all Git tags.\u003c/li\u003e\u003cli\u003eManually go through each tag and issue a new release, for which you can retrospectively set the release data to be the same historical date as the original GitHub release date.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThere are many other ways, small and large, by which different code-hosting platforms and systems differ from one another.Ongoing maintenance across different platforms will always present challenges, but we hope to have given you enough information here to get you started.\u003c/p\u003e\u003ch2 id=\"ropensci-repos-on-codeberg-gitlab-or-elsewhere\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-repos-on-codeberg-gitlab-or-elsewhere\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci repos on Codeberg, GitLab, or elsewhere\u003c/h2\u003e\u003cp\u003eIf you\u0026rsquo;re an author of an rOpenSci package, you can follow the steps described above to mirror your code to any location on Codeberg, GitLab, or to any other platform.Please let us know if you\u0026rsquo;d like any of these platforms other than GitHub to act as the primary home for your code, and we\u0026rsquo;ll update our internal data accordingly.\u003c/p\u003e\u003cp\u003eWe also maintain the organizations \u003ca href=\"https://codeberg.org/ropensci\"\u003eCodeberg/ropensci\u003c/a\u003e and \u003ca href=\"https://gitlab.com/ropensci\"\u003eGitLab/ropensci\u003c/a\u003e.Note, however, that mirroring to either of these locations must be initiated by rOpenSci staff, only after which can we grant you administrative access over your repositories.To reduce the burden on rOpenSci staff, and to enable you to retain full control over your repositories, we therefore recommend that you mirror \u003ca href=\"https://github.com/ropensci\"\u003eGitHub/ropensci\u003c/a\u003e repositories to other locations (such as within your personal repositories) on these alternative platforms to which you have direct administrative access.If you would nevertheless like your \u003ca href=\"https://github.com/ropensci\"\u003eGitHub/ropensci\u003c/a\u003e package mirrored to either \u003ca href=\"https://codeberg.org/ropensci\"\u003eCodeberg/ropensci\u003c/a\u003e or \u003ca href=\"https://gitlab.com/ropensci\"\u003eGitLab/ropensci\u003c/a\u003e, the best way is to ping \u003ccode\u003e@ropesnci/admin\u003c/code\u003e from a GitHub issue in your repository, and we\u0026rsquo;ll start the process.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eThere are tools for continuous mirroring such as \u003ca href=\"https://codeberg.org/wl/GithubCodebergMirror\"\u003eGitHubCodebergMirror\u003c/a\u003e, but there is likely some fragility in these setups. An alternative is the approach adopted by the \u003ca href=\"https://ziglang.org/news/migrating-from-github-to-codeberg#:~:text=start%20counting%20issues\"\u003ezig language on Codeberg\u003c/a\u003e of simply ensuring the new primary mirror has unambiguous issue numbering.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eYet another approach is to define a \u003ca href=\"https://stackoverflow.com/questions/60060217/how-do-i-make-custom-git-commands\"\u003ecustom command\u003c/a\u003e for \u003ccode\u003egit push\u003c/code\u003e to call a local script.This can be done by adding some \u0026ldquo;gitbin\u0026rdquo; directory to a default system \u003ccode\u003ePATH\u003c/code\u003e variable (in \u003ccode\u003e.bashrc\u003c/code\u003e, for example, as \u003ccode\u003eexport PATH=\u0026quot;$PATH:$HOME/.gitbin\u0026quot;\u003c/code\u003e).Git will automatically recognize any scripts within \u003ccode\u003e$PATH\u003c/code\u003e named with the prefix \u0026ldquo;git-\u0026rdquo;.It is best to name locally-defined Git commands differently to standard Git commands.For example, a file named \u003ccode\u003egit-pushall\u003c/code\u003e placed in that folder will be called by the \u003ccode\u003egit pushall\u003c/code\u003e command.The file itself could contain any of the options described in \u003ca href=\"https://stackoverflow.com/a/18674313\"\u003ethis StackOverflow answer\u003c/a\u003e.Even more arcane alternatives include my own \u003ca href=\"https://github.com/mpadge/dotfiles/blob/main/system/gitpush.bash\"\u003egit push bash script\u003c/a\u003e which recreates the now obsolete push-by-password functionality of GitHub, while also pushing to all other listed remote sources.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2025/12/17/beyond-github/","date_published":"2025-12-17T00:00:00+00:00","date_modified":"2025-12-17T10:46:40-06:00"},{"id":"https://doi.org/10.59350/98899-51c03","title":"Better Code, Without Any Effort, Without Even AI","language":"en","authors":[{"name":"Etienne Bacher","url":"https://orcid.org/0000-0002-9271-5075","avatar":"https://github.com/etiennebacher.png","_role":["editor"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["best practice","tech notes","package development"],"content_html":"\u003cp\u003eWe are experiencing a programming revolution, with the democratization of artificial intelligence, \u003cem\u003ebut\u003c/em\u003e also with the creation and improvement of more traditional software tools to improve your code: local, free, deterministic.\u003c/p\u003e\u003cp\u003eIn this post, we will introduce you to\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u0026#x1f4e6; \u003ca href=\"https://lintr.r-lib.org/\"\u003elintr\u003c/a\u003e, by \u003ca href=\"https://lintr.r-lib.org/authors.html\"\u003eMichael Chirico and many others\u003c/a\u003e, an R package that detects many ways to improve your code;\u003c/li\u003e\u003cli\u003e\u0026#x1f4bb;$ \u003ca href=\"https://posit-dev.github.io/air/\"\u003eAir\u003c/a\u003e, by Lionel Henry and Davis Vaughan, a fast CLI (command-line interface) for formatting R code automatically and almost instantly;\u003c/li\u003e\u003cli\u003e\u0026#x1f4bb;$ \u003ca href=\"https://jarl.etiennebacher.com/\"\u003ejarl\u003c/a\u003e, by Etienne Bacher, another fast CLI (command-line interface) tool to find and automatically fix lints;\u003c/li\u003e\u003cli\u003e\u0026#x1f4e6; \u003ca href=\"https://flir.etiennebacher.com/\"\u003eflir\u003c/a\u003e, by Etienne Bacher, an R package to efficiently rewrite patterns of code, either built-in ones or custom ones.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWith these four wonderful tools, you can effortlessly improve your code, your colleagues\u0026rsquo; code\u0026hellip; and even code proposed by AI. With a bit more effort, you might even internalize best practice and write better code from the get go in the future!\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003ch2 id=\"an-example-script\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#an-example-script\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAn example script\u003c/h2\u003e\u003cp\u003eLet\u0026rsquo;s start with a script containing a few problems\u0026hellip; Can you spot them?\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='nv'\u003elleno\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e\u003cspan class='o'\u003e!\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/any.html'\u003eany\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/NA.html'\u003eis.na\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ex\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nv'\u003eok\u003c/span\u003e\u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='o'\u003e!\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ex\u003c/span\u003e\u003cspan class='o'\u003e[\u003c/span\u003e\u003cspan class='m'\u003e1\u003c/span\u003e\u003cspan class='o'\u003e]\u003c/span\u003e \u003cspan class='o'\u003e==\u003c/span\u003e \u003cspan class='nv'\u003ey\u003c/span\u003e\u003cspan class='o'\u003e[\u003c/span\u003e\u003cspan class='m'\u003e1\u003c/span\u003e\u003cspan class='o'\u003e]\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='kr'\u003eif\u003c/span\u003e \u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003eok\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='nv'\u003ez\u003c/span\u003e\u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nv'\u003ex\u003c/span\u003e \u003cspan class='o'\u003e+\u003c/span\u003e  \u003cspan class='m'\u003e1\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='kr'\u003eif\u003c/span\u003e \u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ez\u003c/span\u003e\u003cspan class='o'\u003e\u0026gt;\u003c/span\u003e\u003cspan class='m'\u003e3\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='kr'\u003e\u003ca href='https://rdrr.io/r/base/stop.html'\u003estop\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"ouch\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"the-r-console-vs-the-terminal\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-r-console-vs-the-terminal\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe R console vs the terminal\u003c/h3\u003e\u003cp\u003eNote that in this post, some tools are used in the R console, but others are used in the terminal, that you might also know as command line or \u003ca href=\"https://12days.cmdchallenge.com/#/12days_2\"\u003eshell\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"learn-what-to-improve-with-the-lintr-r-package-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#learn-what-to-improve-with-the-lintr-r-package-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLearn what to improve with the {lintr} R package \u0026#x1f4e6;\u003c/h3\u003e\u003cp\u003eA first instinct might be to run the lintr package on the script. The \u003ccode\u003elint()\u003c/code\u003e function performs static analysis and highlights potential problems in your R code, including formatting and programming suggestions.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='nf'\u003elintr\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://lintr.r-lib.org/reference/lint.html'\u003elint\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"test.R\"\u003c/span\u003e, linters \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='nf'\u003elintr\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://lintr.r-lib.org/reference/all_linters.html'\u003eall_linters\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #0000BB; font-weight: bold;'\u003eindex.Rmd:148:32\u003c/span\u003e\u003cspan style='font-weight: bold;'\u003e: \u003c/span\u003e\u003cspan style='color: #BB00BB;'\u003ewarning: \u003c/span\u003e[nonportable_path_linter] \u003cspan style='font-weight: bold;'\u003eUse file.path() to construct portable file paths.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; flir::fix(\"test.R\", linters = \"flir/rules/custom/stop_abort.yml\")\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #0000BB; font-weight: bold;'\u003etest.R:1:7\u003c/span\u003e\u003cspan style='font-weight: bold;'\u003e: \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003estyle: \u003c/span\u003e[infix_spaces_linter] \u003cspan style='font-weight: bold;'\u003ePut spaces around all infix operators.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; lleno \u0026lt;-!any(is.na(x))\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       ^~\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #0000BB; font-weight: bold;'\u003etest.R:1:10\u003c/span\u003e\u003cspan style='font-weight: bold;'\u003e: \u003c/span\u003e\u003cspan style='color: #BB00BB;'\u003ewarning: \u003c/span\u003e[any_is_na_linter] \u003cspan style='font-weight: bold;'\u003eanyNA(x) is better than any(is.na(x)).\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; lleno \u0026lt;-!any(is.na(x))\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;          ^~~~~~~~~~~~~\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #0000BB; font-weight: bold;'\u003etest.R:2:3\u003c/span\u003e\u003cspan style='font-weight: bold;'\u003e: \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003estyle: \u003c/span\u003e[infix_spaces_linter] \u003cspan style='font-weight: bold;'\u003ePut spaces around all infix operators.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; ok\u0026lt;- !(x[1] == y[1])\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;   ^~\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #0000BB; font-weight: bold;'\u003etest.R:2:6\u003c/span\u003e\u003cspan style='font-weight: bold;'\u003e: \u003c/span\u003e\u003cspan style='color: #BB00BB;'\u003ewarning: \u003c/span\u003e[comparison_negation_linter] \u003cspan style='font-weight: bold;'\u003eUse x != y, not !(x == y).\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; ok\u0026lt;- !(x[1] == y[1])\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;      ^~~~~~~~~~~~~~~\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #0000BB; font-weight: bold;'\u003etest.R:2:11\u003c/span\u003e\u003cspan style='font-weight: bold;'\u003e: \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003estyle: \u003c/span\u003e[implicit_integer_linter] \u003cspan style='font-weight: bold;'\u003eUse 1L or 1.0 to avoid implicit integers.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; ok\u0026lt;- !(x[1] == y[1])\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;          ~^\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #0000BB; font-weight: bold;'\u003etest.R:2:19\u003c/span\u003e\u003cspan style='font-weight: bold;'\u003e: \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003estyle: \u003c/span\u003e[implicit_integer_linter] \u003cspan style='font-weight: bold;'\u003eUse 1L or 1.0 to avoid implicit integers.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; ok\u0026lt;- !(x[1] == y[1])\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;                  ~^\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #0000BB; font-weight: bold;'\u003etest.R:3:10\u003c/span\u003e\u003cspan style='font-weight: bold;'\u003e: \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003estyle: \u003c/span\u003e[infix_spaces_linter] \u003cspan style='font-weight: bold;'\u003ePut spaces around all infix operators.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; if (ok) z\u0026lt;- x +  1\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;          ^~\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #0000BB; font-weight: bold;'\u003etest.R:3:19\u003c/span\u003e\u003cspan style='font-weight: bold;'\u003e: \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003estyle: \u003c/span\u003e[implicit_integer_linter] \u003cspan style='font-weight: bold;'\u003eUse 1L or 1.0 to avoid implicit integers.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; if (ok) z\u0026lt;- x +  1\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;                  ~^\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #0000BB; font-weight: bold;'\u003etest.R:4:6\u003c/span\u003e\u003cspan style='font-weight: bold;'\u003e: \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003estyle: \u003c/span\u003e[infix_spaces_linter] \u003cspan style='font-weight: bold;'\u003ePut spaces around all infix operators.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; if (z\u0026gt;3) stop(\"ouch\")\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;      ^\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #0000BB; font-weight: bold;'\u003etest.R:4:8\u003c/span\u003e\u003cspan style='font-weight: bold;'\u003e: \u003c/span\u003e\u003cspan style='color: #0000BB;'\u003estyle: \u003c/span\u003e[implicit_integer_linter] \u003cspan style='font-weight: bold;'\u003eUse 3L or 3.0 to avoid implicit integers.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; if (z\u0026gt;3) stop(\"ouch\")\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;       ~^\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #0000BB; font-weight: bold;'\u003etest.R:4:10\u003c/span\u003e\u003cspan style='font-weight: bold;'\u003e: \u003c/span\u003e\u003cspan style='color: #BB00BB;'\u003ewarning: \u003c/span\u003e[condition_call_linter] \u003cspan style='font-weight: bold;'\u003eUse stop(., call. = FALSE) not to display the call in an error message.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; if (z\u0026gt;3) stop(\"ouch\")\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;          ^~~~~~~~~~~~\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWe therefore get alerts about\u003c/p\u003e\u003cul\u003e\u003cli\u003estyling: space around infix operators for instance; implicit integer.\u003c/li\u003e\u003cli\u003eperformance: \u003ccode\u003eanyNA(x)\u003c/code\u003e is better than \u003ccode\u003eany(is.na(x))\u003c/code\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eSince lintr has been around for a long time, it has an impressive collection of rules, the \u0026ldquo;linters\u0026rdquo;. Even reading their documentation can teach you a lot, especially as the \u003ca href=\"https://lintr.r-lib.org/reference/index.html#individual-linters\"\u003elist\u003c/a\u003e grows over time!\u003c/p\u003e\u003cp\u003eNow, based on these alerts, how could we improve the code?\u003c/p\u003e\u003ch3 id=\"format-with-air-computer\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#format-with-air-computer\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFormat with Air \u0026#x1f4bb;$\u003c/h3\u003e\u003cp\u003eAir is software which automatically formats your R code according to a set of rules.\u003c/p\u003e\u003cp\u003eIn the terminal:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eair format test.R\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAnd this returns:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='nv'\u003elleno\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='o'\u003e!\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/any.html'\u003eany\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/NA.html'\u003eis.na\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ex\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nv'\u003eok\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='o'\u003e!\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ex\u003c/span\u003e\u003cspan class='o'\u003e[\u003c/span\u003e\u003cspan class='m'\u003e1\u003c/span\u003e\u003cspan class='o'\u003e]\u003c/span\u003e \u003cspan class='o'\u003e==\u003c/span\u003e \u003cspan class='nv'\u003ey\u003c/span\u003e\u003cspan class='o'\u003e[\u003c/span\u003e\u003cspan class='m'\u003e1\u003c/span\u003e\u003cspan class='o'\u003e]\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='kr'\u003eif\u003c/span\u003e \u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003eok\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e\u0026#123;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='nv'\u003ez\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nv'\u003ex\u003c/span\u003e \u003cspan class='o'\u003e+\u003c/span\u003e \u003cspan class='m'\u003e1\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='o'\u003e\u0026#125;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='kr'\u003eif\u003c/span\u003e \u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ez\u003c/span\u003e \u003cspan class='o'\u003e\u0026gt;\u003c/span\u003e \u003cspan class='m'\u003e3\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e\u0026#123;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='kr'\u003e\u003ca href='https://rdrr.io/r/base/stop.html'\u003estop\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"ouch\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='o'\u003e\u0026#125;\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNow, the spacing in the code is regular! The \u003ccode\u003eif\u003c/code\u003e condition is furthermore formatted on three lines instead of only one. Overall, the code is easier to read because it now follows popular conventions.\u003c/p\u003e\u003cp\u003eNote that lintr and Air might have conflicting advice on styling: you can \u003ca href=\"https://lintr.r-lib.org/articles/lintr.html#the--lintr-file\"\u003edeactivate lintr\u0026rsquo;s styling\u003c/a\u003e related rules if you use Air.\u003c/p\u003e\u003ch3 id=\"improve-with-the-new-jarl-cli-computer\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#improve-with-the-new-jarl-cli-computer\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eImprove with the new jarl CLI! \u0026#x1f4bb;$\u003c/h3\u003e\u003cp\u003eThe jarl CLI lints and fixes your code, and like lintr, identifies potential problems, but unlike lintr, jarl also applies fixes!\u003c/p\u003e\u003cp\u003eIn the terminal:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ejarl check test.R --fix\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='nv'\u003elleno\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='o'\u003e!\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/NA.html'\u003eanyNA\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ex\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nv'\u003eok\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='o'\u003e!\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ex\u003c/span\u003e\u003cspan class='o'\u003e[\u003c/span\u003e\u003cspan class='m'\u003e1\u003c/span\u003e\u003cspan class='o'\u003e]\u003c/span\u003e \u003cspan class='o'\u003e==\u003c/span\u003e \u003cspan class='nv'\u003ey\u003c/span\u003e\u003cspan class='o'\u003e[\u003c/span\u003e\u003cspan class='m'\u003e1\u003c/span\u003e\u003cspan class='o'\u003e]\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='kr'\u003eif\u003c/span\u003e \u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003eok\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e\u0026#123;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='nv'\u003ez\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nv'\u003ex\u003c/span\u003e \u003cspan class='o'\u003e+\u003c/span\u003e \u003cspan class='m'\u003e1\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='o'\u003e\u0026#125;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='kr'\u003eif\u003c/span\u003e \u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ez\u003c/span\u003e \u003cspan class='o'\u003e\u0026gt;\u003c/span\u003e \u003cspan class='m'\u003e3\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e\u0026#123;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='kr'\u003e\u003ca href='https://rdrr.io/r/base/stop.html'\u003estop\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"ouch\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='o'\u003e\u0026#125;\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003ccode\u003eany(is.na(x))\u003c/code\u003e was automatically replaced with \u003ccode\u003eanyNA(x)\u003c/code\u003e!\u003c/p\u003e\u003cp\u003eThe jarl CLI is as fast for checking and fixing lints as Air is for styling. Furthermore, because it is a simple binary that does not need R to run, it\u0026rsquo;s quicker to install on continuous integration than an R package (that needs R to be installed for instance).\u003c/p\u003e\u003cp\u003eHowever, since jarl is newer than lintr, it supports fewer rules for now.\u003c/p\u003e\u003ch3 id=\"improve-with-the-flir-r-package-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#improve-with-the-flir-r-package-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eImprove with the {flir} R package \u0026#x1f4e6;\u003c/h3\u003e\u003cp\u003eYou could complement the usage of lintr, Air and jarl with flir which is better at \u003ca href=\"https://flir.etiennebacher.com/articles/adding_rules\"\u003e\u003cem\u003ecustom rules\u003c/em\u003e\u003c/a\u003e. For instance, what if you\u0026rsquo;d prefer your codebase to use \u003ca href=\"https://rlang.r-lib.org/reference/abort.html\"\u003e\u003ccode\u003erlang::abort()\u003c/code\u003e\u003c/a\u003e instead of \u003ca href=\"https://rdrr.io/r/base/stop.html\"\u003e\u003ccode\u003estop()\u003c/code\u003e\u003c/a\u003e?\u003c/p\u003e\u003cp\u003eWe first run\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eflir\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003esetup_flir\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003egetwd\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWe save the file below under \u003ccode\u003eflir/rules/custom/stop_abort.yml\u003c/code\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003estop_abort-1\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003elanguage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003er\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eseverity\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ewarning\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003erule\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003epattern\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003estop($$$ELEMS)\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003efix\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003erlang::abort(paste0(~~ELEMS~~))\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003emessage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eUse `rlang::abort()` instead of `stop()`.\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWe then run\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='nf'\u003eflir\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://flir.etiennebacher.com/reference/fix.html'\u003efix\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"test.R\"\u003c/span\u003e, linters \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='s'\u003e\"flir/rules/custom/stop_abort.yml\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #00BBBB;'\u003eℹ\u003c/span\u003e Going to check 1 file.\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; \u003cspan style='color: #00BB00;'\u003e✔\u003c/span\u003e Fixed 1 lint in 1 file.\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='nv'\u003elleno\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='o'\u003e!\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/NA.html'\u003eanyNA\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ex\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nv'\u003eok\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='o'\u003e!\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ex\u003c/span\u003e\u003cspan class='o'\u003e[\u003c/span\u003e\u003cspan class='m'\u003e1\u003c/span\u003e\u003cspan class='o'\u003e]\u003c/span\u003e \u003cspan class='o'\u003e==\u003c/span\u003e \u003cspan class='nv'\u003ey\u003c/span\u003e\u003cspan class='o'\u003e[\u003c/span\u003e\u003cspan class='m'\u003e1\u003c/span\u003e\u003cspan class='o'\u003e]\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='kr'\u003eif\u003c/span\u003e \u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003eok\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e\u0026#123;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='nv'\u003ez\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nv'\u003ex\u003c/span\u003e \u003cspan class='o'\u003e+\u003c/span\u003e \u003cspan class='m'\u003e1\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='o'\u003e\u0026#125;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='kr'\u003eif\u003c/span\u003e \u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ez\u003c/span\u003e \u003cspan class='o'\u003e\u0026gt;\u003c/span\u003e \u003cspan class='m'\u003e3\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e\u0026#123;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='nf'\u003erlang\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rlang.r-lib.org/reference/abort.html'\u003eabort\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/paste.html'\u003epaste0\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"ouch\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='o'\u003e\u0026#125;\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe call to \u003ca href=\"https://rdrr.io/r/base/stop.html\"\u003e\u003ccode\u003estop()\u003c/code\u003e\u003c/a\u003e was automatically replaced. Now, we might want to then manually remove the useless \u003ca href=\"https://rdrr.io/r/base/paste.html\"\u003e\u003ccode\u003epaste0()\u003c/code\u003e\u003c/a\u003e, but we\u0026rsquo;re already closer to an ideal script.\u003c/p\u003e\u003ch2 id=\"integrating-these-tools-into-your-workflow\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#integrating-these-tools-into-your-workflow\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIntegrating these tools into your workflow\u003c/h2\u003e\u003cp\u003eLocally, you can use those tools as needed. For instance, when inheriting an older project, the first thing I do is renovate the project by applying these tools. A real game changer is using the integration of these tools with your IDE. For instance, I have Positron set up so that \u003ca href=\"https://posit-dev.github.io/air/editors.html\"\u003eAir\u003c/a\u003e runs on my scripts when I save them. The jarl CLI also provides \u003ca href=\"https://jarl.etiennebacher.com/editors\"\u003eintegrations with IDEs\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eYou can also use those tools on continuous integration. For instance, a useful workflow might be to \u003ca href=\"https://posit-dev.github.io/air/integration-github-actions.html#format-with-github-suggestions\"\u003esuggest formatting changes on Pull Requests\u003c/a\u003e. The use of suggestions rather than a direct commit means the contributor gets a chance to learn about the improvements.\u003c/p\u003e\u003cp\u003eAnother aspect to consider is whether you want flir and jarl to \u003cem\u003emake\u003c/em\u003e the changes as opposed to \u003cem\u003ealerting\u003c/em\u003e you about them. Which you choose depends on the context, for example, you might learn more by doing the changes yourself. In any case, having a proper look at modifications before committing them is important!\u003c/p\u003e\u003ch2 id=\"what-about-artificial-intelligence\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-about-artificial-intelligence\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat about artificial intelligence?\u003c/h2\u003e\u003cp\u003eArtificial intelligence can be useful in coding applications but\u0026hellip;\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThe best LLMs are \u003ca href=\"https://www.simonpcouch.com/blog/2025-12-04-local-agents/\"\u003enot local\u003c/a\u003e;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThey cost money and are slower;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThey are not deterministic so you don\u0026rsquo;t necessarily get the same result every time you use one of them;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTheir usage may entail some ideological and ethical problems which can be concerning or unattractive.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eUltimately, for such alerts and fixes, you just don\u0026rsquo;t need to use an LLM\u0026hellip; Air, flir, jarl, and lintr already do an excellent job, are faster, and are free (not to mention FOSS)!\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eYou can improve your code without effort, without even AI, using:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://lintr.r-lib.org/\"\u003e{lintr}\u003c/a\u003e to signal \u0026ldquo;bad\u0026rdquo; patterns, including \u003ca href=\"https://github.com/r-lib/pkgdown/blob/c07d935583c90125586821e3b39ed52f16593e42/.lintr.R#L1\"\u003ecustomizable ones\u003c/a\u003e;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://posit-dev.github.io/air/\"\u003eAir\u003c/a\u003e, to efficiently reformat code;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://jarl.etiennebacher.com/\"\u003ejarl\u003c/a\u003e, to detect and fix \u0026ldquo;bad\u0026rdquo; patterns;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://flir.etiennebacher.com/\"\u003e{flir}\u003c/a\u003e, to efficiently refactor code with custom rules.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAs with all tools that modify your code, their usage is best complemented by a human review.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/12/15/better-code/","date_published":"2025-12-15T00:00:00+00:00","date_modified":"2025-12-15T13:21:09+01:00"},{"id":"https://doi.org/10.59350/9ff3a-21d94","title":"How to Assess Usage of your Package","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["package development","tech notes","r-universe"],"content_html":"\u003cp\u003eAs a package maintainer, you might want to get some numbers or impressions on the usage of your package for various reasons: getting some confirmation that your work is useful, prioritizing development on specific features of your software, helping justify a request for funding. Don\u0026rsquo;t get your hopes too high: there is no perfect solution nor measure. However, we will share some useful information sources in this post \u0026ndash; many of them already used and displayed by \u003ca href=\"/r-universe\"\u003eR-Universe\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"downloads\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#downloads\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDownloads\u003c/h2\u003e\u003cp\u003eYou can get download data for your package on \u003ca href=\"https://r-hub.github.io/cranlogs/\"\u003eCRAN\u003c/a\u003e or \u003ca href=\"https://www.bioconductor.org/packages/stats/\"\u003eBioconductor\u003c/a\u003e, which you might roughly view as \u0026ldquo;number of installations\u0026rdquo;. Even with some \u003ca href=\"https://blog.r-hub.io/2020/05/11/packagerank-intro/\"\u003ecorrection efforts\u003c/a\u003e, these data are fraught as they for instance include downloads for checks on continuous integration.\u003c/p\u003e\u003ch2 id=\"reverse-dependencies\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#reverse-dependencies\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReverse dependencies\u003c/h2\u003e\u003cp\u003eIf your package is not a high-level interface, maybe other packages import it. If many packages depend on your package, then your package is clearly crucial.\u003c/p\u003e\u003cp\u003eFor instance here\u0026rsquo;s a way to count the direct and indirect \u003cstrong\u003ehard\u003c/strong\u003e dependencies (\u003ccode\u003eImports\u003c/code\u003e) of the curl package on CRAN.\u003c/p\u003e\u003cp\u003eWe can count the number of direct (non-recursive) dependencies with \u003ca href=\"https://rdrr.io/pkg/pkgcache/man/meta_cache_deps.html\"\u003e\u003ccode\u003epkgcache::meta_cache_revdeps()\u003c/code\u003e\u003c/a\u003e and \u003ccode\u003erecursive = FALSE\u003c/code\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003edirect\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/length.html'\u003elength\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/unique.html'\u003eunique\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e    \u003cspan class='nf'\u003epkgcache\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/pkg/pkgcache/man/meta_cache_deps.html'\u003emeta_cache_revdeps\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e      \u003cspan class='s'\u003e\"curl\"\u003c/span\u003e,\u003c/span\u003e\u003cspan\u003e      recursive \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='kc'\u003eFALSE\u003c/span\u003e,\u003c/span\u003e\u003cspan\u003e      dependencies \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='s'\u003e\"imports\"\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e    \u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='o'\u003e$\u003c/span\u003e\u003cspan class='nv'\u003epackage\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; [1] 436\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWe can then calculate the total number of dependencies by using \u003ccode\u003erecursive = TRUE\u003c/code\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003etotal\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/length.html'\u003elength\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/unique.html'\u003eunique\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e    \u003cspan class='nf'\u003epkgcache\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/pkg/pkgcache/man/meta_cache_deps.html'\u003emeta_cache_revdeps\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e      \u003cspan class='s'\u003e\"curl\"\u003c/span\u003e,\u003c/span\u003e\u003cspan\u003e      recursive \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='kc'\u003eTRUE\u003c/span\u003e,\u003c/span\u003e\u003cspan\u003e      dependencies \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='s'\u003e\"imports\"\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e    \u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='o'\u003e$\u003c/span\u003e\u003cspan class='nv'\u003epackage\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; [1] 5277\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAnd the number of indirect dependencies by subtracting the two.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003eindirect\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nv'\u003etotal\u003c/span\u003e \u003cspan class='o'\u003e-\u003c/span\u003e \u003cspan class='nv'\u003edirect\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; [1] 4841\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eR-universe pages for individual packages, like \u003ca href=\"https://jeroen.r-universe.dev/curl\"\u003ecurl\u003c/a\u003e, include a badge with the number of indirect hard and soft dependencies (\u003ccode\u003eImports\u003c/code\u003e and \u003ccode\u003eSuggests\u003c/code\u003e).\u003c/p\u003e\u003ch2 id=\"code-mentions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#code-mentions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCode mentions\u003c/h2\u003e\u003cp\u003eAs some code is published on GitHub, you can use advanced GitHub searches to find instances of use. You can search for occurrences of, say, \u003ca href=\"https://jeroen.r-universe.dev/curl\"\u003e\u003ccode\u003elibrary(curl)\u003c/code\u003e\u003c/a\u003e using the URL \u003ca href=\"https://github.com/search?q=library(curl)\u0026amp;type=code\"\u003ehttps://github.com/search?q=library(curl)\u0026amp;type=code\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eR-universe displays this information on each package\u0026rsquo;s page as a badge counting \u0026ldquo;scripts\u0026rdquo; using a package \u0026ndash; the number of hits for the aforementioned GitHub advanced search query. See \u003ca href=\"https://jeroen.r-universe.dev/curl\"\u003ecurl\u0026rsquo;s page\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThis information is obviously partial as not all code is published, not all code is published on GitHub, and not all code loads packages this way (perhaps also consider searching for \u003ccode\u003ecurl::\u003c/code\u003e formatting). Nonetheless, such search syntax might help find examples of authentic usage to better understand how users interact with your package: you can look for individual functions, arguments used, etc.\u003c/p\u003e\u003ch2 id=\"citations\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#citations\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCitations\u003c/h2\u003e\u003cp\u003eIf your package is used in a scientific paper whose authors \u003ca href=\"/blog/2021/11/16/how-to-cite-r-and-r-packages/\"\u003ecite packages\u003c/a\u003e, you might be able to retrieve usage though bibliometric search.\u003c/p\u003e\u003cp\u003eFor citations of a package before 2022, you can explore rOpenSci\u0026rsquo;s \u003ca href=\"/citations/\"\u003ecitations database\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eR-universe displays some data on citations, from the \u003ca href=\"https://ecosyste.ms/#experiments\"\u003eexperimental papers dataset of ecosystem.s\u003c/a\u003e. See again \u003ca href=\"https://jeroen.r-universe.dev/curl\"\u003ecurl\u0026rsquo;s page\u003c/a\u003e, with a badge linking to \u003ca href=\"https://papers.ecosyste.ms/projects/cran/curl\"\u003eecosyste.ms\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThis is again partial information, that might however help underlining the usefulness of your software for scientific endeavours.\u003c/p\u003e\u003ch2 id=\"popularity-measures-likes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#popularity-measures-likes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePopularity measures: likes\u003c/h2\u003e\u003cp\u003eGitHub stars and similar popularity measures do not necessarily correlate with usage, but they are surely at least a nice ego boost. Someone starring your repository, granted the account is \u003ca href=\"https://the-guild.dev/blog/judging-open-source-by-github-stars\"\u003enot a bot\u003c/a\u003e, means someone \u0026ldquo;saw\u0026rdquo; your work which might already be valuable to you.\u003c/p\u003e\u003cp\u003eAs you might note on \u003ca href=\"https://jeroen.r-universe.dev/curl\"\u003ecurl\u0026rsquo;s page\u003c/a\u003e, R-universe also displays a badge showing the number of GitHub stars.\u003c/p\u003e\u003ch2 id=\"surveys\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#surveys\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSurveys\u003c/h2\u003e\u003cp\u003eIf you have a good idea of what the potential userbase of your package is, or a way to reach a good proportion of current users, maybe you could run a survey to ask about packages and functions most used, and features most dearly missed?\u003c/p\u003e\u003cp\u003eSomeone mentioned this idea at the uRos (\u003ca href=\"https://r-project.ro/conference2025.html\"\u003eUse of R in Official Statistics\u003c/a\u003e) 2025 conference in their talk.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e For me, as an outsider to that community, it seemed like a perfect idea: National Institutes of Statistics have similar use cases for software and\u0026hellip; they know how to run surveys!\u003c/p\u003e\u003ch2 id=\"contributions-to-the-repository\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#contributions-to-the-repository\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eContributions to the repository\u003c/h2\u003e\u003cp\u003eOr, the metric we could call \u003cem\u003eengagement\u003c/em\u003e in influencers\u0026rsquo; parlance. \u0026#x1f607;\u003c/p\u003e\u003cp\u003eIf you develop your package in the open, users might contribute to it. The mere opening of an issue by an external person means they found and used your package! Furthermore, users themselves might tell you what doesn\u0026rsquo;t work, what\u0026rsquo;s missing, what they like about your package\u0026hellip; and of course help you maintain the package. All the more reasons to \u003ca href=\"/commcalls/apr2021-pkg-community/\"\u003efoster a community around your package\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eBased on the same idea, if you wonder whether a function is used, you could try removing it or starting to remove it using proper \u003ca href=\"https://devguide.ropensci.org/maintenance_evolution.html\"\u003edeprecation\u003c/a\u003e and seeing if anyone complains. Likewise, and more dramatically, you might hear from users if your package gets archived on CRAN for instance. \u0026#x1f605;\u003c/p\u003e\u003cp\u003eAt the organization level, you can use our new experimental \u003ca href=\"/blog/2025/09/11/repometrics-call-help/\"\u003edashboard\u003c/a\u003e to get a bird eye view of repository activity.\u003c/p\u003e\u003ch2 id=\"use-cases-reports\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases-reports\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases reports\u003c/h2\u003e\u003cp\u003eAt rOpenSci we collect \u003ca href=\"/usecases\"\u003euse cases of packages\u003c/a\u003e. You could have a ticket dedicated to receiving \u003ca href=\"https://github.com/quanteda/quanteda/issues/461\"\u003eusers testimonials, like in the quanteda repository\u003c/a\u003e. The documentation of your package could point to the place where you would like to hear from users, be it to help you plan future developments, or to keep your motivation up!\u003c/p\u003e\u003cp\u003eThe benefit is gathering examples of authentic usage, and also getting the \u003ca href=\"https://rstats.me/@adamhsparks/115619962041997060\"\u003emotivation boost\u003c/a\u003e from knowing someone uses your tool.\u003c/p\u003e\u003ch2 id=\"telemetry\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#telemetry\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTelemetry\u003c/h2\u003e\u003cp\u003eActually measuring usage at the source is very rare in R packages, but something that for instance the duckplyr maintainers have tried to implement, to inform \u003ca href=\"https://duckplyr.tidyverse.org/articles/telemetry.html\"\u003edevelopment priorities\u003c/a\u003e. This behavior can be controlled and turned off by users. Informing users of the telemetry is crucial.\u003c/p\u003e\u003cp\u003eWe can also wonder about the data collected by Copilot and friends, that you as a package maintainer have no access to: most common questions about your package, code reviewed or suggested by LLMs, etc. One can wonder whether such data might be helpful to software maintainers?\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post, we gave a quick overview of some means to evaluate usage of your package, including many metrics already featured on the R-universe pages of packages. There is unfortunately no silver bullet, but definitely more to it than counting downloads.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eBut I unfortunately do not remember who. \u0026#x1f62d; If that\u0026rsquo;s you please tell me and I\u0026rsquo;ll update the post!\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2025/12/11/package-usage/","date_published":"2025-12-11T00:00:00+00:00","date_modified":"2025-12-11T16:09:17+01:00"},{"id":"https://doi.org/10.59350/7pygv-c1m20","title":"rOpenSci News Digest, November 2025","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2025/11/28/news-november-2025\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"ropensci-at-latinr\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-at-latinr\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci at LatinR\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;re excited to continue supporting LatinR as a community partner in 2025. \u003ca href=\"https://www.eventbrite.com.ar/e/1939670499679\"\u003eRegistration is now open for the free LatinR Conference\u003c/a\u003e, bringing together researchers, developers, and open science advocates from across the region.\u003c/p\u003e\u003ch4 id=\"keynotes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#keynotes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eKeynotes\u003c/h4\u003e\u003cul\u003e\u003cli\u003eHeather Turner \u0026mdash; Lowering Barriers to Contributing to R\u003c/li\u003e\u003cli\u003eStephanie Zimmer \u0026mdash; Transforming a team to open-source first\u003c/li\u003e\u003cli\u003eTRACE-LAC Team \u0026mdash; Lo invisible del código abierto: Lessons from the TRACE-LAC / Epiverso project for connecting software development with public health\u003c/li\u003e\u003c/ul\u003e\u003ch4 id=\"talks-in-spanish\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#talks-in-spanish\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTalks in Spanish\u003c/h4\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eHerramientas para usar LLMs en R\u003c/strong\u003e by \u003ca href=\"/author/luis-d.-verde-arregoitia/\"\u003eLuis D. Verde Arregoitia\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eR-multiverse\u003c/strong\u003e by \u003ca href=\"/author/will-landau/\"\u003eWill Landau\u003c/a\u003e, \u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e and \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eMejor código, sin esfuerzos, sin siquiera IA\u003c/strong\u003e by \u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e, \u003ca href=\"/author/hugo-gruson/\"\u003eHugo Gruson\u003c/a\u003e and Etienne Bacher\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eEstrategias de divulgación para proyectos de software e infraestructuras abiertas\u003c/strong\u003e by \u003ca href=\"/author/alejandra-bellini/\"\u003eAlejandra Bellini\u003c/a\u003e and \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eComunidades de líderes de código abierto\u003c/strong\u003e by \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e and \u003ca href=\"/author/noam-ross/\"\u003eNoam Ross\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eDatos públicos y Software Libre\u003c/strong\u003e by \u003ca href=\"/author/pablo-tiscornia/\"\u003ePablo Tiscornia\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003ercdo para analizar datos climáticos con R\u003c/strong\u003e by \u003ca href=\"/author/elio-campitelli/\"\u003eElio Campitelli\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eICC para evaluar confiabilidad entre evaluadores\u003c/strong\u003e by \u003ca href=\"/author/francisco-cardozo/\"\u003eFrancisco Cardozo\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eIntegrando listas taxonómicas en Quarto y R Markdown: Un caso para \u003ccode\u003etaxnames\u003c/code\u003e\u003c/strong\u003e by \u003ca href=\"/author/miguel-alvarez/\"\u003eMiguel Alvarez\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eMetasurvey\u003c/strong\u003e by \u003ca href=\"/author/mauro-loprete/\"\u003eMauro Loprete\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch4 id=\"talks-in-english\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#talks-in-english\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTalks in English\u003c/h4\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eR-universe Q\u0026amp;A\u003c/strong\u003e \u003ca href=\"/author/jeroen-ooms/\"\u003eJeroen Ooms\u003c/a\u003e and \u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch4 id=\"tutorials-in-spanish\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tutorials-in-spanish\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTutorials in Spanish\u003c/h4\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e¡Miércoles, Git! Manejo de errores en Git y no morir en el intento\u003c/strong\u003e \u0026mdash; \u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e \u0026amp; \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e. Tuesday, December 2. 10:00-12:00 UTC-3.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eIntroducción a Tidymodels\u003c/strong\u003e \u0026mdash; \u003ca href=\"/author/francisco-cardozo/\"\u003eFrancisco Cardozo\u003c/a\u003e \u0026amp; Edgar Ruiz. Monday, December 1. 18:00-20:00 UTC-3.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eAutomatización de workflows en R y Python con targets y snakemake\u003c/strong\u003e \u0026mdash; \u003ca href=\"/author/diana-garcia/\"\u003eDiana Garcia\u003c/a\u003e. Tuesday, December 2. 14:00-16:00 UTC-3.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e¿Qué historia vas a contar hoy? Herramientas para una comunicación eficaz\u003c/strong\u003e \u0026mdash; \u003ca href=\"/author/alejandra-bellini/\"\u003eAlejandra Bellini\u003c/a\u003e. Tuesday, December 2. 17:00-19:15 UTC-3.\u003c/li\u003e\u003c/ul\u003e\u003ch4 id=\"tutorials-in-english\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tutorials-in-english\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTutorials in English\u003c/h4\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eCoding with AI in RStudio\u003c/strong\u003e \u0026mdash; Juan Cruz Rodríguez \u0026amp; \u003ca href=\"/author/luis-d.-verde-arregoitia/\"\u003eLuis D. Verde Arregoitia\u003c/a\u003e. Tuesday, December 2. 10:00-12:00 UTC-3.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFull tutorial schedule: \u003ca href=\"https://latinr.org/en/cronograma/tutoriales/workshops.html\"\u003ehttps://latinr.org/en/cronograma/tutoriales/workshops.html\u003c/a\u003e\u003c/p\u003e\u003ch3 id=\"ropensci-dev-guide-now-available-in-portuguese\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-dev-guide-now-available-in-portuguese\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci Dev Guide Now Available in Portuguese!\u003c/h3\u003e\u003cp\u003erOpenSci has published the Portuguese translation of the \u0026ldquo;Packages: Development, Maintenance, and Peer Review\u0026rdquo; guide, expanding access to best practices in R package development across the Portuguese-speaking world.\u003c/p\u003e\u003cp\u003eThe two-year, community-led effort brought together contributors from Angola, Brazil, and Portugal, following rOpenSci\u0026rsquo;s open workflow with automated translation, multi-reviewer editing, and collaborative decisions on terminology and inclusivity.\u003c/p\u003e\u003cp\u003eThis new version strengthens rOpenSci\u0026rsquo;s multilingual infrastructure and helps lower language barriers for contributors.\u003c/p\u003e\u003cp\u003eRead the full \u003ca href=\"/blog/2025/11/25/translation-devguide-pt/\"\u003eblog post to learn more about the project\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"big-team-collaboration-on-data-management-and-analysis-with-ropensci\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#big-team-collaboration-on-data-management-and-analysis-with-ropensci\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBig Team Collaboration on Data Management and Analysis with rOpenSci\u003c/h3\u003e\u003cp\u003e\u003ca href=\"/author/liz-hare\"\u003eLiz Hare\u003c/a\u003e and \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e gave a talk on Big Team Collaboration on Software Peer Review with rOpenSci at the Big Team Science Conference 2025. The slides and recording have been \u003ca href=\"/events/BTSConf-2025\"\u003eposted\u003c/a\u003e!\u003c/p\u003e\u003ch3 id=\"ropensci-at-positconf2025-recordings\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-at-positconf2025-recordings\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci at posit::conf(2025): recordings\u003c/h3\u003e\u003cp\u003eRecordings from posit::conf(2025) are now \u003ca href=\"https://posit.co/blog/talks-and-workshops-from-posit-conf-2025/\"\u003epublicly available\u003c/a\u003e on YouTube! Many excellent talks to enjoy and learn from, including those from rOpensci community members.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/mauro-lepore\"\u003eMauro Lepore\u003c/a\u003e and \u003ca href=\"/author/eric-scott\"\u003eEric Scott\u003c/a\u003e both presented lightning talks. Mauro talked about \u003ca href=\"https://www.youtube.com/watch?v=X6PZ_RiZp44\"\u003e\u0026ldquo;Approaching Positron from RStudio\u0026rdquo;\u003c/a\u003e, Eric about \u003ca href=\"https://www.youtube.com/watch?v=RmTtugX1CoE\"\u003e\u0026ldquo;Enabling geospatial workflow management with targets: an R package origin story\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/will-landau/\"\u003eWill Landau\u003c/a\u003e gave his talk \u003ca href=\"https://www.youtube.com/watch?v=UseltnRVoFo\"\u003e\u0026ldquo;R-multiverse: a next-generation R package repository system built on R-universe\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/nic-crane\"\u003eNic Crane\u003c/a\u003e presented on \u003ca href=\"https://www.youtube.com/watch?v=_nhDYt0f5yc\"\u003e\u0026ldquo;Hacking Productivity with LLMs: What Works (and What Doesn\u0026rsquo;t)\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/noam-ross/\"\u003eNoam Ross\u003c/a\u003e and \u003ca href=\"/author/beatriz-milz/\"\u003eBeatriz Milz\u003c/a\u003e both presented in the session \u0026ldquo;It Takes a Village: Building and Sustaining Communities\u0026rdquo;. Beatriz talked about \u003ca href=\"https://www.youtube.com/watch?v=yBC8rNvh3Ns\"\u003e\u0026ldquo;Translating R for Data Science into Portuguese: A Community-Led Initiative\u0026rdquo;\u003c/a\u003e, Noam about \u003ca href=\"https://www.youtube.com/watch?v=-atDblWsOBU\"\u003e\u0026ldquo;rOpenSci Champions: Building Communities of Open-Source Leaders\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://ropensci.org/author/luis-d.-verde-arregoitia/\"\u003eLuis D. Verde Arregoitia\u003c/a\u003e presented his talk \u003ca href=\"https://www.youtube.com/watch?v=NJz0779Seto\"\u003e\u0026ldquo;Bold indicates negative?\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"blog-contributor-roles-in-ropensci-and-beyond\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#blog-contributor-roles-in-ropensci-and-beyond\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBlog contributor roles in rOpenSci and beyond\u003c/h3\u003e\u003cp\u003eWe recently added support for contributor roles on our \u003ca href=\"/blog/2025/10/14/blog-roles/\"\u003eblog\u003c/a\u003e: author, editor, translator, interviewee. Rogue Scholar, that generates the DOI of our posts (and many others\u0026rsquo;), also added this feature. Read more in their \u003ca href=\"https://blog.front-matter.de/posts/supporting-blog-contributions-beyond-authorship/\"\u003eannouncement\u003c/a\u003e. Thanks to Martin Fenner for supporting our efforts in recognizing all contributions to blog posts!\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday December 2nd, 14h00 Europe Central (13:00 UTC), \u003ca href=\"/events/coworking-2025-12/\"\u003e\u0026ldquo;Getting to know The Carpentries\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/angelique-trusler/\"\u003eAngelique Trusler\u003c/a\u003e.\u003cul\u003e\u003cli\u003eVisit \u003ca href=\"https://carpentries.org/\"\u003eThe Carpentries\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eMeet community host, Angelique Trusler, and learn more about The Carpentries and how you might get involved.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday January 13th, 9:00 Americas Pacific (17:00 UTC), \u003ca href=\"/events/coworking-2026-01/\"\u003e\u0026ldquo;Let it go!\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e.\u003cul\u003e\u003cli\u003eSpend some time reviewing the forums, Slack workspaces, Newsletters, RSS feeds (etc. etc.) you\u0026rsquo;re subscribed to;\u003c/li\u003e\u003cli\u003eUnsubscribe to all you no longer need (Let it go!);\u003c/li\u003e\u003cli\u003eMeet co-host, Yanina Bellini Saibene, and discuss strategies for this New Year decluttering of your digital (or perhaps not-so-digital) life.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday February 2nd, 9:00 Australia Western (01:00 UTC), \u003ca href=\"/events/coworking-2026-02/\"\u003e\u0026ldquo;Share your Positron setup!\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/noam-ross/\"\u003eNoam Ross\u003c/a\u003e.\u003cul\u003e\u003cli\u003eSetup Poistron and explore extensions and custom settings;\u003c/li\u003e\u003cli\u003eMeet community host, Noam Ross, share how you have set up Positron for your workflow and learn from others.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/distionary\"\u003edistionary\u003c/a\u003e, developed by Vincenzo Coia: Create and evaluate probability distribution objects from a variety of families or define custom distributions. Automatically compute distributional properties, even when they have not been specified. This package supports statistical modeling and simulations, and forms the core of the probaverse suite of R packages. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/688\"\u003ereviewed\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following fifteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/babelquarto\" title=\"Renders a Multilingual Quarto Book\"\u003ebabelquarto\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/babelquarto/releases/tag/v0.1.0\"\u003e\u003ccode\u003ev0.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pkgmatch\" title=\"Find R Packages Matching Either Descriptions or Other R Packages\"\u003epkgmatch\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/pkgmatch/releases/tag/v0.5.0\"\u003e\u003ccode\u003ev0.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pkgstats\" title=\"Metrics of R Packages\"\u003epkgstats\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/pkgstats/releases/tag/v0.1.6\"\u003e\u003ccode\u003ev0.1.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/aRxiv\" title=\"Interface to the arXiv API\"\u003eaRxiv\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/aRxiv/releases/tag/0.14\"\u003e\u003ccode\u003e0.14\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/daiquiri\" title=\"Data Quality Reporting for Temporal Datasets\"\u003edaiquiri\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/daiquiri/releases/tag/v1.2.1\"\u003e\u003ccode\u003ev1.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dataset\" title=\"Create Data Frames for Exchange and Reuse\"\u003edataset\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dataset/releases/tag/0.4.1\"\u003e\u003ccode\u003e0.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/fireexposuR\" title=\"Compute and Visualize Wildfire Exposure\"\u003efireexposuR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/fireexposuR/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/googleLanguageR\" title=\"Call Googles Natural Language, Cloud Translation, Cloud Speech, and Cloud Text-to-Speech' APIs\"\u003egoogleLanguageR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/googleLanguageR/releases/tag/v0.3.1.1\"\u003e\u003ccode\u003ev0.3.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/GSODR\" title=\"Global Surface Summary of the Day (GSOD) Weather Data Client\"\u003eGSODR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/GSODR/releases/tag/v5.0.0\"\u003e\u003ccode\u003ev5.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/prism\" title=\"Access Data from the Oregon State Prism Climate Project\"\u003eprism\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/prism/releases/tag/v0.3.0\"\u003e\u003ccode\u003ev0.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgbif\" title=\"Interface to the Global Biodiversity Information Facility API\"\u003ergbif\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgbif/releases/tag/v3.8.4\"\u003e\u003ccode\u003ev3.8.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/taxizedb\" title=\"Offline Access to Taxonomic Databases\"\u003etaxizedb\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/taxizedb/releases/tag/v0.3.2\"\u003e\u003ccode\u003ev0.3.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/USAboundaries\" title=\"Historical and Contemporary Boundaries of the United States of America\"\u003eUSAboundaries\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/USAboundaries/releases/tag/v0.5.1\"\u003e\u003ccode\u003ev0.5.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/USAboundariesData\" title=\"Datasets for the USAboundaries package\"\u003eUSAboundariesData\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/USAboundariesData/releases/tag/v0.5.1\"\u003e\u003ccode\u003ev0.5.1\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/weatherOz\" title=\"An API Client for Australian Weather and Climate Data Resources\"\u003eweatherOz\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weatherOz/releases/tag/v2.0.2\"\u003e\u003ccode\u003ev2.0.2\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are fifteen recently closed and active submissions and 3 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/720\"\u003ebabelquarto\u003c/a\u003e, Renders a Multilingual Quarto Book. Submitted by \u003ca href=\"https://masalmon.eu/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/688\"\u003edistionary\u003c/a\u003e, Create and Evaluate Probability Distributions. Submitted by \u003ca href=\"https://vincenzocoia.com\"\u003eVincenzo Coia\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%225/awaiting-reviewer(s)-response%22\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/710\"\u003emantis\u003c/a\u003e, Multiple Time Series Scanner. Submitted by \u003ca href=\"https://github.com/phuongquan\"\u003ePhuong Quan\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/667\"\u003eread.abares\u003c/a\u003e, Provides simple downloading, parsing and importing of Australian Bureau of Agricultural and Resource Economics and Sciences (ABARES) data sources. Submitted by \u003ca href=\"https://adamhsparks.netlify.app/\"\u003eAdam H. Sparks\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/714\"\u003eopenFDA\u003c/a\u003e, openFDA API. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/730\"\u003eernest\u003c/a\u003e, A Toolkit for Nested Sampling. Submitted by \u003ca href=\"https://github.com/kylesnap\"\u003eKyle Dewsnap\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/724\"\u003ecowfootR\u003c/a\u003e, Tools to Estimate the Carbon Footprint of Dairy Farms. Submitted by \u003ca href=\"https://github.com/juanmarcosmoreno-arch\"\u003eJuan Moreno\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/718\"\u003ercrisp\u003c/a\u003e, Automate the Delineation of Urban River Spaces. Submitted by \u003ca href=\"https://github.com/cforgaci\"\u003eClaudiu Forgaci\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/709\"\u003ereviser\u003c/a\u003e, Tools for Studying Revision Properties in Real-Time Time Series Vintages. Submitted by \u003ca href=\"https://marcburri.github.io/\"\u003eMarc Burri\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/728\"\u003eAthlytics\u003c/a\u003e, Academic R Package for Sports Physiology Analysis from Local Strava Data. Submitted by \u003ca href=\"https://github.com/HzaCode\"\u003eAng\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/717\"\u003ecoevolve\u003c/a\u003e, Fit Bayesian Generalized Dynamic Phylogenetic Models using Stan. Submitted by \u003ca href=\"https://scottclaessens.github.io/\"\u003eScott Claessens\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/704\"\u003epriorsense\u003c/a\u003e, Prior Diagnostics and Sensitivity Analysis. Submitted by \u003ca href=\"https://github.com/n-kall\"\u003eNoa Kallioinen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/645\"\u003ecapybara\u003c/a\u003e, Fast and Memory Efficient Fitting of Linear Models With High-Dimensional. Submitted by \u003ca href=\"https://pacha.dev\"\u003eMauricio \u0026ldquo;Pachá\u0026rdquo; Vargas Sepúlveda\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/11/25/translation-devguide-pt\"\u003eTranslating the rOpenSci Dev Guide into Portuguese: Collaboration, Community, Challenges, and Impact\u003c/a\u003e by Francesca Belem Lopes Palmeira, Beatriz Milz, Ariana Moura Cabral, Yanina Bellini Saibene, Daniel Vartanian, and Pedro Faria. We are very pleased to announce that our guide on package development, maintenance, and peer review is now available in Portuguese. In this blog post, the people who led the translation project share how the process unfolded, the challenges faced, the results achieved, and what participating in this effort meant to them. Other languages: \u003ca href='/pt/blog/2025/11/25/tradução-devguide-pt' lang='pt'\u003eTraduzindo o Dev Guide da rOpenSci para o Português: Colaboração, Comunidade, Desafios e Impacto (pt)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/11/06/computo-journal-reproducible-research-statistics-machine-learning\"\u003eComputo - A Journal for Transparent and Reproducible Research in Statistics and Machine Learning\u003c/a\u003e by Julien Chiquet, François-David Collin, Marie-Pierre Etienne, Pierre Neuvial, Aymeric Stamm, and Nelle Varoquaux. \u003ca href=\"https://computo-journal.org\"\u003eComputo\u003c/a\u003e is a journal promoting methodological, computational, and algorithmic contributions in statistics and machine learning that provide a better understanding of which models or methods are most appropriate to answer specific scientific questions. Computo leverages modern tools in programming and scientific reporting to support more transparent, interactive, and reproducible research outputs.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"https://computo-journal.org/assets/img/logo_text_vertical.svg\"\t\t\talt=\"Computo logo\" width=\"400\"\u003e\u003c/figure\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/photosearcher\"\u003ephotosearcher\u003c/a\u003e, searches Flickr for photographs and metadata. \u003ca href=\"https://github.com/ropensci/photosearcher/issues/22\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"update-of-the-vcr-chapter-in-http-testing-in-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#update-of-the-vcr-chapter-in-http-testing-in-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdate of the vcr chapter in HTTP testing in R\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;ve updated the introduction to vcr in the \u003ca href=\"https://books.ropensci.org/http-testing/vcr.html\"\u003eHTTP testing in R book\u003c/a\u003e, so that it reflects the current vcr version, in particular the \u003ccode\u003elocal_cassette()\u003c/code\u003e function.\u003c/p\u003e\u003ch3 id=\"jarl-just-another-r-linter\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#jarl-just-another-r-linter\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eJarl: just another R linter\u003c/h3\u003e\u003cp\u003eEtienne Bacher introduced the new CLI jarl in a \u003ca href=\"https://www.etiennebacher.com/posts/2025-11-20-introducing-jarl/\"\u003eblog post\u003c/a\u003e. Like Air, it is run in the terminal. Like the flir R package, it can fix bad patterns in R code.\u003c/p\u003e\u003ch3 id=\"pkgdown-220-makes-it-easier-for-llms-to-read-your-documentation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pkgdown-220-makes-it-easier-for-llms-to-read-your-documentation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003epkgdown 2.2.0 makes it easier for LLMs to read your documentation\u003c/h3\u003e\u003cp\u003eThe latest pkgdown version adds a step to the website building, that creates:\u003c/p\u003e\u003cul\u003e\u003cli\u003ea Markdown version of all HTML pages;\u003c/li\u003e\u003cli\u003ea standard file called \u003ccode\u003ellms.txt\u003c/code\u003e that compiles the content of the homepage and of the reference and article indices.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eRead more about this, including how to opt-out (one config line) in the \u003ca href=\"https://tidyverse.org/blog/2025/11/pkgdown-2-2-0/\"\u003erelease announcement\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"testthat-330\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#testthat-330\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003etestthat 3.3.0\u003c/h3\u003e\u003cp\u003eIf you use testthat, don\u0026rsquo;t miss its \u003ca href=\"https://tidyverse.org/blog/2025/11/testthat-3-3-0/\"\u003erelease announcement\u003c/a\u003e! Of note:\u003c/p\u003e\u003cul\u003e\u003cli\u003eA new function \u003ccode\u003eskip_unless_r()\u003c/code\u003e to skip tests depending on the R version;\u003c/li\u003e\u003cli\u003eTests using Suggested packages will now be automatically skipped on CRAN;\u003c/li\u003e\u003cli\u003eA new expectation \u003ccode\u003eexpect_shape()\u003c/code\u003e to check the dimensions, number of rows or number of columns!\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"a-git-trick-keeping-git-blame-informative\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-git-trick-keeping-git-blame-informative\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA Git trick: keeping Git blame informative\u003c/h3\u003e\u003cp\u003eIf you reformat your whole codebase with Air, you\u0026rsquo;ll end up with one or several commits that only change the aspect of your code. A good code style is tantamount to readability, but when you\u0026rsquo;re exploring the history through Git blame, that commit or those commits are not relevant. This problem is solvable!\u003c/p\u003e\u003cp\u003eThanks to Hugo Gruson to telling us this: you can create (and .Rbuildignore) a file called \u003ccode\u003e.git-blame-ignore-revs\u003c/code\u003e where you list the hashes of the commits you want to exclude from Git blame.\u003c/p\u003e\u003cp\u003eExample in \u003ca href=\"https://github.com/r-lib/testthat/blob/d695714d301819cde6013ecd40a9116880f394ad/.git-blame-ignore-rev\"\u003etestthat\u003c/a\u003e:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-txt\" data-lang=\"txt\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# This file lists revisions of large-scale formatting/style changes so that\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# they can be excluded from git blame results.\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e#\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# To set this file as the default ignore file for git blame, run:\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e#   $ git config blame.ignoreRevsFile .git-blame-ignore-revs\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# https://github.com/r-lib/testthat/pull/2121\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e13d17788e5d3a54fa83beed25e325703608f8b9f\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eTo use this file,\u003c/p\u003e\u003cul\u003e\u003cli\u003eyou tell your local Git about it by running \u003ccode\u003egit config blame.ignoreRevsFile .git-blame-ignore-revs\u003c/code\u003e;\u003c/li\u003e\u003cli\u003eGitHub, on the other hand, automatically \u003ca href=\"https://docs.github.com/en/repositories/working-with-files/using-files/viewing-and-understanding-files#ignore-commits-in-the-blame-view\"\u003epicks it up\u003c/a\u003e!\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"another-git-trick-rebase-all-commits\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#another-git-trick-rebase-all-commits\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAnother Git trick: rebase all commits\u003c/h3\u003e\u003cp\u003eImagine you work on a private repository, on a single branch, not bothering about a clean Git history. Then you have to make the repository public. How to fix up the history before doing so?\u003c/p\u003e\u003cp\u003eYou can rebase all the commits on main (or any branch) using the \u003ccode\u003e--root\u003c/code\u003e option of \u003ccode\u003egit rebase\u003c/code\u003e. So you can type \u003ccode\u003egit rebase -i --root\u003c/code\u003e and, say, combine all the commits into a very deceitful \u0026ldquo;First commit\u0026rdquo;!\u003c/p\u003e\u003cp\u003eYou can practice \u003ca href=\"https://docs.ropensci.org/saperlipopette/reference/exo_rebase_i.html\"\u003e\u003ccode\u003egit rebase -i\u003c/code\u003e\u003c/a\u003e with the saperlipopette R package.\u003c/p\u003e\u003ch3 id=\"some-talks-from-positconf2025\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#some-talks-from-positconf2025\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSome talks from posit::conf(2025)\u003c/h3\u003e\u003cp\u003eBesides talks by community members (see HQ section), you can watch recordings of talks relevant to software development:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://youtu.be/g6QU16jOt0g\"\u003eCan I trust this Package\u003c/a\u003e by Collin S. Gillespie.\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://youtu.be/bAA_O_gNhfI\"\u003eExtending the horizons of R with Rust\u003c/a\u003e by Andrés Quintero.\u003c/li\u003e\u003cli\u003eThe keynote talk \u003ca href=\"https://www.youtube.com/watch?v=B-bMX_l3nkk\"\u003eThe Psychology of Technologists\u003c/a\u003e by Cat Hicks.\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://youtu.be/ML8z8xkqIA0\"\u003eThe Curse of Documentation\u003c/a\u003e by Michael Chow.\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://youtu.be/DJVSEOjvwb8\"\u003eAir - A blazingly fast R code formatter\u003c/a\u003e by Davis Vaughan and Lionel Henry.\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://youtu.be/GEP61GjwTjE\"\u003eEnemies to lovers: How non-programmers can make sparks fly when using testthat during package development\u003c/a\u003e by Libby McKenna.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/11/28/news-november-2025/","date_published":"2025-11-28T00:00:00+00:00","date_modified":"2025-11-28T11:58:48+01:00"},{"id":"https://doi.org/10.59350/fgbq0-zcn87","title":"Translating the rOpenSci Dev Guide into Portuguese: Collaboration, Community, Challenges, and Impact","language":"en","authors":[{"name":"Ariana Moura Cabral","url":"https://orcid.org/0000-0002-9804-353X","avatar":"https://github.com/arianacabral.png","_role":["author"]},{"name":"Beatriz Milz","url":"https://orcid.org/0000-0002-3064-4486","avatar":"https://github.com/beatrizmilz.png","_role":["author"]},{"name":"Daniel Vartanian","url":"https://orcid.org/0000-0001-7782-759X","avatar":"https://github.com/danielvartan.png","_role":["author"]},{"name":"Francesca Belem Lopes Palmeira","url":"https://orcid.org/0000-0002-7597-1157","avatar":"https://github.com/fblpalmeira.png","_role":["author"]},{"name":"Pedro Faria","url":"https://ropensci.org/author/pedro-faria/","avatar":"https://github.com/pedropark99.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","Software Peer Review","multilingual","babeldown","dev guide","package development","welcome"],"content_html":"\u003ch2 id=\"introduction\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#introduction\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIntroduction\u003c/h2\u003e\u003cp\u003erOpenSci curates packages developed in the R programming language and also offers a well-established \u003ca href=\"/software-review\"\u003epeer review process\u003c/a\u003e for R packages. To guide this process, rOpenSci created the \u003cstrong\u003erOpenSci Packages: Development, Maintenance, and Peer Review\u003c/strong\u003e guide (also known as the \u0026ldquo;Dev Guide\u0026rdquo;). The guide presents recommended procedures for developing and submitting packages to the rOpenSci collection, clarifying each step and ensuring transparency throughout the process.\u003c/p\u003e\u003cp\u003eInitially, the Dev Guide was created in \u003ca href=\"https://devguide.ropensci.org/\"\u003eEnglish\u003c/a\u003e and later gained a \u003ca href=\"https://devguide.ropensci.org/es/index.es.html\"\u003eSpanish\u003c/a\u003e version, thanks to a \u003ca href=\"/blog/2024/03/11/devguide-0.9.0/\"\u003ecommunity-driven translation effort\u003c/a\u003e. More recently, a group of collaborators worked together to translate the Dev Guide into Portuguese. In this post, we describe how this collaborative translation process unfolded, recognizing that translating resources is one way to contribute to rOpenSci’s mission of fostering a culture of open and reproducible research.\u003c/p\u003e\u003ch2 id=\"why-translate-the-dev-guide-into-portuguese\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-translate-the-dev-guide-into-portuguese\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy translate the Dev Guide into Portuguese?\u003c/h2\u003e\u003cp\u003eTranslating the Dev Guide is part of rOpenSci’s broader effort to reduce language barriers in the scientific community. English remains the dominant language in technical and scientific materials, which limits the participation of those who do not speak it fluently.\u003c/p\u003e\u003cp\u003ePortuguese is the sixth most spoken language in the world and connects research communities across Latin America, Europe, and Africa. Translating the guide is a concrete way to broaden the diversity of contributors, strengthen local communities, and encourage the review and development of R packages in Portuguese-speaking countries.\u003c/p\u003e\u003ch2 id=\"translation-project-timeline\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#translation-project-timeline\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTranslation project timeline\u003c/h2\u003e\u003cp\u003eAfter the release of the Spanish version, Brazilian contributor Pedro Faria \u003ca href=\"https://github.com/ropensci/dev_guide/issues/670\"\u003ebegan translating the Dev Guide into Portuguese\u003c/a\u003e in June 2023. This initiative provided the perfect opportunity to test, in another language, the entire process and tools used for the Spanish translation.\u003c/p\u003e\u003cp\u003eBut that was only the beginning. Shortly afterward, the rOpenSci team wrote a \u003ca href=\"/blog/2023/10/20/news-october-2023/#help-us-translate-our-dev-guide-to-portuguese\"\u003ecall for contributors\u003c/a\u003e to bring more people into the effort. This led to the formation of the first group of collaborators committed to translating and reviewing the guide, continuing the work started by Pedro.\u003c/p\u003e\u003cp\u003eThe initiative continued to take shape and gradually reached more people. Among them was António Pedro from Angola, leader of the \u003ca href=\"https://angolaosc.org/\"\u003eAngola Open Source Community\u003c/a\u003e (AOSC), who expressed interest in involving his community in this collective effort.\u003c/p\u003e\u003cp\u003eOver time, rOpenSci organized several meetings to introduce the initiative, connect contributors, and keep the enthusiasm for the translation alive. The first of these was an online session (\u003ca href=\"/events/portuguese-translation/\"\u003eTranslating the rOpenSci Dev Guide into Portuguese\u003c/a\u003e), where Pedro presented the translation workflow. Those interested in collaborating joined the rOpenSci Slack and began working on the revisions.\u003c/p\u003e\u003cp\u003eAs a next step to maintain engagement, a community call in Portuguese, \u003ca href=\"/commcalls/translation-portuguese/\"\u003eThe community speaks Portuguese\u003c/a\u003e, was held, marking the first rOpenSci event conducted in Portuguese. In addition to sharing updates on the Portuguese translation project, the call highlighted other similar initiatives within the R community. To further encourage participation, a \u003ca href=\"https://latinr.org/en/cronograma/translaton/translaton-en.html\"\u003etranslation hackathon\u003c/a\u003e was organized in partnership with the \u003ca href=\"https://latinr.org/pt/\"\u003eLatinR\u003c/a\u003e conference later that same year. Pedro Faria, Beatriz Milz, and Francesca Belem Lopes Palmeira led both activities, presenting the initiative, guiding discussions, and inspiring collaborative contributions.\u003c/p\u003e\u003cp\u003eOver time, more people joined the project, and the translation was completed in October 2025. More than two years passed between the first translated lines and the completion of this collaborative translation initiative.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eFigure 1\u003c/strong\u003e – Timeline of how the events unfolded.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/11/25/translation-devguide-pt/fig-1-en.png\"\u003e\u003c/figure\u003e\u003cp\u003eSource: Francesca Belem Lopes Palmeira and Ariana Moura Cabral.\u003c/p\u003e\u003ch2 id=\"translation-process\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#translation-process\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTranslation process\u003c/h2\u003e\u003cp\u003eThe \u003ca href=\"https://translationguide.ropensci.org\"\u003erOpenSci Translation Guide\u003c/a\u003e played a key role in the translation process. This guide documents the infrastructure, roles, and technical steps involved in translating and maintaining rOpenSci’s multilingual materials. It was created based on lessons learned from previous translation efforts and is inspired by rOpenSci’s own peer-review system for packages.\u003c/p\u003e\u003cp\u003eAll tasks related to the Portuguese translation were organized on GitHub, in the \u003ca href=\"https://github.com/ropensci/dev_guide\"\u003eDev Guide repository\u003c/a\u003e. The Dev Guide is written in R Markdown, with each chapter stored in a separate \u003ccode\u003e.Rmd\u003c/code\u003e file. Each original English chapter was first automatically translated using the \u003ca href=\"https://docs.ropensci.org/babeldown/\"\u003e{babeldown}\u003c/a\u003e package\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e. This package, part of the rOpenSci collection, relies on the \u003ca href=\"https://www.deepl.com\"\u003eDeepL\u003c/a\u003e API, an AI-powered translation tool.\u003c/p\u003e\u003cp\u003eThe initial translation was submitted to the repository through a Pull Request (PR), so it could be reviewed before being merged into the guide. Then, two different people reviewed the automatically translated text. Having two reviewers was essential to refine the result and ensure the fluency of the writing. After incorporating the reviewers’ suggestions, the PR was approved.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eFigure 2\u003c/strong\u003e - Visual representation of the translation process for each chapter of the Dev Guide.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/11/25/translation-devguide-pt/fig-2-en.png\"\u003e\u003c/figure\u003e\u003cp\u003eSource: Francesca Belem Lopes Palmeira.\u003c/p\u003e\u003cp\u003eThis year, when the new version of the Dev Guide is published it will include the Portuguese translation 🎉. Everyone who contributed to the translation and review will be credited as authors of the translation. This version will have its own DOI (Digital Object Identifier), and the PDF will be available on \u003ca href=\"https://zenodo.org/\"\u003eZenodo\u003c/a\u003e, in addition to the guide’s official website, enabling formal citation of the translation using these details.\u003c/p\u003e\u003ch2 id=\"translation-team\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#translation-team\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTranslation team\u003c/h2\u003e\u003cp\u003eThe Dev Guide is composed of multiple chapters, which means that many people participated and collaborated in the review process. Community involvement was essential to completing each stage of the translation effort. Collaboration among contributors from different Portuguese-speaking countries enriched the process, making it more diverse and bringing multiple perspectives. It was especially meaningful to see contributors from Angola, Brazil, and Portugal working together, and this plurality is also part of the project’s strength.\u003c/p\u003e\u003cp\u003eBelow is a list of the contributors, in alphabetical order:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eAntónio Pedro, Angola\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eAriana Moura Cabral, Brazil\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eBeatriz Milz, Brazil\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eDaniel Vartanian, Brazil\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFrancesca Belem Lopes Palmeira, Brazil\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eIldeberto Vasconcelos, Angola\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eJoão Granja-Correia, Portugal\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eMarcelo Perlin, Brazil\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003ePedro Faria, Brazil\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eRafael Fontenelle, Brazil\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSamuel Carleial Fernandes, Brazil\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIn addition, the translation project was coordinated by \u003ca href=\"https://yabellini.netlify.app/\"\u003eYanina Bellini Saibene\u003c/a\u003e, rOpenSci’s Community Manager. Other members of the rOpenSci team also played key roles in reviewing Pull Requests, including \u003ca href=\"https://masalmon.eu/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"participant-experiences\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#participant-experiences\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eParticipant experiences\u003c/h2\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eParticipating in the translation of the Dev Guide into Portuguese was an incredibly enriching experience for my professional journey. It was the first time I worked within a transparent, reproducible, and collaborative peer-review process. Overall, it has been very rewarding to see the project completed and accessible to the entire Portuguese-speaking community.\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eFrancesca Belem Lopes Palmeira \u003c/footer\u003e\u003c/blockquote\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003e\u003cp\u003eIn my point of view, one of the greatest strengths of the R community is its commitment to advancing and improving science through open projects and open data, valuing transparency and collective contribution. This translation project was yet another example of that philosophy. As an author of open books myself (including my \u003ca href=\"https://pedropark99.github.io/Introducao_R/\"\u003eintroductory R book\u003c/a\u003e, in Portuguese 😉), this was the first time I experienced an open translation workflow like this, and I must say I greatly enjoyed the experience.\u003c/p\u003e\u003cp\u003eOne interesting aspect of this project was the methodology used, which relied on tools such as \u003ca href=\"https://quarto.org/\"\u003eQuarto\u003c/a\u003e, \u003ca href=\"https://rmarkdown.rstudio.com/\"\u003e\u003ccode\u003e{rmarkdown}\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://docs.ropensci.org/babeldown/index.html\"\u003e\u003ccode\u003e{babeldown}\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://developers.deepl.com/docs/getting-started/intro\"\u003eDeepL\u003c/a\u003e. This approach proved highly effective in several steps of the translation process, and it may be a compelling option for others seeking a methodology that: 1) is open and inclusive for its audience; 2) introduces some degree of automation into the workflow; and 3) provides good file organization for the project (since, depending on the size of the material, file management can become a crucial part of the workflow).\u003c/p\u003e\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003ePedro Faria \u003c/footer\u003e\u003c/blockquote\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eFor me, contributing to this translation project was both a learning journey and an exchange of experiences. On one hand, I was able to meet people who, like me, value knowledge sharing and believe in the transformative power of words, learn more about rOpenSci’s values, and update myself on best practices for developing and managing R packages. On the other hand, I had the chance to contribute, even if just a little, to someone else\u0026rsquo;s learning, which is deeply rewarding to me. I hope the translated material opens new pathways for those who also appreciate the R language and wish to explore its vast universe. In the end, I see this experience as a continuous cycle of sharing and growth, which reminds me of the words of Cora Coralina: \u0026ldquo;Happy are those who share what they know and learn as they teach\u0026rdquo;.\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eAriana Moura Cabral \u003c/footer\u003e\u003c/blockquote\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eEven though I already had experience with package development, reviewing the chapters was an opportunity to learn more and update myself on best practices. Until now, we did not have such a complete, free, and online resource in Portuguese about R package development. The translated version of the Dev Guide will be very useful for people interested in learning more about package development, even for those who do not plan to submit a package to rOpenSci’s peer-review system.\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eBeatriz Milz \u003c/footer\u003e\u003c/blockquote\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eTranslating a text into a language with so many dialects, such as Portuguese, brought several challenges. For example, which variant should be used: Brazilian, European, Angolan, or another Lusophone variety? The pronoun “você” (you) is very common among Brazilian Portuguese speakers, but it may sound unusual to speakers of European Portuguese. No translation will please everyone, but the team made a conscious effort to reflect on these issues and, whenever possible, propose satisfactory solutions. I learned a lot throughout this process and through the discussions it sparked. I hope the Portuguese translation of the Dev Guide helps include more Portuguese speakers and supports the spread of good practices in R development.\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eDaniel Vartanian \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"challenges\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#challenges\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChallenges\u003c/h2\u003e\u003cp\u003eTranslating a document goes far beyond simply replacing words from one language with another. In reality, it is a nuanced process, and several challenges can emerge along the way.\u003c/p\u003e\u003cp\u003eIn the translation of the Dev Guide, one of the main challenges was preserving the meaning and tone of the original text, including maintaining consistent terminology and style from beginning to end, especially considering that the initial translation was automated. To ensure consistency across the material, the text underwent multiple rounds of review by more than one person, guaranteeing that the final result remained readable, technical, and free of unnecessary linguistic barriers.\u003c/p\u003e\u003cp\u003eThroughout the process, important discussions arose about consistent terminology and how to adapt technical expressions without losing precision. Some of those conversations took place directly in the Pull Requests (e.g., \u003ca href=\"https://github.com/ropensci/dev_guide/pull/717\"\u003e#717\u003c/a\u003e, \u003ca href=\"https://github.com/ropensci/dev_guide/pull/855\"\u003e#855\u003c/a\u003e, \u003ca href=\"https://github.com/ropensci/dev_guide/pull/856\"\u003e#856\u003c/a\u003e), where collaborators debated stylistic alternatives, vocabulary adjustments, and specific translation decisions. These records clearly illustrate how the work was collective, iterative, and attentive, reflecting a balance between clarity, technical accuracy, and linguistic sensitivity.\u003c/p\u003e\u003cp\u003eDuring the review process, particular attention was also given to reducing gendered language (for example, changing “os usuários” (the users) to “os(as) usuários(as)” or “as pessoas usuárias”)\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e, while still prioritizing fluid and inclusive writing. Additionally, because automatic translation tends to translate everything, another recurring concern was restoring proper names (books, packages, or functions) back to English when appropriate.\u003c/p\u003e\u003cp\u003eOne barrier that remains for readers of the Portuguese Dev Guide is that most of the function names, package documentation, and book references still point to English-language content. However, the rOpenSci team has been working to translate blog posts referenced in the Dev Guide into Portuguese, which will gradually help reduce this gap.\u003c/p\u003e\u003ch2 id=\"impact-and-next-steps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#impact-and-next-steps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eImpact and Next Steps\u003c/h2\u003e\u003cp\u003eThe Portuguese version of the Dev Guide is a valuable study resource across Portuguese-speaking communities, not only for those interested in developing R packages following best practices, but also for anyone seeking to better understand rOpenSci’s submission guidelines and peer review process. It helps open doors, reduce language barriers, and strengthen open science.\u003c/p\u003e\u003cp\u003eThe translated guide also lays important groundwork for future rOpenSci initiatives, including the possibility of a Portuguese-language cohort of the \u003ca href=\"/champions/\"\u003e\u003cstrong\u003erOpenSci Champions\u003c/strong\u003e\u003c/a\u003e program. This program supports individuals from historically and systematically excluded groups who want to contribute to rOpenSci and to open source and open science communities more broadly. Its goal is to make the scientific software ecosystem more diverse, sustainable, and accessible, reflecting the plurality of the communities it serves.\u003c/p\u003e\u003cp\u003eIn addition, the Portuguese translation enables the launch of a pilot package review conducted entirely in Portuguese, led by Ana Carolina Moreno as part of her project in the \u003ca href=\"/blog/2025/07/03/champions-2025/\"\u003erOpenSci Champions 2025 cohort\u003c/a\u003e. This pilot will make it possible to test the peer-review process in another language and expand access and participation among new contributors.\u003c/p\u003e\u003cp\u003eWith the translation now complete, we plan to integrate the lessons learned into rOpenSci’s \u003ca href=\"https://translationguide.ropensci.org/\"\u003eofficial translation guidelines\u003c/a\u003e. The goal is to update the guide to document successful practices from the project and to incorporate the agreements and instructions developed by the Portuguese translation team, making it easier to support future collaborations and translations into other languages. We hope that this will strengthen rOpenSci’s infrastructure for future translation efforts!\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eSalmon M (2025). \u003cem\u003ebabeldown: Helpers for Automatic Translation of Markdown-based Content\u003c/em\u003e. R package version 0.0.0.9000. \u003ca href=\"https://github.com/ropensci-review-tools/babeldown\"\u003ehttps://github.com/ropensci-review-tools/babeldown\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eTranslation note: In English, the expression “the users” is gender-neutral, but in Portuguese it defaults to the masculine form. In this translation, inclusive alternatives were adopted where appropriate to avoid unnecessary gender marking.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2025/11/25/translation-devguide-pt/","date_published":"2025-11-25T00:00:00+00:00","date_modified":"2025-11-25T08:44:54-03:00"},{"id":"https://doi.org/10.59350/6pnct-5cj35","title":"Computo - A Journal for Transparent and Reproducible Research in Statistics and Machine Learning","language":"en","authors":[{"name":"Aymeric Stamm","url":"https://orcid.org/0000-0002-8725-3654","avatar":"https://ropensci.org/img/community/aymeric-stamm.jpg","_role":["author"]},{"name":"François-David Collin","url":"https://orcid.org/0000-0002-8374-7163","avatar":"https://github.com/fradav.png","_role":["author"]},{"name":"Julien Chiquet","url":"https://orcid.org/0000-0002-3629-3429","avatar":"https://ropensci.org/img/community/julien-chiquet.jpg","_role":["author"]},{"name":"Marie-Pierre Etienne","url":"https://orcid.org/0000-0002-2097-2267","avatar":"https://ropensci.org/img/community/marie-pierre-etienne.jpg","_role":["author"]},{"name":"Nelle Varoquaux","url":"https://orcid.org/0000-0002-8748-6546","avatar":"https://github.com/nellev.png","_role":["author"]},{"name":"Pierre Neuvial","url":"https://orcid.org/0000-0003-3584-9998","avatar":"https://ropensci.org/img/community/pierre-neuvial.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["software-peer-review","reproducible research","open science","statistics","machine learning","R","community"],"content_html":"\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003ca href=\"https://computo-journal.org/site/about.html\"\u003e\u003cimg src=\"https://computo-journal.org/assets/img/logo_text_vertical.svg\"         alt=\"Computo logo\"ZgotmplZ           ZgotmplZ                   style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 250px; margin-right: 15px\"    /\u003e \u003c/a\u003e                \u003cp\u003e                  \u003ca href=\"https://computo-journal.org\"\u003eComputo\u003c/a\u003e is a journal promoting methodological, computational, and algorithmic contributions in statistics and machine learning that provide a better understanding of which models or methods are most appropriate to answer specific scientific questions. Computo leverages modern tools in programming and scientific reporting to support more transparent, interactive, and reproducible research outputs. We\u0026rsquo;re excited to introduce Computo to the rOpenSci community as a complementary road to publishing reproducible research alongside rOpenSci\u0026rsquo;s software peer review initiatives.                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003ch2 id=\"why-we-created-computo\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-we-created-computo\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy we created Computo\u003c/h2\u003e\u003cp\u003eThe idea of Computo was born out of a desire to foster a deeper scientific understanding as well as a need to address several challenges in the current scientific publishing landscape, especially within statistics and machine learning. In particular the reproducibility crisis is a significant concern, and the increasing volume of publications straining the review process is potentially impacting quality of scientific publications\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eThe rapid proliferation of new methods in machine learning and statistics can make it difficult to establish a clear state of the art of statistical approaches that address specific scientific questions. There is often a lack of established, subject-specific benchmark datasets, and the pressure to demonstrate the superiority of novel methods can sometimes lead to less-than-objective performance evaluations. Furthermore, publishing negative results (e.g. failure to demonstrate a statistically significant improvement), which are crucial for scientific progress, remains challenging.\u003c/p\u003e\u003cp\u003eComputo was created to promote methodological and algorithmic contributions that not only are reproducible but also provide a better understanding of which models or methods are most appropriate to answer specific scientific questions. We believe that building up solid scientific knowledge requires both the reproducibility of published results and a clear articulation of their scientific implications. While many journals now require code and data, these are often insufficient on their own to ensure true reproducibility or to fully grasp the scientific contribution.\u003c/p\u003e\u003ch2 id=\"what-computo-offers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-computo-offers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat Computo offers\u003c/h2\u003e\u003cp\u003eComputo differs from other existing journals both in its scope and in the centrality given to reproducibility and open science.\u003c/p\u003e\u003ch3 id=\"scope\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#scope\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eScope\u003c/h3\u003e\u003cp\u003eComputo welcomes a range of contributions in statistics and machine learning:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eNew methods with original stats/ML developments, or numerical studies that illustrate theoretical results in stats/ML;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eCase studies or surveys on stats/ML methods to address a specific (type of) question in data analysis, neutral comparison studies that provide insight into when, how, and why the compared methods perform well or less well;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSoftware/tutorial papers to present implementations of stats/ML algorithms or to feature the use of a package/toolbox. For such papers we expect not only the description of an existing implementation but also the study of a concrete use case. If applicable, a comparison to related works and appropriate benchmarking are also expected.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"reproducibility-and-open-science\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#reproducibility-and-open-science\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReproducibility and open science\u003c/h3\u003e\u003cp\u003eBy combining open access, reproducibility, and methodological clarity, Computo aims to support the scientific community in making informed and transparent choices in data analysis:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eComputo is an online-only journal, under the \u003ca href=\"https://en.wikipedia.org/wiki/Diamond_open_access\" title=\"diamond open access\"\u003ediamond open access\u003c/a\u003e publication model, free for authors and readers;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eComputo systematically makes all exchanges between authors and reviewers available: reviews are often very useful to readers, and making them available is also a recognition of the important work done by reviewers. To address the fear of some prospective authors that an overly negative review could undermine the chances of later publication, we have chosen to make the reviews available upon publication. Moreover, the reviewers may choose to remain anonymous, as some reviewers do not feel comfortable lifting their anonymity;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eComputo uses an original publication format that guarantees the reproducibility of results: articles are submitted as notebooks integrating text, code, equations and bibliographic references. Thanks to \u003ca href=\"https://quarto.org/\"\u003eQuarto\u003c/a\u003e, we are able to support R, Python and Julia. A submission is associated with a git repository (hosted on \u003ca href=\"https://github.com\"\u003eGitHub\u003c/a\u003e) configured to demonstrate, dynamically and durably, the reproducibility of the contribution. HTML and PDF versions of the article are automatically built through GitHub Actions. Templates to prepare a new submission are available from the \u003ca href=\"https://computo-journal.org/site/guidelines-authors.html\" title=\"Computo submission page\"\u003eComputo submission page\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"where-we-are-at\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#where-we-are-at\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhere we are at\u003c/h3\u003e\u003cp\u003eSince its inception in late 2022, we have created a robust ecosystem for reproducible science. As of July 2025, we have published 17 articles, and 4 are under review. An example of published paper is given below:\u003c/p\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003e\u003cfigure\u003e\u003cimg src=\"https://codimd.math.cnrs.fr/uploads/upload_3627015bebde47d40c656be41d76c014.png\"\t\t\talt=\"Efficient simulation of individual-based population models\"\u003e\u003c/figure\u003e\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eGiorgi et al.  in \u003ccite title=\"Source Title\"\u003e\u003ca href=\"https://computo-journal.org/published-202412-giorgi-efficient/\"\u003eEfficient simulation of individual-based population models, \u003cstrong\u003eComputo\u003c/strong\u003e, 2024.\u003c/a\u003e\u003c/cite\u003e\u003c/footer\u003e\u003c/blockquote\u003e\u003ch3 id=\"collaboration-and-challenges\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#collaboration-and-challenges\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCollaboration and challenges\u003c/h3\u003e\u003cp\u003eWe use \u003ca href=\"https://github.com/computorg\"\u003eGitHub to host our repositories\u003c/a\u003e and Quarto for document creation, ensuring that all code and data are openly available (contributions for GitLab support are welcome!). This collaborative approach has allowed us to overcome numerous challenges, from technical hurdles to ensuring the quality and reproducibility of published work.\u003c/p\u003e\u003cp\u003eOne significant challenge has been refining our peer-review process to balance rigor with accessibility. We've explored various platforms and are currently considering a future move towards a more community-driven and transparent system to enhance engagement.\u003c/p\u003e\u003cp\u003eA more fundamental challenge lies in defining and evaluating the true reproducibility of scientific work. We distinguish between \u0026ldquo;editorial reproducibility\u0026rdquo; – the ability to re-run the provided code and obtain the same outputs – and \u0026ldquo;scientific reproducibility,\u0026rdquo; which delves deeper into the robustness and generalizability of the findings. Establishing clear guidelines and policies for this, especially in complex fields like Deep Learning, has been a continuous effort. For instance, evaluating a Deep Learning paper where retraining a model might be infeasible or beyond the scope of the submitted work requires careful consideration of what constitutes a \u0026ldquo;reproducible\u0026rdquo; contribution from a scientific standpoint, beyond just code execution.\u003c/p\u003e\u003ch2 id=\"the-future-of-computo\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-future-of-computo\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe future of Computo\u003c/h2\u003e\u003cp\u003eWith a shared focus on improving the quality of scientific contributions, rOpenSci and Computo offer complementary approaches to fostering reproducible research. rOpenSci (and by extension pyOpenSci for the Python side) focuses on the reliability and robustness of software tools through a transparent, community-driven peer review process. Computo, in turn, ensures that these tools are used in transparent and fully reproducible computational scientific articles, preserving code, data, and environment specifications.\u003c/p\u003e\u003cp\u003eLooking ahead, we aim to further enhance the dissemination of scientific knowledge by moving towards greater interactivity, richer data visualizations, and exploring innovative communication models, drawing inspiration from initiatives like the former \u003ca href=\"https://distill.pub\"\u003edistill.pub\u003c/a\u003e. Our approach is to progressively engage all stakeholders: editors, engineers, authors, and the wider scientific community in this evolution.\u003c/p\u003e\u003cp\u003eOur concrete next steps focus on:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eStreamlining Workflows and Tools:\u003c/strong\u003e Consolidating our editorial process, potentially within a more community-focused environment, and expanding authoring tools with user-friendly computational environments for pre-submission.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eEnsuring Long-Term Access and Innovation:\u003c/strong\u003e Deploying a robust platform for long-term reproducibility, including on-the-fly container creation and archiving, while continuing to explore and integrate novel ways to present and interact with scientific findings.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe look forward to continuing our journey with the support of our community and like-minded organizations like rOpenSci.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eHanson, M. A., Barreiro, P. G., Crosetto, P., \u0026amp; Brockington, D. (2024). The strain on scientific publishing. Quantitative Science Studies, 5(4), 823-843.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2025/11/06/computo-journal-reproducible-research-statistics-machine-learning/","date_published":"2025-11-06T00:00:00+00:00","date_modified":"2025-11-06T20:23:17+01:00"},{"id":"https://doi.org/10.59350/cwdyp-ads64","title":"rOpenSci News Digest, October 2025","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2025/10/24/news-october-2025\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"2025-11-06-community-call-graceful-internet-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#2025-11-06-community-call-graceful-internet-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e2025-11-06 Community call: Graceful Internet Packages\u003c/h3\u003e\u003cp\u003eJoin us for our next Community Call, \u003ca href=\"/commcalls/graceful-internet-packages/\"\u003e\u0026ldquo;Graceful Internet Packages\u0026rdquo;\u003c/a\u003e, on Thursday, 06 November 2025 at 15:00 UTC featuring Matthias Grenié, Tan Ho, and Salix Dubois. In this session, we\u0026rsquo;ll explore how to design and maintain R packages that interact with online data sources. Our speakers will share practical lessons, examples, and best practices to help R package developers create reliable packages.\u003c/p\u003e\u003ch3 id=\"community-call-recording-r-multiverse-a-new-way-to-publish-r-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call-recording-r-multiverse-a-new-way-to-publish-r-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity call recording: R-multiverse, a new way to publish R packages\u003c/h3\u003e\u003cp\u003e\u003ca href=\"/commcalls/r-multiverse/\"\u003eResources associated with the community call\u003c/a\u003e, including the video recording, slides, notes have been posted.\u003c/p\u003e\u003cp\u003eYou can also find the notes from the related \u003ca href=\"https://ropensci.org/events/coworking-2025-10/\"\u003ecoworking session\u003c/a\u003e on our website.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday November 3rd, 09:00 Australia Western (01:00 UTC), \u003ca href=\"/events/coworking-2025-11/\"\u003e\u0026ldquo;Code Review with rOpenSci\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/liz-hare\"\u003eLiz Hare\u003c/a\u003e.\u003cul\u003e\u003cli\u003eExplore resources for Code review;\u003c/li\u003e\u003cli\u003eSign up to volunteer to do \u003ca href=\"https://airtable.com/app8dssb6a7PG6Vwj/shrnfDI2S9uuyxtDw\"\u003esoftware peer-review\u003c/a\u003e at rOpenSci;\u003c/li\u003e\u003cli\u003eChat with Liz Hare, and learn more about rOpenSci\u0026rsquo;s code review and the resources available.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday December 2nd, 14h00 Europe Central (13:00 UTC), \u003ca href=\"/events/coworking-2025-12/\"\u003e\u0026ldquo;Getting to know The Carpentries\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/angelique-trusler/\"\u003eAngelique Trusler\u003c/a\u003e.\u003cul\u003e\u003cli\u003eVisit \u003ca href=\"https://carpentries.org/\"\u003eThe Carpentries\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eMeet community host, Angelique Trusler, and learn more about The Carpentries and how you might get involved.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday January 13th, 9:00 Americas Pacific (17:00 UTC), \u003ca href=\"/events/coworking-2026-01/\"\u003e\u0026ldquo;Let it go!\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e.\u003cul\u003e\u003cli\u003eSpend some time reviewing the forums, Slack workspaces, Newsletters, RSS feeds (etc. etc.) you\u0026rsquo;re subscribed to;\u003c/li\u003e\u003cli\u003eUnsubscribe to all you no longer need (Let it go!);\u003c/li\u003e\u003cli\u003eMeet co-host, Yanina Bellini Saibene, and discuss strategies for this New Year decluttering of your digital (or perhaps not-so-digital) life. And remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/partialling.out\"\u003epartialling.out\u003c/a\u003e, developed by Marc Bosch-Matas: Creates a data frame with the residuals of partial regressions of the main explanatory variable and the variable of interest. This method follows the Frisch-Waugh-Lovell theorem, as explained in Lovell (2008) \u003ca href=\"https://doi.org/10.3200/JECE.39.1.88-91\"\u003ehttps://doi.org/10.3200/JECE.39.1.88-91\u003c/a\u003e. It is available on \u003ca href=\"https://CRAN.R-project.org/package=partialling.out\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/703\"\u003ereviewed\u003c/a\u003e by Christian Testa, Kyle Butts, and Adam Loy.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following fourteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/saperlipopette\" title=\"Create Example Git Messes\"\u003esaperlipopette\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-training/saperlipopette/releases/tag/v0.1.0\"\u003e\u003ccode\u003ev0.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/datapack\" title=\"A Flexible Container to Transport and Manipulate Data and Associated Resources\"\u003edatapack\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/datapack/releases/tag/1.4.2\"\u003e\u003ccode\u003e1.4.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/fingertipsR\" title=\"Fingertips Data for Public Health\"\u003efingertipsR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/fingertipsR/releases/tag/v1.1.0\"\u003e\u003ccode\u003ev1.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/googleLanguageR\" title=\"Call Googles Natural Language, Cloud Translation, Cloud Speech, and Cloud Text-to-Speech' APIs\"\u003egoogleLanguageR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/googleLanguageR/releases/tag/v0.3.1.1\"\u003e\u003ccode\u003ev0.3.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lingtypology\" title=\"Linguistic Typology and Mapping\"\u003elingtypology\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lingtypology/releases/tag/v1.1.24\"\u003e\u003ccode\u003ev1.1.24\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/occCite\" title=\"Querying and Managing Large Biodiversity Occurrence Datasets\"\u003eoccCite\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/occCite/releases/tag/v0.6.1\"\u003e\u003ccode\u003ev0.6.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/openalexR\" title=\"Getting Bibliographic Records from OpenAlex Database Using DSL API\"\u003eopenalexR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/openalexR/releases/tag/v2.0.2\"\u003e\u003ccode\u003ev2.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/partialling.out\" title=\"Residuals from Partial Regressions\"\u003epartialling.out\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/partialling.out/releases/tag/cran\"\u003e\u003ccode\u003ecran\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spatsoc\" title=\"Group Animal Relocation Data by Spatial and Temporal Relationship\"\u003espatsoc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spatsoc/releases/tag/v0.2.11\"\u003e\u003ccode\u003ev0.2.11\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stats19\" title=\"Work with Open Road Traffic Casualty Data from Great Britain\"\u003estats19\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stats19/releases/tag/v3.4.0\"\u003e\u003ccode\u003ev3.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tidyhydat\" title=\"Extract and Tidy Canadian Hydrometric Data\"\u003etidyhydat\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidyhydat/releases/tag/v0.7.2\"\u003e\u003ccode\u003ev0.7.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/USAboundaries\" title=\"Historical and Contemporary Boundaries of the United States of America\"\u003eUSAboundaries\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/USAboundaries/releases/tag/v0.5.0\"\u003e\u003ccode\u003ev0.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/USAboundariesData\" title=\"Datasets for the USAboundaries package\"\u003eUSAboundariesData\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/USAboundariesData/releases/tag/v0.5.0\"\u003e\u003ccode\u003ev0.5.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/weathercan\" title=\"Download Weather Data from Environment and Climate Change Canada\"\u003eweathercan\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weathercan/releases/tag/v0.7.6\"\u003e\u003ccode\u003ev0.7.6\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are fifteen recently closed and active submissions and 3 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%225/awaiting-reviewer(s)-response%22\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/710\"\u003emantis\u003c/a\u003e, Multiple Time Series Scanner. Submitted by \u003ca href=\"https://github.com/phuongquan\"\u003ePhuong Quan\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/688\"\u003edistionary\u003c/a\u003e, Create and Evaluate Probability Distributions. Submitted by \u003ca href=\"https://vincenzocoia.com\"\u003eVincenzo Coia, Ph.D., P.Stat.\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/667\"\u003eread.abares\u003c/a\u003e, Provides simple downloading, parsing and importing of Australian Bureau of Agricultural and Resource Economics and Sciences (ABARES) data sources. Submitted by \u003ca href=\"https://adamhsparks.netlify.app/\"\u003eAdam H. Sparks\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/720\"\u003ebabelquarto\u003c/a\u003e, Renders a Multilingual Quarto Book. Submitted by \u003ca href=\"https://masalmon.eu/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/714\"\u003eopenFDA\u003c/a\u003e, openFDA API. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/718\"\u003ercrisp\u003c/a\u003e, Automate the Delineation of Urban River Spaces. Submitted by \u003ca href=\"https://github.com/cforgaci\"\u003eClaudiu Forgaci\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/709\"\u003ereviser\u003c/a\u003e, Tools for Studying Revision Properties in Real-Time Time Series Vintages. Submitted by \u003ca href=\"https://marcburri.github.io/\"\u003eMarc Burri\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/703\"\u003epartialling.out\u003c/a\u003e, Residuals from partial regressions. Submitted by \u003ca href=\"https://github.com/marcboschmatas\"\u003eMarc Bosch\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/722\"\u003eernest\u003c/a\u003e, A Toolkit for Nested Sampling. Submitted by \u003ca href=\"https://github.com/kylesnap\"\u003eKyle Dewsnap\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/717\"\u003ecoevolve\u003c/a\u003e, Fit Bayesian Generalized Dynamic Phylogenetic Models using Stan. Submitted by \u003ca href=\"https://scottclaessens.github.io/\"\u003eScott Claessens\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/704\"\u003epriorsense\u003c/a\u003e, Prior Diagnostics and Sensitivity Analysis. Submitted by \u003ca href=\"https://github.com/n-kall\"\u003eNoa Kallioinen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/656\"\u003eSPARQLchunks\u003c/a\u003e, Run SPARQL Chunks and Inline Functions to Retrieve Data. Submitted by \u003ca href=\"https://ourednik.info\"\u003eAndré Ourednik\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/645\"\u003ecapybara\u003c/a\u003e, Fast and Memory Efficient Fitting of Linear Models With High-Dimensional. Submitted by \u003ca href=\"https://pacha.dev\"\u003eMauricio \u0026ldquo;Pachá\u0026rdquo; Vargas Sepúlveda\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/09/30/coc-templates\"\u003erOpenSci Code of Conduct Committee Templates\u003c/a\u003e by Yanina Bellini Saibene, Natalia Morandeira, and Mark Padgham. rOpenSci has a stablish Code of Conduct Committee and process for their functioning. We use templates to support our work and we share these templates in this blog post.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/10/14/blog-roles\"\u003eRecognition Beyond Blog Post Authors\u003c/a\u003e by Maëlle Salmon and Yanina Bellini Saibene. How we acknowledge different types of contributions to our blog. Other languages: \u003ca href='/es/blog/2025/10/14/reconocimiento_blog' lang='es'\u003eReconociendo contribuciones más allá de la autoría en los artículos de blog (es)\u003c/a\u003e, \u003ca href='/fr/blog/2025/10/14/reconnaissance-blog' lang='fr'\u003eReconnaissance au-delà des auteur·rice·s de billets de blog (fr)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/10/22/packages-multiverse\"\u003eGo for Launch! Packages Shipped to the R-Multiverse\u003c/a\u003e by Maëlle Salmon. Packages submitted to the R-multiverse during our recent coworking session. Other languages: \u003ca href='/es/blog/2025/10/22/paquetes-r-multiverse' lang='es'\u003e¡Prepárense para el lanzamiento! Paquetes enviados al R-multiverse (es)\u003c/a\u003e, \u003ca href='/fr/blog/2025/10/22/paquets-r-multiverse' lang='fr'\u003eEn route pour le lancement ! Paquets expédiés au R-Multiverse (fr)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2025/10/10/verification\"\u003eA Primer on Domain Verification\u003c/a\u003e by Maëlle Salmon. How domain verification helps against impersonation and takeover attacks, and how to use it.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/grainchanger/\"\u003egrainchanger\u003c/a\u003e, data aggregation methods for raster data. \u003ca href=\"https://github.com/ropensci/grainchanger/issues/17\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/photosearcher\"\u003ephotosearcher\u003c/a\u003e, searches Flickr for photographs and metadata. \u003ca href=\"https://github.com/ropensci/photosearcher/issues/22\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"community-over-code\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-over-code\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity over code\u003c/h3\u003e\u003cp\u003eIn his post reflecting on \u003ca href=\"https://enpiar.com/2025/10/07/arrow-turns-10/\"\u003eArrow\u0026rsquo;s 10 year anniversary\u003c/a\u003e, Neal Richardson provides interesting insights including:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u0026ldquo;These values are capped off by the foundation\u0026rsquo;s mantra, \u0026ldquo;community over code,\u0026rdquo; which means that focusing on how people work together is more important than technical purity.\u0026rdquo;\u003c/p\u003e\u003c/blockquote\u003e\u003ch3 id=\"felienne-hermans-ai-newsletter\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#felienne-hermans-ai-newsletter\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFelienne Hermans\u0026rsquo; AI newsletter\u003c/h3\u003e\u003cp\u003eFelienne Hermans now translates her excellent weekly AI newsletter to \u003ca href=\"https://www.felienne.nl/2025-39/?ref=the-ai-nieuws-van-deze-week-newsletter#english\"\u003eEnglish\u003c/a\u003e!\u003c/p\u003e\u003ch3 id=\"ai-helping-find-potential-issues-in-software\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ai-helping-find-potential-issues-in-software\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAI helping find potential issues in software\u003c/h3\u003e\u003cp\u003eDaniel Stenberg, creator and maintainer of curl, \u003ca href=\"https://mastodon.social/@bagder/115241241075258997\"\u003eposted\u003c/a\u003e that \u0026ldquo;Joshua Rogers sent us a \u003cem\u003emassive\u003c/em\u003e list of potential issues in #curl that he found using his set of AI assisted tools\u0026hellip;Mostly smaller bugs, but still bugs and there could be one or two actual security flaws in there. Actually truly awesome findings.\u0026rdquo;.\u003c/p\u003e\u003ch3 id=\"two-git-tricks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#two-git-tricks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTwo Git tricks\u003c/h3\u003e\u003cp\u003e\u003ccode\u003egit blame\u003c/code\u003e helps you explore the history of a file to understand why certain lines were added or modified.\u003c/p\u003e\u003cp\u003eNow, do you know how to\u0026hellip;\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003efind out which Git commit deleted a \u003cem\u003efile\u003c/em\u003e? You can do that by filtering commits that touched that path: \u003ccode\u003egit log --oneline -- path/to/file\u003c/code\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003efind out which Git commit deleted a \u003cem\u003eline\u003c/em\u003e? You can \u003ca href=\"https://stackoverflow.com/questions/16181279/find-out-which-commit-removed-a-particular-word-line-in-git/16181840#16181840\"\u003edo that\u003c/a\u003e with \u003ccode\u003egit log -S\u0026lt;string\u0026gt; path/to/file\u003c/code\u003e or \u003ccode\u003egit log -G\u0026lt;regex\u0026gt; path/to/file\u003c/code\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/10/24/news-october-2025/","date_published":"2025-10-24T00:00:00+00:00","date_modified":"2025-10-24T08:54:06+02:00"},{"id":"https://doi.org/10.59350/pjqfq-q2q45","title":"Go for Launch! Packages Shipped to the R-Multiverse","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["r-multiverse","r-universe","packages","community"],"content_html":"\u003cp\u003eWill Landau recently introduced the R-multiverse, \u003ca href=\"/commcalls/r-multiverse/\"\u003ea new way to publish R packages\u003c/a\u003e, during an rOpenSci community call.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003eAfter that event, a \u003ca href=\"/blog/2023/06/21/coworking/\"\u003ecoworking\u003c/a\u003e session allowed even more discussion between Will, his R-multiverse fellow administrators Jeroen Ooms and Maëlle Salmon, and community members.\u003c/p\u003e\u003cp\u003eA key mission in that coworking session was to submit packages to the R-multiverse live!Following the \u003ca href=\"https://r-multiverse.org/contributors.html\"\u003einstructions\u003c/a\u003e, any package maintainer wishing to send their software to the community repository needs to:\u003c/p\u003e\u003cul\u003e\u003cli\u003ecreate a GitHub or GitLab release of their package;\u003c/li\u003e\u003cli\u003eopen a Pull Request to the \u003ca href=\"https://github.com/r-multiverse/contributions\"\u003econtributions\u003c/a\u003e GitHub repository, adding a text file that contains the URL to the repository.\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWill also shared an R function that allows you to perform R-multiverse package checks locally before submitting: \u003ca href=\"https://r-multiverse.org/multiverse.internals/reference/review_package.html\"\u003e\u003ccode\u003emultiverse.internals::review_package()\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThree packages were submitted during the coworking session!\u003c/p\u003e\u003ch2 id=\"package-submissions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-submissions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage submissions\u003c/h2\u003e\u003ch3 id=\"riem-to-get-weather-data-from-asos-stations-airports-via-the-iowa-environment-mesonet\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#riem-to-get-weather-data-from-asos-stations-airports-via-the-iowa-environment-mesonet\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eriem, to get weather data from ASOS stations (airports) via the Iowa Environment Mesonet.\u003c/h3\u003e\u003cp\u003eI submitted my \u003ca href=\"https://github.com/r-multiverse/contributions/pull/238\"\u003eriem package\u003c/a\u003e that accesses airport weather data, even if it is also distributed on CRAN: I wanted to explore different publication venues.Because the automatic checks (of the license for instance) passed and because I am a public member of a GitHub organization trusted by the multiverse (ropensci), my PR was automatically merged.\u003c/p\u003e\u003cp\u003eRead more about \u003ca href=\"https://docs.ropensci.org/riem/\"\u003eriem\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"geotargets-that-extends-targets-to-work-with-geospatial-data-formats\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#geotargets-that-extends-targets-to-work-with-geospatial-data-formats\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003egeotargets, that extends targets to work with geospatial data formats\u003c/h3\u003e\u003cp\u003eEric R. Scott submitted the \u003ca href=\"https://github.com/r-multiverse/contributions/pull/239\"\u003egeotargets package\u003c/a\u003e that extends targets to work with geospatial data formats, such as rasters and vectors (e.g., shapefiles).Eric co-authored \u003ccode\u003egeotargets\u003c/code\u003e alongside Nick Tierney and Andrew Brown, but Nick is the primary maintainer.However, it\u0026rsquo;s perfectly okay that Eric submitted the package rather than Nick.In fact, R-multiverse lets you contribute packages you didn\u0026rsquo;t write at all\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e, as long as the license grants \u003ca href=\"https://en.wikipedia.org/wiki/Free_and_open-source_software\"\u003eclear permission to distribute and modify the code\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eRead more about \u003ca href=\"https://docs.ropensci.org/geotargets/\"\u003egeotargets\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"weathercan-to-find-and-download-historical-weather-data-from-environment-and-climate-change-canada-eccc\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#weathercan-to-find-and-download-historical-weather-data-from-environment-and-climate-change-canada-eccc\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eweathercan, to find and download historical weather data from Environment and Climate Change Canada (ECCC)\u003c/h3\u003e\u003cp\u003eSteffi LaZerte submitted her \u003ca href=\"https://github.com/r-multiverse/contributions/pull/240/\"\u003eweathercan package\u003c/a\u003e, also a weather package but for Canada!Steffi wondered whether it made sense to submit weathercan before making a bunch of fixes and enhancements she had planned over the next few weeks. Turns out that, yes it does make sense! Because the multiverse will pick up the latest release automatically.Steffi only needs to remember to create a new release after improving weathercan.\u003c/p\u003e\u003cp\u003eRead more about \u003ca href=\"https://docs.ropensci.org/weathercan/\"\u003eweathercan\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"whats-next-for-those-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#whats-next-for-those-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat\u0026rsquo;s next for those packages?\u003c/h2\u003e\u003cp\u003eNow that these packages are in, they\u0026rsquo;re distributed through the \u003ca href=\"https://r-multiverse.org/community.html\"\u003e\u003cstrong\u003ecommunity\u003c/strong\u003e repository\u003c/a\u003e.It\u0026rsquo;s like a preview of new releases.\u003c/p\u003e\u003cp\u003eIn a few weeks, when R-multiverse starts building the next \u003ca href=\"https://r-multiverse.org/production.html\"\u003e\u003cstrong\u003eproduction\u003c/strong\u003e snapshot\u003c/a\u003e, they will be checked together with other packages.If they are good to go, their release at that point will be the one built into production.If there are some issues, the maintainer can still push fixes.\u003c/p\u003e\u003cp\u003eAs long as those packages are listed in the R-multiverse, they will participate in the quarterly production snapshots.The maintainers only need to keep creating releases (good practice anyway) and to follow the \u003ca href=\"https://r-multiverse.org/status/\"\u003estatus\u003c/a\u003e of their package on the multiverse.\u003c/p\u003e\u003cp\u003eFor the package users to know they can install the package from the \u003ca href=\"https://r-multiverse.org/community.html\"\u003ecommunity\u003c/a\u003e or the \u003ca href=\"https://r-multiverse.org/production.html\"\u003eproduction\u003c/a\u003e repositories, package maintainers will need to update the installation instructions in the README of their package.They could also add a \u003ca href=\"https://r-multiverse.org/contributors.html#badges\"\u003ebadge\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"whats-next-for-the-r-multiverse\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#whats-next-for-the-r-multiverse\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat\u0026rsquo;s next for the R-multiverse?\u003c/h2\u003e\u003cp\u003eAfter the posit conf talk, the rOpenSci community call, and the rOpenSci coworking session, the R multiverse is aiming at increasing participation in its system to strengthen and diversify it.New package submissions are welcome, as are \u003ca href=\"https://github.com/r-multiverse/help\"\u003equestions and feature requests\u003c/a\u003e.You can also apply to become a \u003ca href=\"https://r-multiverse.org/moderators.html\"\u003epackage moderator\u003c/a\u003e to help handle new submissions.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eAnd before that in a talk at posit::conf! Stay tuned for the release of the public talk recordings on YouTube.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eOr a slightly more involved JSON file if the package is in a subdirectory for instance.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003ePackage authorship stays the same.\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2025/10/22/packages-multiverse/","date_published":"2025-10-22T00:00:00+00:00","date_modified":"2025-10-22T13:04:15+02:00"},{"id":"https://doi.org/10.59350/510pg-zzf58","title":"Recognition Beyond Blog Post Authors","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["metadata","tech notes","community manager tools"],"content_html":"\u003cp\u003eOur own dev guide \u003ca href=\"https://devguide.ropensci.org/maintenance_collaboration.html#attributions\"\u003estates\u003c/a\u003e\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eBe generous with attributions\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eRecognizing the diverse forms of \u003ca href=\"https://contributing.ropensci.org/\"\u003econtributions\u003c/a\u003e to our mission is very important to us:we like thanking \u003ca href=\"/blog/2018/03/16/thanking-reviewers-in-metadata/\"\u003epackage reviewers\u003c/a\u003e and more generally \u003ca href=\"/blog/2024/11/26/allcontributors/\"\u003eall package contributors\u003c/a\u003e, \u003ca href=\"/blog/2025/05/09/ror/\"\u003eorganizations as well as individuals\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe have recently extended our efforts to acknowledging the different roles there are when publishing a blog post.\u003c/p\u003e\u003ch2 id=\"new-blog-roles-editors-translators-interviewees\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-blog-roles-editors-translators-interviewees\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew blog roles: editors, translators, interviewees\u003c/h2\u003e\u003cp\u003eThe metadata of our blog posts now feature:\u003c/p\u003e\u003cul\u003e\u003cli\u003ewho edited the blog post\u003cul\u003e\u003cli\u003efor example, \u003ca href=\"/blog/2025/09/18/markdown-programmatic-parsing/\"\u003eSteffi LaZerte edited a recent post\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003ewho translated the blog post\u003cul\u003e\u003cli\u003efor example, \u003ca href=\"/es/blog/2025/06/23/edicion-multilingue-preguntas-frecuentes/\"\u003eYanina Bellini Saibene translated a post into Spanish\u003c/a\u003e, and \u003ca href=\"fr/blog/2025/06/23/publication-multilingue-faq/\"\u003eMaëlle Salmon translated it into French\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003ewho was \u003cem\u003einterviewed\u003c/em\u003e for a blog post\u003cul\u003e\u003cli\u003efor example, \u003ca href=\"/blog/2023/03/30/r-universe-stars-3-en/\"\u003eAthanasia Mo Mowinckel was interviewed in the Stars of the R-Universe series\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe \u0026ldquo;author page\u0026rdquo; of contributors list their various contributions to the content in the current language (authorships listed first, followed by other roles):\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u0026rsquo;s author page\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/es/author/yanina-bellini-saibene\"\u003eYanina Bellini Saibene\u0026rsquo;s author page in Spanish\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/athanasia-mo-mowinckel/\"\u003eAthanasia Mo Mowinckel\u0026rsquo;s author page\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eTo achieve this new functionality, we\u003c/p\u003e\u003cul\u003e\u003cli\u003emodified the Hugo layouts (templates) for \u003ca href=\"https://github.com/ropensci/roweb3/blob/main/themes/ropensci/layouts/partials/blogs/blog-single.html\"\u003eblog posts\u003c/a\u003e and \u003ca href=\"https://github.com/ropensci/roweb3/blob/main/themes/ropensci/layouts/author/list.html\"\u003eauthor pages\u003c/a\u003e.\u003c/li\u003e\u003cli\u003edocumented the corresponding new metadata fields in our \u003ca href=\"https://blogguide.ropensci.org/editorchecklistany.html\"\u003eblog guide\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eWe are thrilled to be able to acknowledge more contributions to our blog.\u003c/p\u003e\u003cp\u003eThis differentiation of roles also allows us to analyze in greater detail how blog-related collaborations occur among members of our community. With this information, we can explore different ways to encourage participation for those interested, including how to best provide the support needed for successful participation.\u003c/p\u003e\u003cp\u003eWe also hope that our findings will be useful to other communities in identifying different types of contributions and ways of giving credit.\u003c/p\u003e\u003cp\u003eFurther work will include having more of those contributions featured in our feed on \u003ca href=\"https://rogue-scholar.org/communities/ropensci/records?q=\u0026amp;l=list\u0026amp;p=1\u0026amp;s=10\u0026amp;sort=newest\"\u003eRogue Scholar\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/10/14/blog-roles/","date_published":"2025-10-14T00:00:00+00:00","date_modified":"2025-10-14T09:58:33+02:00"},{"id":"https://doi.org/10.59350/rwy6x-q8112","title":"A Primer on Domain Verification","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["security","tech notes"],"content_html":"\u003cp\u003eAre you \u003ca href=\"https://en.wikipedia.org/wiki/The_Wolf_and_the_Seven_Young_Goats\"\u003ethe mother goat or the wolf\u003c/a\u003e?Consumers of your online content might care!Be it on social media or other platforms, your profile can sometimes be \u0026ldquo;verified\u0026rdquo;.What does it mean? How does one get a green checkmark where it matters?Here\u0026rsquo;s a primer on domain verification.\u003c/p\u003e\u003ch2 id=\"a-basic-verification-workflow\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-basic-verification-workflow\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA basic verification workflow\u003c/h2\u003e\u003cp\u003eSay you, Jane Doe, have your resume and a blog on a website, janedoe.com.You also publish content on another site, for instance Mastodon.How do readers of Mastodon ensure they\u0026rsquo;re reading content by \u0026ldquo;Jane Doe from janedoe.com\u0026rdquo; and not a malicious impersonator?Well, you can \u003cem\u003everify\u003c/em\u003e the domain of janedoe.com on Mastodon.\u003c/p\u003e\u003cp\u003eThe platform for this second website (Mastodon in our example here) will ask you to publish something on the domain you own (or have access to, here janedoe.com) which proves that you are the same person.You will go and publish it, then ask Mastodon to query janedoe.com to check you did.If Mastodon finds what it asked for on janedoe.com, it can put a green check mark near the domain of janedoe.org on your Mastodon profile.Readers now know you are the same person on both sites!\u003c/p\u003e\u003ch2 id=\"an-example-mastodon\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#an-example-mastodon\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAn example: Mastodon\u003c/h2\u003e\u003cp\u003eBelow is the \u003ca href=\"https://ecoevo.social/@noamross\"\u003eMastodon profile\u003c/a\u003e of rOpenSci director Noam Ross, that features a few URLs including \u003ccode\u003eropensci.org/about\u003c/code\u003e highlighted in green.That URL is \u003cem\u003everified\u003c/em\u003e.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/10/10/verification/noam.png\"\u003e\u003c/figure\u003e\u003cp\u003eIn clear text on our \u003ca href=\"/about/\"\u003eabout page\u003c/a\u003e you can read that Noam is rOpenSci\u0026rsquo;s executive director indeed, but that\u0026rsquo;s not what Mastodon uses to assess whether \u003ccode\u003eropensci.org/about\u003c/code\u003e represents Noam in some way.Mastodon uses this metadata field in the head of the website:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-html\" data-lang=\"html\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ea\u003c/span\u003e \u003cspan class=\"na\"\u003erel\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eme\u003c/span\u003e \u003cspan class=\"na\"\u003ehref\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003ehttps://ecoevo.social/@noamross\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003eimg\u003c/span\u003e \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e/images/users/mastodon.svg\u003c/span\u003e \u003cspan class=\"na\"\u003ealt\u003c/span\u003e \u003cspan class=\"na\"\u003estyle\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003emax-width:16px;max-height:16px\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ea\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAfter we added that field to the website, Noam went to his Mastodon profile settings to add the URL which triggered a query from Mastodon to \u003ccode\u003eropensci.org/about\u003c/code\u003e.Mastodon found this field in the web page, and was able to verify the URL.\u003c/p\u003e\u003cp\u003eThis DIY verification is actually one of \u003ca href=\"https://joinmastodon.org/verification\"\u003eMastodon\u0026rsquo;s selling points\u003c/a\u003e, as it doesn\u0026rsquo;t rely on some arbitrary measure of popularity or importance, just on logic.\u003c/p\u003e\u003ch2 id=\"another-example-github\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#another-example-github\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAnother example: GitHub\u003c/h2\u003e\u003cp\u003eBelow is the \u003ca href=\"https://github.com/ropensci\"\u003eGitHub profile\u003c/a\u003e of rOpenSci, that features a green \u0026ldquo;verified\u0026rdquo; badge as well as the URL to our website.That URL is \u003cem\u003everified\u003c/em\u003e.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/10/10/verification/ropensci.png\"\u003e\u003c/figure\u003e\u003cp\u003eIn this case, in the GitHub \u003ca href=\"https://docs.github.com/en/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization\"\u003esettings\u003c/a\u003e we were asked to publish a \u003cem\u003eDNS TXT record\u003c/em\u003e with a given name and given content. Think \u003ccode\u003eblabla-identity-challenge-ropensci-github.ropensci.org\u003c/code\u003e with \u003ccode\u003erandom-characters\u003c/code\u003e as content.\u003c/p\u003e\u003cp\u003eWe created that record in the dashboard of our DNS provider, then asked GitHub to query the record.It can take a little while for the DNS record to be online for real, but in our case it was more or less instantaneous.\u003c/p\u003e\u003cp\u003eIt is possible to have several GitHub organizations point to the same website, all with a green \u0026ldquo;verified\u0026rdquo; badge.You simply have to do the domain verification once per GitHub organization.See for instance our \u003ca href=\"https://github.com/ropenscilabs\"\u003eropenscilabs\u003c/a\u003e and \u003ca href=\"https://github.com/ropensci-books\"\u003eropensci-books\u003c/a\u003e organizations.\u003c/p\u003e\u003ch2 id=\"another-example-github-pages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#another-example-github-pages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAnother example: GitHub Pages\u003c/h2\u003e\u003cp\u003eYou can publish websites using a service called GitHub Pages.By default, the website for a repository hosted at \u003ccode\u003egithub.com/account/repo\u003c/code\u003e will be served at \u003ccode\u003eaccount.github.io/repo\u003c/code\u003e.You can however use a \u003cem\u003ecustom domain\u003c/em\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOn the side of GitHub Pages, in the settings of your repository, you \u003ca href=\"https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site\"\u003edeclare\u003c/a\u003e you want your website to be served at \u003ccode\u003ecustom.domain.io\u003c/code\u003e for instance.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOn the side of your DNS provider, you create a record, for instance an A record for \u003ccode\u003ecustom.domain.io\u003c/code\u003e that points to one of the IP addresses of GitHub Pages. A very general IP address not specific to your repository at all.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd\u0026hellip; that\u0026rsquo;s it! So, what prevents anyone from creating a repository on GitHub with malicious content and have its custom domain point to \u003ccode\u003ecustom.domain.io\u003c/code\u003e?\u003c/p\u003e\u003cp\u003eWell, you can add another step to prevent such a takeover attack.You can \u003ca href=\"https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages\"\u003everify your domain for GitHub Pages\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eIt works like the domain verification for GitHub profiles, with TXT records.It is controlled at the user or organization level, not at the repository level.It is different from domain verification for profiles in that:\u003c/p\u003e\u003cul\u003e\u003cli\u003eIt is done from another part of the settings. Follow the docs!\u003c/li\u003e\u003cli\u003eIf you have multiple subdomains, you will need to verify each one individually (e.g., \u003ccode\u003ecustom1.domain.io\u003c/code\u003e, \u003ccode\u003ecustom2.domain.io\u003c/code\u003e). You cannot verify a domain for more than one GitHub organization as the latest verification will overwrite the previous one!\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post, we gave a small primer on domain verification, a process by which you prove that your content on a given website comes from the same you on another website.Using domain verification when it exists, and requesting it when it doesn\u0026rsquo;t, makes us a bit safer against impersonations or takeover attacks.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eNot only that, it will also deactivate all the custom domains of that first organization, if they relied on the verification at the domain, not the subdomain level. Ask me how I know. \u0026#x1fae0;\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2025/10/10/verification/","date_published":"2025-10-10T00:00:00+00:00","date_modified":"2025-10-10T08:54:20+02:00"},{"id":"https://doi.org/10.59350/j0vp2-dg610","title":"rOpenSci Code of Conduct Committee Templates","language":"en","authors":[{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Natalia Morandeira","url":"https://ropensci.org/author/natalia-morandeira/","avatar":"https://github.com/nmorandeira.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","code of conduct","community manager tools"],"content_html":"\u003cp\u003eAt rOpenSci, our Code of Conduct (CoC) committee works to support a healthy, welcoming, and inclusive community. A big part of this work is making sure that the processes we follow are transparent, consistent, and fair. Over the years, we’ve developed a set of templates that guide us through different stages of incident response and reporting.\u003c/p\u003e\u003cp\u003eWe believe these templates may be useful for other communities and projects in open science that are establishing or refining their own CoC processes. Today, we are sharing them with you.\u003c/p\u003e\u003ch2 id=\"why-templates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-templates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy templates?\u003c/h2\u003e\u003cp\u003eHandling Code of Conduct issues can be emotionally demanding and logistically complex. Templates help us by:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eProviding structure\u003c/strong\u003e: ensuring we don’t miss important steps.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eImproving consistency\u003c/strong\u003e: so similar situations are handled in similar ways.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eSupporting transparency\u003c/strong\u003e: both internally and externally, we can clearly show how decisions are made.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eReducing stress\u003c/strong\u003e: in sensitive moments, having a clear guide helps committee members focus on people, not paperwork.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eEasing onboarding and documenting processes\u003c/strong\u003e: new committee members can quickly get up to speed, and we maintain a written record of how we handle different situations.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"the-templates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-templates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe templates\u003c/h2\u003e\u003cp\u003eOur templates cover both internal workflows (helping the committee document and process incidents) and community-facing communication (keeping our community informed in a consistent way). Together, they give us a clear structure and schedule for everything from receiving a report to sharing aggregated updates.Here’s an overview of the templates we rely on at rOpenSci:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci-org/ro-cmtoolkit/blob/main/code-of-conduct-templates/coc-update-report-template.md\"\u003eCoC update report\u003c/a\u003e: a framework for annual updates to the community about the committee’s activities.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci-org/ro-cmtoolkit/blob/main/code-of-conduct-templates/transparency-report-template.md\"\u003eCoC transparency report\u003c/a\u003e: a public-facing report that shares in a yearly aggregate way the types of incidents handled and outcomes, while protecting privacy.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci-org/ro-cmtoolkit/blob/main/code-of-conduct-templates/internal_incident_summary.md\"\u003eInternal incident summary\u003c/a\u003e: a confidential document for committee use, summarizing the key facts and steps taken in a specific incident.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci-org/ro-cmtoolkit/blob/main/code-of-conduct-templates/handle-incident-report-template.md\"\u003eInternal handling incident report\u003c/a\u003e: \u003ca href=\"/blog/2025/03/20/coc-incident-template/\"\u003eintroduced in an earlier blog post\u003c/a\u003e, this guides us through the process of responding to a report from start to finish.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci-org/ro-cmtoolkit/blob/main/code-of-conduct-templates/form-template.md\"\u003eCoC reporting form\u003c/a\u003e: the form community members use to submit a report.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci-org/ro-cmtoolkit/blob/main/code-of-conduct-templates/report_acknowl_email.md\"\u003eIncident report email acknowledgement\u003c/a\u003e: a standard response we send to confirm receipt of a report, so reporters know their concern has been heard and is being handled.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"how-you-can-use-them\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-you-can-use-them\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow you can use them\u003c/h2\u003e\u003cp\u003eWe know every community has different values, resources, and contexts, so consider these templates a toolbox rather than a one-size-fits-all solution. You might use them as-is, or treat them as a starting point to design your own processes.\u003c/p\u003e\u003cp\u003eYou can access all the templates together in the \u003ca href=\"https://github.com/ropensci-org/ro-cmtoolkit/tree/main/code-of-conduct-templates\"\u003eGitHub repository with community management tools\u003c/a\u003e. You can fork them, adapt them, and make them work for your own community context. We’d love to hear how you adapt or improve them for your own communities.\u003c/p\u003e\u003ch2 id=\"acknowledgements\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#acknowledgements\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAcknowledgements\u003c/h2\u003e\u003cp\u003eWe want to thank all past and present members of the rOpenSci Code of Conduct Committee.Their work has made it possible for us to share these templates openly today.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/09/30/coc-templates/","date_published":"2025-09-30T00:00:00+00:00","date_modified":"2025-09-30T07:38:18-03:00"},{"id":"https://doi.org/10.59350/c427v-cjd59","title":"rOpenSci News Digest, September 2025","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2025/09/29/news-september-2025\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"10-quick-tips-for-making-your-software-outlive-your-job\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#10-quick-tips-for-making-your-software-outlive-your-job\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e10 quick tips for making your software outlive your job\u003c/h3\u003e\u003cp\u003eOur community manager Yanina Bellini Saibene participated in the paper \u003ca href=\"https://arxiv.org/abs/2505.06484\"\u003e\u0026ldquo;10 quick tips for making your software outlive your job\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u0026ldquo;Loss of key personnel has always been a risk for research software projects. Key members of the team may have to step away due to illness or burnout, to care for a family member, from a loss of financial support, or because their career is going in a new direction. Today, though, political and financial changes are putting large numbers of researchers out of work simultaneously, potentially leaving large amounts of research software abandoned. This article presents ten tips to help researchers ensure that the software they have built will continue to be usable after they have left their present job \u0026ndash; whether in the course of voluntary career moves or researcher mobility, but particularly in cases of involuntary departure due to political or institutional changes.\u0026rdquo;\u003c/p\u003e\u003c/blockquote\u003e\u003ch3 id=\"from-ideas-to-action-champions-start-their-training\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#from-ideas-to-action-champions-start-their-training\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFrom Ideas to Action: Champions start their training\u003c/h3\u003e\u003cp\u003eThe training phase is off to a strong start!\u003c/p\u003e\u003cp\u003eSo far, \u003ca href=\"/champions\"\u003eChampions\u003c/a\u003e have taken part in five workshops, including two on Git and GitHub, one on code style \u0026ndash; which we opened up not only to Champions and mentors but also to everyone who applied \u0026ndash; and two on R package development. Each session has been a chance to learn, share, and grow together as a community. And we\u0026rsquo;re just getting started: the next workshops will dive into software peer review and community building \u0026ndash; key skills for every Champion\u0026rsquo;s journey!\u003c/p\u003e\u003cp\u003eAs usual you can find the materials on our \u003ca href=\"/training\"\u003etraining page\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"request-for-feedback\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#request-for-feedback\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRequest for feedback\u003c/h3\u003e\u003cp\u003eWe recently published a \u003ca href=\"/blog/2025/09/11/repometrics-call-help\"\u003eblog post\u003c/a\u003e requesting feedback for a prototype of an \u003ca href=\"https://ropensci-review-tools.github.io/repometrics-demo/\"\u003eorganization-level dashboard\u003c/a\u003e for tracking the health and maintenance of an organization\u0026rsquo;s R packages. We\u0026rsquo;re still looking for feedback and suggestions, so please read the blog post if you haven\u0026rsquo;t already, and help us with your ideas.\u003c/p\u003e\u003ch3 id=\"ropensci-featured-on-the-science-ouverte-blog-of-institut-pasteur\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-featured-on-the-science-ouverte-blog-of-institut-pasteur\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci featured on the Science Ouverte blog of Institut Pasteur\u003c/h3\u003e\u003cp\u003eIn her latest contribution to the Science Ouverte blog, \u003ca href=\"https://www.linkedin.com/in/mar%C3%ADa-guti%C3%A9rrez-s%C3%A1nchez-32a44b157\"\u003eMaría Gutiérrez Sánchez\u003c/a\u003e explores how the rOpenSci Champions Program is helping to foster more open, inclusive, and multilingual science:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eThe program strengthens scientific communities in Latin America through training, mentorship, and networking around open-source software development. More than just broadening diversity in the R community, the initiative aims to redistribute power in the global open science ecosystem, recognizing that sustainable solutions must emerge from within the communities themselves.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eRead the full article in \u003ca href=\"https://openscience.pasteur.fr/2025/09/01/ropensci-champions-pour-une-science-ouverte-multilingue-et-portee-par-les-logiciels-libres/\"\u003eFrench\u003c/a\u003e (original) or \u003ca href=\"https://openscience.pasteur.fr/2025/09/01/ropensci-champions-por-una-ciencia-abierta-multilingue-y-basada-en-software-libre/\"\u003eSpanish\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday October 7th, 09:00 Americas Pacific (16:00 UTC), \u003ca href=\"/events/coworking-2025-10/\"\u003e\u0026ldquo;Ship your R package to the R-multiverse!\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohosts \u003ca href=\"/author/will-landau\"\u003eWill Landau\u003c/a\u003e \u0026amp; \u003ca href=\"/author/maelle-salmon\"\u003eMaëlle Salmon\u003c/a\u003e.\u003cul\u003e\u003cli\u003eLearn more about the \u003ca href=\"https://r-multiverse.org/\"\u003eR-multiverse\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eSubmit your package to the \u003ca href=\"https://r-multiverse.org/\"\u003eR-multiverse\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eChat with Will Landau, and learn more about the R-multiverse and how to submit your package.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday November 3rd, 09:00 Australia Western (01:00 UTC), \u003ca href=\"/events/coworking-2025-11/\"\u003e\u0026ldquo;Code Review with rOpenSci\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/liz-hare\"\u003eLiz Hare\u003c/a\u003e.\u003cul\u003e\u003cli\u003eExplore resources for Code review;\u003c/li\u003e\u003cli\u003eSign up to volunteer to do \u003ca href=\"https://airtable.com/app8dssb6a7PG6Vwj/shrnfDI2S9uuyxtDw\"\u003esoftware peer-review\u003c/a\u003e at rOpenSci;\u003c/li\u003e\u003cli\u003eChat with Liz Hare, and learn more about rOpenSci\u0026rsquo;s code review and the resources available.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following four packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/ssarp\"\u003essarp\u003c/a\u003e, developed by Kristen Martinet: Create Species- and Speciation-Area Relationships using occurrence records or presence-absence matrices. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/685\"\u003ereviewed\u003c/a\u003e by Tom Matthews and Joel Nitta.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/rixpress\"\u003erixpress\u003c/a\u003e, developed by Bruno Rodrigues: Streamlines the creation of reproducible analytical pipelines using default.nix expressions generated via rix for reproducibility. Define derivations in R, Python or Julia, chain them into a composition of pure functions and build the resulting pipeline using Nix as the underlying end-to-end build tool. Functions to plot a DAG representation of the pipeline are included, as well as functions to load and inspect intermediary results for interactive analysis. User experience heavily inspired by the targets package. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/706\"\u003ereviewed\u003c/a\u003e by William Michael Landau and Anthony Martinez.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hdcuremodels\"\u003ehdcuremodels\u003c/a\u003e, developed by Kellie J. Archer together with Han Fu: Provides functions for fitting various penalized parametric and semi-parametric mixture cure models with different penalty functions, testing for a significant cure fraction, and testing for sufficient follow-up as described in \u003ca href=\"https://doi.org/10.1002/sim.9513\"\u003eFu et al (2022)\u003c/a\u003e and \u003ca href=\"https://doi.org/10.1186/s13045-024-01553-6\"\u003eArcher et al (2024)\u003c/a\u003e. False discovery rate controlled variable selection is provided using model-X knock-offs. It is available on \u003ca href=\"https://CRAN.R-project.org/package=hdcuremodels\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/692\"\u003ereviewed\u003c/a\u003e by Tung Lam Nguyen and Panagiotis Papastamoulis.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/dataset\"\u003edataset\u003c/a\u003e, developed by Daniel Antal: The dataset package helps create semantically rich, machine-readable, and interoperable datasets in R. It extends tidy data frames with metadata that preserves meaning, improves interoperability, and makes datasets easier to publish, exchange, and reuse in line with ISO and W3C standards. It is available on \u003ca href=\"https://CRAN.R-project.org/package=dataset\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/681\"\u003ereviewed\u003c/a\u003e by Marcelo Perlin, Anna Márta Mester, and Mauro Lepore.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following fourteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/sits\" title=\"Satellite Image Time Series Analysis for Earth Observation Data Cubes\"\u003esits\u003c/a\u003e (\u003ca href=\"https://github.com/e-sensing/sits/releases/tag/v1.5.3-1\"\u003e\u003ccode\u003ev1.5.3-1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/c14bazAAR\" title=\"Download and Prepare C14 Dates from Different Source Databases\"\u003ec14bazAAR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/c14bazAAR/releases/tag/5.2.0\"\u003e\u003ccode\u003e5.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/comtradr\" title=\"Interface with the United Nations Comtrade API\"\u003ecomtradr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/comtradr/releases/tag/v1.0.4\"\u003e\u003ccode\u003ev1.0.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dataspice\" title=\"Create Lightweight Schema.org Descriptions of Data\"\u003edataspice\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dataspice/releases/tag/v1.1.1\"\u003e\u003ccode\u003ev1.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ghql\" title=\"General Purpose GraphQL Client\"\u003eghql\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ghql/releases/tag/v0.1.2\"\u003e\u003ccode\u003ev0.1.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/magick\" title=\"Advanced Graphics and Image-Processing in R\"\u003emagick\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/magick/releases/tag/v2.9.0\"\u003e\u003ccode\u003ev2.9.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/paleobioDB\" title=\"Download and Process Data from the Paleobiology Database\"\u003epaleobioDB\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/paleobioDB/releases/tag/v1.0.1\"\u003e\u003ccode\u003ev1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgbif\" title=\"Interface to the Global Biodiversity Information Facility API\"\u003ergbif\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgbif/releases/tag/v3.8.3\"\u003e\u003ccode\u003ev3.8.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rinat\" title=\"Access iNaturalist Data Through APIs\"\u003erinat\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rinat/releases/tag/v0.1.10\"\u003e\u003ccode\u003ev0.1.10\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rredlist\" title=\"IUCN Red List Client\"\u003erredlist\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rredlist/releases/tag/v1.1.1\"\u003e\u003ccode\u003ev1.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rsvg\" title=\"Render SVG Images into PDF, PNG, (Encapsulated) PostScript, or Bitmap Arrays\"\u003ersvg\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rsvg/releases/tag/v2.7.0\"\u003e\u003ccode\u003ev2.7.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spatsoc\" title=\"Group Animal Relocation Data by Spatial and Temporal Relationship\"\u003espatsoc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spatsoc/releases/tag/v0.2.10\"\u003e\u003ccode\u003ev0.2.10\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.13.2\"\u003e\u003ccode\u003e0.13.2\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.11.4\"\u003e\u003ccode\u003e1.11.4\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are sixteen recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/706\"\u003erixpress\u003c/a\u003e, Build Reproducible Analytical Pipelines With Nix. Submitted by \u003ca href=\"https://brodrigues.co\"\u003eBruno Rodrigues\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/685\"\u003eSSARP\u003c/a\u003e, SSARP (Species-/Speciation-Area Relationship Projector). Submitted by \u003ca href=\"https://github.com/kmartinet\"\u003ekmartinet\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%225/awaiting-reviewer(s)-response%22\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/714\"\u003eopenFDA\u003c/a\u003e, openFDA API. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/710\"\u003emantis\u003c/a\u003e, Multiple Time Series Scanner. Submitted by \u003ca href=\"https://github.com/phuongquan\"\u003ePhuong Quan\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/720\"\u003ebabelquarto\u003c/a\u003e, Renders a Multilingual Quarto Book. Submitted by \u003ca href=\"https://masalmon.eu/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/709\"\u003ereviser\u003c/a\u003e, Tools for Studying Revision Properties in Real-Time Time Series Vintages. Submitted by \u003ca href=\"https://marcburri.github.io/\"\u003eMarc Burri\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/703\"\u003epartialling.out\u003c/a\u003e, Residuals from partial regressions. Submitted by \u003ca href=\"https://github.com/marcboschmatas\"\u003eMarc Bosch\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/688\"\u003edistionary\u003c/a\u003e, Create and Evaluate Probability Distributions. Submitted by \u003ca href=\"https://vincenzocoia.com\"\u003eVincenzo Coia, Ph.D., P.Stat.\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/667\"\u003eread.abares\u003c/a\u003e, Provides simple downloading, parsing and importing of Australian Bureau of Agricultural and Resource Economics and Sciences (ABARES) data sources. Submitted by \u003ca href=\"https://adamhsparks.netlify.app/\"\u003eAdam H. Sparks\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/718\"\u003ercrisp\u003c/a\u003e, Automate the Delineation of Urban River Spaces. Submitted by \u003ca href=\"https://github.com/cforgaci\"\u003eClaudiu Forgaci\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/717\"\u003ecoevolve\u003c/a\u003e, Fit Bayesian Generalized Dynamic Phylogenetic Models using Stan. Submitted by \u003ca href=\"https://scottclaessens.github.io/\"\u003eScott Claessens\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/704\"\u003epriorsense\u003c/a\u003e, Prior Diagnostics and Sensitivity Analysis. Submitted by \u003ca href=\"https://github.com/n-kall\"\u003eNoa Kallioinen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/656\"\u003eSPARQLchunks\u003c/a\u003e, Run SPARQL Chunks and Inline Functions to Retrieve Data. Submitted by \u003ca href=\"https://ourednik.info\"\u003eAndré Ourednik\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/645\"\u003ecapybara\u003c/a\u003e, Fast and Memory Efficient Fitting of Linear Models With High-Dimensional. Submitted by \u003ca href=\"https://pacha.dev\"\u003eMauricio \u0026ldquo;Pachá\u0026rdquo; Vargas Sepúlveda\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/09/02/champions-program-projects-cohort2\"\u003erOpenSci Champions Second Cohort: Projects Wrap-Up\u003c/a\u003e by Yanina Bellini Saibene. Our second cohort of Champions completed the program. In this blog post, we share each champion\u0026rsquo;s projects, their achievements and outreach activities.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/09/15/collaboration-communities\"\u003eFrom Surviving to Thriving: A Convening to Reclaim and Sustain Open Science Communities\u003c/a\u003e by Kari L. Jordan, Erin Becker, Daniela Saderi, Vanessa Fairhurst, Patricia Herterich, Noam Ross, Yanina Bellini Saibene, Leah Wasser, and Yo Yehudi. Five leading open science organizations \u0026mdash; The Carpentries, OLS, rOpenSci, pyOpenSci, and PREreview \u0026mdash; are coming together for a strategic convening, supported by The Navigation Fund, to address shared challenges of underfunding, fragmentation, and unsustainable volunteer models.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/09/23/gentle-openscience\"\u003eA Gentle Introduction to Open Science\u003c/a\u003e by Steffi LaZerte. Steffi reviews a talk on open science. Don\u0026rsquo;t forget that it takes courage; be kind to yourself. Other languages: \u003ca href='/fr/blog/2025/09/23/gentle-openscience' lang='fr'\u003eUne introduction en douceur à la science ouverte (fr)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/09/11/repometrics-call-help\"\u003eHelp Us Design a New Git(Hub) Organizational Dashboard\u003c/a\u003e by Mark Padgham.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/09/18/markdown-programmatic-parsing\"\u003eAll the Ways to Programmatically Edit or Parse R Markdown / Quarto Documents\u003c/a\u003e by Maëlle Salmon, Christophe Dervieux, and Zhian N. Kamvar. Overview of programmatic ways to analyze and edit Markdown files: Markdown, R Markdown, Quarto, Hugo files, you name it. Other languages: \u003ca href='/es/blog/2025/09/18/markdown-programatico' lang='es'\u003eTodas las Formas de Editar o Analizar Programáticamente Documentos R Markdown / Quarto (es)\u003c/a\u003e, \u003ca href='/fr/blog/2025/09/18/markdown-programmatique' lang='fr'\u003eToutes les façons d\u0026rsquo;éditer ou d\u0026rsquo;analyser programmatiquement des documents R Markdown / Quarto (fr)\u003c/a\u003e. This post was discussed on the \u003ca href=\"https://podcastindex.org/podcast/1062040?episode=42926387120\"\u003eR Weekly Highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America. \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"are-your-function-names-unique\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#are-your-function-names-unique\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAre your function names unique?\u003c/h3\u003e\u003cp\u003eThanks to an idea from Egor Kotov, via \u003ca href=\"https://github.com/ropensci-review-tools/pkgcheck/issues/142\"\u003ehttps://github.com/ropensci-review-tools/pkgcheck/issues/142\u003c/a\u003e, the pkgcheck package now contains a stand-alone function to use during package development, to quickly check whether your function names are unique:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epkgcheck\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003efn_names_on_cran \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ec \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;min\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;max\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt;            package version fn_name\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; 161627    matlab2r   1.1.0     max\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; 161628    matlab2r   1.1.0     min\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; 178817      mosaic   1.8.3     max\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; 178821      mosaic   1.8.3     min\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; 234203 rapportools     1.1     max\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; 234207 rapportools     1.1     min\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"r-universe-badge-through-usethis\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-badge-through-usethis\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-universe badge through usethis\u003c/h3\u003e\u003cp\u003eThe latest version of usethis includes a handy function \u003ca href=\"https://usethis.r-lib.org/reference/badges.html\"\u003e\u003ccode\u003euse_r_universe_badge()\u003c/code\u003e\u003c/a\u003e that indicates what version of your package is available on \u003ca href=\"/r-universe\"\u003eR-universe\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-testthat-vignettes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-testthat-vignettes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew testthat vignettes\u003c/h3\u003e\u003cp\u003eThe development version of the testthat package features \u003ca href=\"https://testthat.r-lib.org/dev/articles/index.html#testing-techniques\"\u003enew vignettes\u003c/a\u003e including an useful overview of \u003ca href=\"https://testthat.r-lib.org/dev/articles/challenging-tests.html\"\u003e\u0026ldquo;Testing challenging functions\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"ai-newsletter-by-posit\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ai-newsletter-by-posit\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAI newsletter by Posit\u003c/h3\u003e\u003cp\u003ePosit\u0026rsquo;s Sara Altman and Simon Couch started a \u003ca href=\"https://posit.co/blog/2025-08-29-ai-newsletter/\"\u003enewsletter\u003c/a\u003e about AI developments both within and outside of their company.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/09/29/news-september-2025/","date_published":"2025-09-29T00:00:00+00:00","date_modified":"2025-09-29T10:34:31+02:00"},{"id":"https://doi.org/10.59350/mp76s-rkp03","title":"A Gentle Introduction to Open Science","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["editor"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["open science","welcome","community"],"content_html":"\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/blog/2025/09/23/gentle-openscience/sunny_and_steffi.jpg\"\t\t\talt=\"Sunny and Steffi showing off their R hex stickers!\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eSunny and Steffi showing off their R hex stickers!\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThis summer I had a wonderful time attending the \u003ca href=\"https://www.sco-soc.ca/\"\u003eSociety for Canadian Ornithologists\u003c/a\u003e meeting in \u003ca href=\"https://en.wikipedia.org/wiki/Saskatoon\"\u003eSaskatoon\u003c/a\u003e, Canada.It was super exciting to run into \u003ca href=\"/author/yi-chin-sunny-tseng/\"\u003eSunny Tseng\u003c/a\u003e, rOpenSci Champion and fellow \u003ca href=\"https://en.wikipedia.org/wiki/Ornithology\"\u003eornithologist\u003c/a\u003e!It\u0026rsquo;s not often that I am able to run into both types of colleagues (R developers and ornithologists) at the same conference, so I cherish these experiences.\u003c/p\u003e\u003cp\u003eBack before I joined rOpenSci I started my professional career as a \u003ca href=\"https://royalsocietypublishing.org/doi/10.1098/rspb.2016.1058\"\u003ebehavioural ecologist and ornithologist\u003c/a\u003e, studying the effects of urban noise and habitat on communication in \u003ca href=\"https://en.wikipedia.org/wiki/Chickadee\"\u003eChickadees\u003c/a\u003e (Tits for the non-North Americans).While I\u0026rsquo;ve shifted into R consulting and supporting \u003ca href=\"/author/yanina-bellini-saibene\"\u003eYani\u003c/a\u003e here at rOpenSci with our amazing community, today I still work mostly for other ornithologists or bird-related conservation non-profits.\u003c/p\u003e\u003cp\u003eThis means that the \u003ca href=\"https://www.sco-soc.ca/\"\u003eSociety for Canadian Ornithologists\u003c/a\u003e is still very much my \u0026lsquo;home\u0026rsquo; organization and I\u0026rsquo;m always excited to go to meetings and reconnect with my colleagues.But ornithology conference or not, I always try to bring a bit of R, Open Science, and rOpenSci to the meeting .\u003c/p\u003e\u003cp\u003eIn the past I\u0026rsquo;ve organized symposia on topics such as \u0026quot; \u003ca href=\"https://github.com/steffilazerte/Presentations/tree/master/2019-08%20SOC%20-%20R%20Symposium#readme\"\u003eR for Ornithologists: Perspectives from useRs to programmeRs (to birdeRs)\u003c/a\u003e\u0026quot; or \u0026quot; \u003ca href=\"https://github.com/steffilazerte/Presentations/tree/master/2021-08%20AOS%7CSOC%20-%20R%20Symposium#readme\"\u003eHow can ornithologists find R packages?\u003c/a\u003e\u0026quot;, and have helped run workshops on R packages for ornithology (like \u003ca href=\"https://github.com/bbsBayes/bbsBayes2\"\u003ebbsBayes2\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eThis year, I felt like I should branch out a bit beyond R and decided to talk about \u0026quot; \u003ca href=\"https://github.com/steffilazerte/Presentations/tree/master/2025-08-Open-Science#readme\"\u003ePractical tips for Open Science in Ornithology\u003c/a\u003e\u0026quot;.My goal was encourage ornithologists (or other scientists) to give Open Science a try.To realize that it doesn\u0026rsquo;t require a background in Computer Science, or buckets of money!And because ornithology has many scientists already working with open data, open methods, and open science, to share some ideas for how to they might encourage more of their colleagues to join in.\u003c/p\u003e\u003cp\u003eFor the rOpenSci community, this may feel very much \u0026ldquo;back to basics\u0026rdquo;.The conversations we have are more often about how can you be \u003cem\u003ebetter\u003c/em\u003e at open science?How can you make that study \u003cem\u003ecompletely\u003c/em\u003e reproducible?How can we \u003cem\u003eimprove\u003c/em\u003e open code quality\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e?\u003c/p\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/blog/2025/09/23/gentle-openscience/alot.png\"\t\t\talt=\"A slide with a surprised looking grey-crowned crane with a large crown of feathers around it\u0026#39;s head. The text reads \u0026#39;Whoa! That\u0026#39;s a lot! Why do Open Science?\u0026#39;\" width=\"400\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eSlide acknowledging that open science can be challenging\u003cbr\u003e(\u003ca href=\"https://upload.wikimedia.org/wikipedia/commons/1/1c/Grey_Crowned_Crane_2.jpg\"\u003eGrey-crowned crane\u003c/a\u003e - Kuribo, CC BY-SA 2.0)\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eBut I think we sometimes forget that in addition to time, skills, and sometimes funding, \u003cstrong\u003eto practice open science takes a great deal of courage\u003c/strong\u003e\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eFor those just getting started (like students), or those without open science support (like researchers at small institutions), practicing open science can seem overwhelming and extremely intimidating.It\u0026rsquo;s scary to think about the criticisms if you don\u0026rsquo;t \u0026ldquo;do open science right\u0026rdquo;, or the consequences if you make a mistake.\u003c/p\u003e\u003cp\u003eI wanted to focus on baby steps, to make it clear that it\u0026rsquo;s making the effort that\u0026rsquo;s important, not getting it perfect!\u003c/p\u003e\u003cp\u003eSo in addition to some practical advice, I gave four general tips:\u003c/p\u003e\u003col\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://steffilazerte.ca/Presentations/2025-08-Open-Science/index.html#/tip-1-dont-try-to-do-everything\"\u003eDon\u0026rsquo;t try to do everything\u003c/a\u003e\u003c/strong\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eBe kind to yourself\u003c/li\u003e\u003cli\u003eYou\u0026rsquo;re allowed to smart small and grow!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://steffilazerte.ca/Presentations/2025-08-Open-Science/index.html#/tip-2-do-one-new-thing\"\u003eDo one new thing\u003c/a\u003e\u003c/strong\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eOn every project, try to expand your skill set, learn one more new thing\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://steffilazerte.ca/Presentations/2025-08-Open-Science/index.html#/tip-3-its-okay-to-be-nervous\"\u003eIt\u0026rsquo;s okay to be nervous\u003c/a\u003e\u003c/strong\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eMistakes happen, just remember that by practicing open science, you\u0026rsquo;re already awesome!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://steffilazerte.ca/Presentations/2025-08-Open-Science/index.html#/tip-4-work-with-others\"\u003eWork with others\u003c/a\u003e\u003c/strong\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eFind your community\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eI think the best thing about giving this talk, was the number of students who approached me afterwards, excited (and nervous) to start sharing their code online.Full of questions from practical ones about using GitHub to general ones about how \u0026lsquo;good\u0026rsquo; your code needs to be to be shared.My answer to this last question was \u0026ldquo;If you used it, share it.(But annotate like mad!)\u0026rdquo;\u003c/p\u003e\u003cp\u003eWhat are your favourite tips for encouraging open science?\u003c/p\u003e\u003ch3 id=\"acknowledgements\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#acknowledgements\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAcknowledgements\u003c/h3\u003e\u003cp\u003eThanks to \u003ca href=\"/author/alex-koiter\"\u003eAlex Koiter\u003c/a\u003e for ideas and brainstorming for my talk, as well as for his awesome (and much longer) talk, \u003ca href=\"https://alexkoiter.ca/presentations/UM_Soil_Science_2023/Open_reproducible_science.html\"\u003eOpen and Reproducible Soil Science\u003c/a\u003e.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eTrisovic A, Lau MK, Pasquier T, et al.\u003ca href=\"https://www.nature.com/articles/s41597-022-01143-6\"\u003eA large-scale study on research code quality and execution\u003c/a\u003e.Sci Data 9, 60 (2022).\u003ca href=\"https://doi.org/10.1038/s41597-022-01143-6\"\u003ehttps://doi.org/10.1038/s41597-022-01143-6\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003e\u003cstrong\u003eInsecurity:\u003c/strong\u003eGomes DGE, Pottier P, Crystal-Ornelas R, et al.\u003ca href=\"https://pmc.ncbi.nlm.nih.gov/articles/PMC9682438/\"\u003eWhy don\u0026rsquo;t we share data and code? Perceived barriers and benefits to public archiving practices\u003c/a\u003e.Proc Biol Sci 289(1987):20221113 (2022).\u003ca href=\"https://doi.org/10.1098/rspb.2022.1113\"\u003ehttps://doi.org/10.1098/rspb.2022.1113\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2025/09/23/gentle-openscience/","date_published":"2025-09-23T00:00:00+00:00","date_modified":"2025-09-23T10:03:38-05:00"},{"id":"https://doi.org/10.59350/e4xca-kx329","title":"All the Ways to Programmatically Edit or Parse R Markdown / Quarto Documents","language":"en","authors":[{"name":"Christophe Dervieux","url":"https://orcid.org/0000-0003-4474-2498","avatar":"https://github.com/cderv.png","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Zhian N. Kamvar","url":"https://orcid.org/0000-0003-1458-7108","avatar":"https://github.com/zkamvar.png","_role":["author"]}],"tags":["pandoc","rmarkdown","tinkr","quarto","markdown","tech notes","babeldown"],"content_html":"\u003cp\u003eIf life gives you a bunch of Markdown files to analyse or edit, do you warm up your regex muscles and get going? How about using more specific tools instead? In this post, we shall give an overview of programmatic ways to parse and edit Markdown files: Markdown, R Markdown, Quarto, Hugo files, you name it.\u003c/p\u003e\u003ch2 id=\"what-is-markdown\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-markdown\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is Markdown?\u003c/h2\u003e\u003cp\u003eMarkdown is a (punny, eh) markup language created by John Gruber and Aaron Swartz. Here is an example:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-md\" data-lang=\"md\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e# My first header\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSome content, with parts in \u003cspan class=\"gs\"\u003e**bold**\u003c/span\u003e or \u003cspan class=\"ge\"\u003e*italic*\u003c/span\u003e.\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eLet me add a [\u003cspan class=\"nt\"\u003elink\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://ropensci.org\u003c/span\u003e).\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eDifferent Markdown files can lead to the same output, for instance this is equivalent to our first example:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-md\" data-lang=\"md\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eMy first header\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e===============\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSome content, with parts in \u003cspan class=\"gs\"\u003e__bold__\u003c/span\u003e or \u003cspan class=\"ge\"\u003e_italic_\u003c/span\u003e. Let me add a [\u003cspan class=\"nt\"\u003elink\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://ropensci.org\u003c/span\u003e).\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eFurthermore there are different \u003cem\u003eflavours\u003c/em\u003e or \u003cem\u003especifications (specs)\u003c/em\u003e of Markdown\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e, which add some \u003ca href=\"https://www.markdownguide.org/extended-syntax/\"\u003eextended syntax\u003c/a\u003e, like emojis written with colons.\u003c/p\u003e\u003cp\u003eR users will commonly interact with different Markdown flavors through their usual tools:\u003c/p\u003e\u003cul\u003e\u003cli\u003eR Markdown which uses Pandoc under the hood,\u003c/li\u003e\u003cli\u003eQuarto (uses Pandoc under the hood\u0026hellip; see any trend here?),\u003c/li\u003e\u003cli\u003eGitHub which uses \u003ca href=\"https://github.github.com/gfm/\"\u003eGitHub Flavored Markdown (GFM)\u003c/a\u003e,\u003c/li\u003e\u003cli\u003eMarkdown in roxygen2 which uses Commonmark through \u003ca href=\"https://cran.r-project.org/web/packages/commonmark/index.html\"\u003e{commonmark}\u003c/a\u003e,\u003c/li\u003e\u003cli\u003eHugo, for \u003ca href=\"https://pkgs.rstudio.com/blogdown/\"\u003eblogdown\u003c/a\u003e or \u003ca href=\"https://hugodown.r-lib.org/\"\u003ehugodown\u003c/a\u003e websites, which support the \u003ca href=\"https://gohugo.io/content-management/formats/#markdown\"\u003eCommonmark and GFM specs\u003c/a\u003e,\u003c/li\u003e\u003cli\u003eJekyll which uses GFM with quirks through \u003ca href=\"https://jekyllrb.com/docs/configuration/markdown/\"\u003ekramdown\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eMany tools using Markdown also accept \u003cem\u003efrontmatter\u003c/em\u003e: metadata at the top of Markdown files, for instance YAML, TOML pr JSON. Here is an example with a YAML frontmatter:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-md\" data-lang=\"md\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etitle: My cool thing\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eauthor: Myself\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e---\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSome content, \u003cspan class=\"ge\"\u003e*nice*\u003c/span\u003e content.\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eMost often R users will write Markdown manually, or with the help of an editor such as the \u003ca href=\"https://quarto.org/docs/tools/positron/visual-editor.html\"\u003ePositron visual editor\u003c/a\u003e or the \u003ca href=\"https://posit.co/blog/exploring-rstudio-visual-markdown-editor/\"\u003eRStudio IDE visual editor\u003c/a\u003e. But sometimes, one will have to create or edit a bunch of Markdown files at once, and editing all those files by hand is a huge waste of time. This blog post will give you resources in R that you can use to create, parse, and edit Markdown documents, so that you can become the Markdown wizard you have always dreamed of becoming \u0026#x1f9d9;!\u003c/p\u003e\u003ch3 id=\"code-chunks-and-literate-programming\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#code-chunks-and-literate-programming\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCode chunks and literate programming\u003c/h3\u003e\u003cp\u003eIn Markdown you can add code chunks, that will be properly formatted and highlighted, using the following syntax:\u003c/p\u003e\u003cpre\u003e\u003ccode\u003e```r1 + 1```\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eTools for literate programming such as knitr (for R Markdown and Quarto) will let you add code chunks that will be executed to render the document:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e```{r}#| label: my-chunk#| echo: true1 + 1```\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe latter syntax, the executable code chunks, are not necessarily properly handled by off-the-shelf \u0026ldquo;normal\u0026rdquo; tools like Pandoc. This is something to keep in mind if you\u0026rsquo;re dealing with documents that contain executable code chunks.\u003c/p\u003e\u003ch2 id=\"templating-tools-for-boilerplate-documents\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#templating-tools-for-boilerplate-documents\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTemplating tools for boilerplate documents\u003c/h2\u003e\u003cp\u003eImagine you need to create a bunch of different R Markdown files, for instance for students to use as personalized exercises. In that case, you can create a boilerplate document as a template, and create its different output versions using a templating tool.\u003c/p\u003e\u003cp\u003eTemplating tools include:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://bookdown.org/yihui/rmarkdown-cookbook/knit-expand.html\"\u003e\u003ccode\u003eknitr::knit_expand()\u003c/code\u003e\u003c/a\u003e by Yihui Xie;\u003c/li\u003e\u003cli\u003ethe \u003ca href=\"https://github.com/edwindj/whisker\"\u003ewhisker package\u003c/a\u003e maintained by Edwin de Jonge (used in for instance pkgdown);\u003c/li\u003e\u003cli\u003ethe \u003ca href=\"https://github.com/gregfrog/brew\"\u003ebrew package\u003c/a\u003e maintained by Greg Hunt;\u003c/li\u003e\u003cli\u003e\u003ca href=\"/blog/2023/06/01/troubleshooting-pandoc-problems-as-an-r-user/\"\u003ePandoc\u003c/a\u003e by John MacFarlane through its \u003ca href=\"https://pandoc.org/MANUAL.html#templates\"\u003etemplates\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe simplest example of the whisker package might furthermore remind you of the \u003ca href=\"https://glue.tidyverse.org/\"\u003eglue package\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eA common workflow would be:\u003c/p\u003e\u003cul\u003e\u003cli\u003eYou create a template in a file, where variable parts are indicated by strings such as \u003ccode\u003e{{name}}\u003c/code\u003e.\u003c/li\u003e\u003cli\u003eYou read this template in R using for instance the \u003ca href=\"https://brio.r-lib.org/\"\u003ebrio package\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eMapping over your set of variables, you render the template using whisker and save each version to a file using the brio package.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"example\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#example\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExample\u003c/h3\u003e\u003cp\u003eHere\u0026rsquo;s an example Markdown file that we can use as a template:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e---title: \"Homework assignment 1\"author: \"{{name}}\"---Create a normal distribution with a mean of {{mean}} and a standard deviation of {{sd}}:```{r solution-1}# hint: use the rnorm function```\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eUsing the workflow below, we can create different Markdown documents corresponding to different students.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='c'\u003e# generate student variables ----\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nv'\u003estudents\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/c.html'\u003ec\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"Maëlle\"\u003c/span\u003e, \u003cspan class='s'\u003e\"Christophe\"\u003c/span\u003e, \u003cspan class='s'\u003e\"Zhian\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nv'\u003en\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/length.html'\u003elength\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003estudents\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nv'\u003ekey\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/data.frame.html'\u003edata.frame\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  name \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='nv'\u003estudents\u003c/span\u003e,\u003c/span\u003e\u003cspan\u003e  mean \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/stats/Poisson.html'\u003erpois\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003en\u003c/span\u003e, \u003cspan class='m'\u003e5\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e,\u003c/span\u003e\u003cspan\u003e  sd \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/sprintf.html'\u003esprintf\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"%.1f\"\u003c/span\u003e, \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/stats/Uniform.html'\u003erunif\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003en\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e,\u003c/span\u003e\u003cspan\u003e  file \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/sprintf.html'\u003esprintf\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"%s-hw.md\"\u003c/span\u003e, \u003cspan class='nv'\u003estudents\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e# render and write assignment from template ----\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nv'\u003emake_assignment\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='kr'\u003efunction\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ekey\u003c/span\u003e, \u003cspan class='nv'\u003etemplate\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e\u0026#123;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/lapply.html'\u003elapply\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/seq.html'\u003eseq\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003en\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e, \u003cspan class='kr'\u003efunction\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ei\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='o'\u003e\u0026#123;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e    \u003cspan class='nv'\u003enew\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nf'\u003ewhisker\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/pkg/whisker/man/whisker.render.html'\u003ewhisker.render\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003etemplate\u003c/span\u003e, data \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='nv'\u003ekey\u003c/span\u003e\u003cspan class='o'\u003e[\u003c/span\u003e\u003cspan class='nv'\u003ei\u003c/span\u003e, \u003cspan class='o'\u003e]\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e    \u003cspan class='nf'\u003ebrio\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://brio.r-lib.org/reference/write_lines.html'\u003ewrite_lines\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003enew\u003c/span\u003e, \u003cspan class='nv'\u003ekey\u003c/span\u003e\u003cspan class='o'\u003e$\u003c/span\u003e\u003cspan class='nv'\u003efile\u003c/span\u003e\u003cspan class='o'\u003e[\u003c/span\u003e\u003cspan class='nv'\u003ei\u003c/span\u003e\u003cspan class='o'\u003e]\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='o'\u003e\u0026#125;\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e  \u003cspan class='kr'\u003e\u003ca href='https://rdrr.io/r/base/function.html'\u003ereturn\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/invisible.html'\u003einvisible\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='o'\u003e\u0026#125;\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nv'\u003emd\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nf'\u003ebrio\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://brio.r-lib.org/reference/read_lines.html'\u003eread_lines\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"hw-template.md\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nf'\u003emake_assignment\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ekey\u003c/span\u003e, template \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='nv'\u003emd\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/base/print.html'\u003eprint\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003ekey\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt;         name mean  sd             file\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 1     Maëlle    3 0.9     Maëlle-hw.md\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 2 Christophe    4 0.2 Christophe-hw.md\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='c'\u003e#\u0026gt; 3      Zhian    8 0.8      Zhian-hw.md\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eHere\u0026rsquo;s how Zhian\u0026rsquo;s homework looks like:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e---title: \"Homework assignment 1\"author: \"Zhian\"---Create a normal distribution with a mean of 8 and a standard deviation of 0.8:```{r solution-1}# hint: use the rnorm function```\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003ch2 id=\"string-manipulation-tools\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#string-manipulation-tools\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eString manipulation tools\u003c/h2\u003e\u003cp\u003eYou can use string manipulation tools to parse Markdown if you are sure of the Markdown variants your code will get as input, or if you are willing to grow your codebase to accommodate many edge cases\u0026hellip; which in the end means you are writing an actual Markdown parser. Not for the faint of heart\u0026hellip; nor necessary if you read the section after this one. \u0026#x1f60c;\u003c/p\u003e\u003cp\u003eYou\u0026rsquo;d detect headings using for instance \u003ccode\u003egrep(\u0026quot;^#\u0026quot;, markdown_lines)\u003c/code\u003e\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eExample of string manipulation tools include base R (\u003ca href=\"https://rdrr.io/r/base/grep.html\"\u003e\u003ccode\u003esub()\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://rdrr.io/r/base/grep.html\"\u003e\u003ccode\u003egrep()\u003c/code\u003e\u003c/a\u003e and friends), \u003ca href=\"https://stringr.tidyverse.org/\"\u003estringr\u003c/a\u003e (and \u003ca href=\"https://stringi.gagolewski.com/index.html\"\u003estringi\u003c/a\u003e), \u003ca href=\"https://rdrr.io/pkg/xfun/man/gsub_file.html\"\u003e\u003ccode\u003exfun::gsub_file()\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eAlthough string manipulation tools are of a limited usefulness when parsing Markdown, they can \u003cem\u003ecomplement\u003c/em\u003e the actual parsing tools. Even if using specific Markdown parsing tools will help you write fewer regular expressions yourself\u0026hellip; they won\u0026rsquo;t completely free you from them.\u003c/p\u003e\u003ch2 id=\"abstract-representation-manipulation-tools\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#abstract-representation-manipulation-tools\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAbstract representation manipulation tools\u003c/h2\u003e\u003cp\u003eAbstract representation manipulation tools are fantastic, and numerous. These translate the Markdown document into a data structure called an \u003ca href=\"https://en.wikipedia.org/wiki/Abstract_syntax_tree\"\u003eAbstract Syntax Tree (AST)\u003c/a\u003e that gives you fine-grained control over specific elements of the document (e.g. individual headings or links regardless of how they are written). With a formal data structure, you can programmatically manipulate the Markdown document by adding, removing, or manipulating pieces of Markdown in a standardized way.\u003c/p\u003e\u003cp\u003eSome of these tools allow you to read, edit and \u003cem\u003ewrite back\u003c/em\u003e to the document.\u003c/p\u003e\u003cp\u003eWe will only mention the tools you can directly use from R.\u003c/p\u003e\u003ch3 id=\"example-use-case\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#example-use-case\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExample use case\u003c/h3\u003e\u003cp\u003eLet\u0026rsquo;s say you have created a bunch of tutorials that link to a website containing a gallery of extensions for a popular plotting package. Let\u0026rsquo;s also say that one day, someone discovers that the link to the website is suddenly \u003ca href=\"https://github.com/ggplot2-exts/gallery/issues/112\"\u003eredirecting to a potentially malicious site that is most certainly not related to the grammar of graphics\u003c/a\u003e and you need to replace all instances of that link to \u003ccode\u003e**redacted**\u003c/code\u003e. Since links in Markdown could be written any number of ways, regex is not going to help you, but a fine-grained Markdown parser will!\u003c/p\u003e\u003cp\u003eA workflow for this situation would be:\u003c/p\u003e\u003cul\u003e\u003cli\u003eread in the Markdown AST with your favourite parser\u003c/li\u003e\u003cli\u003epull out all links that point to the rotten link\u003c/li\u003e\u003cli\u003ereplace them with emphasized text that says \u0026ldquo;redacted\u0026rdquo;\u003c/li\u003e\u003cli\u003econvert the AST and write back to file\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tinkr\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tinkr\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e{tinkr}\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://docs.ropensci.org/tinkr/\"\u003etinkr package\u003c/a\u003e dreamed up by Maëlle Salmon and maintained by Zhian Kamvar parses Markdown to XML using Commonmark, allows you to extract and manipulate Markdown using XPath via the \u003ca href=\"https://xml2.r-lib.org/\"\u003exml2\u003c/a\u003e package. Tinkr writes the XML back to Markdown using XSLT. The YAML metadata is available as a string. Tinkr supports executable code chunks.\u003c/p\u003e\u003cp\u003eThe tinkr package is used in the \u003ca href=\"https://docs.ropensci.org/babeldown/\"\u003ebabeldown\u003c/a\u003e and \u003ca href=\"https://docs.ropensci.org/aeolus/\"\u003eaeolus\u003c/a\u003e packages.\u003c/p\u003e\u003ch3 id=\"md4r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#md4r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e{md4r}\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://rundel.github.io/md4r/\"\u003emd4r package\u003c/a\u003e, is a recent experimental package maintained by Colin Rundel, and is an R wrapper around the MD4C (Markdown for C) library and represents the AST as a nested list with attributes in R. The development version of the package has utilities for constructing Markdown documents programmatically.\u003c/p\u003e\u003ch3 id=\"pandoc\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pandoc\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePandoc\u003c/h3\u003e\u003cp\u003eWith Pandoc that we presented in a \u003ca href=\"/blog/2023/06/01/troubleshooting-pandoc-problems-as-an-r-user/\"\u003etech note\u003c/a\u003e, you can parse a Markdown files to a Pandoc Abstract Syntax Tree (either in its native format, or in JSON).\u003c/p\u003e\u003cp\u003eHow would you use Pandoc to edit and write back a Markdown file?\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eUsing Lua filters: Pandoc converts to AST in its native format, Lua filters allow to process it to tweak it, and than Pandoc can write back to markdown.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eUsing JSON filters: Pandoc converts to AST outputing a JSON representation of it, then any tools can modify this JSON file and provided a modified version to pandoc to convert back to markdown.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eNote that Pandoc does not support executable code chunks, as it won\u0026rsquo;t be able to parse executable code chunk as \u003ccode\u003eCodeblock\u003c/code\u003e.\u003c/p\u003e\u003ch3 id=\"parseqmd\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#parseqmd\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e{parseqmd}\u003c/h3\u003e\u003cp\u003eNic Crane has an experimental package called \u003ca href=\"https://github.com/thisisnic/parseqmd\"\u003eparseqmd\u003c/a\u003e that uses this strategy, parsing the output with the \u003ca href=\"https://jeroen.r-universe.dev/jsonlite\"\u003ejsonlite\u003c/a\u003e package. You can also parse to, say HTML, and then back to Markdown. The benefit of parsing it to HTML is that you can use a package such as \u003ca href=\"https://xml2.r-lib.org/\"\u003exml2\u003c/a\u003e or \u003ca href=\"https://rvest.tidyverse.org/\"\u003ervest\u003c/a\u003e to extract and manipulate the elements.\u003c/p\u003e\u003ch3 id=\"parsermd\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#parsermd\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e{parsermd}\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://rundel.github.io/parsermd/\"\u003eparsermd package\u003c/a\u003e is another package maintained by Colin Rundel and is an \u0026ldquo;implementation of a formal grammar and parser for R Markdown documents using the Boost Spirit X3 library. It also includes a collection of high level functions for working with the resulting abstract syntax tree.\u0026rdquo;\u003c/p\u003e\u003cp\u003eThis package has functionality for a tidy workflow allowing you to select different sections of the document. One useful feature is that it has the function \u003ca href=\"https://rundel.github.io/parsermd/articles/templates.html\"\u003e\u003ccode\u003ermd_check_template()\u003c/code\u003e\u003c/a\u003e allowing you to compare student Markdown submissions against a standard template. You can watch his \u003ca href=\"https://posit.co/resources/videos/parsermd-parsing-r-markdown-for-fun-and-profit/\"\u003eRStudio::conf(2021) talk about it\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe parsermd package even allows you to \u003ca href=\"https://github.com/rundel/parsermd/issues/21\"\u003emodify documents\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"lightparser\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#lightparser\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e{lightparser}\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://cloud.r-project.org/web/packages/lightparser/index.html\"\u003elightparser\u003c/a\u003e package by Sébastien Rochette \u0026ldquo;splits your rmarkdown or quarto files by sections into a tibble: titles, text, chunks; rebuilds the file from the tibble\u0026rdquo;. It can be used to \u003ca href=\"https://edenian-prince.github.io/blog/posts/2024-08-21-translate-md-files/\"\u003etranslate documents\u003c/a\u003e for instance.\u003c/p\u003e\u003ch3 id=\"the-impossibility-of-a-perfect-roundtrip\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-impossibility-of-a-perfect-roundtrip\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe impossibility of a perfect roundtrip\u003c/h3\u003e\u003cp\u003eWhen parsing and editing Markdown, then writing it back to Markdown, some undesired changes might appear. For instance, with \u003ca href=\"https://docs.ropensci.org/tinkr/#general-principles-and-solution\"\u003etinkr\u003c/a\u003e list items all start with a \u003ccode\u003e-\u003c/code\u003e even if in the original document they started with a \u003ccode\u003e*\u003c/code\u003e. With md4r, lists that are indented with extra space will be readjusted.\u003c/p\u003e\u003cp\u003eDepending on your use case you might want to find ways to mitigate such losses, for instance only re-writing the lines you made intentional edits to.\u003c/p\u003e\u003ch3 id=\"how-to-choose-a-parser\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-choose-a-parser\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to choose a parser?\u003c/h3\u003e\u003cp\u003eYou can choose a parser based on what it lets you manipulate the Markdown with: if you prefer XML\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e and HTML to nested lists for instance, you might prefer using tinkr or Pandoc. If the high-level functions of md4r or parsermd are suitable for your use case, you might prefer one of them.\u003c/p\u003e\u003cp\u003eImportantly, if your documents contain executable code chunks, you need to use a tool that supports them such as parsermd, lightparser, tinkr.\u003c/p\u003e\u003cp\u003eAnother important criterion is to choose a parser that\u0026rsquo;s close to the use case of your Markdown files as possible. If you are only going to work with Markdown files for GitHub, commonmark/tinkr is an excellent choice since GitHub itself uses commonmark. Now, your work might encompass different sorts of Markdown files that will be used by different tools. For instance, the \u003ca href=\"https://docs.ropensci.org/babeldown/\"\u003ebabeldown\u003c/a\u003e package processes any Markdown file\u003csup id=\"fnref:4\"\u003e\u003ca href=\"#fn:4\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e4\u003c/a\u003e\u003c/sup\u003e: Markdown, R Markdown, Quarto, Hugo. In that case, or if there is no R parser doing exactly what your Markdown\u0026rsquo;s end user does, you need to pay attention to the quirks of that end user. Maybe you have to throw \u003ca href=\"/blog/2023/06/01/troubleshooting-pandoc-problems-as-an-r-user/#raw-attributes\"\u003ePandoc raw attributes\u003c/a\u003e around a Hugo shortcode, for instance. Furthermore, if you need to parse certain elements, like again Hugo shortcodes, you might need to write the parsing code yourself, that is, regular expressions.\u003c/p\u003e\u003ch2 id=\"what-about-the-code-chunks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-about-the-code-chunks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat about the code chunks?\u003c/h2\u003e\u003cp\u003eProgrammatically parsing and editing R code is out of the scope of this post, but closely related enough to throw in a few tips.\u003c/p\u003e\u003ch3 id=\"regular-expressions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#regular-expressions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRegular expressions\u003c/h3\u003e\u003cp\u003eAs with Markdown, you might need to use regular expressions, but that\u0026rsquo;s a risky approach as for instance \u003ccode\u003eplot (x)\u003c/code\u003e and \u003ccode\u003eplot(x)\u003c/code\u003e are both valid function calls in R.\u003c/p\u003e\u003ch3 id=\"xmlparsedata\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#xmlparsedata\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e{xmlparsedata}\u003c/h3\u003e\u003cp\u003eYou can parse the code to XML using base R parsing and \u003ca href=\"https://r-lib.github.io/xmlparsedata/\"\u003exmlparsedata\u003c/a\u003e, then you manipulate the XML with \u003ca href=\"https://masalmon.eu/2022/04/08/xml-xpath/\"\u003eXPath\u003c/a\u003e. To write code back, you can make use of the attributes of each node that indicates the original lines and columns.\u003c/p\u003e\u003cp\u003eSo a possible workflow, as exemplified in Maëlle\u0026rsquo;s \u003ca href=\"https://masalmon.eu/2024/05/15/refactoring-xml/\"\u003eblog post\u003c/a\u003e is:\u003c/p\u003e\u003cul\u003e\u003cli\u003eparse the code to XML, use xmlparsedata to inform what to change and where. Out of these steps you\u0026rsquo;d get a list of elements\u0026rsquo; positions, for instance.\u003c/li\u003e\u003cli\u003euse brio to read the lines, change a few of them with base R tools, then use brio again to write the lines back.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"treesitter\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#treesitter\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e{treesitter}\u003c/h3\u003e\u003cp\u003e\u003ca href=\"https://github.com/DavisVaughan/r-tree-sitter\"\u003etreesitter\u003c/a\u003e by Davis Vaughan \u0026ldquo;provides R bindings to tree-sitter, an incremental parsing system\u0026rdquo;.\u003c/p\u003e\u003ch2 id=\"what-about-metadata\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-about-metadata\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat about metadata?\u003c/h2\u003e\u003cp\u003eWe dedicated this whole post to the \u003cem\u003ebody\u003c/em\u003e of Markdown documents. What about the metadata contained in their frontmatter, like:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nn\"\u003e---\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Cool doc\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eauthor\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Jane Doe\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nn\"\u003e---\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eTo extract or edit YAML/TOML/JSON metadata, you first need to decapitate Markdown documents. For instance, rmarkdown has a function called \u003ca href=\"https://pkgs.rstudio.com/rmarkdown/reference/yaml_front_matter.html\"\u003e\u003ccode\u003ermarkdown::yaml_front_matter()\u003c/code\u003e\u003c/a\u003e to extract the YAML metadata of an R Markdown document; the quarto R package has a function called \u003ca href=\"https://quarto-dev.github.io/quarto-r/reference/quarto_inspect.html\"\u003e\u003ccode\u003equarto::quarto_inspect()\u003c/code\u003e\u003c/a\u003e that among other things outputs the metadata.\u003c/p\u003e\u003cp\u003eYou might read the \u003cem\u003elines\u003c/em\u003e of the Markdown document using \u003ca href=\"https://rdrr.io/r/base/readLines.html\"\u003e\u003ccode\u003ereadLines()\u003c/code\u003e\u003c/a\u003e or \u003ca href=\"https://brio.r-lib.org/reference/read_lines.html\"\u003e\u003ccode\u003ebrio::read_lines()\u003c/code\u003e\u003c/a\u003e, before resorting to regular expressions to identify the start and end of the frontmatter depending on its format.\u003c/p\u003e\u003cp\u003eThen, to handle YAML you\u0026rsquo;d use \u003ca href=\"https://github.com/vubiostat/r-yaml/\"\u003e{yaml}\u003c/a\u003e, to handle TOML you could use \u003ca href=\"https://github.com/extendr/tomledit\"\u003e{tomledit}\u003c/a\u003e or \u003ca href=\"https://cran.r-project.org/web/packages/RcppTOML/index.html\"\u003e{RcppTOML}\u003c/a\u003e, to handle JSON you could use \u003ca href=\"https://jeroen.r-universe.dev/jsonlite\"\u003e{jsonlite}\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eFinally if you need to write back the Markdown document, you\u0026rsquo;d write back its lines using \u003ca href=\"https://rdrr.io/r/base/writeLines.html\"\u003e\u003ccode\u003ewriteLines()\u003c/code\u003e\u003c/a\u003e or \u003ca href=\"https://brio.r-lib.org/reference/write_lines.html\"\u003e\u003ccode\u003ebrio::write_lines()\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"examples-of-markdown-parsing-and-editing\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#examples-of-markdown-parsing-and-editing\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExamples of Markdown parsing and editing\u003c/h2\u003e\u003cp\u003eThe \u003ca href=\"https://carpentries.github.io/pegboard/\"\u003epegboard package\u003c/a\u003e created by Zhian Kamvar and maintained by The Carpentries, parses and validates Carpentries\u0026rsquo; lessons for structural Markdown elements, including valid links, alt-text, and known fenced-divs thanks to tinkr. This package was instrumental in converting all of The Carpentries lesson infrastructure from Jekyll\u0026rsquo;s Markdown syntax to Pandoc\u0026rsquo;s Markdown\u003csup id=\"fnref:5\"\u003e\u003ca href=\"#fn:5\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e5\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eThe \u003ca href=\"https://docs.ropensci.org/babeldown/\"\u003ebabeldown package\u003c/a\u003e maintained by Maëlle Salmon transforms Markdown to XML, sends it to DeepL API for translation, and writes the results back to Markdown, also using tinkr.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we explained how to best parse and edit Markdown files. To create boilerplate documents (think: mailmerge), we recommended templating tools such as \u003ca href=\"https://bookdown.org/yihui/rmarkdown-cookbook/knit-expand.html\"\u003e\u003ccode\u003eknitr::knit_expand()\u003c/code\u003e\u003c/a\u003e, the \u003ca href=\"https://github.com/edwindj/whisker\"\u003ewhisker package\u003c/a\u003e, the \u003ca href=\"https://github.com/gregfrog/brew\"\u003ebrew package\u003c/a\u003e, Pandoc. To edit small parts of a document, we brought up string manipulation tools i.e. regular expressions, with base R (\u003ca href=\"https://rdrr.io/r/base/grep.html\"\u003e\u003ccode\u003esub()\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://rdrr.io/r/base/grep.html\"\u003e\u003ccode\u003egrep()\u003c/code\u003e\u003c/a\u003e and friends), \u003ca href=\"https://stringr.tidyverse.org/\"\u003estringr\u003c/a\u003e (and stringi), \u003ca href=\"https://rdrr.io/pkg/xfun/man/gsub_file.html\"\u003e\u003ccode\u003exfun::gsub_file()\u003c/code\u003e\u003c/a\u003e. For heavier, and safer, manipulation, we listed tools based on tools that manipulate the abstract representation of documents: tinkr, md4r, Pandoc, parseqmd, parsermd, lightparser. We also mentioned tools for working with the \u003cem\u003eR code\u003c/em\u003e inside code cells, and for working with the YAML/TOML/JSON \u003cem\u003efrontmatter\u003c/em\u003e.\u003c/p\u003e\u003cp\u003eWhat do \u003cem\u003eyou\u003c/em\u003e use to handle Markdown files?\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eAs of 2024-06-20, there are \u003ca href=\"https://web.archive.org/web/20250328101117/https://github.com/markdown/markdown.github.com/wiki/Implementations\"\u003e76 programs that parse Markdown\u003c/a\u003e, some with their own unique flavour.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eBut this would also detect code comments! Don\u0026rsquo;t do this!\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eBoth Maëlle and Zhian are \u003cem\u003ehuge\u003c/em\u003e fans of XML and XPath (see: \u003ca href=\"https://masalmon.eu/2022/04/08/xml-xpath/\"\u003ehttps://masalmon.eu/2022/04/08/xml-xpath/\u003c/a\u003e and \u003ca href=\"https://zkamvar.netlify.app/blog/gh-task-lists/\"\u003ehttps://zkamvar.netlify.app/blog/gh-task-lists/\u003c/a\u003e).\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:4\"\u003e\u003cp\u003eOr at least it\u0026rsquo;s supposed to \u0026#x1f605; Thankfully users report edge cases that are not covered yet.\u0026#160;\u003ca href=\"#fnref:4\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:5\"\u003e\u003cp\u003eFor examples, see \u003ca href=\"https://carpentries.github.io/workbench/transition-guide.html\"\u003eThe Carpentries Workbench Transition Guide\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:5\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2025/09/18/markdown-programmatic-parsing/","date_published":"2025-09-18T00:00:00+00:00","date_modified":"2025-09-18T09:42:10+02:00"},{"id":"https://doi.org/10.59350/py3e3-esa68","title":"From Surviving to Thriving: A Convening to Reclaim and Sustain Open Science Communities","language":"en","authors":[{"name":"Daniela Saderi","url":"https://ropensci.org/author/daniela-saderi/","avatar":"https://github.com/dasaderi.png","_role":["author"]},{"name":"Erin Becker","url":"https://ropensci.org/author/erin-becker/","avatar":"https://github.com/ErinBecker.png","_role":["author"]},{"name":"Kari L. Jordan","url":"https://ropensci.org/author/kari-l.-jordan/","avatar":"https://github.com/kariljordan.png","_role":["author"]},{"name":"Leah Wasser","url":"https://ropensci.org/author/leah-wasser/","avatar":"https://github.com/lwasser.png","_role":["author"]},{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["author"]},{"name":"Patricia Herterich","url":"https://ropensci.org/author/patricia-herterich/","avatar":"https://github.com/pherterich.png","_role":["author"]},{"name":"Vanessa Fairhurst","url":"https://ropensci.org/author/vanessa-fairhurst/","avatar":"https://github.com/nessa111987.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]},{"name":"Yo Yehudi","url":"https://ropensci.org/author/yo-yehudi/","avatar":"https://github.com/yochannah.png","_role":["author"]}],"tags":["community","collaboration","funding"],"content_html":"\u003cp\u003eOpen science has transformed how research is conducted, shared, and reused.Yet the organisations at the heart of this transformation are often left vulnerable, underfunded, and disconnected from one another.To move from simply surviving to truly thriving, five leading open science organisations \u0026ndash; \u003ca href=\"https://carpentries.org/\"\u003eThe Carpentries\u003c/a\u003e, \u003ca href=\"https://we-are-ols.org/\"\u003eOLS\u003c/a\u003e, \u003cem\u003erOpenSci\u003c/em\u003e, \u003ca href=\"https://www.pyopensci.org/\"\u003epyOpenSci\u003c/a\u003e, and \u003ca href=\"https://prereview.org/\"\u003ePREreview\u003c/a\u003e \u0026ndash; are convening to chart a collective path forward.We are so grateful to The Navigation Fund for supporting this work, and invite our communities to review the \u003ca href=\"https://commons.datacite.org/doi.org/10.71707/qttn-3j47\"\u003efull proposal\u003c/a\u003e online.\u003c/p\u003e\u003ch2 id=\"why-this-convening-matters\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-this-convening-matters\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy This Convening Matters\u003c/h2\u003e\u003cp\u003eOur work has reshaped scientific culture by modeling inclusive, participatory, and transparent practices.But despite the global reach and impact of our communities, we face shared challenges:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eChronic underfunding that undermines our ability to plan and grow.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFragmentation across networks, which weakens collective visibility and coordination.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eUnsustainable engagement models that over-rely on volunteers without adequate support systems.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eLike a single thread, each of our organisations is fragile alone; together, we can weave a stronger, more resilient open science fabric.\u003c/p\u003e\u003ch2 id=\"current-gaps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#current-gaps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCurrent Gaps\u003c/h2\u003e\u003cp\u003eOpen science is built on collaboration and transparency, but too often the organisations building this infrastructure operate in silos.The result is uneven visibility, duplicated efforts, and missed opportunities to align strategies.Community-driven organisations like ours face distinct challenges compared with technical infrastructure projects: recruiting contributors is not enough if the structures and motivation to sustain their engagement are missing.\u003c/p\u003e\u003cp\u003eThis fragmentation is not just an internal problem; it’s a loss for the broader research ecosystem that depends on our work.\u003c/p\u003e\u003ch2 id=\"our-approach\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#our-approach\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOur Approach\u003c/h2\u003e\u003cp\u003eWe are planning a strategic, in-person convening of leadership from our five organisations.This gathering will focus on:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eShared financial sustainability: Developing collective, value-aligned models for funding and resource generation.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eCollaborative engagement strategies: Designing systems that strengthen and connect our communities across roles, regions, and lived experiences.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eEquity-centered design: Ensuring accessibility, usability, and meaningful participation for all involved.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFacilitated by \u003ca href=\"https://wildlyopen.com/\"\u003eWildly Open\u003c/a\u003e, we are excited to explore and better understand what is (and isn’t) working, and then build durable models for collaboration and sustainability.\u003c/p\u003e\u003ch2 id=\"what-we-aim-to-deliver\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-we-aim-to-deliver\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat We Aim to Deliver\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eA coordinated sustainability strategy that reflects the shared values of our organisations.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA funder-facing pitch to mobilise resources in support of this strategy.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eStronger ties among our organisations that extend beyond the convening, creating lasting impact.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"the-bigger-picture\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-bigger-picture\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe Bigger Picture\u003c/h2\u003e\u003cp\u003eThis convening is not an isolated event.It’s the first step in scaling a movement that reimagines how values-driven open science organisations can grow together, share resources, and strengthen the ecosystem we collectively serve.By working together, we can ensure that the future of open science is not only innovative, but also equitable, sustainable, and resilient.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/09/15/collaboration-communities/","date_published":"2025-09-15T00:00:00+00:00","_relationships":[{"url":"https://we-are-ols.org/posts/2025/09/15/from-surviving-to-thriving/","title":"OLS Blog","relation":"IsIdenticalTo"},{"url":"https://www.carpentries.org/blog/2025/09/convening-to-reclaim-and-sustain-open-science-communities/","title":"The Carpentries Blog","relation":"IsIdenticalTo"},{"url":"https://www.pyopensci.org/blog/pyopensci-surviving-to-thriving.html","title":"PyOpenSci Blog","relation":"IsIdenticalTo"},{"url":"https://content.prereview.org/from-surviving-to-thriving/","title":"PREreview Blog","relation":"IsIdenticalTo"}],"date_modified":"2025-09-15T10:09:46-03:00"},{"id":"https://doi.org/10.59350/fa54c-v4n44","title":"Help Us Design a New Git(Hub) Organizational Dashboard","language":"en","authors":[{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["package development","tech notes"],"content_html":"\u003cp\u003eWe have developed a prototype dashboard which aims to help organizations maintain complex systems of inter-dependent software components.Our initial \u003ca href=\"https://ropensci-review-tools.github.io/repometrics-demo/\"\u003eprototype organizational dashboard\u003c/a\u003e provides insights into code contributors, their repositories, and maintenance status and needs.The prototype dashboard shows data for the three related GitHub organizations, \u003ca href=\"https://github.com/reconhub\"\u003ereconhub\u003c/a\u003e, \u003ca href=\"https://github.com/epiverse\"\u003eepiverse\u003c/a\u003e, and \u003ca href=\"https://github.com/epiverse-trace\"\u003eepiverse-trace\u003c/a\u003e, all of which develop and host open-source software for understanding and analysing epidemics.We aim to develop the current prototype as a template for adoption and adaptation by other open-source organizations.\u003c/p\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2025/09/11/repometrics-call-help/repometrics-index.png\"\t\t\talt=\"Main prototype dashboard page. There are four cards, the top left one shows the total number of packages and below that it lists the organizations ordered from largest to smallest by the number of packages they have. The top right card shows the number of package that needs urgent maintenance. It lists those packages with a link. The bottom left card shows total numbers of commits for all repositories, including a graphical representation. The bottom right car show total activity on GitHub, also including a graphical representation.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eOrganizational overview sections from main prototype dashboard page.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2025/09/11/repometrics-call-help/repometrics-pkg-network.png\"\t\t\talt=\"Network connections between packages.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eInteractive network diagram connecting packages in the organization.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThe primary aim of the dashboard is to help all people involved with, or interested in, either those epidemic-related organizations or rOpenSci, through providing an organization-wide overview of the state of code repositories and the community activity which sustains them.\u003c/p\u003e\u003ch2 id=\"help-design-and-develop-our-dashboard\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#help-design-and-develop-our-dashboard\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHelp design and develop our dashboard!\u003c/h2\u003e\u003cp\u003eWe are seeking help in the further design and development of our \u003ca href=\"https://ropensci-review-tools.github.io/repometrics-demo/\"\u003eprototype organizational dashboard\u003c/a\u003e, both for the organizations featured there, and more generally for a planned rOpenSci-wide dashboard.You can help us by providing suggestions for any ways you think the \u003ca href=\"https://ropensci-review-tools.github.io/repometrics-demo/\"\u003eprototype organizational dashboard\u003c/a\u003e could be improved.If you\u0026rsquo;re a contributor to, or maintainer of, an R package, we\u0026rsquo;d particularly like to hear about any ways the dashboard could be made more useful for you.Please make comments either in this blog post, or via or discussions in the \u003ca href=\"https://github.com/ropensci-review-tools/orgmetrics/discussions\"\u003eassociated GitHub repository\u003c/a\u003e.Want to give private feedback?No worries, email me \u003ca href=\"mailto:mark@ropensci.org\"\u003edirectly\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"a-few-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-few-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA few notes\u003c/h3\u003e\u003col\u003e\u003cli\u003eThe dashboard is built on a huge wealth of data, so presume any data you can think of from full git logs and GitHub APIs are already there and could be used.\u003c/li\u003e\u003cli\u003eThose data include time series of most things measured, even though many are only presented as snapshots of the latest time period.\u003c/li\u003e\u003cli\u003eGiven those 2 points, the biggest challenge is reducing these data to some minimally meaningful amount.\u003c/li\u003e\u003c/ol\u003e\u003ch2 id=\"thank-you\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#thank-you\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThank you!\u003c/h2\u003e\u003cp\u003eThank you!Interested in contributing in other ways to rOpenSci?Please have a look at our \u003ca href=\"https://contributing.ropensci.org\"\u003econtributing guide\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/09/11/repometrics-call-help/","date_published":"2025-09-11T00:00:00+00:00","date_modified":"2025-09-11T07:38:36+00:00"},{"id":"https://doi.org/10.59350/5ydy7-pdp91","title":"rOpenSci Champions Second Cohort: Projects Wrap-Up","language":"en","authors":[{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["editor"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","champions program","packages"],"content_html":"\u003cp\u003eAs we welcome the third cohort of the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e, our second cohort has now completed the second phase of the program.In this article, we share each Champion\u0026rsquo;s project, their achievements, and their outreach activities.\u003c/p\u003e\u003ch2 id=\"champions-projects\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#champions-projects\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChampions\u0026rsquo; Projects\u003c/h2\u003e\u003cp\u003eIn their applications Champions choose to develop a new package or to participate in the review process as authors or reviewers.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/09/02/champions-program-projects-cohort2/proyectos.png\"\t\t\talt=\"Logos of all the packages developed or improved during the champions program 2023-2024\"\u003e\u003c/figure\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eAndrea Gomez Vargas\u003c/strong\u003e, from Argentina, developed the package \u003ca href=\"https://soyandrea.github.io/arcenso/\"\u003earcenso\u003c/a\u003e, to provide access to the official data of the national population censuses in Argentina from the National Institute of Statistics and Census - INDEC, and to make this historical census data available, homogenized, and ready to use.  Her mentor was \u003ca href=\"/author/luis-verde-arregoitia/\"\u003eLuis Verde\u003c/a\u003e from Mexico. You can learn more about the package in \u003ca href=\"/blog/2025/05/15/puentes-comunidades-campeones-ropensci/\"\u003ethe blog post Andrea wrote about her project and her journey on the program\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eFrancesca Belem Lopes Palmeira\u003c/strong\u003e, from Brazil, developed a new package called \u003ca href=\"https://fblpalmeira.github.io/pcir/\"\u003epcir: \u0026lsquo;Potential for Conflict Index - PCI\u0026rsquo;\u003c/a\u003e, which is a descriptive statistical method used to enhance the understanding of outcomes in human dimensions research. The package equips users with the tools required for calculating, comparing, and graphing the potential for conflict. Her mentor was \u003ca href=\"/author/bruna-wundervald/\"\u003eBruna Wundervald\u003c/a\u003e from Brazil.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eSunny Tseng\u003c/strong\u003e, from Taiwan, now living in Canada, developed \u003ca href=\"https://sunnytseng.github.io/bbsTaiwan/\"\u003ebbsTaiwan\u003c/a\u003e. This is an R package to streamline Taiwan Breeding Bird Survey (BBS) data retrieval and analysis. bbsTaiwan facilitates data access from GBIF, where Taiwan BBS data are stored. Users can tailor species analysis, controlling data stratification, preparation, and mapping. Sunny\u0026rsquo;s mentor was \u003ca href=\"/author/eunseop-kim/\"\u003eEunseop Kim\u003c/a\u003e from South Korea, now living in the USA.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eErika Siregar\u003c/strong\u003e, from Indonesia, worked on developing \u003ca href=\"https://erikaris.github.io/rplaywright/\"\u003erplaywright\u003c/a\u003e an R package seamlessly bridge with the NodeJS library, Playwright, enabling simplified web testing and automation for R users. This package aims to provide R users with a comprehensive toolkit for interacting with web browsers programmatically, allowing for tasks such as browser automation, web scraping, and end-to-end testing directly from within the R environment. Her mentor was \u003ca href=\"/author/apoorv-anand/\"\u003eApoor Anand\u003c/a\u003e from India.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"improving-and-reviewing-existing-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#improving-and-reviewing-existing-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eImproving and reviewing existing packages\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eEzekiel Adebayo Ogundepo\u003c/strong\u003e from Nigeria, worked on the \u003ca href=\"https://docs.ropensci.org/naijR/\"\u003ebulkreadr\u003c/a\u003e package, which is a package designed to optimize the process of importing and processing large datasets, providing compatibility with several file formats from a range of statistical software and spreadsheets. Ezekiel worked on enhanced functions functionality and launched the \u003ca href=\"https://gbganalyst.github.io/bulkreadr/news/index.html\"\u003eofficial website of the package\u003c/a\u003e. His mentor was \u003ca href=\"/author/francisco-cardozo/\"\u003eFrancisco Cardozo\u003c/a\u003e from Colombia.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eLiz Hare\u003c/strong\u003e from the US, worked as reviewer on the software peer review of the \u003ca href=\"https://github.com/ropensci/software-review/issues/653\"\u003eemodnet.wfs\u003c/a\u003e package, that provides helpers to access EMODnet Web Feature Service data through R.  Her mentor was \u003ca href=\"/author/fran%C3%A7ois-michonneau/\"\u003eFrançois Michonneau\u003c/a\u003e from France.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eSehrish Kanwal\u003c/strong\u003e, from Australia, worked to improve the \u003ca href=\"https://github.com/umccr/RNAsum\"\u003eRNAsum R package\u003c/a\u003e, an RNA-seq reporting workflow designed to post-process, summarise, and visualize outputs. Sehrish worked on the package and a paper about it. The \u003ca href=\"https://umccr.github.io/RNAsum/\"\u003epackage website\u003c/a\u003e presents more information on the package\u0026rsquo;s functionalities. Her mentor was \u003ca href=\"/author/emi-tanaka/\"\u003eEmi Tanaka\u003c/a\u003e from Australia.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eJacqui Levy\u003c/strong\u003e, from Canada, worked on the \u003ca href=\"https://github.com/Jacqui-123/icicle\"\u003eicicle package\u003c/a\u003e to tidy and calculate ice cycle variables from thousands of open-source hydrological stations that are managed by the Water Survey of Canada. This R package will give scientists the tools to assess ice cycle variables and how they might be changing over time for any river station. Her mentor was \u003ca href=\"/author/jonathan-keane/\"\u003eJonathan Keane\u003c/a\u003e, from the US.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eBinod Jung Bogati\u003c/strong\u003e, from Nepal, worked on the \u003ca href=\"https://github.com/rugnepal/nepalcensus\"\u003enepalcensus\u003c/a\u003e package, which provides a comprehensive and up-to-date tool for accessing and exploring demographic, socio-economic, and geographic data collected during the most recent census conducted in Nepal. The package aims to facilitate data analysis and visualization for researchers, policymakers, and anyone interested in understanding and utilizing census data effectively for various applications and insights. His mentor was \u003ca href=\"/author/erle-holgersen/\"\u003eErle Holgersen\u003c/a\u003e from Canada.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"outreach-activities\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#outreach-activities\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOutreach Activities\u003c/h2\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/09/02/champions-program-projects-cohort2/outreach.png\"\t\t\talt=\"Examples of outreach activities: workshops, webinars, conferences, meetups, papers, talks and user groups\"\u003e\u003c/figure\u003e\u003cp\u003eOur Champions carried out a wide range of outreach activities including talks, conference papers, workshops, blog articles, community calls and meetups. The objective of these activities was to share what they did and what they learned during the program with their communities beyond rOpenSci.\u003c/p\u003e\u003cp\u003eOutreach activities commenced in August 2024, involved local communities (universities, RUGs, R-Ladies Chapters, conferences, and organizations), and were delivered in the Champions’ native/preferred languages (English, Spanish, Portuguese and Chinese).\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://ropensci.org/events/rsr-learn-and-use/\"\u003eLiz Hare, member of this cohort worked together with Cagri, a champion from the first cohort to do outreach activities\u003c/a\u003e and also introduce their cohort mates to other communities and organizations giving them \u003ca href=\"https://www.youtube.com/watch?v=p2Odyp9VIPA\"\u003espace to share what they did during the Champions Program\u003c/a\u003e.\u003ca href=\"/author/victor-ordu/\"\u003eVictor Ordu\u003c/a\u003e, first cohort champion, participated in the Unilorin meetup organized by Ezekiel, speaking about \u003ca href=\"https://youtu.be/N0DdbszMt2Y?si=3eZd-G1z-AcYW_TQ\"\u003eHands-On Data Cleaning in R with Regular Expressions\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eChampions worked with their local communities to organize different kinds of events and spaces:\u003c/p\u003e\u003cul\u003e\u003cli\u003eSunny organized a workshop to teach how to use the package she developed during the champions program in Taiwan.\u003c/li\u003e\u003cli\u003eEzekiel submitted a proposal to the R Consortium to create the \u003ca href=\"https://www.meetup.com/unilorin-r-users-group/\"\u003eUnilorin R user Group\u003c/a\u003e, which received partial funding to get it started.  After a successful year of operation, with 5 events held and more than 600 members, the group was awarded another R Consortium grant to continue its activities during 2025.\u003c/li\u003e\u003cli\u003eAndrea organized several events in Argentina, including a talk at the \u003ca href=\"https://www.meetup.com/rbuenosaires/events/304935866/?eventOrigin=group_events_list\"\u003eR-Ladies Buenos Aires chapter and the RenBaires R user Group\u003c/a\u003e about the arcenso package and the Champions Program.\u003c/li\u003e\u003cli\u003eSehrish shared her experience on the rOpenSci Champions Program at the webinar \u003ca href=\"https://bdsi.anu.edu.au/news-events/events/championing-omics-data-analysis-through-open-science-mentoring-and-innovating\"\u003eChampioning omics data analysis through Open science, Mentoring and Innovating tool\u003c/a\u003e at the Australian National University.\u003c/li\u003e\u003cli\u003eFrancesca organize a \u003ca href=\"https://www.meetup.com/rladies-florianopolis/events/305989838/\"\u003emeetup with R-Ladies Floripa to introduce her package pcir\u003c/a\u003e and \u003ca href=\"https://github.com/fblpalmeira/RLadies_Floripa\"\u003eshared the workshop materials openly\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003erOpenSci\u0026rsquo;s community spaces also benefited from the participation of the champions:\u003c/p\u003e\u003cul\u003e\u003cli\u003eSunny participated as a panelist in the community call \u003ca href=\"https://ropensci.org/commcalls/first-time-contributor/\"\u003eFrom Novice to Contributor: Making and Supporting First-Time Contributions to FOSS\u003c/a\u003e telling about her experience developing the \u003cem\u003ebbsTawian\u003c/em\u003e package as a project in the Champions Program. She also \u003ca href=\"https://github.com/ropensci/software-review/issues/698\"\u003ebecome a reviewer for rOpenSci\u0026rsquo;s software peer review\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eAndrea participated in the Community Call in Spanish \u003ca href=\"https://ropensci.org/es/commcalls/champions-latino-2025/\"\u003eFostering Open Science in Latin America - rOpenSci Champions Program\u003c/a\u003e sharing her experience during the Champions Program with people interested in applying to the next cohort. As a co-orgaizer of R en Buenos Aires RUG, she organize the meetup \u003ca href=\"https://www.meetup.com/rbuenosaires/events/308338205/\"\u003eShit, Git! How to handle Errors in Git and not died trying\u003c/a\u003e in Spanish, helping with the new material for the next cohort training.\u003c/li\u003e\u003cli\u003eEzekiel participated as a mentor in the \u003ca href=\"https://ropensci.org/blog/2025/01/24/coworking-hackathons/\"\u003eCoworking Mini-Hackathon for First-Time Contributors\u003c/a\u003e, helping people do their first contributions to R packages.\u003c/li\u003e\u003cli\u003eFrancesca was the main host of our first community call in Portugues \u003ca href=\"https://ropensci.org/commcalls/translation-portuguese/\"\u003eThe R community speaks Portuguese\u003c/a\u003e and also one of the mentors of our \u003ca href=\"https://www.eventbrite.cl/e/traducao-hackathon-traslaton-ropensci-tickets-1045507530167\"\u003eTradução + Hackathon = Traslaton rOpenSci\u003c/a\u003e during LatinR 2024.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eChampions also wrote blog posts for rOpenSci\u0026rsquo;s website covering technological aspects such as \u003ca href=\"/blog/2024/09/05/screen-readers-tools/\"\u003e“Resources For Using R With Screen Readers”\u003c/a\u003e by Liz Hare and also aspects such as the experience of being part of the program, such as \u003ca href=\"/blog/2025/05/15/puentes-comunidades-campeones-ropensci/\"\u003e“Bridges and Communities. My Journey as an rOpenSci Champion”\u003c/a\u003e by Andrea Vargas Gomez.\u003c/p\u003e\u003cp\u003eAcademic publications are also part of the outcomes of the Champions work. For example, Sehrish Kanwal published a paper about the \u003ca href=\"https://doi.org/10.1101/2025.01.10.24319650\"\u003eRNAsum R package\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eLatinR, useR!, Posit, Big Team Science and several other conferences were attended by our champions. For example, Andrea presented the package she developed during the program at the Latin American Conference on the Use of R in R\u0026amp;D and the Government Advances in Statistical Programming Conference.In addition Sunny, Andrea and Erika received scholarships to attend Posit Conf 2024 and Sunny and Andrea were able to participate.Erika and Andrea also presented their respective packages developed during the program at useR! 2025. Liz will present rOpenSci Develop, Package and Peer Review Guide at \u003ca href=\"https://bigteamscienceconference.github.io/registration/\"\u003eBig Team Science Conference 2025.\u003c/a\u003e\u003c/p\u003e\u003ch2 id=\"champions-accomplishments-and-next-steps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#champions-accomplishments-and-next-steps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChampions\u0026rsquo; accomplishments and next steps\u003c/h2\u003e\u003cp\u003eOur Champions have been very successful, and have gained a lot from their projects and from their relationships with their mentors and their cohort mates. The impact of their work has enriched their home institutions, their local communities and rOpenSci Community. Their outreach activities shared information and knowledge in local ajd international contexts, and fostered productive spaces such as R user groups.\u003c/p\u003e\u003cp\u003eMany of our Champions will continue with their outreach activities and maintenance of their R package. Stay updated about their activities through our events and talks section in our website, our newsletter and social media!\u003c/p\u003e","url":"https://ropensci.org/blog/2025/09/02/champions-program-projects-cohort2/","date_published":"2025-09-02T00:00:00+00:00","date_modified":"2025-09-02T10:46:46-03:00"},{"id":"https://doi.org/10.59350/zk2nx-akh49","title":"rOpenSci News Digest, August 2025","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2025/08/28/news-august-2025\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"community-call-r-multiverse-a-new-way-to-publish-r-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call-r-multiverse-a-new-way-to-publish-r-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity call: \u0026ldquo;R-multiverse: a new way to publish R packages\u0026rdquo;\u003c/h3\u003e\u003cp\u003eOn Monday, 29 September 2025 14:00 UTC, we\u0026rsquo;ll host a \u003ca href=\"/commcalls/r-multiverse/\"\u003ecommunity call\u003c/a\u003e about the R-multiverse, starring \u003ca href=\"/author/will-landau\"\u003eWill Landau\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eR-multiverse is a new dual repository for R packages, based on infrastructure from R-universe and GitHub. We would like to invite the developer community to contribute packages.\u003c/p\u003e\u003cp\u003eWith R-multiverse, users have a central place for installing packages. Automated quarterly production snapshots enforce quality.\u003c/p\u003e\u003cp\u003ePackage maintainers retain most of the freedom and flexibility of self-publishing. Maintainers directly control package releases through GitHub or GitLab.\u003c/p\u003e\u003cp\u003eR-multiverse originated from the R Consortium Repositories Working Group. It has transparent governance, and it operates in a collaborative and open way.\u003c/p\u003e\u003cp\u003eFind out more on the \u003ca href=\"/commcalls/r-multiverse/\"\u003eevent page\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"ropensci-at-user-2025\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-at-user-2025\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci at useR! 2025\u003c/h3\u003e\u003cp\u003eMembers of our team and our community were present at, and enjoyed, \u003ca href=\"/events/user-2025/\"\u003euseR! 2025\u003c/a\u003e!\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/08/28/news-august-2025/user2025.jpg\"\t\t\talt=\"Collage of pictures from the conference\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eBottom, mentor Luis D. Verde Arregoitia, champion Andrea Gomez Vargas, director Noam Ross, community manager Yani Bellina Saibene; top left, Yani with repeat package reviewer Sheila Saia; top right, Yani with targets creator Will Landau; below, Yani with rredlist maintainer William Gearty.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eYou can watch videos of\u003c/p\u003e\u003cul\u003e\u003cli\u003eYani\u0026rsquo;s keynote \u003ca href=\"https://www.youtube.com/live/CTTvTQ-JZhw?si=dBuyXYANeTu1aEVU\"\u003e\u0026ldquo;We R Together. How to learn, use and improve a programming language as a community.\u0026rdquo;\u003c/a\u003e (\u003ca href=\"https://docs.google.com/presentation/d/1aqpMXNklUoj4DY_43tfFVe6sf2Q-OvFRK66w24eTM6c/\"\u003eslides\u003c/a\u003e);\u003c/li\u003e\u003cli\u003eWill\u0026rsquo;s keynote \u003ca href=\"https://www.youtube.com/watch?v=fgtIqJfzPK0\"\u003e\u0026ldquo;Poweful simulation pipelines with {targets}\u0026rdquo;\u003c/a\u003e (\u003ca href=\"https://wlandau.github.io/useR2025/#/section\"\u003eslides\u003c/a\u003e).\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"ropensci-at-positconf2025\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-at-positconf2025\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci at posit::conf(2025)\u003c/h3\u003e\u003cp\u003eLikewise, members of our team and community will attend \u003ca href=\"https://posit.co/conference/\"\u003eposit::conf(2025)\u003c/a\u003e September 16-18 in Atlanta (US).\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/mauro-lepore\"\u003eMauro Lepore\u003c/a\u003e and \u003ca href=\"/author/eric-scott\"\u003eEric Scott\u003c/a\u003e will both present \u003ca href=\"https://reg.conf.posit.co/flow/posit/positconf25/attendee-portal/page/sessioncatalog/session/1745351143742001aTfb\"\u003elightning talks\u003c/a\u003e on Wednesday, September 17th at 1:00 PM. Mauro will talk about \u0026ldquo;Approaching Positron from RStudio\u0026rdquo;, Eric will talk about \u0026ldquo;Enabling geospatial workflow management with targets: an R package origin story\u0026rdquo;.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/will-landau/\"\u003eWill Landau\u003c/a\u003e will give his talk \u0026ldquo;R-multiverse: a next-generation R package repository system built on R-universe\u0026rdquo; in the \u003ca href=\"https://reg.conf.posit.co/flow/posit/positconf25/attendee-portal/page/sessioncatalog/session/1745351601442001aZMp\"\u003esession \u0026ldquo;Strengthening the R Ecosystem\u0026rdquo;\u003c/a\u003e Thursday, September 18th at 10:20 AM.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/nic-crane\"\u003eNic Crane\u003c/a\u003e will present on \u0026ldquo;Hacking Productivity with LLMs: What Works (and What Doesn\u0026rsquo;t)\u0026rdquo; in the \u003ca href=\"https://reg.conf.posit.co/flow/posit/positconf25/attendee-portal/page/sessioncatalog/session/1745351601735001awFt\"\u003esession \u0026ldquo;Facepalm-driven Development: Learning From AI and Human Errors\u0026rdquo;\u003c/a\u003e on Thursday, September 18th at 1 PM.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/noam-ross/\"\u003eNoam Ross\u003c/a\u003e and \u003ca href=\"/author/beatriz-milz/\"\u003eBeatriz Milz\u003c/a\u003e will both present in the \u003ca href=\"https://reg.conf.posit.co/flow/posit/positconf25/attendee-portal/page/sessioncatalog/session/1745351600837001aRK1\"\u003esession \u0026ldquo;It Takes a Village: Building and Sustaining Communities\u0026rdquo;\u003c/a\u003e on Thursday, September 18th at 2:40 PM. Beatriz will talk about \u0026ldquo;Translating R for Data Science into Portuguese: A Community-Led Initiative\u0026rdquo;, Noam about \u0026ldquo;rOpenSci Champions: Building Communities of Open-Source Leaders\u0026rdquo;.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://ropensci.org/author/luis-d.-verde-arregoitia/\"\u003eLuis D. Verde Arregoitia\u003c/a\u003e will present his talk \u0026ldquo;Bold indicates negative?\u0026rdquo; in the \u003ca href=\"https://reg.rainfocus.com/flow/posit/positconf25/attendee-portal/page/sessioncatalog/session/1745351601050001aouB\"\u003esession \u0026ldquo;You Put WHAT in Your Data?\u0026rdquo;\u003c/a\u003e on Thursday, Sep 18th at 2:40 PM.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe are looking forward to seeing you there!\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://reg.conf.posit.co/flow/posit/positconf25/reg/login\"\u003eVirtual experience\u003c/a\u003e \u0026ndash; not free for all this year but free for Students / Academics (and needs-based). See the \u003ca href=\"https://posit.co/conf-pricing-2025/\"\u003epricing page\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"ropensci-in-the-news\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-in-the-news\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci in the news\u003c/h3\u003e\u003cp\u003eOur community manager Yanina Bellini Saibene was interviewed \u003ca href=\"/blog/2025/04/28/news-april-2025/#ropensci-in-the-news\"\u003eagain\u003c/a\u003e in \u003cem\u003eNature\u003c/em\u003e, for the article \u003ca href=\"https://www.nature.com/articles/d41586-025-02511-z\"\u003e\u0026ldquo;Six questions to ask before jumping into a spreadsheet\u0026rdquo;\u003c/a\u003e\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u0026ldquo;There is kind of this belief that a spreadsheet is not a good tool for doing science,\u0026rdquo; says Yanina Bellini Saibene, \u0026ldquo;and that is not correct.\u0026rdquo;\u003c/p\u003e\u003c/blockquote\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday September 9th, 14:00 European Central (12:00 UTC), \u003ca href=\"/events/coworking-2025-09/\"\u003e\u0026ldquo;Improving accessibility in your work\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/silvia-canel%C3%B3n/\"\u003eSilvia Canelón\u003c/a\u003e.\u003cul\u003e\u003cli\u003eExplore where you might improve accessibility in your work;\u003c/li\u003e\u003cli\u003eStart making changes to improve accessibility;\u003c/li\u003e\u003cli\u003eChat with Silvia Canelón about tools and techniques for improving accessibility.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday October 7th, 09:00 Americas Pacific (16:00 UTC), \u003ca href=\"/events/coworking-2025-10/\"\u003e\u0026ldquo;Ship your R package to the R-multiverse!\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/will-landau\"\u003eWill Landau\u003c/a\u003e.\u003cul\u003e\u003cli\u003eLearn more about the \u003ca href=\"https://r-multiverse.org/\"\u003eR-multiverse\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eSubmit your package to the \u003ca href=\"https://r-multiverse.org/\"\u003eR-multiverse\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eChat with Will Landau, and learn more about the R-multiverse and how to submit your package.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following three packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/trud\"\u003etrud\u003c/a\u003e, developed by Alasdair Warwick together with Robert Luben, Abraham Olvera-Barrios, and Chuin Ying Ung: Provides a convenient R interface to the National Health Service NHS Technology Reference Update Distribution (TRUD) API, allowing users to list available releases for their subscribed items, retrieve metadata, and download release files. For more information on the API, see \u003ca href=\"https://isd.digital.nhs.uk/trud/users/guest/filters/0/api\"\u003ehttps://isd.digital.nhs.uk/trud/users/guest/filters/0/api\u003c/a\u003e. It is available on \u003ca href=\"https://CRAN.R-project.org/package=trud\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/705\"\u003ereviewed\u003c/a\u003e by Jon Clayden and Alexandros Kouretsis.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/sasquatch\"\u003esasquatch\u003c/a\u003e, developed by Ryan Zomorrodi: Use R and SAS within reproducible multilingual quarto documents. Run SAS code blocks interactively, send data back and forth between SAS and R, and render SAS output within quarto documents. SAS connections are established through a combination of SASPy and reticulate. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/673\"\u003ereviewed\u003c/a\u003e by Nic Crane.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/dataset\"\u003edataset\u003c/a\u003e, developed by Daniel Antal: The dataset package helps create semantically rich, machine-readable, and interoperable datasets in R. It extends tidy data frames with metadata that preserves meaning, improves interoperability, and makes datasets easier to publish, exchange, and reuse in line with ISO and W3C standards. It is available on \u003ca href=\"https://CRAN.R-project.org/package=dataset\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/681\"\u003ereviewed\u003c/a\u003e by Marcelo Perlin, Anna Márta Mester, and Mauro Lepore.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following twenty-seven packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/sits\" title=\"Satellite Image Time Series Analysis for Earth Observation Data Cubes\"\u003esits\u003c/a\u003e (\u003ca href=\"https://github.com/e-sensing/sits/releases/tag/v1.5.3\"\u003e\u003ccode\u003ev1.5.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/aRxiv\" title=\"Interface to the arXiv API\"\u003eaRxiv\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/aRxiv/releases/tag/0.12\"\u003e\u003ccode\u003e0.12\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/beastier\" title=\"Call BEAST2\"\u003ebeastier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beastier/releases/tag/v2.5.2\"\u003e\u003ccode\u003ev2.5.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/beautier\" title=\"BEAUti from R\"\u003ebeautier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beautier/releases/tag/v2.6.15-pre-cran\"\u003e\u003ccode\u003ev2.6.15-pre-cran\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/c3dr\" title=\"Read and Write C3D Motion Capture Files\"\u003ec3dr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/c3dr/releases/tag/v0.2.0\"\u003e\u003ccode\u003ev0.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/chromer\" title=\"Interface to Chromosome Counts Database API\"\u003echromer\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/chromer/releases/tag/v0.10\"\u003e\u003ccode\u003ev0.10\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/CRediTas\" title=\"Generate CRediT Author Statements\"\u003eCRediTas\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/CRediTas/releases/tag/0.3.0\"\u003e\u003ccode\u003e0.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dataset\" title=\"Create Data Frames for Exchange and Reuse\"\u003edataset\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dataset/releases/tag/0.4.0\"\u003e\u003ccode\u003e0.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/datefixR\" title=\"Standardize Dates in Different Formats or with Missing Data\"\u003edatefixR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/datefixR/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dendroNetwork\" title=\"Create Networks of Dendrochronological Series using Pairwise Similarity\"\u003edendroNetwork\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dendroNetwork/releases/tag/0.5.5\"\u003e\u003ccode\u003e0.5.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dittodb\" title=\"A Test Environment for Database Requests\"\u003edittodb\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dittodb/releases/tag/v0.1.9\"\u003e\u003ccode\u003ev0.1.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/GSODR\" title=\"Global Surface Summary of the Day (GSOD) Weather Data Client\"\u003eGSODR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/GSODR/releases/tag/v4.1.4\"\u003e\u003ccode\u003ev4.1.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gtexr\" title=\"Query the GTEx Portal API\"\u003egtexr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gtexr/releases/tag/v0.2.1\"\u003e\u003ccode\u003ev0.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmapiR\" title=\"OpenStreetMap API\"\u003eosmapiR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmapiR/releases/tag/v0.2.4\"\u003e\u003ccode\u003ev0.2.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmdata\" title=\"Import OpenStreetMap Data as Simple Features or Spatial Objects\"\u003eosmdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmdata/releases/tag/v0.3.0\"\u003e\u003ccode\u003ev0.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/parzer\" title=\"Parse Messy Geographic Coordinates\"\u003eparzer\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/parzer/releases/tag/v0.4.2\"\u003e\u003ccode\u003ev0.4.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/qualtRics\" title=\"Download Qualtrics Survey Data\"\u003equaltRics\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/qualtRics/releases/tag/v3.2.2\"\u003e\u003ccode\u003ev3.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ReLTER\" title=\"An Interface for the eLTER Community\"\u003eReLTER\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ReLTER/releases/tag/3.0.0\"\u003e\u003ccode\u003e3.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rnaturalearth\" title=\"World Map Data from Natural Earth\"\u003ernaturalearth\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rnaturalearth/releases/tag/v1.1.0\"\u003e\u003ccode\u003ev1.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rredlist\" title=\"IUCN Red List Client\"\u003erredlist\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rredlist/releases/tag/v1.1.0\"\u003e\u003ccode\u003ev1.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/sasquatch\" title=\"Use SAS, R, and quarto Together\"\u003esasquatch\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/sasquatch/releases/tag/v0.1.0\"\u003e\u003ccode\u003ev0.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/skimr\" title=\"Compact and Flexible Summaries of Data\"\u003eskimr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/skimr/releases/tag/v2.2.0\"\u003e\u003ccode\u003ev2.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spatsoc\" title=\"Group Animal Relocation Data by Spatial and Temporal Relationship\"\u003espatsoc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spatsoc/releases/tag/v0.2.9\"\u003e\u003ccode\u003ev0.2.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/taxa\" title=\"Classes for Storing and Manipulating Taxonomic Data\"\u003etaxa\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/taxa/releases/tag/v0.4.4\"\u003e\u003ccode\u003ev0.4.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/trud\" title=\"Query the NHS TRUD API\"\u003etrud\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/trud/releases/tag/v0.2.0-JOSS\"\u003e\u003ccode\u003ev0.2.0-JOSS\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/vcr\" title=\"Record HTTP Calls to Disk\"\u003evcr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/vcr/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/weathercan\" title=\"Download Weather Data from Environment and Climate Change Canada\"\u003eweathercan\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weathercan/releases/tag/v0.7.5\"\u003e\u003ccode\u003ev0.7.5\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are seventeen recently closed and active submissions and 5 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/705\"\u003etrud\u003c/a\u003e, Query the NHS TRUD API. Submitted by \u003ca href=\"https://github.com/rmgpanw\"\u003eAlasdair Warwick\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/681\"\u003edataset\u003c/a\u003e, Create Data Frames that are Easier to Exchange and Reuse. Submitted by \u003ca href=\"http://nl.linkedin.com/in/antaldaniel/\"\u003eDaniel Antal\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/673\"\u003esasquatch\u003c/a\u003e, Use SAS, R, and quarto Together. Submitted by \u003ca href=\"https://ryanzomorrodi.github.io/\"\u003eRyan Zomorrodi\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%225/awaiting-reviewer(s)-response%22\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/714\"\u003eopenFDA\u003c/a\u003e, openFDA API. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/706\"\u003erixpress\u003c/a\u003e, Build Reproducible Analytical Pipelines With Nix. Submitted by \u003ca href=\"https://brodrigues.co\"\u003eBruno Rodrigues\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/685\"\u003eSSARP\u003c/a\u003e, SSARP (Species-/Speciation-Area Relationship Projector). Submitted by \u003ca href=\"https://github.com/kmartinet\"\u003ekmartinet\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/710\"\u003emantis\u003c/a\u003e, Multiple Time Series Scanner. Submitted by \u003ca href=\"https://github.com/phuongquan\"\u003ePhuong Quan\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/709\"\u003ereviser\u003c/a\u003e, Tools for Studying Revision Properties in Real-Time Time Series Vintages. Submitted by \u003ca href=\"https://marcburri.github.io/\"\u003eMarc Burri\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/703\"\u003epartialling.out\u003c/a\u003e, Residuals from partial regressions. Submitted by \u003ca href=\"https://github.com/marcboschmatas\"\u003eMarc Bosch\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/688\"\u003edistionary\u003c/a\u003e, Create and Evaluate Probability Distributions. Submitted by \u003ca href=\"https://vincenzocoia.com\"\u003eVincenzo Coia\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/667\"\u003eread.abares\u003c/a\u003e, Provides simple downloading, parsing and importing of Australian Bureau of Agricultural and Resource Economics and Sciences (ABARES) data sources. Submitted by \u003ca href=\"https://adamhsparks.netlify.app/\"\u003eAdam H. Sparks\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/720\"\u003ebabelquarto\u003c/a\u003e, Renders a Multilingual Quarto Book. Submitted by \u003ca href=\"https://masalmon.eu/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/717\"\u003ecoevolve\u003c/a\u003e, Fit Bayesian Generalized Dynamic Phylogenetic Models using Stan. Submitted by \u003ca href=\"https://scottclaessens.github.io/\"\u003eScott Claessens\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/656\"\u003eSPARQLchunks\u003c/a\u003e, Run SPARQL Chunks and Inline Functions to Retrieve Data. Submitted by \u003ca href=\"https://ourednik.info\"\u003eAndré Ourednik\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/645\"\u003ecapybara\u003c/a\u003e, Fast and Memory Efficient Fitting of Linear Models With High-Dimensional. Submitted by \u003ca href=\"https://pacha.dev\"\u003eMauricio \u0026ldquo;Pachá\u0026rdquo; Vargas Sepúlveda\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2025/08/26/csidnet-agm-2025\"\u003eExploring Open Science, R Packages, and Research Software Development at the CSIDNet AGM 2025\u003c/a\u003e by Yanina Bellini Saibene and Sam Schildhauer. An interactive session at the Climate Sensitive Infectious Disease Network AGM 2025 exploring open science, R packages, and research software development.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America. \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"user-2025-recordings\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#user-2025-recordings\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003euseR! 2025 recordings\u003c/h3\u003e\u003cp\u003eThe recordings of the talks for useR! 2025 virtual component have been posted on \u003ca href=\"https://www.youtube.com/watch?v=OIM3VmFRGDI\u0026amp;list=PL77T87Q0eoJgDiU_yXZ6c6Fp8PZTsDvg4\"\u003eYouTube\u003c/a\u003e. Among the diverse topics:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=RQ_8tToedMk\"\u003eExperimenting with LLM Applications in R\u003c/a\u003e by Nic Crane.\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=sGLD8oVquho\"\u003eThe Future of Asynchronous Programming in R\u003c/a\u003e by Charlie Gao.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe keynote talks have been streamed in a \u003ca href=\"https://www.youtube.com/watch?v=fgtIqJfzPK0\u0026amp;list=PL9qLtkRkGWLehjHWrjsA6l2h-lEIUbT9n\"\u003edifferent YouTube channel\u003c/a\u003e where you can watch them for now.\u003c/p\u003e\u003ch3 id=\"new-r-option-to-control-verbosity\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-r-option-to-control-verbosity\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew R option to control verbosity\u003c/h3\u003e\u003cp\u003eFor those of you interested in \u003ca href=\"/blog/2024/02/06/verbosity-control-packages/\"\u003econtrolling package verbosity\u003c/a\u003e, Klaus Vigo helpfully \u003ca href=\"https://discuss.ropensci.org/t/ropensci-please-shut-up-verbosity-control-in-packages/3790/17\"\u003ereported\u003c/a\u003e that \u0026quot; R4.6 will ship with a \u003ca href=\"https://cran.r-project.org/doc/manuals/r-devel/NEWS.html\"\u003ebit more verbosity control\u003c/a\u003e\u0026quot;\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eNew logical \u003ccode\u003eoption()\u003c/code\u003e \u003ccode\u003equiet\u003c/code\u003e, defaulting to false, set to \u003ccode\u003eTRUE\u003c/code\u003e by R\u0026rsquo;s command-line option \u003ccode\u003e--quiet\u003c/code\u003e (and similar), now can be switched during an R session. Prompted by Dirk Eddelbuettel\u0026rsquo;s proposal in PR#18913.\u003c/p\u003e\u003c/blockquote\u003e\u003ch3 id=\"quarto-vignettes-on-windows-on-github-actions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#quarto-vignettes-on-windows-on-github-actions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eQuarto vignettes on Windows on GitHub Actions\u003c/h3\u003e\u003cp\u003eAs noted by Sam Rogers in the rOpenSci Slack workspace, if you use Quarto vignettes, you might run into an error on GitHub Actions where it fails because \u0026ldquo;the package is not installed\u0026rdquo;. Thanks to Gábor Csárdi and Christophe Dervieux for chiming in. The workaround is to add \u003ccode\u003elocal::.\u003c/code\u003e under \u003ccode\u003esetup-r-dependencies\u003c/code\u003e to the field, as stated by James Balamuta in the \u003ca href=\"https://github.com/quarto-dev/quarto-r/issues/217#issuecomment-2470666968\"\u003erelevant GitHub issue\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/08/28/news-august-2025/","date_published":"2025-08-28T00:00:00+00:00","date_modified":"2026-08-13T11:16:33+02:00"},{"id":"https://doi.org/10.59350/m41m5-xmc26","title":"Exploring Open Science, R Packages, and Research Software Development at the CSIDNet AGM 2025","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["editor"]},{"name":"Sam Schildhauer","url":"https://orcid.org/0000-0001-7139-1086","avatar":"https://github.com/sschildhauer.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","climate change","packages development"],"content_html":"\u003cp\u003eThe “Climate Sensitive Infectious Disease” (CSID) Network looks to connect a global community of actors contributing towards impactful CSID software tools and establish localized CSID communities that can link existing on-the-ground issues and initiatives to the development and maintenance of CSID tools.\u003c/p\u003e\u003cp\u003eOn July 21, during the \u003ca href=\"https://csidnet.org/2025-virtual-annual-general-meeting-hub/\"\u003e2025 Annual General Meeting of the CSIDNet\u003c/a\u003e,  Yanina Bellini Saibene and Samuel Schildhauer co-lead a session titled \u003cstrong\u003e“Open Science, R Packages, and Research Software Development”\u003c/strong\u003e.The session was designed not only to introduce participants to tools and practices in open science with R but also to encourage active reflection and discussion on their own workflows and the challenges they face.\u003c/p\u003e\u003ch2 id=\"kicking-things-off-the-human-barometer\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#kicking-things-off-the-human-barometer\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eKicking Things Off: The Human Barometer\u003c/h2\u003e\u003cp\u003eTo break the ice and get people moving and thinking we use a \u003ca href=\"/blog/2018/11/01/icebreaker/\"\u003edocumented method from an rOpenSci unconf, called the Human Barometer\u003c/a\u003e. Participants physically positioned themselves along a line in response to a series of light-hearted and thought-provoking prompts, such as:\u003c/p\u003e\u003col\u003e\u003cli\u003eCats or Dogs?\u003c/li\u003e\u003cli\u003eI practice open science in my activity.\u003c/li\u003e\u003cli\u003eI use R in my research.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eParticipants then discussed their positions and tried to convince the other group to change their minds. This dynamic approach not only brought energy into the room but also offered a quick glimpse into the community\u0026rsquo;s practices and perspectives, giving the participants the chance to become acquainted interactively.\u003c/p\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2025/08/26/csidnet-agm-2025/participants.jpg\"\t\t\talt=\"Two groups of stand up people chating between them\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eParticipants sharing why they are in that group when asked, \u0026lsquo;I use R in my research\u0026rsquo;. Photo by Yanina Bellini Saibene.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"mapping-our-tools-data-science-workflows-in-practice\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mapping-our-tools-data-science-workflows-in-practice\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMapping Our Tools: Data Science Workflows in Practice\u003c/h2\u003e\u003cp\u003eThe first structured discussion focused on the tools participants use in their data science workflows. Using the well-known \u003ca href=\"https://r4ds.hadley.nz/intro.html#fig-ds-diagram\"\u003eR for Data Science (R4DS) framework\u003c/a\u003e, participants were invited to place post-it notes under each step of the process-import, tidy, transform, visualize, model, and communicate—indicating which tools or packages they rely on.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/08/26/csidnet-agm-2025/process_tools.png\"\t\t\talt=\"Yanina, Sam and some of the participants talking and putting sticky color notes in the diagram\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eYanina and Sam guiding the conversation about the tools used by participants in their data science workflows and of the participants talking and putting sticky color notes in the diagram. Photos by: Natthaphon Sakulvanaporn (BangkokVDO)\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThis exercise sparked rich conversations about the diversity of tools people use, the areas with strong support (like data visualization), and the steps where participants often struggle to find the right tools. It was also noted that tools such as \u003ca href=\"https://arrow.apache.org/docs/r/\"\u003eArrow\u003c/a\u003e, which allow large amounts of data to be handled in R, and \u003ca href=\"https://books.ropensci.org/targets/\"\u003etargets\u003c/a\u003e, which allow work with pipelines, were not mentioned among the tools. The exercise opened the door to discussing gaps in tooling—opportunities for future development or collaboration, like easier mapping tools and shared code chunks between different notebooks in R.\u003c/p\u003e\u003cp\u003eThe table summarizes the tools that the attendees shared for each of the steps in the process.\u003c/p\u003e\u003ctable\u003e\t\u003cthead\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003cth style=\"text-align: center\"\u003eImport\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: center\"\u003eTidy\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: center\"\u003eTransform\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: center\"\u003eVisualize\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: center\"\u003eModel\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: center\"\u003eCommunicate\u003c/th\u003e\t\t\t\u003c/tr\u003e\t\u003c/thead\u003e\t\u003ctbody\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: center\"\u003e\u003ca href=\"https://pandas.pydata.org/\"\u003ePandas\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://readr.tidyverse.org/\"\u003ereadr\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://rgeos.r-forge.r-project.org\"\u003ergeos\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://en.wikipedia.org/wiki/SQL\"\u003eSQL (relational databases)\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://www.sqlalchemy.org/\"\u003eSQLAlchemy\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://xarray.dev/\"\u003exarray\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: center\"\u003e\u003ca href=\"https://sfirke.github.io/janitor/\"\u003ejanitor\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://numpy.org/\"\u003eNumPy\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://pandas.pydata.org/\"\u003ePandas\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://www.tidyverse.org/\"\u003etidyverse\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://xarray.dev/\"\u003exarray\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: center\"\u003e\u003ca href=\"https://www.r-project.org/\"\u003ebase R\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://numpy.org/\"\u003eNumPy\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://www.tidyverse.org/\"\u003etidyverse\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: center\"\u003e\u003ca href=\"https://geoviews.org/\"\u003eGeoViews\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://cran.r-project.org/package=ggmap\"\u003eggmap\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://ggplot2.tidyverse.org/\"\u003eggplot2\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://gt.rstudio.com/\"\u003egt\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://hvplot.holoviz.org/\"\u003ehvPlot\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://matplotlib.org/\"\u003eMatplotlib\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://powerbi.microsoft.com/\"\u003ePower BI\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://qgis.org/\"\u003eQGIS\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://r-spatial.org/\"\u003er-spatial\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://github.com/rspatial\"\u003erspatial\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://seaborn.pydata.org/\"\u003eSeaborn\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://cran.r-project.org/package=tableone\"\u003etableone\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://www.tableau.com/\"\u003eTableau\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://ydata-profiling.ydata.ai/\"\u003eydata-profiling\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: center\"\u003e\u003ca href=\"https://mc-stan.org/cmdstanr/\"\u003ecmdstanr\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://desolve.r-forge.r-project.org/\"\u003edeSolve\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://stat.ethz.ch/R-manual/R-devel/library/stats/html/glm.html\"\u003eglm (base R)\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://cran.r-project.org/package=lme4\"\u003eglmer (lme4)\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://cran.r-project.org/package=lme4\"\u003elmer (lme4)\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://cran.r-project.org/package=afex\"\u003emixed (afex)\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://cran.r-project.org/package=rjags\"\u003erjags\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://mc-stan.org/rstan/\"\u003eRStan\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://github.com/UCD-SERG/serocalculator\"\u003eserocalculator\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://github.com/UCD-SERG/serodynamics\"\u003eserodynamics\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://www.tidymodels.org/\"\u003etidymodels\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: center\"\u003e\u003ca href=\"https://pkgs.rstudio.com/flexdashboard/\"\u003eDashboards (flexdashboard)\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://devtools.r-lib.org/\"\u003edevtools\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://jupyter.org/\"\u003eJupyter Notebooks\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://daringfireball.net/projects/markdown/\"\u003eMarkdown\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://www.microsoft.com/microsoft-365/powerpoint\"\u003ePowerPoint\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://quarto.org/\"\u003eQuarto\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://rmarkdown.rstudio.com/\"\u003eR Markdown\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://shiny.posit.co/\"\u003eShiny\u003c/a\u003e\u003cbr\u003e\u003ca href=\"https://usethis.r-lib.org/\"\u003eusethis\u003c/a\u003e\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\u003c/tbody\u003e\u003c/table\u003e\u003ch2 id=\"uncovering-barriers-a-chalk-talk-on-obstacles\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#uncovering-barriers-a-chalk-talk-on-obstacles\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUncovering Barriers: A Chalk Talk on Obstacles\u003c/h2\u003e\u003cp\u003eThe second discussion turned the focus toward obstacles participants face when trying to engage in open science and research software development. In a Chalk Talk format, participants wrote down their thoughts under three color-coded categories:\u003c/p\u003e\u003cul\u003e\u003cli\u003eExpertise obstacles (e.g., lack of training, steep learning curves)\u003c/li\u003e\u003cli\u003eLanguage obstacles (e.g., lack of documentation in local languages)\u003c/li\u003e\u003cli\u003eInfrastructure obstacles (e.g., limited access to hardware or internet)\u003c/li\u003e\u003c/ul\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/08/26/csidnet-agm-2025/barriers.jpg\"\t\t\talt=\"The session attendees around a table reflectiong and sharing about barriers and obstacles to engage to open science and research software development\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eSession attendees and host during the Chalk Talk discussion. Photos by: Natthaphon Sakulvanaporn (BangkokVDO)\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThis open and honest exchange revealed a wide range of barriers. It also underscored the importance of initiatives that address equity and access in research infrastructure.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cem\u003eExpertise Obstacles\u003c/em\u003e: Expertise Knowledge, Bad/No update documentation, Not knowing what\u0026rsquo;s out there (avoid reinvent the wheel), Packages not longer supported, Which packages/function to use, Lack of a learning roadmap, Trouble shooting for less used packages, translations between differents fields\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cem\u003eLanguage Obstacles\u003c/em\u003e: Human language (material availability), Multilingual documentation, Training and docs in native languages, Documentation too complex, Not clear examples of use, Need of prior understanding\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cem\u003eInfrastructure Obstacles\u003c/em\u003e: Equipment, Processing resources, storage capacity, remote HPC access, hosting for app, funding software development\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"sharing-solutions-use-case-presentations\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#sharing-solutions-use-case-presentations\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSharing Solutions: Use-Case Presentations\u003c/h2\u003e\u003cp\u003eTo ground the discussion in real-world examples, Sam and Yani each presented a use-case:\u003c/p\u003e\u003ch3 id=\"serodynamics-collaborative-r-package-development\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#serodynamics-collaborative-r-package-development\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSerodynamics: Collaborative R-package Development\u003c/h3\u003e\u003cp\u003eSam is part of the SeroEpidemiology Research Group (SERG) at UC Davis, led by Dr. Kristen Aiemjoy and Dr. Ezra Morrison. Sam gave a presentation highlighting his team’s development of an R package called \u003ca href=\"https://github.com/UCD-SERG/serodynamics\"\u003eSerodynamics\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe package deploys an innovative technique that uses data from longitudinal serologic cohorts to model antibody kinetic seroresponses for a given infection. This information can then be applied to cross-sectional serosurveys to estimate disease incidence and time since infection using another package the team developed called Serocalculator. The package uses a Bayesian (Runjags) framework to estimate the initial antibody concentration (y0), peak concentration (y1), time to peak (t1), decay rate (α), and decay shape (r). The SERG team hopes to have serodynamics ready for use in the coming year.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/08/26/csidnet-agm-2025/plot.png\"\t\t\talt=\"A conceptual diagram with two panels: (A) shows dot plots of antibody levels (ELISA units, log scale) for high-burden and low-burden populations, with higher values in the high-burden group; (B) displays modeled antibody levels over time since fever onset, illustrating a rise and gradual decline, with horizontal arrows linking population data to antibody kinetics.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eConceptual diagram for estimating seroconversion rate using longitudinal antibody dynamics\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch3 id=\"ropensci-supporting-open-and-sustainable-research-software\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-supporting-open-and-sustainable-research-software\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci: Supporting Open and Sustainable Research Software\u003c/h3\u003e\u003cp\u003eYani introduced the rOpenSci ecosystem, highlighting how it supports the development, peer review, and sustainability of research software in R. She emphasized the community-driven approach and the importance of good practices in software development for science.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eOur \u003ca href=\"https://ropensci.org/software-review/\"\u003eSoftware Peer Review\u003c/a\u003e is a transparent, open, non-adversarial R package review with the goal of improve the software we build to made science.\u003c/p\u003e\u003c/blockquote\u003e\u003cblockquote\u003e\u003cp\u003e\u003ca href=\"https://ropensci.org/r-universe/\"\u003eR-universe\u003c/a\u003e is rOpenSci’s platform for improving publication and discovery of research software in R. R-universe build the binaries for different OS including webassembly! It also builds the documentation, distributes datasets and keeps track of lots of stats about your package.\u003c/p\u003e\u003c/blockquote\u003e\u003cblockquote\u003e\u003cp\u003eOur \u003ca href=\"https://ropensci.org/multilingual/\"\u003eMultilingual Publishing project\u003c/a\u003e focus on create the process and infrastructure to provide our content in other languages than English while ensuring the quality of that content. It also looks to provide to the R community with multilingual capabilities in different contexts.\u003c/p\u003e\u003c/blockquote\u003e\u003cblockquote\u003e\u003cp\u003eOur \u003ca href=\"https://ropensci.org/champions/\"\u003eChampions Program\u003c/a\u003e seeks to Identify, recognize and reward leaders in a community. It is focussed on people from historically and systematically excluded groups who are interested in contributing to rOpenSci and the broader open source and open science communities. Through mentoring and training, champions develop a project during a year.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eYani mentioned how each of the rOpenSci projects can serve as tools to overcome some of the barriers mentioned in the discussions, such as peer review and the community of developers who not only maintain but also generate documentation, use cases, and answer questions, with research-oriented packages, even if they are niche. Also the Champions Program as a \u003cem\u003elearning path\u003c/em\u003e for scientists that develop research software.\u003c/p\u003e\u003cp\u003eShe also shared the existence of \u003ca href=\"https://www.pyopensci.org/\"\u003epyOpenSci\u003c/a\u003e for people who program in Python and \u003ca href=\"https://carpentries.org\"\u003eThe Carpentries\u003c/a\u003e\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e for introductory workshops and open lessons.\u003c/p\u003e\u003ch2 id=\"final-thoughts\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#final-thoughts\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFinal thoughts\u003c/h2\u003e\u003cp\u003eThis session provided a mix of interaction, reflection, and learning. It helped participants connect their personal experiences to broader open science practices, surfaced common challenges, and introduced them to new tools and communities. By the end of the 90 minutes, it was clear that the path to more open, accessible, and sustainable research software is one best walked together.If you are interested in learning more about upcoming CSIDNet events and resources, you \u003ca href=\"https://csidnet.org/about/join/\"\u003ecan sign up for the main list\u003c/a\u003e.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eYani is the chair of The Carpentries Board of Directors and a certified Instructor and Trainer.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2025/08/26/csidnet-agm-2025/","date_published":"2025-08-26T00:00:00+00:00","date_modified":"2025-08-26T09:23:56-03:00"},{"id":"https://doi.org/10.59350/rgcqq-rg311","title":"rOpenSci News Digest, July 2025","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2025/07/23/news-july-2025\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"open-science-with-a-latin-american-identity-meet-the-new-cohort-of-the-ropensci-champions-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#open-science-with-a-latin-american-identity-meet-the-new-cohort-of-the-ropensci-champions-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOpen Science with a Latin American Identity: Meet the New Cohort of the rOpenSci Champions Program\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;re very excited to introduce the new rOpenSci \u003ca href=\"/champions\"\u003eChampions\u003c/a\u003e! This cohort will participate in the program and carry out their work in Spanish, allowing us to continue strengthening the open science and research software development community in this language. We\u0026rsquo;re excited about the projects they\u0026rsquo;ll be developing, which tackle real-world challenges across diverse disciplines and regions of Latin America.\u003c/p\u003e\u003cp\u003eRead all about the new Champions and their projects in our \u003ca href=\"/blog/2025/07/03/champions-2025/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"ropensci-at-user-2025\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-at-user-2025\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci at useR! 2025\u003c/h3\u003e\u003cp\u003eAugust 1st, \u003ca href=\"https://user2025.r-project.org/program/virtual/\"\u003euseR! 2025 Virtual\u003c/a\u003e with \u003cstrong\u003efree registration\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eAugust 8th through 10th, 2025 \u003ca href=\"https://user2025.r-project.org\"\u003euseR! 2025\u003c/a\u003e will take place in Penn Pavilion, Duke University, Durham, North Carolina.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003erOpenSci will be there!\u003c/strong\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e will be presenting her keynote \u003ca href=\"https://user2025.r-project.org/program/in-person/keynotes/yanina-bellini-saibene\"\u003e\u0026ldquo;We R Together. How to learn, use and improve a programming language as a community\u0026rdquo;\u003c/a\u003e on Sat, Aug 9, 2025 - 17:00\u0026ndash;18:00 (EDT)\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/will-landau/\"\u003eWill Landau\u003c/a\u003e will be presenting his keynote \u003ca href=\"https://user2025.r-project.org/program/in-person/keynotes/will-landau\"\u003e\u0026ldquo;Poweful simulation pipelines with {targets}\u0026rdquo;\u003c/a\u003e on Sun, Aug 10, 2025 - 15:00-16:00 (EDT)\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/noam-ross/\"\u003eNoam Ross\u003c/a\u003e will be presenting \u0026ldquo;Curating a Community of Packages: Lessons from a Decade of rOpenSci Peer Review\u0026rdquo; on Sat, Aug 9, 2025 - 13:00\u0026ndash;14:10 (EDT)\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOur Champion \u003ca href=\"/author/erika-siregar/\"\u003eErika Siregar\u003c/a\u003e is presenting \u0026ldquo;rPlaywright: Bringing Playwright\u0026rsquo;s Power to R for Scalable Web Automation\u0026rdquo;, Fri, Aug 8, 2025 - 18:15\u0026ndash;19:30 (EDT)\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOur Champion \u003ca href=\"/author/andrea-gomez-vargas/\"\u003eAndrea Gomez Vargas\u003c/a\u003e is presenting \u0026ldquo;ARcenso: A Package Born from Chaos, Powered by Community\u0026rdquo; on Sat, Aug 9, 2025 - 13:00\u0026ndash;14:10 (EDT)\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/luis-d.-verde-arregoitia/\"\u003eLuis D. Verde Arregoita\u003c/a\u003e is presenting \u0026ldquo;Bringing the fun of hex stickers to your R session\u0026rdquo; on Sun, Aug 10, 2025 - 10:30\u0026ndash;12:00 (EDT)\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe are looking forward to seeing you there!\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday August 5th, 2025 9:00 AM Australia Western (01:00 UTC), \u003ca href=\"/events/coworking-2025-08/\"\u003e\u0026ldquo;Drawing publication-ready plots using R\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/emi-tanaka/\"\u003eEmi Tanaka\u003c/a\u003e.\u003cul\u003e\u003cli\u003eWork on some figures and plots for your own work;\u003c/li\u003e\u003cli\u003eExplore ways of making publication-ready plots in R;\u003c/li\u003e\u003cli\u003eChat with Emi Tanaka about making publication-ready plots in R.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday September 9th, 14:00 European Central (12:00 UTC), \u003ca href=\"/events/coworking-2025-09/\"\u003e\u0026ldquo;Improving accessibility in your work\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/silvia-canel%C3%B3n/\"\u003eSilvia Canelón\u003c/a\u003e.\u003cul\u003e\u003cli\u003eExplore where you might improve accessibility in your work;\u003c/li\u003e\u003cli\u003eStart making changes to improve accessibility;\u003c/li\u003e\u003cli\u003eChat with Silvia Canelón about tools and techniques for improving accessibility.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday October 7th, 09:00 Americas Pacific (16:00 UTC), \u003ca href=\"/events/coworking-2025-10/\"\u003e\u0026ldquo;Ship your R package to the R-multiverse!\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/will-landau\"\u003eWill Landau\u003c/a\u003e.\u003cul\u003e\u003cli\u003eLearn more about the \u003ca href=\"https://r-multiverse.org/\"\u003eR-multiverse\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eSubmit your package to the \u003ca href=\"https://r-multiverse.org/\"\u003eR-multiverse\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eChat with Will Landau, and learn more about the R-multiverse and how to submit your package.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/sits\"\u003esits\u003c/a\u003e, developed by Gilberto Camara together with Rolf Simoes, Felipe Souza, and Felipe Carlos: An end-to-end toolkit for land use and land cover classification using big Earth observation data, based on machine learning methods applied to satellite image data cubes, as described in Simoes et al (2021) \u003ca href=\"https://doi.org/10.3390/rs13132428\"\u003ehttps://doi.org/10.3390/rs13132428\u003c/a\u003e. It is available on \u003ca href=\"https://CRAN.R-project.org/package=sits\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003ereviewed\u003c/a\u003e by Michael Sumner, Jakub Nowosad, Edzer Pebesma, and the late \u003ca href=\"https://www.plus.ac.at/geoinformatik/department/team/abad-crespo/?lang=en\"\u003eLorena Abad Crespo\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following nine packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/commonmark\" title=\"High Performance CommonMark and Github Markdown Rendering in R\"\u003ecommonmark\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/commonmark/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/emodnet.wfs\" title=\"Access EMODnet Web Feature Service Data\"\u003eemodnet.wfs\u003c/a\u003e (\u003ca href=\"https://github.com/EMODnet/emodnet.wfs/releases/tag/v2.1.1\"\u003e\u003ccode\u003ev2.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/crul\" title=\"HTTP Client\"\u003ecrul\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/crul/releases/tag/v1.6.0\"\u003e\u003ccode\u003ev1.6.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/fellingdater\" title=\"Tree-ring dating and estimating felling dates of historical timbers\"\u003efellingdater\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/fellingdater/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lightr\" title=\"Read Spectrometric Data and Metadata\"\u003elightr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lightr/releases/tag/v1.9.0\"\u003e\u003ccode\u003ev1.9.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/qpdf\" title=\"Split, Combine and Compress PDF Files\"\u003eqpdf\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/qpdf/releases/tag/v1.4.0\"\u003e\u003ccode\u003ev1.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/weathercan\" title=\"Download Weather Data from Environment and Climate Change Canada\"\u003eweathercan\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weathercan/releases/tag/v0.7.4\"\u003e\u003ccode\u003ev0.7.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/webchem\" title=\"Chemical Information from the Web\"\u003ewebchem\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/webchem/releases/tag/v1.3.1\"\u003e\u003ccode\u003ev1.3.1\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/webmockr\" title=\"Stubbing and Setting Expectations on HTTP Requests\"\u003ewebmockr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/webmockr/releases/tag/v2.2.0\"\u003e\u003ccode\u003ev2.2.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are sixteen recently closed and active submissions and 5 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/705\"\u003etrud\u003c/a\u003e, Query the NHS TRUD API. Submitted by \u003ca href=\"https://github.com/rmgpanw\"\u003eAlasdair Warwick\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/685\"\u003eSSARP\u003c/a\u003e, SSARP (Species-/Speciation-Area Relationship Projector). Submitted by \u003ca href=\"https://github.com/kmartinet\"\u003ekmartinet\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/681\"\u003edataset\u003c/a\u003e, Create Data Frames that are Easier to Exchange and Reuse. Submitted by \u003ca href=\"http://nl.linkedin.com/in/antaldaniel/\"\u003eDaniel Antal\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSeven at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/714\"\u003eopenFDA\u003c/a\u003e, openFDA API. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/709\"\u003ereviser\u003c/a\u003e, Tools for Studying Revision Properties in Real-Time Time Series Vintages. Submitted by \u003ca href=\"https://marcburri.github.io/\"\u003eMarc Burri\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/706\"\u003erixpress\u003c/a\u003e, Build Reproducible Analytical Pipelines With Nix. Submitted by \u003ca href=\"https://brodrigues.co\"\u003eBruno Rodrigues\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/703\"\u003epartialling.out\u003c/a\u003e, Residuals from partial regressions. Submitted by \u003ca href=\"https://github.com/marcboschmatas\"\u003eMarc Bosch\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/688\"\u003edistionary\u003c/a\u003e, Create and Evaluate Probability Distributions. Submitted by \u003ca href=\"https://vincenzocoia.com\"\u003eVincenzo Coia\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/673\"\u003esasquatch\u003c/a\u003e, Use SAS, R, and quarto Together. Submitted by \u003ca href=\"https://ryanzomorrodi.github.io/\"\u003eRyan Zomorrodi\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/667\"\u003eread.abares\u003c/a\u003e, Provides simple downloading, parsing and importing of Australian Bureau of Agricultural and Resource Economics and Sciences (ABARES) data sources. Submitted by \u003ca href=\"https://adamhsparks.netlify.app/\"\u003eAdam H. Sparks\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%222/seeking-reviewer(s)%22\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/710\"\u003emantis\u003c/a\u003e, Multiple Time Series Scanner. Submitted by \u003ca href=\"https://github.com/phuongquan\"\u003ePhuong Quan\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/656\"\u003eSPARQLchunks\u003c/a\u003e, Run SPARQL Chunks and Inline Functions to Retrieve Data. Submitted by \u003ca href=\"https://ourednik.info\"\u003eAndré Ourednik\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/645\"\u003ecapybara\u003c/a\u003e, Fast and Memory Efficient Fitting of Linear Models With High-Dimensional. Submitted by \u003ca href=\"https://pacha.dev\"\u003eMauricio \u0026ldquo;Pachá\u0026rdquo; Vargas Sepúlveda\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2025/07/03/champions-2025\"\u003eOpen Science with a Latin American Identity: Meet the New Cohort of the rOpenSci Champions Program\u003c/a\u003e by Ana Carolina Moreno, Diana Garcia Cortes, Erick Navarro Delgado, Guadalupe Pascal, Juan Camilo Rojas Hernandez, Lucía Rodríguez Planes, Valentina Clavijo Mesa, Mauro Loprete, Monika Avila Marquez, Soledad Araya Orrego, and Yanina Bellini Saibene. Introducing 10 new rOpenSci Champions \u0026mdash; all from Latin America, representing diverse backgrounds and leading inspiring projects. Each of them is advancing open science from within their own communities. Other languages: \u003ca href='/es/blog/2025/07/03/champions-2025' lang='es'\u003eCiencia abierta con identidad latinoamericana: conocé al nuevo grupo de personas y proyectos del Programa de Campeon(e|a)s de rOpenSci (es)\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America. \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"feedback-wanted-cran-task-view-proposal-for-package-development-and-maintenance\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#feedback-wanted-cran-task-view-proposal-for-package-development-and-maintenance\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFeedback wanted! CRAN Task View proposal for \u0026ldquo;Package Development and Maintenance\u0026rdquo;\u003c/h3\u003e\u003cp\u003eSharing a request by Heather Turner and Lluís Revilla.\u003c/p\u003e\u003cp\u003eThere is a new CRAN Task View \u003ca href=\"https://github.com/hturner/pkg-dev-ctv/blob/main/proposal.md\"\u003eproposal\u003c/a\u003e for \u0026ldquo;Package Development and Maintenance\u0026rdquo;. This task view lists and comments on packages useful for package development and maintenance. The authors and the CRAN task View editorial team are looking for feedback. In particular, they\u0026rsquo;d especially like your feedback if you\u0026rsquo;re new to package development or find the idea of creating and maintaining a package intimidating (to avoid the \u003ca href=\"https://en.wikipedia.org/wiki/Curse_of_knowledge\"\u003e\u0026ldquo;curse of knowledge\u0026rdquo;\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eRegarding this task view, they\u0026rsquo;d like to know:\u003c/p\u003e\u003cul\u003e\u003cli\u003eDoes it have most of the information you need to accomplish all the steps through development until your package is released?\u003c/li\u003e\u003cli\u003eDoes this help you understand which tools and packages can help you maintain your package working ?\u003c/li\u003e\u003cli\u003eIs there any topic or step we missed? Or after reading the relevant topic section you still don\u0026rsquo;t feel confident on how to do it?\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eRead the \u003ca href=\"https://github.com/hturner/pkg-dev-ctv/blob/main/proposal.md\"\u003eproposal\u003c/a\u003e. Please submit your feedback directly in \u003ca href=\"https://github.com/hturner/pkg-dev-ctv/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen\"\u003ethe repository\u003c/a\u003e or send the feedback through private channels to \u003ca href=\"https://llrs.dev\"\u003eLluís Revilla\u003c/a\u003e (email, Slack, \u0026hellip;)\u003c/p\u003e\u003ch3 id=\"cache-values-with-automatic-pruning-the-cachem-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#cache-values-with-automatic-pruning-the-cachem-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCache values with automatic pruning: the cachem package\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re writing a wrapper for an API that has no regular caching headers, you might be interested in the \u003ca href=\"https://github.com/r-lib/cachem/\"\u003ecachem package\u003c/a\u003e for caching. Thanks to Tan Ho and Pieter Huybrechts for the tip. See its use in \u003ca href=\"https://github.com/ropensci/comtradr/blob/f5b2715bf6dddcaff039c3613e8f4ecb0607e5c0/R/zzz.R#L58\"\u003ecomtradr\u003c/a\u003e by Paul Bochtler.\u003c/p\u003e\u003ch3 id=\"a-debugging-tip\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-debugging-tip\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA debugging tip\u003c/h3\u003e\u003cp\u003eMiles McBain shared an interesting debugging tip in his post \u003ca href=\"https://milesmcbain.micro.blog/2025/07/04/diveing-into-the-hunt-rstats.html\"\u003eDive()ing into the hunt #rstats\u003c/a\u003e, using a custom function to implement something like a \u0026lsquo;row-wise data debug\u0026rsquo; mode!\u003c/p\u003e\u003ch3 id=\"how-to-prepare-examples-in-your-package-for-a-cran-submission\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-prepare-examples-in-your-package-for-a-cran-submission\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to prepare examples in your package for a CRAN submission\u003c/h3\u003e\u003cp\u003eThe CRAN cookbook by Jasmine Daly and Beni Altmann features a section called \u003ca href=\"https://contributor.r-project.org/cran-cookbook/general_issues.html#structuring-of-examples\"\u003e\u0026ldquo;Structuring of Examples\u0026rdquo;\u003c/a\u003e mentioning dontrun and friends and their use cases. Thanks to Hugo Gruson for the find!\u003c/p\u003e\u003ch3 id=\"dont-ask-any-updates-on-this-on-github\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#dont-ask-any-updates-on-this-on-github\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDon\u0026rsquo;t ask \u0026ldquo;any updates on this?\u0026rdquo; on GitHub\u003c/h3\u003e\u003cp\u003eCarlos Scheidegger, a developer of Quarto, wrote an interesting \u003ca href=\"https://bsky.app/profile/cscheid.net/post/3ls25wg6mnk2y\"\u003eBluesky thread\u003c/a\u003e about why it\u0026rsquo;s not considerate to write \u0026ldquo;any update on this?\u0026rdquo; on open bug reports or feature requests.\u003c/p\u003e\u003cp\u003eCarlos suggests that better alternatives are to \u0026ldquo;add \u003cem\u003enew\u003c/em\u003e information to the post about how you want to use it, or other workarounds\u0026rdquo; which might give developers ideas for different fixes, or to simply upvote the request. But avoid \u0026ldquo;any updates?\u0026rdquo;, which is hard on the developer because all they can say is \u0026ldquo;no\u0026rdquo;, and they know that will disappoint people.\u003c/p\u003e\u003ch3 id=\"lllm-helpers-the-chores-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#lllm-helpers-the-chores-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLLLM helpers: the chores package\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://simonpcouch.github.io/chores/index.html\"\u003echores package\u003c/a\u003e by Simon Couch provides LLM helpers for tasks that are hard to automate, like converting your messages to using the cli R package. Its thoughtful documentation includes guidance on \u003ca href=\"https://simonpcouch.github.io/chores/articles/custom.html\"\u003ecreating your own helpers\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"llm-tools-for-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#llm-tools-for-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLLM tools for R\u003c/h3\u003e\u003cp\u003eSpeaking of LLM tooling in R, Luis D. Verde Arregoitia maintains an \u003ca href=\"https://luisdva.github.io/llmsr-book/\"\u003eextensive guide\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/07/23/news-july-2025/","date_published":"2025-07-23T00:00:00+00:00","date_modified":"2025-07-23T09:41:19+02:00"},{"id":"https://doi.org/10.59350/pjnp4-p2x92","title":"Open Science with a Latin American Identity: Meet the New Cohort of the rOpenSci Champions Program","language":"en","authors":[{"name":"Ana Carolina Moreno","url":"https://ropensci.org/author/ana-carolina-moreno/","avatar":"https://github.com/anacarolinamoreno.png","_role":["author"]},{"name":"Diana Garcia Cortes","url":"https://orcid.org/0000-0003-1562-7319","avatar":"https://github.com/ddiannae.png","_role":["author"]},{"name":"Erick Navarro Delgado","url":"https://orcid.org/0000-0003-1040-3519","avatar":"https://github.com/ErickNavarroD.png","_role":["author"]},{"name":"Guadalupe Pascal","url":"https://ropensci.org/author/guadalupe-pascal/","avatar":"https://github.com/guadapascal.png","_role":["author"]},{"name":"Juan Camilo Rojas Hernandez","url":"https://ropensci.org/author/juan-camilo-rojas-hernandez/","avatar":"https://github.com/camilorojas91.png","_role":["author"]},{"name":"Mauro Loprete","url":"https://ropensci.org/author/mauro-loprete/","avatar":"https://github.com/mauroloprete.png","_role":["author"]},{"name":"Monika Avila Marquez","url":"https://orcid.org/0009-0004-7720-6135","avatar":"https://github.com/monikavila.png","_role":["author"]},{"name":"Soledad Araya Orrego","url":"https://ropensci.org/author/soledad-araya-orrego/","avatar":"https://github.com/snaraya.png","_role":["author"]},{"name":"Valentina Clavijo Mesa","url":"https://ropensci.org/author/valentina-clavijo-mesa/","avatar":"https://github.com/Valentina9619.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["programa campeones","comunidad"],"content_html":"\u003cp\u003eWe’re very excited to introduce the new rOpenSci Champions! This cohort will participate in the program and carry out their work in Spanish, allowing us to continue strengthening the open science and research software development community in this language. We’re excited about the projects they’ll be developing, which tackle real-world challenges across diverse disciplines and regions of Latin America.\u003c/p\u003e\u003cp\u003eWe invite you to get to know each of these individuals and the projects they’ll be working on throughout the program.\u003c/p\u003e\u003ch2 id=\"ana-carolina-moreno\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ana-carolina-moreno\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAna Carolina Moreno\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/ana-carolina-moreno.jpeg\"\t\t\talt=\"Foto de perfil de Ana Carolina Moreno\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eAna Carolina Moreno \u003c/br\u003e Periodista de datos \u003c/br\u003e Directora en Abraji \u003c/br\u003e Co-organizadora de R-Ladies São Paulo\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am a data journalist in Brazil and have worked 20 years in newsrooms or as a freelance reporter, including 13 years at TV Globo/g1, the main media group in the country. Since 2018 I have been using R to do statistical analysis and create data visualizations for news stories.\u003c/p\u003e\u003cp\u003eCurrently I am a director of the Brazilian Association of Investigative Journalism (Abraji), co-organizer of R-Ladies São Paulo and taking the Lede Data Journalism Program at Columbia University in New York.\u003c/p\u003e\u003cp\u003eDuring the rOpenSci Program, my challenge will be to review and update the \u003ca href=\"https://github.com/ipeaGIT/geobr\"\u003egeobr\u003c/a\u003e package, created by \u003ca href=\"https://www.urbandemographics.org\"\u003eRafael Pereira\u003c/a\u003e and used by researchers and journalists from all over the world to generate maps of Brazilian territories.\u003c/p\u003e\u003cp\u003eI signed up for the program because I believe it is a rich opportunity to keep learning about R and the world of packages, and to collaborate more intimately with the R community in Latin America.\u003c/p\u003e\u003ch2 id=\"diana-garcia-cortes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#diana-garcia-cortes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDiana Garcia Cortes\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/diana-garcia.jpg\"\t\t\talt=\"Foto de perfil de Diana García Cortes\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eDiana García Cortes\u003c/br\u003e Dana-Farber Cancer Institute \u003c/br\u003e \u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am a Mexican computational biologist working in the Breast Oncology Program at Dana-Farber Cancer Institute in Boston. I hold a BS in Computer Science and Technology, a Master’s degree in Computer Science, and a PhD in Biomedical Sciences.\u003c/p\u003e\u003cp\u003eI am passionate about leveraging my programming skills for cancer genomics research. My project involves developing a package to facilitate access to the data from the Metastatic Breast Cancer Project (MBCproject), a joint initiative of the Dana-Farber Cancer Institute, the Broad Institute, and the Count Me In organization. The MBCproject aims to accelerate research in metastatic breast cancer through the integration of a genomic and clinical dataset, integrated in collaboration with patients and patient support associations.\u003c/p\u003e\u003cp\u003eI am excited to participate in the Champions Program as it offers a great opportunity to learn within a community. I am also eager to receive feedback on my work, contribute to science and open data, and to learn and collaborate with the rOpenSci community.\u003c/p\u003e\u003ch2 id=\"erick-navarro-delgado\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#erick-navarro-delgado\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eErick Navarro Delgado\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/erick-navarro-delgado.jpg\"\t\t\talt=\"Foto de perfil de Erick Navarro Delgado\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eErick Navarro Delgado \u003c/br\u003e The University of British Columbia \u003c/br\u003e \u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHi! My name is Erick. I studied a B.Sc. in Biology at the Universidad Nacional Autónoma de México, and I am currently a PhD candidate in Bioinformatics at The University of British Columbia. I was born and raised in Mexico City, but I am living in Vancouver as part of my grad school. My research focuses on developing computational tools in R that integrate genome, exposome and methylome data to understand the factors that contribute to DNA methylation variability in human populations.\u003c/p\u003e\u003cp\u003eI am really excited to participate in the rOpenSci program because I am a firm believer that open and accessible science are essential to conduct research that is relevant to all individuals in our society. In this program I hope to connect with people from the R programming community, improve my proficiency as a software developer, and develop skills that allow me to support the R software development community in Latin America.\u003c/p\u003e\u003ch2 id=\"guadalupe-pascal\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#guadalupe-pascal\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGuadalupe Pascal\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/guadalupe-pascal.jpg\"\t\t\talt=\"Foto de perfil de Guadalupe Pascal\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eGuadalupe Pascal \u003c/br\u003e UNLZ-UCA-UGR \u003c/br\u003e Programa de Doctorado TICs URJC \u003c/br\u003e CALMatilda \u003c/br\u003e \u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHi! I\u0026rsquo;m Guadalupe Pascal, a researcher in data science applied to decision making in business and social systems, always with an eye on the Global South. I am passionate about fostering and being part of collaborative projects with an interdisciplinary approach, open science and epistemic justice. My research interests include mathematical modeling, machine learning, natural language processing (NLP), cognitive neuroscience, gender and engineering education.\u003c/p\u003e\u003cp\u003eI am an Industrial Engineer from Universidad Nacional de Lomas de Zamora (Argentina), Master in Decision Systems Engineering from Universidad Rey Juan Carlos (Spain), and I am currently pursuing a PhD in Information and Communication Technologies (URJC) and in Engineering (UNLZ).\u003c/p\u003e\u003cp\u003eI work as an Associate Professor of Operations Research at the UNLZ and the Universidad Católica Argentina (UCA), I teach courses in Data Science and Machine Learning at the Universidad Gran Rosario (UGR), and I actively participate in the Latin American Open Chair Matilda and Women in Engineering.\u003c/p\u003e\u003cp\u003eI am especially excited to be part of the rOpenSci Champions Program to contribute to the development of accessible resources that promote the democratic use of artificial intelligence in Spanish. I firmly believe that in challenging contexts such as Latin America, open science offers a possible way for us to develop as a community.\u003c/p\u003e\u003ch2 id=\"juan-camilo-rojas-hernandez\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#juan-camilo-rojas-hernandez\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eJuan Camilo Rojas Hernandez\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/juan-camilo-rojas-hernandez.jpg\"\t\t\talt=\"Foto de perfil de Juan Camilo Rojas Hernandez\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eJuan Camilo Rojas Hernandez \u003c/br\u003e Consultor en análisis de datos de salud pública \u003c/br\u003e Organización Panamericana de la Salud (OPS) \u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHi, I am Juan Camilo Rojas Hernandez, from Colombia. I am currently working as an international consultant for the Pan American Health Organization (PAHO). My experience is focused on data analysis for public health surveillance, with special interest in open source tools.\u003c/p\u003e\u003cp\u003eMy project in the rOpenSci Champions Program consists of developing a package in R that automates epidemiological surveillance processes, data cleaning and generation of specific analysis for public health institutions in Colombia. This package seeks to improve response times in the field and strengthen the use of open data and official sources.\u003c/p\u003e\u003cp\u003eI was motivated to apply because I consider that this is a great opportunity to learn good practices in the development of R packages and to create tools that generate real impact on public health in my country. In addition, I hope to be able to replicate this knowledge in local communities and contribute to a Latin American network of epidemiology researchers committed to open science.\u003c/p\u003e\u003ch2 id=\"lucía-inés-rodríguez-planes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#luc%c3%ada-in%c3%a9s-rodr%c3%adguez-planes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLucía Inés Rodríguez Planes\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/lucia-ines-rodriguez-planes.jpeg\"\t\t\talt=\"Foto de perfil de Lucía Inés Rodríguez Planes\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eLucía Inés Rodríguez Planes \u003c/br\u003e Administración de Parques Nacionales \u003c/br\u003e R-Ladies Ushuaia \u003c/br\u003e \u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am a biologist and university professor working in wildlife conservation in southern Patagonia, Argentina. My undergraduate and doctoral training was at the University of Buenos Aires applying research in population dynamics to the management of situations of epidemiological and conservation interest.\u003c/p\u003e\u003cp\u003eCurrently I work at the National Parks Administration as a Conservation Science Application Specialist. I have used R to analyze spatial and temporal data from camera traps, long-term wildlife monitoring and evaluation of invasive alien species management plans. I teach ecology to undergraduate and graduate students, technicians and park rangers; and I participate in spaces that promote the inclusion of women and diversity in science and technology, such as R-Ladies Ushuaia.\u003c/p\u003e\u003cp\u003eI plan to develop a package that will be the gateway to code-based solutions for conservation agents with little experience using R. Entirely written in Spanish and with complete demonstrative examples, I want it to become the initial toolbox for new users, from which to build more complex and specific workflows for particular cases. By participating in the Champions Program, I seek to learn how to promote effective dialogue between management and research, propose processes, and encourage ways to strengthen local capacities sustained over time.\u003c/p\u003e\u003ch2 id=\"maria-valentina-clavijo-mesa\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#maria-valentina-clavijo-mesa\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMaria Valentina Clavijo Mesa\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/maria-valentina-clavijo-mesa.png\"\t\t\talt=\"Foto de perfil de Maria Valentina Clavijo Mesa\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eMaria Valentina Clavijo Mesa \u003c/br\u003eLASAR3. R-Ladies Medellín  \u003c/br\u003e \u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHello, my name is Valentina Clavijo, and I am a PhD student at Politecnico di Milano (Italy). I am conducting my research at the LASAR3 laboratory, which focuses on the analysis and evaluation of the reliability, risk, and resilience of complex systems. I am originally from Medellin, Colombia and currently reside in Milan. I am also a co-founder of the R-Ladies Medellín chapter, where I actively promote the participation of women and underrepresented people in data science and R programming.\u003c/p\u003e\u003cp\u003eMy project for the Champions Program consists of developing a package in R that facilitates the analysis of historical climate change data and the evaluation of the probability of extreme events in different regions of the world. I hope that this package can be useful for researchers and decision makers working with uncertain data and complex weather phenomena.\u003c/p\u003e\u003cp\u003eI applied to the program because I deeply believe that science should be open and shared, and because I want to further strengthen my technical and community skills. I hope to learn about best practices in software development, package publishing, and also connect with a diverse network of people who believe in the power of collaborative knowledge.\u003c/p\u003e\u003ch2 id=\"mauro-loprete\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mauro-loprete\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMauro Loprete\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/mauro-loprete.jpg\"\t\t\talt=\"Foto de perfil de Mauro Loprete\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eMauro Loprete \u003c/br\u003e UDELAR-IESTA \u003c/br\u003e \u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am Mauro Loprete, \u003ca href=\"https://fcea.udelar.edu.uy/depto-met-cuant-ensenanza/licenciatura-en-estadistica.html\"\u003eI have a degree in Statistics from the Universidad de la República (UDELAR).\u003c/a\u003e I am currently an assistant professor in courses on computational statistics, data science and machine learning with R. I live in Montevideo and I am dedicated both to teaching and to the development of open tools for data analysis.\u003c/p\u003e\u003cp\u003eAs a rOpenSci\u0026rsquo;s Champion, my project is the development of \u003ca href=\"https://metasurveyr.github.io/metasurvey/\"\u003emetasurvey\u003c/a\u003e an R package designed to facilitate reproducible analysis of surveys with complex sample designs. The package allows the creation of flexible and automated workflows for loading, processing and analyzing surveys over time, incorporating resampling and metaprogramming techniques. metasurvey was created as part of my undergraduate final project for my Bachelor\u0026rsquo;s degree in Statistics.\u003c/p\u003e\u003cp\u003eI applied to the program because I want to strengthen my skills in package development and actively contribute to the R ecosystem from Uruguay. I hope to learn from the experience and guidance of the rOpenSci community, and also to share what I have learned with students and colleagues, fostering a culture of open science and collaboration at my university and in the region.\u003c/p\u003e\u003cp\u003eFurthermore, my participation in the program represents a pioneering step within my institution: I would be the first undergraduate student to develop an R package with public outreach and actively contribute to an international open source community. I hope that this experience will motivate other students and faculty to get involved in open source development and reproducible research practices.\u003c/p\u003e\u003ch2 id=\"monika-avila-marquez\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#monika-avila-marquez\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMonika Avila Marquez\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/monika-avila-marquez.jpeg\"\t\t\talt=\"Foto de perfil de Monika Avila Marquez\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eMonika Avila Marquez \u003c/br\u003e Universidad de Ginebra \u003c/br\u003e \u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHi, I am an econometrician with a Ph.D. in Econometrics from the University of Geneva. Currently, I am a Postdoctoral Rsearch Fellow at the same university.\u003c/p\u003e\u003cp\u003eI specialize in the analysis of panel (longitudinal) data and in the use of machine learning techniques to estimate econometric models. My research also focuses on model selection for mixed-effects models.\u003c/p\u003e\u003cp\u003eI am developing a new R package designed to facilitate the selection of the most appropriate model in settings with crossed random effects. Model selection is a common challenge in fields such as education, health, and longitudinal studies, where random effects do not follow a simple hierarchy.\u003c/p\u003e\u003ch2 id=\"soledad-andrea-araya-orrego\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#soledad-andrea-araya-orrego\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoledad Andrea Araya Orrego\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/soledad-araya.jpeg\"\t\t\talt=\"Foto de perfil de Soledad Andrea Araya Orrego\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eSoledad Andrea Araya Orrego \u003c/br\u003e Dirección de Estudios Sociales UC \u003c/br\u003e \u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is Soledad Araya, I studied Political Science, and for the last 3 years I have been working as Project Manager at the Direction of Social Studies of the Pontificia Universidad Católica de Chile (DESUC), where my work consists, mainly, in the coordination of quantitative studies. For this reason, I use R on a daily basis: from the development of samples for the application of face-to-face surveys, to the construction of databases and subsequent analysis of results. In addition, I work as a teacher of methodological leveling in the Institute of Political Science of the same institution.\u003c/p\u003e\u003cp\u003eOne of the main reasons why I applied to the program is because I want to develop a personal project that was born from the need to have accessible, standardized and ordered data on the results of elections in Chile. I know that this program will provide me with the necessary tools to achieve this, and I hope that this project will also be useful for all those who are curious about this type of information. The R community always generates spaces for growth and learning, and I hope to make the most of it.\u003c/p\u003e\u003ch2 id=\"next-steps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#next-steps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNext steps\u003c/h2\u003e\u003cp\u003eWith the introduction of this new group of Campeon(e|a)s, we’re kicking off the third edition of the program. Over the next 12 months, these individuals will receive training in package development and community management, work on their projects, and engage in outreach and open science advocacy within their institutions and organizations.\u003c/p\u003e\u003cp\u003eIf you’d like to follow the progress of their projects, stay tuned to our blog posts, newsletter updates, and social media channels.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/07/03/champions-2025/","date_published":"2025-07-03T00:00:00+00:00","date_modified":"2025-07-04T09:46:54-04:00"},{"id":"https://doi.org/10.59350/e4wq0-j73","title":"rOpenSci News Digest, June 2025","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2025/06/27/news-may-2025\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"farewell-to-software-review-editor-julia-gustavsen\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#farewell-to-software-review-editor-julia-gustavsen\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFarewell to software review editor Julia Gustavsen\u003c/h3\u003e\u003cp\u003eThis month we say farewell to Software Peer-Review Editor Julia Gustavsen. Julia has been an essential member of the rOpenSci peer-review team for more than \u003cem\u003e10 years\u003c/em\u003e, since before we had an editorial board, and before we even called it peer review! Julia was one of rOpenSci\u0026rsquo;s original reviewers as we figured out how to transform from a team publishing our in-house developed tools to a broader, community-driven ecosystem. Her early reviews were a model for the careful, helpful, non-confrontational style that has set the tone for our approach. We were lucky to have her join as an editor in 2020. She has expertly guided many authors and reviewers through the peer-review process, served as Editor in Chief, and been a pleasure to have as colleague making the process better, smoother, and more valuable to our community. Thanks Julia for your service!\u003c/p\u003e\u003ch3 id=\"new-software-review-editors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-software-review-editors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew software review editors\u003c/h3\u003e\u003cp\u003eWe are excited to welcome \u003ca href=\"https://emitanaka.org/\"\u003eEmi Tanaka\u003c/a\u003e and, more recently, \u003ca href=\"https://nimahejazi.org/\"\u003eNima Hejazi\u003c/a\u003e to our team of \u003ca href=\"/software-review/#editors\"\u003eAssociate Editors\u003c/a\u003e for rOpenSci \u003ca href=\"/software-review/\"\u003eStats Software Peer Review\u003c/a\u003e. Emi brings her experiences in experimental design, mixed-effects models and data visualisation, while Nima contributes his expertise in causal inference, de-biased machine learning, and semi-parametric and computational statistics.\u003c/p\u003e\u003cp\u003eRead more in the \u003ca href=\"/blog/2025/06/25/editors2025/\"\u003epost introducing Nima and Emi\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"r-universe-updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-universe updates\u003c/h3\u003e\u003cp\u003eR-universe now also builds and checks binaries for ARM64-linux (both R-release and R-devel). To install Linux binaries, see the \u003ca href=\"https://docs.r-universe.dev/install/binaries.html\"\u003edocs\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eFurthermore, build results are now easier to navigate. On any \u003ca href=\"https://ropensci.r-universe.dev/builds\"\u003euniverse builds tab\u003c/a\u003e, hovering on a icon will indicate the build status such as \u0026ldquo;Source: OK\u0026rdquo; or \u0026ldquo;macos-release-arm64: WARNING\u0026rdquo;. Clicking on an orange or red icon will open the GitHub Actions log at the right job, with \u0026ldquo;Annotations\u0026rdquo; (failures) ready to be expanded at the top. This should help \u003ca href=\"https://docs.r-universe.dev/publish/troubleshoot-build.html\"\u003etrouble shoot package builds\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"champions-program-2025\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#champions-program-2025\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChampions Program 2025\u003c/h3\u003e\u003cp\u003eWe are excited to introduce the new team of mentors for the rOpenSci Champions Program! This year, we have ten very talented individuals, all from Latin America, who bring a unique combination of experience, enthusiasm, and commitment to open science. Some of them have already been part of the program in previous editions, either as mentors or Champions, and today, they return to continue strengthening this community. Read more in the \u003ca href=\"/blog/2025/06/05/mentors-2025/\"\u003eblog post introducing them all\u003c/a\u003e: Carolina Pradier, Elina Gómez, Elio Campitelli, Francisco Cardozo, Geraldine Gómez Millán, Luis D. Verde Arregoitia, Milagros Mendoza, Pablo Tiscornia, Pao Corrales, Ronny Hernandez Mora.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;ve also completed the selection of our new Champions and can\u0026rsquo;t wait to introduce them and their projects very soon! We selected 10 incredible people from Argentina, Bolivia, Brazil, Chile, Colombia, Mexico, and Uruguay. The decision was not easy \u0026ndash; the quality of the applications and the relevance of the proposed projects made the selection process especially challenging. We\u0026rsquo;re excited to see all the great things this group will create and contribute to open science and research software engineering during the next 12 months.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday July 1st, 2025 9:00 AM Americas Pacific (16:00 UTC), \u003ca href=\"/events/coworking-2025-07/\"\u003e\u0026ldquo;Research Software Engineering and R\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e and cohost \u003ca href=\"/author/saranjeet-kaur-bhogal/\"\u003eSaranjeet Kaur Bhogal\u003c/a\u003e.\u003cul\u003e\u003cli\u003eLook up Research Software Engineering.\u003c/li\u003e\u003cli\u003eChat with Saranjeet about being a Research Software Engineer in R\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday August 5th, 2025 9:00 AM Australia Western (01:00 UTC), \u003ca href=\"/events/coworking-2025-08/\"\u003e\u0026ldquo;Drawing publication-ready plots using R\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/emi-tanaka/\"\u003eEmi Tanaka\u003c/a\u003e.\u003cul\u003e\u003cli\u003eWork on some figures and plots for your own work\u003c/li\u003e\u003cli\u003eExplore ways of making publication-ready plots in R\u003c/li\u003e\u003cli\u003eChat with Emi Tanaka about making publication-ready plots in R\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cp\u003eThe following package recently became a part of our software suite:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/PFW\"\u003ePFW\u003c/a\u003e, developed by Mason W. Maron: Provides tools to import, clean, filter, and prepare Project FeederWatch data for analysis. Includes functions for taxonomic rollup, easy filtering, zerofilling, merging in site metadata, and more. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/698\"\u003ereviewed\u003c/a\u003e by Sunny Tseng and Paul Carteron.\u003c/div\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cp\u003eThe following thirteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/pkgmatch\" title=\"Find R Packages Matching Either Descriptions or Other R Packages\"\u003epkgmatch\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/pkgmatch/releases/tag/v0.5.0\"\u003e\u003ccode\u003ev0.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/daiquiri\" title=\"Data Quality Reporting for Temporal Datasets\"\u003edaiquiri\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/daiquiri/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/fellingdater\" title=\"Estimate, report and combine felling dates of historical tree-ring series\"\u003efellingdater\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/fellingdater/releases/tag/v1.1.0\"\u003e\u003ccode\u003ev1.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gtexr\" title=\"Query the GTEx Portal API\"\u003egtexr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gtexr/releases/tag/v0.2.0.9001\"\u003e\u003ccode\u003ev0.2.0.9001\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gutenbergr\" title=\"Download and Process Public Domain Works from Project Gutenberg\"\u003egutenbergr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gutenbergr/releases/tag/v0.3.0\"\u003e\u003ccode\u003ev0.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/helminthR\" title=\"Access London Natural History Museum Host-Helminth Record Database\"\u003ehelminthR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/helminthR/releases/tag/v1.1.0\"\u003e\u003ccode\u003ev1.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lingtypology\" title=\"Linguistic Typology and Mapping\"\u003elingtypology\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lingtypology/releases/tag/v1.1.21\"\u003e\u003ccode\u003ev1.1.21\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/magick\" title=\"Advanced Graphics and Image-Processing in R\"\u003emagick\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/magick/releases/tag/ImageMagick-6.9.13-25\"\u003e\u003ccode\u003eImageMagick-6.9.13-25\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nasapower\" title=\"NASA POWER API Client\"\u003enasapower\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nasapower/releases/tag/v4.2.5\"\u003e\u003ccode\u003ev4.2.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.13.1\"\u003e\u003ccode\u003ev0.13.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/occCite\" title=\"Querying and Managing Large Biodiversity Occurrence Datasets\"\u003eoccCite\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/occCite/releases/tag/v0.6.0\"\u003e\u003ccode\u003ev0.6.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgbif\" title=\"Interface to the Global Biodiversity Information Facility API\"\u003ergbif\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgbif/releases/tag/v3.8.2\"\u003e\u003ccode\u003ev3.8.2\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/slopes\" title=\"Calculate Slopes of Roads, Rivers and Trajectories\"\u003eslopes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/slopes/releases/tag/v1.0.1\"\u003e\u003ccode\u003ev1.0.1\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cdiv class=\"highlight\"\u003e\u003cp\u003eThere are twelve recently closed and active submissions and 8 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/698\"\u003ePFW\u003c/a\u003e, Tools for Filtering and Processing Data from Project FeederWatch. Submitted by \u003ca href=\"https://github.com/Visorbearer\"\u003eMason Maron\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/705\"\u003etrud\u003c/a\u003e, Query the NHS TRUD API. Submitted by \u003ca href=\"https://github.com/rmgpanw\"\u003eAlasdair Warwick\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/685\"\u003eSSARP\u003c/a\u003e, SSARP (Species-/Speciation-Area Relationship Projector). Submitted by \u003ca href=\"https://github.com/kmartinet\"\u003ekmartinet\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/681\"\u003edataset\u003c/a\u003e, Create Data Frames that are Easier to Exchange and Reuse. Submitted by \u003ca href=\"http://nl.linkedin.com/in/antaldaniel/\"\u003eDaniel Antal\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/688\"\u003edistionary\u003c/a\u003e, Create and Evaluate Probability Distributions. Submitted by \u003ca href=\"https://vincenzocoia.com\"\u003eVincenzo Coia\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/673\"\u003esasquatch\u003c/a\u003e, Use SAS, R, and quarto Together. Submitted by \u003ca href=\"https://ryanzomorrodi.github.io/\"\u003eRyan Zomorrodi\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/667\"\u003eread.abares\u003c/a\u003e, Provides simple downloading, parsing and importing of Australian Bureau of Agricultural and Resource Economics and Sciences (ABARES) data sources. Submitted by \u003ca href=\"https://adamhsparks.netlify.app/\"\u003eAdam H. Sparks\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%222/seeking-reviewer(s)%22\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/706\"\u003erixpress\u003c/a\u003e, Build Reproducible Analytical Pipelines With Nix. Submitted by \u003ca href=\"https://brodrigues.co\"\u003eBruno Rodrigues\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/703\"\u003epartialling.out\u003c/a\u003e, Residuals from partial regressions. Submitted by \u003ca href=\"https://github.com/marcboschmatas\"\u003eMarc Bosch\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/645\"\u003ecapybara\u003c/a\u003e, Fast and Memory Efficient Fitting of Linear Models With High-Dimensional. Submitted by \u003ca href=\"https://pacha.dev\"\u003eMauricio \u0026ldquo;Pachá\u0026rdquo; Vargas Sepúlveda\u003c/a\u003e.\u003c/div\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cdiv class=\"highlight\"\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/06/25/editors2025\"\u003eAnnouncing New Stats Software Peer Review Editors: Emi Tanaka and Nima Hejazi\u003c/a\u003e by Mark Padgham, Emi Tanaka, Nima Hejazi, and Yanina Bellini Saibene. Introducing two new editors for rOpenSci stats software review.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/06/05/mentors-2025\"\u003eNew Mentoring Team, Same Open Science Spirit\u003c/a\u003e by Carolina Pradier, Elina Gómez, Elio Campitelli, Francisco Cardozo, Geraldine Gómez Millán, Luis D. Verde Arregoitia, Milagros Mendoza, Pablo Tiscornia, Pao Corrales, Ronny Hernandez Mora, and Yanina Bellini Saibene. Meet the new team of mentors for the \u003ca href=\"https://champions-program.ropensci.org\"\u003erOpenSci Champions Program\u003c/a\u003e for People from Latin America dedicated to research and development of research software and committed to open science. They will accompany our Champions in their projects for one year, sharing experience, guidance, and enthusiasm. Other languages: \u003ca href='/es/blog/2025/06/05/mentors-2025' lang='es'\u003eNuevo equipo de mentor(a|e)s, el mismo espíritu de ciencia abierta (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/06/23/translation-faq\"\u003eMultilingual Publishing: Frequently Asked Questions\u003c/a\u003e by Yanina Bellini Saibene and Maëlle Salmon. A list of frequently asked questions about our multilingual program and our translation and localization process, and our best answers to them. Other languages: \u003ca href='/es/blog/2025/06/23/edicion-multilingue-preguntas-frecuentes' lang='es'\u003eEdición multilingüe: preguntas frecuentes (es)\u003c/a\u003e, \u003ca href='/fr/blog/2025/06/23/publication-multilingue-faq' lang='fr'\u003ePublication multilingue : Questions fréquemment posées (fr)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cp\u003eFour use cases of our packages and resources have been reported recently.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/translating-course-to-spanish-and-french/4207\"\u003eTranslating course to Spanish and French\u003c/a\u003e (English). Reported by Yann Say.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/yabellini/t3es2ed\"\u003eMultilingual support for Teaching Tech Together Book\u003c/a\u003e (English, Spanish). Reported by \u003ca href=\"https://github.com/yabellini\"\u003eYanina Bellini Saibene\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://yabellini.github.io/AgriRemoteSensing/02-r-spatial.html\"\u003eEnseñando datos espaciales vectoriales en R\u003c/a\u003e (Spanish). Reported by \u003ca href=\"https://github.com/yabellini\"\u003eYanina Bellini Saibene\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/orgs/ropensci/discussions/3\"\u003eAutomated generation of a taxonomic classification document\u003c/a\u003e (English). Reported by \u003ca href=\"https://github.com/joelnitta\"\u003eJoel Nitta\u003c/a\u003e.\u003c/p\u003e\u003c/div\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/rentrez/\"\u003erentrez\u003c/a\u003e, interface to the NCBI\u0026rsquo;s EUtils API, allowing users to search databases like \u003ca href=\"https://www.ncbi.nlm.nih.gov/genbank/\"\u003eGenBank\u003c/a\u003e and \u003ca href=\"https://pubmed.ncbi.nlm.nih.gov/\"\u003ePubMed\u003c/a\u003e, process the results of those searches and pull data into their R sessions. \u003ca href=\"https://github.com/ropensci/rentrez/issues/203\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools/\"\u003ehddtools\u003c/a\u003e, Hydrological Data Discovery Tools. \u003ca href=\"https://github.com/ropensci/hddtools/issues/36\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America. \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"refactoring-code-with-flir\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#refactoring-code-with-flir\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRefactoring code with {flir}\u003c/h3\u003e\u003cp\u003eEtienne Bacher \u003ca href=\"https://www.etiennebacher.com/posts/2025-05-23-refactoring-code-with-flir/\"\u003eexplains\u003c/a\u003e how to use his flir package to, for instance, replace the usage of a superseded function with a newer function over a project. Note that from flir 0.4.3, it will be possible to \u003ca href=\"https://flir.etiennebacher.com/articles/sharing_rules\"\u003eshare rules across packages\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"tips-and-tools-for-co-maintenance-of-r-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tips-and-tools-for-co-maintenance-of-r-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTips and tools for co-maintenance of R packages\u003c/h3\u003e\u003cp\u003eIn his \u003ca href=\"https://hugogruson.fr/posts/R-package-comaintenance/\"\u003eblog post\u003c/a\u003e, Hugo Gruson gives advice on how best to maintain an R package \u003cem\u003eas a team\u003c/em\u003e. Furthermore, he shares GitHub Actions workflows that warn all package authors or maintainers when an R package is at risk of archival, rather than just the officially listed maintainer.\u003c/p\u003e\u003ch3 id=\"authorsr-field-becoming-compulsory-for-new-cran-submissions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#authorsr-field-becoming-compulsory-for-new-cran-submissions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ccode\u003eAuthors@R\u003c/code\u003e field becoming compulsory for new CRAN submissions\u003c/h3\u003e\u003cp\u003eAlso shared by Hugo Gruson, it seems that the richer authorship field \u003ca href=\"https://devguide.ropensci.org/pkg_building.html#authorship\"\u003e\u003ccode\u003eAuthors@R\u003c/code\u003e\u003c/a\u003e will now be compulsory for new CRAN submissions, as opposed to being able to use \u003ccode\u003eMaintainer:\u003c/code\u003e and \u003ccode\u003eAuthor\u003c/code\u003e. \u003ca href=\"https://cran.r-project.org/web/checks/check_results_tensor.html\"\u003eExample\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2025/06/27/news-june-2025/","date_published":"2025-06-27T00:00:00+00:00","date_modified":"2025-06-27T09:09:21+02:00"},{"id":"https://doi.org/10.59350/nywk2-h09","title":"Announcing New Stats Software Peer Review Editors: Emi Tanaka and Nima Hejazi","language":"en","authors":[{"name":"Emi Tanaka","url":"https://ropensci.org/author/emi-tanaka/","avatar":"https://github.com/emitanaka.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Nima Hejazi","url":"https://orcid.org/0000-0002-7127-2789","avatar":"https://github.com/nhejazi.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["Software Peer Review","editors","rOpenSci team"],"content_html":"\u003cp\u003eWe are excited to welcome Emi Tanaka and Nima Hejazi to our team of \u003ca href=\"/software-review/#editors\"\u003eAssociate Editors\u003c/a\u003e for rOpenSci \u003ca href=\"/software-review/\"\u003eStats Software Peer Review\u003c/a\u003e.They join Laura DeCicco, Julia Gustavsen, Jouni Helske, Toby Hocking, Rebecca Killick, Anna Krystalli, Mauro Lepore, Noam Ross, Maëlle Salmon, Emily Riederer, Adam Sparks, Beatriz Milz, Margaret Siple and Jeff Hollister.Since 2015, rOpenSci has operated a thorough and collaborative software peer review system.Our \u003ca href=\"https://devguide.ropensci.org/editorguide.html\"\u003eeditorial team\u003c/a\u003e oversees the entire review process — conducting initial checks, selecting reviewers, and guiding the review until the package is approved for inclusion in rOpenSci’s \u003ca href=\"https://ropensci.org/packages/\"\u003esoftware suite\u003c/a\u003e.Given the wide range and number of packages we receive, having a team of editors with diverse and complementary expertise is essential.Emi brings her experiences in experimental design, mixed-effects models and data visualisation, while Nima contributes his expertise in causal inference, de-biased machine learning, and semi-parametric and computational statistics.\u003c/p\u003e\u003cp\u003eMeet our new editors!\u003c/p\u003e\u003ch2 id=\"emi-tanaka\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#emi-tanaka\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEmi Tanaka\u003c/h2\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"/img/team/emi-tanaka.jpg\"         alt=\"headshot of Emi Tanaka\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  Emi is an academic statistician at the Australian National University (ANU), living in Canberra with a passion for data science and open-source software.She has a PhD in Statistics from the University of Sydney. Her primary interest is to develop impactful methods and tools that can be readily used by practitioners. She enjoys working in a collaborative environment with people from diverse backgrounds, with an aim to enhance our knowledge and understanding of the real world data. She interfaces across multiple disciplines to bridge statistical concepts and findings to a broad range of individuals. To this end, she has developed numerous open-source tools, primarily as R-packages, and resources aimed at making statistical methods accessible to a diverse audience. Her proudest work to date is the \u003ccode\u003eedibble\u003c/code\u003e R package where it reframes the specification of an experimental design by the so-called “grammar of experimental designs” (words = fundamental components of a comparative experiment, e.g. units, treatments and its relationships, and express design as a “sentence” by stringing together “words” that follow a certain grammatical rule).                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003cp\u003eEmi on \u003ca href=\"https://github.com/emitanaka\"\u003eGitHub\u003c/a\u003e, \u003ca href=\"https://emitanaka.org/\"\u003eWebsite\u003c/a\u003e, \u003ca href=\"/author/emi-tanaka/\"\u003erOpenSci\u003c/a\u003e.\u003c/p\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eThe rOpenSci team has been doing a wonderful job in promoting open science and setting rigorous standards for software development. I\u0026rsquo;m impressed by their continued dedication to fostering a culture that values open and reproducible research. The team has done so much, including running the coworking space, rOpenSci Champions program and peer-review of open-source software. I had the pleasure of being a mentor in the rOpenSci Champions program last year, and it\u0026rsquo;s an honour to contribute further as an editor.\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eEmi Tanaka \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"nima-hejazi\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#nima-hejazi\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNima Hejazi\u003c/h2\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"/img/team/nima-hejazi.jpg\"         alt=\"headshot of Nima Hejazi\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  Nima is an academic (bio)statistician at the Harvard Chan School of PublicHealth in Boston. Originally from California, Nima obtained his PhD inBiostatistics at UC Berkeley, where he explored interests in causal inference,semi-parametric statistics, machine learning, and statistical data science. Hisstatistical science research program, driven by applied science collaborationswith biomedical and public health scientists, uses causal inference principlesto translate scientific questions into precise, interpretable statisticalestimands, and then develops methods that incorporate both flexible estimationstrategies (via machine learning) and best-in-class uncertainty quantification(using semi-parametric theory) to reliably recover these from data generated byobservational studies or randomized experiments. Nima strongly believes that open-sourcesoftware and open computing practices play a critical role in ensuringreproducibility, replicability, and transparency in modern applied statisticsand statistical data science. He previously co-founded the TLverse, a softwareecosystem for targeted machine learning in R, and his work has contributed overfifteen open-source packages (almost exclusively in R) to promote the use andaccessibility of state-of-the-art statistical methods for modern data analysis.                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003cp\u003eNima on \u003ca href=\"https://github.com/nhejazi\"\u003eGitHub\u003c/a\u003e, \u003ca href=\"https://nimahejazi.org\"\u003eWebsite\u003c/a\u003e, \u003ca href=\"/author/nima-hejazi/\"\u003erOpenSci\u003c/a\u003e.\u003c/p\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eI\u0026rsquo;ve been following the rOpenSci project since around 2017, when I first heardabout it at UC Berkeley, as my own interests in statistical data science andopen-source software for statistics were taking shape. Over the years, rOpenScihas made numerous important contributions to the broader landscape around the Rlanguage\u0026ndash;from tools to support computing infrastructure and statistical dataanalysis to the R-universe platform and the Stats Peer Review system. With itscore mission of promoting open and reproducible research through reliable andreusable open-source software, rOpenSci fills a critical gap in the statisticsand data science communities. I\u0026rsquo;m honored to be able to serve as an editor, andI look forward to contributing to rOpenSci!\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eNima Hejazi \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"submit-your-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#submit-your-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSubmit your package\u003c/h2\u003e\u003cp\u003eAre you considering submitting your package for review? These resources will help.\u003c/p\u003e\u003cul\u003e\u003cli\u003eAbout \u003ca href=\"/software-review/\"\u003erOpenSci Software Peer Review\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eBrowse the online book \u003ca href=\"https://devguide.ropensci.org/\"\u003erOpenSci Packages: Development, Maintenance, and Peer Review\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eRead public \u003ca href=\"https://github.com/ropensci/software-review/issues\"\u003esoftware review threads on GitHub\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"sign-up-to-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#sign-up-to-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSign up to review\u003c/h2\u003e\u003cp\u003eYou can also participate in the software peer review process as a reviewer. Consider \u003ca href=\"https://airtable.com/app8dssb6a7PG6Vwj/shrnfDI2S9uuyxtDw\"\u003evolunteering by filling out this form\u003c/a\u003e.  The information we request will help match you with suitable package submissions.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/06/25/editors2025/","date_published":"2025-06-25T00:00:00+00:00","date_modified":"2025-06-25T08:35:24-03:00"},{"id":"https://doi.org/10.59350/yrdbt-xk458","title":"Multilingual Publishing: Frequently Asked Questions","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["multilingual","community","diversity"],"content_html":"\u003cp\u003eAs we\u0026rsquo;ve \u003ca href=\"/multilingual-publishing\"\u003esaid before\u003c/a\u003e, we believe that publishing multilingual resources can lower the barrier to access to knowledge, help democratize access to quality resources and increase the possibilities of contributing to software and open science projects.Our ongoing efforts at \u003ca href=\"/multilingual-publishing\"\u003emultilingual publishing\u003c/a\u003e are crucial work for rOpenSci\u0026rsquo;s \u003ca href=\"/about\"\u003emission\u003c/a\u003e.When discussing this project at \u003ca href=\"/talks-papers/\"\u003econferences\u003c/a\u003e and \u003ca href=\"/commcalls/nov2023-multilingual/\"\u003eelsewhere\u003c/a\u003e, we start an important conversation with people less familiar with such projects or unfamiliar with our specific \u003ca href=\"https://translationguide.ropensci.org/\"\u003eworkflows\u003c/a\u003e.In this post, we summarize frequently asked questions, and our best answers to them (even better formulated than in the heat of a post-talk Q\u0026amp;A session \u0026#x1f601;).\u003c/p\u003e\u003ch2 id=\"will-translations-make-people-lazy-in-that-they-wont-learn-english\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#will-translations-make-people-lazy-in-that-they-wont-learn-english\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWill translations make people “lazy” in that they won’t learn English?\u003c/h2\u003e\u003cp\u003eFirst of all, it\u0026rsquo;s important to be clear that \u003cem\u003enot\u003c/em\u003e learning English doesn’t mean people are lazy.Many people who do not speak English already speak several languages, and even if they only speak one, working on one’s project with the tools at one’s disposal is already work enough.\u003c/p\u003e\u003cp\u003eSecond, our goal is not for people to become English speakers. People can choose (or not) to learn English at any time, but having first learned how to, say, develop software using French isn\u0026rsquo;t going to impede that.Our goal is for people to be able to use and contribute to open-source tools, and this shouldn\u0026rsquo;t be dependent on them speaking English. In science, not being a native English speaker is already hard enough and there is an large amount of \u0026ldquo;untapped potential of non-native English speakers\u0026rdquo;\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e. Let\u0026rsquo;s release this potential!\u003c/p\u003e\u003ch3 id=\"related-is-it-that-hard-to-read-in-english\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#related-is-it-that-hard-to-read-in-english\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRelated: Is it that hard to read in English?\u003c/h3\u003e\u003cp\u003eYes, it is one of the \u0026ldquo;manifold costs of being a non-native English speaker in science\u0026rdquo;\u003csup id=\"fnref1:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e.Further, there are several studies which have demonstrated the difficulties of learning to code in English-based programming languages when you are not an English speaker, and the benefits of having opportunities to learn in your native language.\u003c/p\u003e\u003cp\u003eGou\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e found that non-native English speakers faced barriers with reading instructional materials, technical communication, reading and writing code, and simultaneously learning English and programming.These difficulties are rooted in the need to develop English understanding \u003cem\u003eat the same time\u003c/em\u003e that they are expected to learn about the specific topic: in our case, how to develop research open source high quality software.If you\u0026rsquo;ve ever tried to learn both statistics and R at the same time, you may have an idea of how hard this can be. This kind of dual learning increases cognitive load, which can hinder learning\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eAnother study\u003csup id=\"fnref:4\"\u003e\u003ca href=\"#fn:4\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e4\u003c/a\u003e\u003c/sup\u003e suggested that while learning to program in English isn\u0026rsquo;t necessarily difficult for all non-English speakers, including students\u0026rsquo; native language can make the learning experience clearer, more supportive and more enjoyable.\u003c/p\u003e\u003cp\u003eIf you are interested in learning more about this topic we suggest you follow \u003ca href=\"https://www.felienne.com\"\u003eFelienne Hermans\u003c/a\u003e, who specializes in programming language design and developed a multilingual programming language for teaching.\u003c/p\u003e\u003ch3 id=\"related-people-should-learn-english\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#related-people-should-learn-english\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRelated: People should learn English\u003c/h3\u003e\u003cp\u003eSome people claim that you have to learn English if you want to work in programming and science because English is the lingua franca of these disciplines.\u003c/p\u003e\u003cp\u003eUnfortunately, even if this were desirable, this is simply not possible for many people, especially for casual or end-user programmers. They might not have the time, energy or money to learn both programming and English at the same time\u003csup id=\"fnref:5\"\u003e\u003ca href=\"#fn:5\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e5\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eLet’s do some numbers: \u003ca href=\"https://www.languagecert.org/en/guided-learning-hours\"\u003eThe Common European Framework of Reference for Languages\u003c/a\u003e has tabulated the guided learning hours typically required to reach each language proficiency level. These are hours spent studying with a teacher or through structured learning.\u003c/p\u003e\u003cp\u003eFor example, if you start as a beginner (A1) and want to become intermediate (B1) you will need approximately \u003cstrong\u003e400 guided hours\u003c/strong\u003e.  If you can dedicate \u003cstrong\u003e5 hours a week\u003c/strong\u003e, it will take \u003cstrong\u003e1.5 years\u003c/strong\u003e  and a minimum budget of \u003cstrong\u003eUSD $6,000\u003c/strong\u003e to learn English. For reference, this would be the equivalent of two years of salary for a person with a minimum wage in Argentina. This also does not take into account the cost of finding the time to study (child minding services, working fewer hours, etc.).\u003c/p\u003e\u003cp\u003eBy translating documents and resources we reduce the burden on non-English speakers. The more people involved in open source software and science, the more benefit we all get from bigger pool of experiences and expertise.Finally, we want everyone to have the same opportunity to enjoy learning!\u003c/p\u003e\u003ch2 id=\"why-dont-you-rely-on-automatic-translations-only\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-dont-you-rely-on-automatic-translations-only\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy don\u0026rsquo;t you rely on automatic translations only?\u003c/h2\u003e\u003cp\u003eFor our \u003ca href=\"https://translationguide.ropensci.org/intro.html#general-aspects-of-the-stage-1-of-the-translation-process\"\u003etranslation workflows\u003c/a\u003e, machine translations are the first step followed by human reviews.While you can publish automatic translations directly, or use tools for on-the-fly translations, there are drawbacks.First, it is well documented that machine translation does not work well for less common languages\u003csup id=\"fnref1:5\"\u003e\u003ca href=\"#fn:5\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e5\u003c/a\u003e\u003c/sup\u003e.Even for common languages, automatic translations still have errors, and struggle with meanings related to context, grammar and syntax, as well as gender marks.Machine translation also can\u0026rsquo;t localize some content, such as meaningful idioms, or currency and numeric symbols.\u003c/p\u003e\u003cp\u003eIf we rely solely on automatic translation, the content in translated languages will be of poorer quality, so it would mean accepting that users in semi-supported languages do not deserve the same quality as others.Therefore at rOpenSci, human translators are involved in the process to ensure that all of our content is of good quality regardless of language.\u003c/p\u003e\u003ch2 id=\"why-dont-you-use-insert-name-of-translation-platform-instead-of-git-and-github\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-dont-you-use-insert-name-of-translation-platform-instead-of-git-and-github\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy don’t you use \u003ccode\u003e\u0026lt;insert-name-of-translation-platform\u0026gt;\u003c/code\u003e instead of Git and GitHub?\u003c/h2\u003e\u003cp\u003eThere are many different platforms for translation, which is fantastic!However, we are a technical community and we are translating and localizing technical content.We are already using Git and GitHub in our other development workflows and many of our community members know these tools or are planning to learn them.For members who are unfamiliar with Git and GitHub, we have resources and are happy to help them learn, and then they have new tools which they can apply to other technical projects.Read more about our tooling and processes in our \u003ca href=\"https://translationguide.ropensci.org/intro.html#technical-infrastructure-and-workflows\"\u003etranslation guide\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"isnt-translation-and-the-maintenance-of-translations-a-lot-of-work\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#isnt-translation-and-the-maintenance-of-translations-a-lot-of-work\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIsn’t translation and the maintenance of translations a lot of work?\u003c/h2\u003e\u003cp\u003eYes it is!But we think it’s worth it.Furthermore, translation work brings new contributors to the community, which a) helps share the load, b) serves as a springboard to other forms of contributions, and c) makes our community more diverse 🎉.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we answered common questions we receive about our multilingual publishing project.We are convinced that providing quality multilingual resources is part of fostering more \u003ca href=\"/blog/2025/02/05/no-science-without-deia/\"\u003ediversity, equity, inclusion, and accessibility\u003c/a\u003e in open source and open science.We welcome your participation\u0026hellip; and even more questions!\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eAmano T, Ramírez-Castañeda V, Berdejo-Espinola V, Borokini I, Chowdhury S, Golivets M, et al. (2023) The manifold costs of being a non-native English speaker in science. PLoS Biol 21(7): e3002184. \u003ca href=\"https://doi.org/10.1371/journal.pbio.3002184\"\u003ehttps://doi.org/10.1371/journal.pbio.3002184\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref1:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003ePhilip J. Guo. 2018. Non-Native English Speakers Learning Computer Programming: Barriers, Desires, and Design Opportunities. In Proceedings of the 2018 CHI Conference on Human Factors in Computing Systems (CHI \u0026lsquo;18). Association for Computing Machinery, New York, NY, USA, Paper 396, 1–14. \u003ca href=\"https://doi.org/10.1145/3173574.3173970\"\u003ehttps://doi.org/10.1145/3173574.3173970\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eGoldin, A. (2022). Neurociencia en la escuela: Guía amigable (sin bla bla) para entender cómo funciona el cerebro durante el aprendizaje. Siglo XXI Editores.\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:4\"\u003e\u003cp\u003eEthel Tshukudu, Emma Dodoo, Felienne Hermans, and Monkgogi Mudongo. 2024. Bilingual Programming: A Study of Student Attitudes and Experiences in the African context. In Proceedings of the 24th Koli Calling International Conference on Computing Education Research (Koli Calling \u0026lsquo;24). Association for Computing Machinery, New York, NY, USA, Article 42, 1–11. \u003ca href=\"https://doi.org/10.1145/3699538.3699561\"\u003ehttps://doi.org/10.1145/3699538.3699561\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:4\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:5\"\u003e\u003cp\u003eAlaaeddin Swidan and Felienne Hermans. 2023. A Framework for the Localization of Programming Languages. In Proceedings of the 2023 ACM SIGPLAN International Symposium on SPLASH-E (SPLASH-E 2023). Association for Computing Machinery, New York, NY, USA, 13–25. \u003ca href=\"https://doi.org/10.1145/3622780.3623645\"\u003ehttps://doi.org/10.1145/3622780.3623645\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:5\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref1:5\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2025/06/23/translation-faq/","date_published":"2025-06-23T00:00:00+00:00","date_modified":"2025-06-23T14:57:52+02:00"},{"id":"https://doi.org/10.59350/n396s-hpx38","title":"New Mentoring Team, Same Open Science Spirit","language":"en","authors":[{"name":"Carolina Pradier","url":"https://ropensci.org/author/carolina-pradier/","avatar":"https://github.com/caropradier.png","_role":["author"]},{"name":"Elina Gómez","url":"https://ropensci.org/author/elina-g%C3%B3mez/","avatar":"https://ropensci.org/img/team/elina-gomez.png","_role":["author"]},{"name":"Elio Campitelli","url":"https://ropensci.org/author/elio-campitelli/","avatar":"https://ropensci.org/img/team/elio-campitelli.jpg","_role":["author"]},{"name":"Francisco Cardozo","url":"https://orcid.org/0000-0002-1925-4954","avatar":"https://github.com/focardozom.png","_role":["author"]},{"name":"Geraldine Gómez Millán","url":"https://ropensci.org/author/geraldine-g%C3%B3mez-mill%C3%A1n/","avatar":"https://ropensci.org/img/team/geraldine-gomez.png","_role":["author"]},{"name":"Luis D. Verde Arregoitia","url":"https://ropensci.org/author/luis-d.-verde-arregoitia/","avatar":"https://github.com/luisDVA.png","_role":["author"]},{"name":"Milagros Mendoza","url":"https://ropensci.org/author/milagros-mendoza/","avatar":"https://ropensci.org/img/team/milagros-mendoza.jpeg","_role":["author"]},{"name":"Pablo Tiscornia","url":"https://ropensci.org/author/pablo-tiscornia/","avatar":"https://ropensci.org/img/community/pablo-tiscornia.jpeg","_role":["author"]},{"name":"Pao Corrales","url":"https://orcid.org/0000-0003-1923-9129","avatar":"https://ropensci.org/img/team/paola-corrales.png","_role":["author"]},{"name":"Ronny Hernandez Mora","url":"https://ropensci.org/author/ronny-hernandez-mora/","avatar":"https://ropensci.org/img/team/ronny-hernandez.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["champions program","mentors","community"],"content_html":"\u003cp\u003eWe are excited to introduce the new team of mentors for the rOpenSci Champions Program! This year, we have ten very talented individuals, all from Latin America, who bring a unique combination of experience, enthusiasm, and commitment to open science. Some of them have already been part of the program in previous editions, either as mentors or Champions, and today, they return to continue strengthening this community.\u003c/p\u003e\u003cp\u003eOur new mentors come from a wide variety of disciplines and are active voices within the R community in the region, participating in different groups and initiatives. With their support, our new group of Champions will not only develop their projects but also grow as leaders in open science and research software development.\u003c/p\u003e\u003ch2 id=\"carolina-pradier\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#carolina-pradier\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCarolina Pradier\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/carolina-pradier.jpg\"\t\t\talt=\"Profile picture of Carolina Pradier\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eCarolina Pradier \u003c/br\u003e Universidad de Montreal \u003c/br\u003e rOpenSci - Ecofemidata\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHi, I\u0026rsquo;m Carolina Pradier and I will be participating as a mentor in this edition of rOpenSci Champions Program.\u003c/p\u003e\u003cp\u003eI am from Argentina, I have a degree in Economics and a Master\u0026rsquo;s degree in Labour Studies from the University of Buenos Aires. I am currently living in Canada, where I am doing a PhD in Information Sciences. My doctoral thesis focuses on the study of inequalities in the scientific field in Latin America.\u003c/p\u003e\u003cp\u003eWithin the rOpenSci community, I am a maintainer of the \u003ca href=\"https://docs.ropensci.org/eph/\"\u003eeph package\u003c/a\u003e, a tool designed to facilitate the analysis of the Permanent Household Survey of Argentina. I participated as a student in a previous cohort of the rOpenSci Champions Program, where my package \u003ca href=\"https://github.com/ropensci/software-review/issues/593\"\u003ewent through the rOpenSci peer review process.\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eI am very excited to be part of the program as a mentor. I want to be able to pass on my experience in R package development to those who are taking their first steps in this community. But I also want to learn from other people, from their journeys, their motivations and their projects. I am convinced that opening spaces for exchange and mutual support is fundamental to continuing to build a diverse, inclusive and supportive community.\u003c/p\u003e\u003ch2 id=\"elina-gómez\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#elina-g%c3%b3mez\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eElina Gómez\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/elina-gomez.png\"\t\t\talt=\"Profile picture of Elina Gómez\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eElina Gómez \u003c/br\u003e Universidad de la República \u003c/br\u003e R-Ladies Montevideo - RUG Montevideo\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am Elina Gómez Bonaglia, BA in Sociology, MA in Contemporary Latin American Studies and PhD candidate in Sociology at the Faculty of Social Sciences of Udelar, Uruguay.\u003c/p\u003e\u003cp\u003eI am a teacher and researcher at the Methods and Data Access Unit (UMAD) of the Faculty of Social Sciences (Udelar). I am dedicated to applied social research and its intersection with data science, specifically in the areas of public policy and massive text analysis. I have also been teaching basic and advanced R courses for more than ten years.\u003c/p\u003e\u003cp\u003eI am interested in participating in the Champions Program as a mentor and in following projects of different types, even in other research fields to which I am accustomed.\u003c/p\u003e\u003ch2 id=\"elio-campitelli\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#elio-campitelli\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eElio Campitelli\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/elio-campitelli.jpg\"\t\t\talt=\"Profile picture of Elio Campitelli\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eElio Campitelli \u003c/br\u003e Monash University \u003c/br\u003e rOpenSci - LatinR\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am from Argentina but last year I moved to Australia because it is the only other country that starts with an \u0026lsquo;A\u0026rsquo; and uses the same type of plug.\u003c/p\u003e\u003cp\u003eI am doing a postdoc at Monash University researching interactions between Antarctic sea ice and the atmosphere.\u003c/p\u003e\u003cp\u003eI was a mentor in a previous edition of the program. It was a great experience that I want to repeat.\u003c/p\u003e\u003c/br\u003e \u003c/br\u003e\u003c/br\u003e\u003c/br\u003e\u003ch2 id=\"francisco-cardozo\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#francisco-cardozo\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFrancisco Cardozo\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/francisco-cardozo.jpg\"\t\t\talt=\"Profile picture of Francisco Cardozo\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eFrancisco Cardozo\u003c/br\u003eUniversidad de Miami \u003c/br\u003e rOpenSci - The Carpentries\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is Francisco Cardozo. I am currently a doctoral student at the University of Miami, USA, where I am part of the Prevention Sciences and Community Health program.\u003c/p\u003e\u003cp\u003eI have worked in the evaluation of prevention programs in several Latin American countries. Currently, I am developing workshops to teach the use of software that improves the reproducibility and rigor of research. These workshops focus on the use of R and statistical analysis techniques, such as machine learning and latent variables.\u003c/p\u003e\u003cp\u003eI am deeply committed to strengthening technical capabilities within communities; I believe in equipping people with the tools they need to best execute their projects. I was a mentor in a previous cohort of the program and want to continue participating in this initiative.\u003c/p\u003e\u003ch2 id=\"geraldine-gómez-millán\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#geraldine-g%c3%b3mez-mill%c3%a1n\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGeraldine Gómez Millán\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/geraldine-gomez.png\"\t\t\talt=\"Profile picture of Geraldine Gómez Millán\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eGeraldine Gómez Millán\u003c/br\u003eIBM\u003c/br\u003eEpiverse TRACE-LAC\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is Geraldine Gómez Millán, I am from Colombia, I am a Systems Engineer and I am currently pursuing a master\u0026rsquo;s degree in Software Engineering. I have participated in several social projects, leading the development of packages and software in R with focus on epidemiology and regional analysis. I have done trainings in R and good programming practices.\u003c/p\u003e\u003cp\u003eI have experience in data analysis, software architecture, development methodologies, security, DevOps, Cloud and artificial intelligence. Currently, I lead an information security team and serve as a mentor in the Champions Program.\u003c/p\u003e\u003cp\u003eI firmly believe that knowledge that is not shared, does not exist. Sharing knowledge, building collectively and creating opportunities through learning and democratization of technology are key factors to transform society. I hope to contribute my experience and socio-technical knowledge from an ethical and innovative perspective, as well as to expand and learn about other ways of thinking and approaches to problem solving.\u003c/p\u003e\u003ch2 id=\"luis-d-verde-arregoitia\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#luis-d-verde-arregoitia\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLuis D. Verde Arregoitia\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/luis-verde.jpeg\"\t\t\talt=\"Profile picture of Luis D. Verde Arregoitia\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eLuis D. Verde Arregoitia\u003c/br\u003eInstituto de Ecología AC - INECOL\u003c/br\u003eLatinR, rOpenSci, The Carpentries\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHello, I am Luis D. Verde Arregoitia, Mexican living in Mexico. I am a mammalogist with a background in Biology. I have a degree in Biology from the National Autonomous University of Mexico and a PhD in Conservation Sciences from the University of Queensland, Australia.\u003c/p\u003e\u003cp\u003eI am currently an academic technician, specialized in Data Science applied to Biodiversity.  I also spend my time writing tools, blogs and teaching materials to help others work with messy data and spreadsheets and improve their R scripts for reproducibility.  I also do hands-on R teaching.\u003c/p\u003e\u003cp\u003eI was a mentor during the 2023-2024 cohort and am happy to participate again in this edition.\u003c/p\u003e\u003ch2 id=\"milagros-mendoza\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#milagros-mendoza\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMilagros Mendoza\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/milagros-mendoza.jpeg\"\t\t\talt=\"Profile picture of Milagros Mendoza\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eMilagros Mendoza\u003c/br\u003eUniversidade Federal Rural de Pernambuco\u003c/br\u003eR-Ladies Natal\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is Milagros Mendoza. I am Peruvian by birth, but I currently live in Brazil where I work at the Universidade Federal Rural de Pernambuco (UFRPE). I am also part of R-Ladies Natal.\u003c/p\u003e\u003cp\u003eI am interested in participating in the Champions Program to share knowledge and experience with others in the rOpenSci community and to promote open data science and contribute to the creation of open source tools and resources. By being a mentor, I will also be able to develop leadership and communication skills, and learn to work with others to achieve common goals.\u003c/p\u003e\u003cp\u003eI am happy to contribute to the open science community.\u003c/p\u003e\u003c/br\u003e \u003c/br\u003e \u003ch2 id=\"pablo-tiscornia\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pablo-tiscornia\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePablo Tiscornia\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/pablo-tiscornia.jpeg\"\t\t\talt=\"Profile picture of Pablo Tiscornia\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003ePablo Tiscornia\u003c/br\u003eC40 Cities\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am Pablo Tiscornia, BA in Sociology, born in Argentina and currently living in Mexico. I work as a data scientist at C40 Cities, a global organization that drives urban climate action, and I run Estación R, a school specialized in R training and data analysis in Latin America.\u003c/p\u003e\u003cp\u003eI am very happy to be able to participate as a mentor in this edition of the program. I decided to apply because communities of practice have played a key role in my personal and professional growth, and I see in this space a great opportunity to give back some of what I received throughout my career. I strongly believe in the importance of continuing to create and sustain communities that promote the inclusion of new people in the world of programming.\u003c/p\u003e\u003cp\u003eFrom the program I hope to learn from the vast knowledge and experience of my colleagues, as well as contribute my perspective and background. I am especially excited about the possibility of establishing connections with professionals from different areas to expand our horizons and strengthen the positive impact that R and its community can have in solving current problems and challenges.\u003c/p\u003e\u003ch2 id=\"pao-corrales\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pao-corrales\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePao Corrales\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/paola-corrales.png\"\t\t\talt=\"Profile picture of Pao Corrales\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003ePao Corrales\u003c/br\u003eAustralian National University \u0026amp; \u003c/br\u003e 21st Century Weather CoE \u003c/br\u003e R-Ladies, LatinR, rOpenSci, The Carpentries, \u003c/br\u003e RForwards \u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI have a PhD in Atmospheric Sciences from the University of Buenos Aires, Argentina and now in Australia I work for the 21st Century Weather Centre as a Research Software Engineer.\u003c/p\u003e\u003cp\u003eI actively participate in \u003ca href=\"https://rladies.org\"\u003eR-Ladies\u003c/a\u003e, \u003ca href=\"https://forwards.github.io\"\u003eR Forwards\u003c/a\u003e, \u003ca href=\"https://carpentries.org\"\u003eThe Carpentries\u003c/a\u003e, \u003ca href=\"https://latinr.org\"\u003eLatinR\u003c/a\u003e and \u003ca href=\"https://ropensci.org\"\u003erOpenSci\u003c/a\u003e - learning and sharing about R in community. In 2023 I participated in the Champions Program as a Champion by presenting the \u003ca href=\"https://docs.ropensci.org/agroclimatico/\"\u003eagroclimatico package\u003c/a\u003e to \u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003erOpenSci\u0026rsquo;s peer review process\u003c/a\u003e. I learned a lot and connected with people from all over the world, it was an excellent experience!\u003c/p\u003e\u003cp\u003eI am passionate about teaching and helping other people to grow in what they do, access new opportunities and develop professionally and as individuals. I am very happy to participate this year as a mentor in the Latin American Champions Program.\u003c/p\u003e\u003c/br\u003e \u003ch2 id=\"ronny-hernandez-mora\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ronny-hernandez-mora\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRonny Hernandez Mora\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/img/team/ronny-hernandez.png\"\t\t\talt=\"Profile picture of Ronny Hernandez Mora\" width=\"250\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eRonny Hernandez Mora\u003c/br\u003eUniversity of Alberta\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am Ronny A. Hernandez Mora, a PhD student in the Department of Civil and Environmental Engineering at the University of Alberta, Canada. My research focuses on the development of computer vision and reinforcement learning tools applied to first responder drones.\u003c/p\u003e\u003cp\u003ePreviously I worked in industry developing data solutions for different companies in Latin America and the United States. My experience includes model development, process automation, API creation, and application development and implementation.\u003c/p\u003e\u003cp\u003eMy entry into the world of R and programming was possible thanks to people who were willing to teach me, so participating in this program is a way to give back and contribute to the community.\u003c/p\u003e\u003ch2 id=\"whats-next\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#whats-next\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat\u0026rsquo;s next\u003c/h2\u003e\u003cp\u003eWe are happy to have this diverse and talented team of mentors, who embody the values of collaboration, openness and commitment to collective growth. Their support will be key for the new Champions to move forward with their ideas and projects, and contribute to the development of a stronger and more diverse Open Science Community in Latin America.\u003c/p\u003e\u003cp\u003eWe are currently finalizing the selection of the Champions and will be announcing them soon!\u003c/p\u003e","url":"https://ropensci.org/blog/2025/06/05/mentors-2025/","date_published":"2025-06-05T00:00:00+00:00","date_modified":"2025-06-05T10:16:41-03:00"},{"id":"https://doi.org/10.59350/e4wq0-j73","title":"rOpenSci News Digest, May 2025","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2025/05/26/news-may-2025\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"help-us-maintain-pkgcheck\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#help-us-maintain-pkgcheck\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHelp us maintain {pkgcheck}!\u003c/h3\u003e\u003cp\u003eYou might know of \u003ca href=\"https://docs.ropensci.org/pkgcheck/\"\u003eour {pkgcheck} system\u003c/a\u003e used for our automated package checks, and for your own stand-alone and \u003ca href=\"https://github.com/ropensci-review-tools/pkgcheck-action\"\u003eGitHub-action usage\u003c/a\u003e on any package. We are seeking co-maintainers for the {pkgcheck} package which powers this system. In particular, we have several \u003ca href=\"https://github.com/ropensci-review-tools/pkgcheck/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22%3Amag%3A%20Check%20Idea%22\"\u003eideas for additional checks in current repo issues\u003c/a\u003e. We would like volunteers to attend an online get-together for us to coach you on how to implement new checks, and so to help you get involved in maintaining and further developing our checking system. If you\u0026rsquo;re interested and already part of the rOpenSci Slack, please join our dedicated \u003ccode\u003e#pkgcheck\u003c/code\u003e channel, otherwise email \u003ccode\u003emark@ropensci.org\u003c/code\u003e.\u003c/p\u003e\u003ch3 id=\"champions-program-2025\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#champions-program-2025\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChampions Program 2025\u003c/h3\u003e\u003cp\u003eThe call for the first cohort in Spanish has closed. We received 121 aplications from people in 22 different countries. Most of this year\u0026rsquo;s applicants want to develop a new package and the topics are very varied: from data access, to new analytics, educational materials, to health and agricultural applications. The review process is in full swing. Notifications will be going out over the next few weeks to all those who applied. We greatly appreciate the time all applicants took to write and submit their proposals. We can\u0026rsquo;t wait to see what this year\u0026rsquo;s cohort will bring to the program!\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday June 3, 2025 2:00 PM CEST (12:00 UTC), \u003ca href=\"/events/coworking-2025-06/\"\u003e\u0026ldquo;Getting to know the DSLC\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/jon-harmon/\"\u003eJon Harmon\u003c/a\u003e.\u003cul\u003e\u003cli\u003eVisit the \u003ca href=\"https://dslc.io/\"\u003eDSLC\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eLearn more about the DSLC and how you might get involved\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday July 1st, 2025 9:00 AM Americas Pacific (16:00 UTC), \u003ca href=\"/events/coworking-2025-07/\"\u003e\u0026ldquo;Research Software Engineering and R\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e and cohost \u003ca href=\"/author/saranjeet-kaur-bhogal/\"\u003eSaranjeet Kaur Bhogal\u003c/a\u003e.\u003cul\u003e\u003cli\u003eLook up Research Software Engineering.\u003c/li\u003e\u003cli\u003eChat with Saranjeet about being a Research Software Engineer in R\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cp\u003eThe following two packages recently became a part of our software suite:\u003c/p\u003e\u003cdiv class='highlight'\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/forcis\"\u003eforcis\u003c/a\u003e, developed by Nicolas Casajus together with Mattia Greco, Sonia Chaabane, Xavier Giraud, and Thibault de Garidel-Thoron: Provides an interface to the FORCIS database (Chaabane et al. (2024) \u003ca href=\"https://doi.org/10.5281/zenodo.7390791\"\u003ehttps://doi.org/10.5281/zenodo.7390791\u003c/a\u003e) on global foraminifera distribution. This package allows to download and to handle FORCIS data. It is part of the FRB-CESAB working group FORCIS. \u003ca href=\"https://www.fondationbiodiversite.fr/en/the-frb-in-action/programs-and-projects/le-cesab/forcis/\"\u003ehttps://www.fondationbiodiversite.fr/en/the-frb-in-action/programs-and-projects/le-cesab/forcis/\u003c/a\u003e. It is available on \u003ca href=\"https://CRAN.R-project.org/package=forcis\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/660\"\u003ereviewed\u003c/a\u003e by Air Forbes and Scott Chamberlain.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/promoutils\"\u003epromoutils\u003c/a\u003e, developed by Steffi LaZerte: Utility functions for accessing GitHub and social media data.\u003c/p\u003e\u003c/div\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cp\u003eThe following eleven packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/frictionless\" title=\"Read and Write Frictionless Data Packages\"\u003efrictionless\u003c/a\u003e (\u003ca href=\"https://github.com/frictionlessdata/frictionless-r/releases/tag/v1.2.1\"\u003e\u003ccode\u003ev1.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/c3dr\" title=\"Read and Write C3D Motion Capture Files\"\u003ec3dr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/c3dr/releases/tag/v0.1.5\"\u003e\u003ccode\u003ev0.1.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/excluder\" title=\"Checks for Exclusion Criteria in Online Data\"\u003eexcluder\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/excluder/releases/tag/v0.5.2\"\u003e\u003ccode\u003ev0.5.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/fellingdater\" title=\"Estimate, report and combine felling dates of historical tree-ring series\"\u003efellingdater\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/fellingdater/releases/tag/v1.0.3\"\u003e\u003ccode\u003ev1.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/fireexposuR\" title=\"Compute and Visualize Wildfire Exposure\"\u003efireexposuR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/fireexposuR/releases/tag/v1.1.0\"\u003e\u003ccode\u003ev1.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/forcis\" title=\"Handle the FORCIS Foraminifera Database\"\u003eforcis\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/forcis/releases/tag/1.0.1\"\u003e\u003ccode\u003e1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/geotargets\" title=\"targets Extensions for Geographic Spatial Formats\"\u003egeotargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/geotargets/releases/tag/v0.3.1\"\u003e\u003ccode\u003ev0.3.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stplanr\" title=\"Sustainable Transport Planning\"\u003estplanr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stplanr/releases/tag/overlapping_segments_in_overline\"\u003e\u003ccode\u003eoverlapping_segments_in_overline\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.13.1\"\u003e\u003ccode\u003e0.13.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.11.3\"\u003e\u003ccode\u003e1.11.3\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/tinkr\" title=\"Cast (R)Markdown Files to XML and Back Again\"\u003etinkr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tinkr/releases/tag/0.3.0\"\u003e\u003ccode\u003e0.3.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cdiv class='highlight'\u003e\u003cp\u003eThere are fourteen recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/660\"\u003eforcis\u003c/a\u003e, An R Client to Access the FORCIS Database. Submitted by \u003ca href=\"https://nicolascasajus.fr\"\u003eNicolas Casajus\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/698\"\u003ePFW\u003c/a\u003e, Tools for Filtering and Processing Data from Project FeederWatch. Submitted by \u003ca href=\"https://github.com/Visorbearer\"\u003eMason Maron\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/685\"\u003eSSARP\u003c/a\u003e, SSARP (Species-/Speciation-Area Relationship Projector). Submitted by \u003ca href=\"https://github.com/kmartinet\"\u003ekmartinet\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/673\"\u003esasquatch\u003c/a\u003e, Use SAS, R, and quarto Together. Submitted by \u003ca href=\"https://ryanzomorrodi.github.io/\"\u003eRyan Zomorrodi\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/667\"\u003eread.abares\u003c/a\u003e, Provides simple downloading, parsing and importing of Australian. Submitted by \u003ca href=\"https://adamhsparks.netlify.app/\"\u003eAdam H. Sparks\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%222/seeking-reviewer(s)%22\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/705\"\u003etrud\u003c/a\u003e, Query the NHS TRUD API. Submitted by \u003ca href=\"https://github.com/rmgpanw\"\u003eAlasdair Warwick\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/688\"\u003edistionary\u003c/a\u003e, Create and Evaluate Probability Distributions. Submitted by \u003ca href=\"https://vincenzocoia.com\"\u003eVincenzo Coia\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/703\"\u003epartialling.out\u003c/a\u003e, Residuals from partial regressions. Submitted by \u003ca href=\"https://github.com/marcboschmatas\"\u003eMarc Bosch\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/681\"\u003edataset\u003c/a\u003e, Create Data Frames that are Easier to Exchange and Reuse. Submitted by \u003ca href=\"http://nl.linkedin.com/in/antaldaniel/\"\u003eDaniel Antal\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/645\"\u003ecapybara\u003c/a\u003e, Fast and Memory Efficient Fitting of Linear Models With High-Dimensional Fixed Effects. Submitted by \u003ca href=\"https://pacha.dev\"\u003eMauricio \u0026ldquo;Pachá\u0026rdquo; Vargas Sepúlveda\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/681\"\u003edataset\u003c/a\u003e, Create Data Frames that are Easier to Exchange and Reuse. Submitted by \u003ca href=\"http://nl.linkedin.com/in/antaldaniel/\"\u003eDaniel Antal\u003c/a\u003e.\u003c/p\u003e\u003c/div\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2025/05/15/puentes-comunidades-campeones-ropensci\"\u003eBridges and Communities. My Journey as an rOpenSci Champion\u003c/a\u003e by Andrea Gomez Vargas. Developing the ARcenso package with rOpenSci and presenting it to R communities. Other languages: \u003ca href='/es/blog/2025/05/15/puentes-comunidades-campeones-ropensci' lang='es'\u003ePuentes y Comunidades. Mi Camino como Campeona de rOpenSci (es)\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2025/05/09/ror\"\u003eRoaringly Acknowledge Organizations with ROR IDs in DESCRIPTION\u003c/a\u003e by Maëlle Salmon.\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools/\"\u003ehddtools\u003c/a\u003e, Hydrological Data Discovery Tools. \u003ca href=\"https://github.com/ropensci/hddtools/issues/36\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America. \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch2 id=\"online-r-package-development-workshops-by-r-forwards\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#online-r-package-development-workshops-by-r-forwards\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOnline R Package Development Workshops by R Forwards\u003c/h2\u003e\u003cp\u003eInteresting opportunity starting \u003cstrong\u003enext week\u003c/strong\u003e, read more on the \u003ca href=\"https://forwards.github.io/blog/2025/package-dev-workshops/\"\u003eR Forwards website\u003c/a\u003e:\u003c/p\u003e\u003cp\u003e\u003cem\u003e\u0026ldquo;The Forwards teaching team is hosting two workshop series beginning next month to teach participants how to build their own R packages. No prior package building experience is required.\u0026rdquo;\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cem\u003e\u0026quot;\u003ca href=\"https://forwards.github.io/package-dev/workshops/summer-2025-cohort-1.html\"\u003eCohort 1\u003c/a\u003e meets every other Monday starting June 2, from 09:00 to 10:30 UTC and will be taught by Pao Corrales and Ella Kaye. \u003ca href=\"https://forwards.github.io/package-dev/workshops/summer-2025-cohort-2.html\"\u003eCohort 2\u003c/a\u003e meets every other Tuesday starting June 3, from 14:30 to 16:00 UTC and will be led by Emma Rand, Joyce Robbins, and Heather Turner.\u0026quot;\u003c/em\u003e\u003c/p\u003e\u003ch3 id=\"roaringly-acknowledge-organizations-with-ror-ids-in-description\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#roaringly-acknowledge-organizations-with-ror-ids-in-description\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRoaringly Acknowledge Organizations with ROR IDs in DESCRIPTION\u003c/h3\u003e\u003cp\u003eIn our \u003ca href=\"/blog/2025/05/09/ror/\"\u003erecent blog post\u003c/a\u003e we explained what ROR IDs are: they are to organizations what ORCID are for individuals. They help acknowledge more precisely an organization (a company that owns the copyright, a non-profit that funded the work, etc.) in the package\u0026rsquo;s metadata. \u003ca href=\"/blog/2025/05/09/ror/\"\u003eRead more\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"safeguard-your-documentation-in-check-environments\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#safeguard-your-documentation-in-check-environments\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSafeguard your documentation in check environments\u003c/h3\u003e\u003cp\u003eOr, in other words, how to have your package \u003cem\u003enot\u003c/em\u003e fail \u003ccode\u003eR CMD check\u003c/code\u003e on CRAN, but examples and vignettes still rendered in pkgdown documentation?\u003c/p\u003e\u003cp\u003eThanks to Alasdair Warwick, maintainer of the recently reviewed \u003ca href=\"https://docs.ropensci.org/gtexr/\"\u003egtexr package\u003c/a\u003e, for summarizing \u003ca href=\"https://github.com/ropensci-org/rotemplate/issues/120#issuecomment-2831521763\"\u003esome advice\u003c/a\u003e that we share here:\u003c/p\u003e\u003cul\u003e\u003cli\u003eFor function examples, use the \u003ca href=\"https://roxygen2.r-lib.org/articles/rd.html?q=examplesIf#examples\"\u003e\u003ccode\u003eexamplesIf\u003c/code\u003e roxygen2 tag\u003c/a\u003e with the \u003ccode\u003eIN_PKGDOWN\u003c/code\u003e variable e.g. \u003ccode\u003e#' @examplesIf identical(Sys.getenv(\u0026quot;IN_PKGDOWN\u0026quot;), \u0026quot;true\u0026quot;)\u003c/code\u003e\u003c/li\u003e\u003cli\u003eFor vignettes, either \u003ca href=\"/blog/2019/12/08/precompute-vignettes/\"\u003epre-build\u003c/a\u003e if special tools/data/credentials are required which are unavailable on generic build servers, or use the \u003ccode\u003eIN_PKGDOWN\u003c/code\u003e variable with knitr eval option e.g.\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eknitr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"n\"\u003eopts_chunk\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003eset\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ecollapse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ecomment\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eeval\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eSys.getenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;IN_PKGDOWN\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;true\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eExamples:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003eexamplesIf\u003c/code\u003e: \u003ca href=\"https://github.com/ropensci/gtexr/blob/592ac781672f07eb67e935d4155570c5960d1fdb/R/get_service_info.R#L14\"\u003ehttps://github.com/ropensci/gtexr/blob/592ac781672f07eb67e935d4155570c5960d1fdb/R/get_service_info.R#L14\u003c/a\u003e (see also Docs of the roxygen2 tag: \u003ca href=\"https://roxygen2.r-lib.org/articles/rd.html?q=examplesIf#examples\"\u003ehttps://roxygen2.r-lib.org/articles/rd.html?q=examplesIf#examples\u003c/a\u003e)\u003c/li\u003e\u003cli\u003eVignette, knitr eval option: \u003ca href=\"https://github.com/ropensci/gtexr/blob/592ac781672f07eb67e935d4155570c5960d1fdb/vignettes/gtexr.Rmd#L16\"\u003ehttps://github.com/ropensci/gtexr/blob/592ac781672f07eb67e935d4155570c5960d1fdb/vignettes/gtexr.Rmd#L16\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"more-on-renv-and-r-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#more-on-renv-and-r-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMore on {renv} and R versions\u003c/h3\u003e\u003cp\u003eTo follow up on last newsletter\u0026rsquo;s item \u003ca href=\"/blog/2025/04/28/news-april-2025/#ci-pin-the-r-version-if-using-renv\"\u003e\u0026quot;🔗 CI: Pin the R version if using renv\u0026quot;\u003c/a\u003e, a tip by Hugo Gruson: it\u0026rsquo;s also possible to automatically set the R version to the one documented in \u003ccode\u003erenv.lock\u003c/code\u003e when using the \u003ca href=\"https://github.com/r-lib/actions/blob/4f58f8ffa872cbd4cb016c51ec497fdbe0a02711/setup-r/README.md?plain=1#L37\"\u003e\u003ccode\u003er-lib/setup-r\u003c/code\u003eaction\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"air-gets-a-usethis-function-usethisuse_air\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#air-gets-a-usethis-function-usethisuse_air\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAir gets a usethis function: \u003ccode\u003eusethis::use_air()\u003c/code\u003e\u003c/h3\u003e\u003cp\u003eIn March we mentioned \u003ca href=\"/blog/2025/03/27/news-march-2025/#air-a-new-formatter-for-r\"\u003eAir\u003c/a\u003e, the new formatter developed at Posit. In usethis development version, there\u0026rsquo;s a function that helps you set up a project to use Air: \u003ca href=\"https://usethis.r-lib.org/dev/reference/use_air.html\"\u003e\u003ccode\u003euse_air()\u003c/code\u003e\u003c/a\u003e. See also the \u003ca href=\"https://github.com/r-lib/usethis/issues/2114\"\u003eissue about the JSON config\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"better-http-testing-with-vcrs-development-version\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#better-http-testing-with-vcrs-development-version\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBetter HTTP testing with vcr\u0026rsquo;s development version\u003c/h3\u003e\u003cp\u003eBreaking news: a new vcr version is in the works! Follow the activity by Hadley Wickham and Scott Chamberlain in vcr\u0026rsquo;s \u003ca href=\"https://github.com/ropensci/vcr\"\u003eGitHub repository\u003c/a\u003e, check out the new \u003ca href=\"https://docs.ropensci.org/vcr/reference/use_cassette.html\"\u003e\u003ccode\u003elocal_cassette()\u003c/code\u003e function\u003c/a\u003e\u0026hellip; Or just wait for the next release! \u0026#x1f638;\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/05/26/news-may-2025/","date_published":"2025-05-26T00:00:00+00:00","date_modified":"2025-05-26T15:12:41+02:00"},{"id":"https://doi.org/10.59350/6ckxv-axw35","title":"Bridges and Communities. My Journey as an rOpenSci Champion","language":"en","authors":[{"name":"Andrea Gomez Vargas","url":"https://orcid.org/0009-0007-8745-3967","avatar":"https://github.com/SoyAndrea.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor","translator"]}],"tags":["champions program","packages","community"],"content_html":"\u003cp\u003eTo be part of the \u003ca href=\"https://champions-program.ropensci.org\"\u003erOpenSci Champions program\u003c/a\u003e has been an experience of \u003cstrong\u003eprofessional growth and an opportunity to contribute to the rOpenSci community\u003c/strong\u003e. I learned about R package development while working on a tool to facilitate access to census data from Argentina.\u003c/p\u003e\u003cp\u003eIn this blog, I want to share how this experience \u003cem\u003eopened new opportunities, connected me with people and communities, and led me to be part of new projects, strengthening my commitment to open access to data\u003c/em\u003e.\u003c/p\u003e\u003ch2 id=\"my-project-in-the-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#my-project-in-the-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMy project in the program\u003c/h2\u003e\u003cp\u003eFrom the beginning, my goal was to develop a package in R that would allow structured access to Argentina\u0026rsquo;s census data. The idea arose from the need to have historical information organized and ready to be used in statistical analysis and research projects. My work as a population statistics analyst led me to identify the importance of having a tool that would facilitate the processing of these data. In historical censuses, these data are scattered in different formats (books, PDFs, spreadsheets and REDATAM), which makes it difficult to access and use.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/05/15/puentes-comunidades-campeones-ropensci/censos-argentina.png\"\t\t\talt=\"Official logos of the national censuses of Argentina from 1970 to 2022, from left to right, 1970. Blue cover of the report of the National Census of Population, Families and Dwellings, with drawings of dwellings and people; 1980. Animated figure of a smiling pencil with the text \u0026#39;Census 80\u0026#39;; 1991. Icon with a white grid, two black eyes and a red smile next to the text \u0026#39;Census \u0026#39;91\u0026#39;; 2001. Blue squares forming a geometric figure and the text \u0026#39;Census 2001\u0026#39;; 2010. Text \u0026#39;Census 2010 - Bicentennial Year\u0026#39;, with the zero represented as an Argentine cockade; 2022. Blue circle with abstract white lines and the text \u0026#39;Census 2022 - Argentine Republic\u0026#39;. \"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eCollage with the covers of the national censuses of Argentina from 1970 to 2022.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eDuring the program, I worked on the organization and standardization of the data, facing challenges such as the structuring of the information (tidy data) and the creation of efficient functions for its manipulation. One of the most enriching aspects of the program were the training sessions provided by rOpenSci (special thanks to \u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle\u003c/a\u003e and \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYani\u003c/a\u003e for all the patience and learning), and the continuous discussion of projects with the other Champions in the program.\u003c/p\u003e\u003cp\u003eWe participated in virtual trainings on (among other topics) code management, use of efficient packages for the creation of R packages, and automation with GitHub Actions, all with a focus on best practices. In addition, I had the opportunity to benefit from the personalized mentoring of \u003ca href=\"/author/luis-d.-verde-arregoitia/\"\u003eLuis Verde\u003c/a\u003e a friend of the LatinR community, who accompanied me throughout the package development process, providing key guidance at each stage.\u003c/p\u003e\u003ch2 id=\"expectation-vs-reality\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#expectation-vs-reality\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExpectation vs. reality\u003c/h2\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/blog/2025/05/15/puentes-comunidades-campeones-ropensci/codehero.png\"\t\t\talt=\"Illustration of a person wearing a cape that says \u0026#39;code hero\u0026#39; and saying \u0026#39;I\u0026#39;m doing something all by myself\u0026#39; while flying with a laptop. Below is a safety net held by people holding signs that say \u0026#39;support\u0026#39; and \u0026#39;community\u0026#39;. There are also hot air balloons supporting them, with labels like \u0026#39;teachers\u0026#39;, \u0026#39;bloggers\u0026#39;, \u0026#39;friends\u0026#39;, \u0026#39;developers\u0026#39;, and \u0026#39;contributors\u0026#39;.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eIllustration by \u003ca href=\"https://www.allisonhorst.com/\"\u003eAllison Horst\u003c/a\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eAs I progressed in the development of the package, I faced a key challenge: the structure of the data. As I incorporated information from different census years, I realized that each census brought with it thousands of excel files in different formats making automation difficult and making the transformation one by one, which made the standardization task even more complex.It was then that I decided to invite \u003ca href=\"https://github.com/ECiardullo\"\u003e\u003cem\u003eEmanuel Ciardullo\u003c/em\u003e\u003c/a\u003e to join the project. We formed a duo from our complementary points of view - me from sociology, him from statistics - to face this first phase of the package. This alliance was key to rethinking the approach and sharing the technical and conceptual work.\u003c/p\u003e\u003cp\u003eMy intention was to cover all the census years in the package, but over time I realized that it was going to take more time than I had estimated. It was not only a matter of organizing data, but also of designing a structure that would allow the integration of information in a scalable and reusable way in the future.\u003c/p\u003e\u003cp\u003eWith a volume of work already done and a clearer strategy, we reordered the project outline, defined a roadmap for the different phases of data availability, and then were able to focus on finalizing the data we had already structured. Finally, we put together the documentation and developed the first functions: \u003ccode\u003eget_census()\u003c/code\u003e, \u003ccode\u003echeck_repository()\u003c/code\u003e and \u003ccode\u003earcenso()\u003c/code\u003e.\u003c/p\u003e\u003ch2 id=\"arcenso\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#arcenso\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eARcenso\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2025/05/15/puentes-comunidades-campeones-ropensci/arcenso-hex.png\"\t\t\talt=\"Blue hex sticker from the R arcenso package, with a design inspired by the sun of the Argentinean flag, and the name of the AR_censo package in white letters in the center.\" width=\"200px\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eHex from the \u003ccode\u003earcenso\u003c/code\u003e package, created as part of the rOpenSci champions program.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eIn the midst of these reflections and technical challenges, \u003ca href=\"https://soyandrea.github.io/arcenso/\"\u003eARcenso\u003c/a\u003e was born. This project, with the package arcenso, not only seeks to facilitate access to census data, but also to promote its use among researchers, the public sector and citizens in general by means of free software tools. The possibility of contributing with a useful, open and community-oriented tool has been one of the most important motivations of this process.\u003c/p\u003e\u003cp\u003eThe project is in its first stage: you can already install the package using \u003ccode\u003eremotes\u003c/code\u003e and explore the first census years available, 1970 and 1980. The purpose is to continue development so that ARcenso becomes more robust, undergoes \u003ca href=\"/software-review/\"\u003erOpenSci peer review\u003c/a\u003e, and eventually become available on CRAN. The Champions Program was the starting point, but development of the package continues because the potential to facilitate access to key data in an open and reusable way is enormous.\u003c/p\u003e\u003ch2 id=\"the-community\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-community\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe community\u003c/h2\u003e\u003ch3 id=\"a-scholarship-a-conference-and-a-global-community\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-scholarship-a-conference-and-a-global-community\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA scholarship, a conference and a global community\u003c/h3\u003e\u003cp\u003eI had the opportunity to receive the scholarship to attend Posit::Conf, one of the most important international conferences in the R ecosystem. It was a transformative experience: I learned a lot, met people I admire and experienced firsthand what it means to be part of a global community that is committed to free software, open access and collaborative development. In addition, it was very special to meet in person with part of the rOpenSci team and other people who are part of this community. The exchange helped me to rethink key aspects of ARcenso, from its structure to its potential to attract open collaboration. I came away with new ideas, inspiration and a network of people to continue growing with.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"communities.png\"\t\t\talt=\"Collage with two images. On the left, group of rOpenSci champions at Posit Conf from left to right, Luis Verde, Andrea Gomez, Sunny Tseng and Francisco Cardozo; on the right, an image of the screen during the arcenso package presentation at LatinR.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eKey moments of the tour: meeting with the rOpenSci community at posit::conf and arcenso presentation at LatinR.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch3 id=\"latinr\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#latinr\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLatinR\u003c/h3\u003e\u003cp\u003eIn November 2024, \u003ca href=\"https://youtu.be/YYfyBrQhMQc?si=lQZMormzo83ImToS\"\u003ewe presented ARcenso at LatinR\u003c/a\u003e, the Latin American conference on the use of R in research and development. Together with Emanuel, we shared the work done during the program and how we worked together to build this first phase of the project. It was a very special moment to show the regional community what we had achieved and to receive their feedback and support during the panel on the Package Development Process.\u003c/p\u003e\u003ch3 id=\"r-in-network\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-in-network\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR in Network\u003c/h3\u003e\u003cp\u003eAnd to close this great 2024, from the organization \u0026lsquo;R in Buenos Aires\u0026rsquo;, together with R-Ladies Buenos Aires, we gave a local presentation of the package. As part of the R in Buenos Aires organizing team, I coordinated this activity with the aim of sharing the project with the community, showing what we were building and inviting more people to get to know it. This instance was very good, as not only did I receive valuable feedback from the community, but I was also able to connect with other people who had faced similar problems. We also took the opportunity to spread the word about the rOpenSci Champions Program, in the hope that more people in our region will be encouraged to apply for the next cohort.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/05/15/puentes-comunidades-campeones-ropensci/arcenso-meet.png\"\t\t\talt=\"Collage of three moments of the ARcenso, Opportunities and Community event. On the left, group photo of the people who attended the event; in the middle, Andrea presents and points out the main functions of the arcenso package on the screen; on the right, Andrea and Emanuel explain how they organized the work, in front of the meetup participants.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003ePresentation in the local chapters of R-Ladies and R in Buenos Aires of the arcenso package: community, functions and the behind the scenes of the work in Dupla.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003ePresenting the project and discussing it with the community allowed me to reaffirm the importance of creating accessible and well-documented tools. It was also a reminder that we were not alone in this process: the R community is a space where knowledge is built collectively, and actively participating in it was fundamental to move forward with the package.\u003c/p\u003e\u003ch3 id=\"what-remains-after-the-momentum\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-remains-after-the-momentum\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat remains after the momentum\u003c/h3\u003e\u003cp\u003eParticipating in the rOpenSci Champions Program was the starting point to create something I didn\u0026rsquo;t know I could build. It encouraged me to move from using R to developing a package in R, and from the chaos of data to designing a tool meant for other people to work better. But, above all, it connected me with a community that believes in sharing what it knows, in accompanying each other in the process and in opening paths for those who come after. Today ARcenso continues to grow, and so do I: with new ideas, new challenges and the desire to continue building in community and for the community.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/05/15/puentes-comunidades-campeones-ropensci/","date_published":"2025-05-15T00:00:00+00:00","date_modified":"2025-06-05T10:16:41-03:00"},{"id":"https://doi.org/10.59350/m6f0c-7991","title":"Roaringly Acknowledge Organizations with ROR IDs in DESCRIPTION","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["orcid","desc","metadata","community","tech notes"],"content_html":"\u003cp\u003eA few years ago, the R community started using \u003ca href=\"https://orcid.org/\"\u003eORCID\u003c/a\u003e (\u0026ldquo;Open Researcher and Contributor ID\u0026rdquo;) to persistently and uniquely identify individual authors of packages in DESCRIPTION.The idea is the following: you enter authors\u0026rsquo; ORCID as a specially named comment in their \u003ccode\u003eperson()\u003c/code\u003e object.For instance I can be represented by:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eperson\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Maëlle\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Salmon\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;maelle@ropensci.org\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erole\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;cre\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;aut\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"n\"\u003ecomment\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eORCID\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;0000-0002-2815-0399\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAlthough anyone could use your ORCID, maliciously or inadvertently\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e, you definitely benefit from using your ORCID in your work.In the case of R packages, CRAN pages and pkgdown websites feature a pretty icon linking to your ORCID profile that in turn can link to your favorite online presence.Recognition! Personal branding!\u003c/p\u003e\u003cp\u003eThis year, the exact same idea was applied to \u003cem\u003eorganizations\u003c/em\u003e using \u003ca href=\"https://ror.org/\"\u003eROR\u003c/a\u003e (\u0026ldquo;Research Organizations Registry\u0026rdquo;) IDs.Any organization, be it a research organization, an initiative or a company, can \u003ca href=\"https://ror.org/registry/\"\u003erequest to be listed\u003c/a\u003e in the registry.A few months ago, it became possible to list ROR IDs in DESCRIPTION, which a few dozen\u003ca href=\"https://github.com/search?q=%2F%28%3F-i%29ROR+%3D+%22%2F++user%3Acran+path%3A**%2FDESCRIPTION\u0026amp;type=code\u0026amp;ref=advsearch\"\u003eCRAN packages\u003c/a\u003e currently do \u0026ndash;although this is still far from the thousands of CRAN packages adopting \u003ca href=\"https://github.com/search?q=%2F%28%3F-i%29ORCID+%3D+%22%2F++user%3Acran+path%3A**%2FDESCRIPTION\u0026amp;type=code\u0026amp;ref=advsearch\"\u003eORCIDs\u003c/a\u003e.Thanks to \u003ca href=\"https://ror.org/02zz1nj61\"\u003eR Core\u003c/a\u003e for adding the feature\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e and to \u003ca href=\"https://orcid.org/0000-0003-0918-3766\"\u003eAchim Zeileis\u003c/a\u003e for \u003ca href=\"https://fosstodon.org/@zeileis/113899983089249684\"\u003espreading the news\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eA package maintainer might need to list organizations in \u003ccode\u003eDESCRIPTION\u003c/code\u003e: for instance a company that owns the copyright to the package (\u0026ldquo;cph\u0026rdquo; role), an entity that funded work on the software (\u0026ldquo;fnd\u0026rdquo; role).Adding the organization\u0026rsquo;s ROR ID to its \u003ccode\u003eperson()\u003c/code\u003e object identifies it even more clearly.As an illustration, rOpenSci can be represented by:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eperson\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;rOpenSci\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erole\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;fnd\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"n\"\u003ecomment\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://ropensci.org/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eROR\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;019jywm96\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe ROR icon, although less striking than the bright green ORCID icon, appears on the CRAN page of the package and links to the organization\u0026rsquo;s ROR page that in turn can link to the organization\u0026rsquo;s website:\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/05/09/ror/vcr-cran.png\"\t\t\talt=\"Screenshot of the CRAN page of the vcr package. Near the names of human authors Scott Chamberlain and Aaron Wolen are small ORCID icons. Near the name of the organizational author rOpenSci is a small ROR icon.\"\u003e\u003c/figure\u003e\u003cp\u003eIn 2018 we had \u003ca href=\"/blog/2018/10/08/orcid/\"\u003ereported\u003c/a\u003e about tooling for using ORCID.This year, we\u0026rsquo;d like to explain the tooling for including ROR IDs.\u003c/p\u003e\u003ch2 id=\"ror-support-in-the-devtools-ecosystem\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ror-support-in-the-devtools-ecosystem\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eROR support in the {devtools} ecosystem\u003c/h2\u003e\u003cp\u003eOnce ROR IDs were supported by base R, a next technical step was for them to be supported by Posit\u0026rsquo;s \u003ca href=\"https://r-pkgs.org/setup.html\"\u003e\u0026ldquo;devtools ecosystem\u0026rdquo;\u003c/a\u003e too.Even if devtools is not strictly necessary for developing packages, many package developers, including some in the rOpenSci community, do use devtools.\u003c/p\u003e\u003cp\u003eThe code supporting ROR in desc, roxygen2 and pkgdown follows the code supporting ORCID in those packages.It is very fortunate that ORCID support was added before ROR because \u0026ldquo;orcid\u0026rdquo; is a better string to search for than \u0026ldquo;ror\u0026rdquo; that comes up in, say, \u0026ldquo;error\u0026rdquo;. \u0026#x1f638;\u003c/p\u003e\u003ch3 id=\"ror-ids-support-in-desc\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ror-ids-support-in-desc\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eROR IDs support in {desc}\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://desc.r-lib.org/\"\u003edesc package\u003c/a\u003e, maintained by Gábor Csárdi, helps you manipulate \u003ccode\u003eDESCRIPTION\u003c/code\u003e files programmatically.In its current \u003ca href=\"https://github.com/r-lib/desc/\"\u003edevelopment version\u003c/a\u003e, all functions handling authors (adding, searching or complementing entries) \u003ca href=\"https://github.com/r-lib/desc/pull/159\"\u003enow\u003c/a\u003e feature a \u003ccode\u003eror\u003c/code\u003e argument.Furthermore, a new function, \u003ccode\u003edesc_add_ror()\u003c/code\u003e, was created.\u003c/p\u003e\u003cp\u003eFor instance you can add a ROR ID to an author entry:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edesc\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003edesc_add_ror\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;019jywm96\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003egiven\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;rOpenSci\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eYou can add an author entry including its ROR ID:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edesc\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003edesc_add_author\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egiven\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;rOpenSci\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eror\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;019jywm96\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erole\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;fnd\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThese functions can be handy to update a bunch of packages at once.Even if packages are updated one by one, it is shorter to share and apply the instructions as a code snippet.\u003c/p\u003e\u003ch3 id=\"ror-support-in-roxygen2\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ror-support-in-roxygen2\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eROR support in {roxygen2}\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://roxygen2.r-lib.org/\"\u003eroxygen2 package\u003c/a\u003e, maintained by Hadley Wickham, generates your package\u0026rsquo;s \u003ccode\u003eNAMESPACE\u003c/code\u003e and manual pages using specially formatted comments.Among those manual pages, your package might (and \u003ca href=\"https://devguide.ropensci.org/pkg_building.html#docs-general\"\u003eshould\u003c/a\u003e, according to our dev guide) contains a package-level one.You can create such a page using \u003ca href=\"https://usethis.r-lib.org/reference/use_package_doc.html\"\u003e\u003ccode\u003eusethis::use_package_doc()\u003c/code\u003e\u003c/a\u003e.The following content will be added to \u003ccode\u003eR/package-name-package.R\u003c/code\u003e, for instance \u003ccode\u003eR/usethis-package.R\u003c/code\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @keywords internal\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\u0026#34;_PACKAGE\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## usethis namespace: start\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## usethis namespace: end\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kc\"\u003eNULL\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eRunning \u003ccode\u003edevtools::document()\u003c/code\u003e will create an Rd file for \u003ccode\u003e?package-name\u003c/code\u003e, whose content comes from \u003ccode\u003eDESCRIPTION\u003c/code\u003e, including ORCIDs and ROR IDs.\u003c/p\u003e\u003cp\u003eIn this case, you might want to install roxygen2\u0026rsquo;s \u003ca href=\"https://github.com/r-lib/roxygen2/pull/1699\"\u003edevelopment version\u003c/a\u003e to see the ROR ID properly reformatted to an URL.Example of the tinkr package: \u003ca href=\"https://github.com/ropensci/tinkr/blob/main/R/tinkr-package.R\"\u003epackage-level doc source\u003c/a\u003e,\u003ca href=\"https://github.com/ropensci/tinkr/blob/4937951b655e7e8cb0aaf3025f82f0d921d0b3d5/man/tinkr-package.Rd#L32\"\u003epackage-level manual page\u003c/a\u003e,\u003ca href=\"https://docs.ropensci.org/tinkr/reference/tinkr-package.html#author\"\u003emanual page on pkgdown\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"ror-support-in-pkgdown\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ror-support-in-pkgdown\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eROR support in {pkgdown}\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://pkgdown.r-lib.org/\"\u003epkgdown package\u003c/a\u003e, maintained by Hadley Wickham, creates a documentation website for your package based on its metadata and documentation.Since its \u003ca href=\"https://pkgdown.r-lib.org/news/index.html#new-features-2-1-2\"\u003e2.1.2 version\u003c/a\u003e, ROR IDs in \u003ccode\u003eDESCRIPTION\u003c/code\u003e are transformed into icons, similar to ORCID IDs.\u003c/p\u003e\u003cp\u003eThe sidebar of \u003ca href=\"https://docs.ropensci.org/tinkr/index.html\"\u003etinkr\u0026rsquo;s website\u003c/a\u003e includes a ROR icon near rOpenSci name.\u003c/p\u003e\u003ch2 id=\"support-for-ror-icons\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#support-for-ror-icons\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSupport for ROR icons?\u003c/h2\u003e\u003cp\u003eAs of today, ROR icons like those on the CRAN pages, pkgdown websites and our website\u0026rsquo;s footer come from \u003ca href=\"https://ror.readme.io/docs/display\"\u003efiles\u003c/a\u003e. We have however opened an icon request for ROR in the Font Awesome repository, that you can \u003ca href=\"https://github.com/FortAwesome/Font-Awesome/issues/20550\"\u003eupvote\u003c/a\u003e by using thumbs up. This strategy worked for \u003ca href=\"https://github.com/FortAwesome/Font-Awesome/issues/4401\"\u003eORCID\u003c/a\u003e. There\u0026rsquo;s already a ROR icon in the more specialized \u003ca href=\"https://jpswalsh.github.io/academicons/\"\u003eacademicons library\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"conclusion-go-forth-register-and-use-ror-ids\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion-go-forth-register-and-use-ror-ids\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion: go forth, register and use ROR IDs!\u003c/h2\u003e\u003cp\u003eIn this tech note, we explained what ROR IDs are: persistent IDs for organizations.They are to organizations what ORCIDs are to individuals.We\u0026rsquo;ve shown ROR IDs are supported in the base R and devtools ecosystems.\u003c/p\u003e\u003cp\u003eROR IDs can help identify more clearly an entity you list in your package\u0026rsquo;s \u003ccode\u003eDESCRIPTION\u003c/code\u003e because it, say, funded the work or owns the copyrights to it.We encourage you to register your organization to the Research Organization Registry and to use the resulting ID in your package\u0026rsquo;s \u003ccode\u003eDESCRIPTION\u003c/code\u003e.Such a task could be tackled during a \u003ca href=\"https://www.tidyverse.org/blog/2023/06/spring-cleaning-2023/\"\u003epackage spring cleaning\u003c/a\u003e.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eDon\u0026rsquo;t we all resort to copy-pasting formatting from others\u0026rsquo; metadata files? \u0026#x1f605;\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eCurrently, packages on CRAN with a ROR ID in \u003ccode\u003eDESCRIPTION\u003c/code\u003e get a NOTE in CRAN checks, that can be ignored. \u003ca href=\"https://cran.r-project.org/web/checks/check_results_vcr.html\"\u003eExample\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2025/05/09/ror/","date_published":"2025-05-09T00:00:00+00:00","date_modified":"2025-05-09T09:44:41+02:00"},{"id":"https://doi.org/10.59350/a6syn-6hc72","title":"rOpenSci News Digest, April 2025","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2025/04/28/news-april-2025\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"event-career-paths-for-us-federal-data-scientists\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#event-career-paths-for-us-federal-data-scientists\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEvent: Career Paths for U.S. Federal Data Scientists\u003c/h3\u003e\u003cp\u003erOpenSci and Openscapes are lucky to have as members many U.S. federal employees who enrich our work and community. In a time of great uncertainty for so many government workers, we want to support our members who are considering their next career steps.\u003c/p\u003e\u003cp\u003eJoin us on Tuesday, May 6 at 8:30PM EDT for a discussion and networking event for and with current and former U.S. federal government data scientists.\u003c/p\u003e\u003cp\u003e\u003ca href=\"/events/datasci-careers-feds/\"\u003eMore information\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"ropensci-champions-program-2025-in-spanish-apply-before-april-30th\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-champions-program-2025-in-spanish-apply-before-april-30th\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci Champions Program 2025 In Spanish: Apply before April 30th!\u003c/h3\u003e\u003cp\u003eReminder: The call for applications to be part of the new cohort of our 2025 Program is open until April 30th! For the first time it will be in Spanish.\u003c/p\u003e\u003cp\u003eFind out more in our \u003ca href=\"/blog/2025/03/10/champeons-latin-america/\"\u003ecall for applications\u003c/a\u003e. It will be open until \u003cstrong\u003eWednesday, April 30, 2025\u003c/strong\u003e.\u003c/p\u003e\u003ch3 id=\"ropensci-in-the-news\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-in-the-news\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci in the News\u003c/h3\u003e\u003cp\u003eOur community manager Yanina Bellini Saibene was also interviewed in \u003cem\u003eNature\u003c/em\u003e, for the article \u003ca href=\"https://www.nature.com/articles/d41586-025-01241-6\"\u003e\u0026ldquo;Which programming language should I use? A guide for early-career researchers\u0026rdquo;\u003c/a\u003e\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u0026ldquo;The user community is also a key consideration \u0026mdash; Saibene says that\u0026rsquo;s one of the things she loves most about R. The language\u0026rsquo;s large, welcoming and engaged user community means that tools are developed and updated frequently; that local user groups exist around the world; and that tutorials and other resources are available in many spoken languages, including her native Spanish.\u0026rdquo;\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eOur executive director Noam Ross was interviewed for the \u003cem\u003eNature\u003c/em\u003e article \u003ca href=\"https://www.nature.com/articles/d41586-025-00681-4\"\u003e\u0026ldquo;Stay safe from online hate with these five tips\u0026rdquo;\u003c/a\u003e. For more on this topic, we recommend this 2021 paper by Danielle Smalls and Greg Wilson: \u003ca href=\"https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1008563\"\u003e\u0026ldquo;Ten quick tips for staying safe online\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"more-languages-more-access-discover-ropensci-in-spanish\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#more-languages-more-access-discover-ropensci-in-spanish\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMore Languages, More Access: Discover rOpenSci in Spanish\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;re excited to share that our website has more content than ever available in Spanish! We started with our \u003ca href=\"https://devguide.ropensci.org/es/index.es.html\"\u003eDev Guide\u003c/a\u003e and some of our blog posts. Now you\u0026rsquo;ll also find key pages, information about projects and programs, documentation, and community resources in \u003ca href=\"/es/\"\u003eSpanish\u003c/a\u003e. This milestone reflects our ongoing commitment to making open science more inclusive and accessible to Spanish-speaking communities worldwide. We are grateful to all the community members who contribute to our translation and localization efforts.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday May 6th 9:00 Australia Western (01:00 UTC), \u003ca href=\"/events/coworking-2025-05/\"\u003e\u0026ldquo;Writing functions in R\u0026rdquo;\u003c/a\u003e with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost \u003ca href=\"/author/nicholas-tierney/\"\u003eNicholas Tierney\u003c/a\u003e.\u003cul\u003e\u003cli\u003eWrite some functions;\u003c/li\u003e\u003cli\u003eExplore new or interesting ways of writing functions in R.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cp\u003eThe following two packages recently became a part of our software suite:\u003c/p\u003e\u003cdiv class='highlight'\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/gtexr\"\u003egtexr\u003c/a\u003e, developed by Alasdair Warwick together with Benjamin Zuckerman, Abraham Olvera-Barrios, Chuin Ying Ung, and Robert Luben: A convenient R interface to the Genotype-Tissue Expression (GTEx) Portal API. The GTEx project is a comprehensive public resource for studying tissue-specific gene expression and regulation in human tissues. Through systematic analysis of RNA sequencing data from 54 non-diseased tissue sites across nearly 1000 individuals, GTEx provides crucial insights into the relationship between genetic variation and gene expression. This data is accessible through the GTEx Portal API enabling programmatic access to human gene expression data. For more information on the API, see \u003ca href=\"https://gtexportal.org/api/v2/redoc\"\u003ehttps://gtexportal.org/api/v2/redoc\u003c/a\u003e. It is available on \u003ca href=\"https://CRAN.R-project.org/package=gtexr\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/684\"\u003ereviewed\u003c/a\u003e by Zhian N. Kamvar and Ernest Guevarra.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/c3dr\"\u003ec3dr\u003c/a\u003e, developed by Simon Nolte: A wrapper for the \u0026lsquo;EZC3D\u0026rsquo; library to work with C3D motion capture data. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/686\"\u003ereviewed\u003c/a\u003e by Aymeric Stamm and July Pilowsky.\u003c/p\u003e\u003c/div\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cp\u003eThe following sixteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/butterfly\" title=\"Verification for Continually Updating Time Series Data\"\u003ebutterfly\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/butterfly/releases/tag/1.1.2\"\u003e\u003ccode\u003e1.1.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/c3dr\" title=\"Read and Write C3D Motion Capture Files\"\u003ec3dr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/c3dr/releases/tag/v0.1.1\"\u003e\u003ccode\u003ev0.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/FedData\" title=\"Download Geospatial Data Available from Several Federated Data Sources\"\u003eFedData\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/FedData/releases/tag/v4.3.0\"\u003e\u003ccode\u003ev4.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/git2r\" title=\"Provides Access to Git Repositories\"\u003egit2r\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/git2r/releases/tag/v0.36.2\"\u003e\u003ccode\u003ev0.36.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gtexr\" title=\"Query the GTEx Portal API\"\u003egtexr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gtexr/releases/tag/v0.2.0\"\u003e\u003ccode\u003ev0.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ijtiff\" title=\"Comprehensive TIFF I/O with Full Support for ImageJ TIFF Files\"\u003eijtiff\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ijtiff/releases/tag/v3.1.3\"\u003e\u003ccode\u003ev3.1.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.12.0\"\u003e\u003ccode\u003ev0.12.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmapiR\" title=\"OpenStreetMap API\"\u003eosmapiR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmapiR/releases/tag/v0.2.3\"\u003e\u003ccode\u003ev0.2.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmextract\" title=\"Download and Import Open Street Map Data Extracts\"\u003eosmextract\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmextract/releases/tag/v0.5.3\"\u003e\u003ccode\u003ev0.5.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pangoling\" title=\"Access to Large Language Model Predictions\"\u003epangoling\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/pangoling/releases/tag/v1.0.3\"\u003e\u003ccode\u003ev1.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rb3\" title=\"Download and Parse Public Data Released by B3 Exchange\"\u003erb3\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rb3/releases/tag/v0.0.12\"\u003e\u003ccode\u003ev0.0.12\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stplanr\" title=\"Sustainable Transport Planning\"\u003estplanr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stplanr/releases/tag/overlapping_segments_in_overline\"\u003e\u003ccode\u003eoverlapping_segments_in_overline\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.13.0\"\u003e\u003ccode\u003e0.13.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.11.2\"\u003e\u003ccode\u003e1.11.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/waywiser\" title=\"Ergonomic Methods for Assessing Spatial Models\"\u003ewaywiser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/waywiser/releases/tag/v0.6.3\"\u003e\u003ccode\u003ev0.6.3\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/weatherOz\" title=\"An API Client for Australian Weather and Climate Data Resources\"\u003eweatherOz\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weatherOz/releases/tag/v2.0.1\"\u003e\u003ccode\u003ev2.0.1\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cdiv class='highlight'\u003e\u003cp\u003eThere are twelve recently closed and active submissions and 5 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/686\"\u003ec3dr\u003c/a\u003e, Read and Write C3D Motion Capture Files. Submitted by \u003ca href=\"https://github.com/smnnlt\"\u003eSimon Nolte\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/684\"\u003egtexr\u003c/a\u003e, Query the GTEx Portal API. Submitted by \u003ca href=\"https://github.com/rmgpanw\"\u003eAlasdair Warwick\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/660\"\u003eforcis\u003c/a\u003e, An R Client to Access the FORCIS Database. Submitted by \u003ca href=\"https://nicolascasajus.fr\"\u003eNicolas Casajus\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%222/seeking-reviewer(s)%22\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/673\"\u003esasquatch\u003c/a\u003e, Use SAS, R, and quarto Together. Submitted by \u003ca href=\"http://ryanzomorrodi.github.io\"\u003eRyan Zomorrodi\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/673\"\u003esasquatch\u003c/a\u003e, Use SAS, R, and quarto Together. Submitted by \u003ca href=\"http://ryanzomorrodi.github.io\"\u003eRyan Zomorrodi\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/685\"\u003eSSARP\u003c/a\u003e, SSARP (Species-/Speciation-Area Relationship Projector). Submitted by \u003ca href=\"https://github.com/kmartinet\"\u003ekmartinet\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/667\"\u003eread.abares\u003c/a\u003e, Provides simple downloading, parsing and importing of Australian. Submitted by \u003ca href=\"https://adamhsparks.netlify.app/\"\u003eAdam H. Sparks\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/645\"\u003ecapybara\u003c/a\u003e, Fast and Memory Efficient Fitting of Linear Models With High-Dimensional. Submitted by \u003ca href=\"https://pacha.dev\"\u003eMauricio \u0026ldquo;Pachá\u0026rdquo; Vargas Sepúlveda\u003c/a\u003e.\u003c/p\u003e\u003c/div\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2025/04/10/ednajoint-a-modeling-tool-for-environmental-dna-data\"\u003eeDNAjoint: a Modeling Tool for Environmental DNA Data\u003c/a\u003e by Abby Keller. A look at the new eDNAjoint package for joint modelling of eDNA and traditional species survey methods.\u003c/li\u003e\u003c/ul\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/04/28/news-april-2025/eDNAjoint_logo.png\"\t\t\talt=\"eDNAjoint logo.\" width=\"400\"\u003e\u003c/figure\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/es/blog/2025/04/03/commcall-programa-2025\"\u003ePunto de partida: primera \u003cem\u003e\u0026lsquo;Conversaciones con la Comunidad\u0026rsquo;\u003c/em\u003e del programa de Campeon(a|e)s en español\u003c/a\u003e by Yanina Bellini Saibene. En esta primera Conversaciones con la Comunidad del programa de Campeon(a|e)s en español, compartimos las experiencias de participantes latinoamericanos del programa.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/04/08/mentoring-tools\"\u003eSupporting rOpenSci Mentors with Practical Tools\u003c/a\u003e by Yanina Bellini Saibene. rOpenSci has developed a set of resources to support mentors in the Champions Program. In this post, we\u0026rsquo;ll walk you through what we\u0026rsquo;ve created and show how these resources can support your mentoring as well \u0026mdash;whether you\u0026rsquo;re part of rOpenSci or mentoring in another context. Other languages: \u003ca href='/es/blog/2025/04/08/mentoring-tools' lang='es'\u003eApoyar a los mentores y mentoras de rOpenSci con herramientas prácticas (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/photosearcher/\"\u003ephotosearcher\u003c/a\u003e, Searches Flickr for photographs and metadata. \u003ca href=\"https://github.com/ropensci/photosearcher/issues/21\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/MODIStsp/\"\u003eMODIStsp\u003c/a\u003e, automatic download and preprocessing of MODIS Land Products Time Series. \u003ca href=\"https://github.com/ropensci/MODIStsp/issues/262\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools/\"\u003ehddtools\u003c/a\u003e, Hydrological Data Discovery Tools. \u003ca href=\"https://github.com/ropensci/hddtools/issues/36\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"eleven-quick-tips-for-writing-a-bioconductor-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#eleven-quick-tips-for-writing-a-bioconductor-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEleven quick tips for writing a Bioconductor package\u003c/h3\u003e\u003cp\u003eIf you are planning to publish your package with Bioconductor, do not miss this \u003ca href=\"https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1012856\"\u003epaper\u003c/a\u003e by Charlotte Soneson and collaborators.\u003c/p\u003e\u003ch3 id=\"dump-all-package-information-into-one-file-for-llms\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#dump-all-package-information-into-one-file-for-llms\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDump all package information into one file for LLMs\u003c/h3\u003e\u003cp\u003eWith the \u003ca href=\"https://www.ekotov.pro/rdocdump/\"\u003erdocdump\u003c/a\u003e package by Egor Kotov, you can generate a single file containing the source code, documentation and vignettes of an R package. You can then use the file for ingestion into a Large Language Model (LLM).\u003c/p\u003e\u003ch3 id=\"plumber2\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#plumber2\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eplumber2\u003c/h3\u003e\u003cp\u003eIf you use the plumber package to publish your code as an API, you\u0026rsquo;ll be interested in its successor, \u003ca href=\"https://posit-dev.github.io/plumber2/\"\u003eplumber2\u003c/a\u003e by Thomas Lin Pedersen.\u003c/p\u003e\u003ch3 id=\"use-a-nested-folder-structure-for-your-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-a-nested-folder-structure-for-your-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse a nested folder structure for your package\u003c/h3\u003e\u003cp\u003eIf you dream of using nested folders for storing the R code of an package, try out the experimental \u003ca href=\"https://github.com/cynkra/dir\"\u003edir\u003c/a\u003e package by Antoine Fabri.\u003c/p\u003e\u003ch3 id=\"minimal-type-guessing\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#minimal-type-guessing\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMinimal type guessing\u003c/h3\u003e\u003cp\u003eDid you know about \u003ca href=\"https://gesistsa.github.io/minty/\"\u003eminty\u003c/a\u003e, an R package by Chung-hong Chan that shares the type inferencing and parsing tools used by the original readr package prior to 2021? It can be handy for your parsing needs.\u003c/p\u003e\u003ch3 id=\"visualising-r-package-risk-assessments-using-litmus\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#visualising-r-package-risk-assessments-using-litmus\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eVisualising R Package Risk Assessments using Litmus\u003c/h3\u003e\u003cp\u003eAn interesting \u003ca href=\"https://www.jumpingrivers.com/blog/litmus-dashboard/\"\u003epost and dashboard\u003c/a\u003e by Pedro Silva, Astrid Radermacher \u0026amp; Colin Gillespie to assess the risk of packages.\u003c/p\u003e\u003ch3 id=\"ci-pin-the-r-version-if-using-renv\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ci-pin-the-r-version-if-using-renv\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCI: Pin the R version if using renv\u003c/h3\u003e\u003cp\u003eA good tip by Christophe Dervieux in our \u003ca href=\"https://contributing.ropensci.org/resources.html#channels\"\u003eSlack workspace\u003c/a\u003e: If you use renv to freeze dependencies in continuous integration, you should pin the R version to what\u0026rsquo;s been used to build the renv\u0026rsquo;s lockfile. This lets you update (and check) everything at once: the R versions and package versions.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/04/28/news-april-2025/","date_published":"2025-04-28T00:00:00+00:00","date_modified":"2026-08-13T11:16:33+02:00"},{"id":"https://doi.org/10.59350/qmd7j-7e427","title":"eDNAjoint: a Modeling Tool for Environmental DNA Data","language":"en","authors":[{"name":"Abby Keller","url":"https://orcid.org/0000-0001-6068-0173","avatar":"https://github.com/abigailkeller.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["eDNAjoint","community","packages","Software Peer Review","environmental DNA","Bayesian","Stan","contributors"],"content_html":"\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"eDNAjoint_logo.png\"         alt=\"eDNAjoint logo\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 400; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  In 2024, the version 0.2 of \u003ca href=\"https://docs.ropensci.org/eDNAjoint/\"\u003eeDNAjoint\u003c/a\u003e was \u003ca href=\"https://github.com/ropensci/software-review/issues/642#issuecomment-2328265662\"\u003epeer-reviewed\u003c/a\u003e and approved by rOpenSci, and a few months later, a \u003ca href=\"https://doi.org/10.1111/2041-210X.70000\"\u003emanuscript about the package\u003c/a\u003e was published in \u003cem\u003eMethods in Ecology and Evolution\u003c/em\u003e. Reflecting on my experience, I detail below the reasons why I wrote \u003cstrong\u003eeDNAjoint\u003c/strong\u003e, provide an example of how to use the package, and make a call to action for anyone interested in helping me expand the package further.                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003ch2 id=\"why-did-i-create-ednajoint\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-did-i-create-ednajoint\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy did I create eDNAjoint?\u003c/h2\u003e\u003cp\u003eEnvironmental DNA (eDNA) - the genetic material left by organisms in their environment - is increasingly used as an efficient and cost-effective method in surveys of species distribution and abundance. This emerging data type presents new opportunities and new challenges, particularly around interpretation and \u003ca href=\"https://doi.org/10.1111/jfb.14218\"\u003efear of false positive detections\u003c/a\u003e. Often eDNA samples are collected at locations that coincide with surveys using \u0026ldquo;traditional\u0026rdquo; methods, like visual counts or fishing catches, yet understanding how these two data types should inform each other can be difficult.\u003c/p\u003e\u003cp\u003eDuring the publication of my \u003ca href=\"https://doi.org/10.1002/eap.2561\"\u003emaster’s thesis\u003c/a\u003e about tracking an invasion front with environmental DNA, one of the reviewers suggested that the model developed in the research would make a good R package. There was a clear need for this package in the eDNA field: the ubiquity of eDNA data had outpaced software designed specifically for interpreting this increasingly common data type. The model provided a quantitative framework for integrating eDNA data with observations from “traditional” surveys, estimating the probability of a false positive eDNA detection, and comparing the relative sensitivities of the two survey methods. This felt like an opportunity to make the results of my research impactful and empower a broader set of users to confidently interpret eDNA data.\u003c/p\u003e\u003cp\u003eI had no experience developing software, but three years later and now as a PhD candidate, I can proudly share that the package is on CRAN and has found its way to my target audience. Resources like Hadley Wickham and Jennifer Bryan’s book on building \u003ca href=\"https://r-pkgs.org/\"\u003eR packages\u003c/a\u003e and the \u003ca href=\"https://mc-stan.org/rstantools/\"\u003erstantools\u003c/a\u003e vignette \u003ca href=\"https://mc-stan.org/rstantools/articles/minimal-rstan-package.html\"\u003eStep by step guide for creating a package that depends on RStan\u003c/a\u003e helped me get started, and the rOpenSci resources and review process showed me how to make a package that follows best practices.Developing the package involved making the model more generalizable by allowing for more variations, embedding pre-compiled Bayesian models written in \u003ca href=\"https://mc-stan.org/\"\u003eStan\u003c/a\u003e into the package, and adding additional functions to help with interpretation of model results. Importantly, I have been generating a \u003ca href=\"https://ednajoint.netlify.app/\"\u003euser guide\u003c/a\u003e that I hope will make the package usable and accessible.\u003c/p\u003e\u003ch2 id=\"how-do-you-use-ednajoint\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-do-you-use-ednajoint\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow do you use eDNAjoint?\u003c/h2\u003e\u003cp\u003eThe package eDNAjoint is useful for interpreting observations from paired or semi-paired environmental DNA (eDNA) and traditional surveys. The package runs a Bayesian model that integrates these two data streams to “jointly” estimate model parameters. Optional variations allow inclusion of site-level covariates that scale the sensitivity of eDNA sampling relative to traditional sampling, as well as estimation of scaling coefficients when multiple traditional survey methods with different catch efficiencies are used.\u003c/p\u003e\u003cp\u003eBelow is an example of fitting the joint model to data from paired, replicated eDNA qPCR and seine sampling observations of endangered tidewater gobies(\u003cem\u003eEucyclogobius newberryi\u003c/em\u003e) from a study by Schmelzle and Kinziger(2016)\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e. The following variation of the joint model includes site-levelcovariates that scale the sensitivity of eDNA sampling relative totraditional sampling.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eeDNAjoint\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egoby_data\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# run the joint model with two covariates\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egoby_fit\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ejoint_model\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003egoby_data\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecov\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Filter_time\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Salinity\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"n\"\u003efamily\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;poisson\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ep10_priors\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e20\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003eq\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAnd then this model fit can be accessed to do things like summarize theposterior distribution for the probability of a false positivedetection, \u003cem\u003ep\u003csub\u003e10\u003c/sub\u003e\u003c/em\u003e\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# summarize p10 posterior\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ejoint_summarize\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egoby_fit\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003emodel\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epar\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;p10\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e##      mean se_mean    sd  2.5% 97.5%    n_eff Rhat## p10 0.003       0 0.001 0.001 0.007 11948.38    1\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOr to find the number of eDNA samples and traditional survey samplesnecessary to detect presence of the species at a given expected catchrate:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# find the number of samples necessary to detect presence with 0.9 probability\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003edetection_calculate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egoby_fit\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003emodel\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emu\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e0.1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"n\"\u003ecov_val\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003eprobability\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.9\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e##       mu n_traditional n_eDNA## [1,] 0.1            24     14## [2,] 0.5             5      4## [3,] 1.0             3      2\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"call-to-action\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-to-action\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall to action\u003c/h2\u003e\u003cp\u003eWhile I certainly have received a lot of help along the way (see acknowledgements below), the development of this package has been largely a solo endeavor. While this independence has been empowering, if the software were to grow, I would likely need some more hands on deck. I have many ideas for expansion, and any potential collaborations could take multiple forms.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eAre you familiar with Stan?\u003c/strong\u003e Growth could come from further developing the code; for example, the package currently does not handle some missing data in a way that is optimal.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eDo you have eDNA domain expertise?\u003c/strong\u003e We could further build out the modeling infrastructure. For example, we could add another level of hierarchy to the models where the probability of a false positive eDNA detection is informed by negative control data. New functionality could handle continuous, rather than just binary eDNA data. We could expand to include metabarcoding data, where a single model is built for multiple species.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eDo you enjoy communicating statistical concepts?\u003c/strong\u003e The model is formulated in a Bayesian framework, and a basic understanding of Bayesian statistics and MCMC methods is useful for using the package. I anticipate that the user base of the package could be quite broad and include users who are relatively unfamiliar with statistics. How do we effectively build out the \u003ca href=\"https://ednajoint.netlify.app/\"\u003euser guide\u003c/a\u003e to make the package as accessible as possible?\u003c/p\u003e\u003cp\u003eI have already benefitted greatly from the rOpenSci community and \u003ca href=\"https://github.com/ropensci/software-review/issues/642#issuecomment-2328265662\"\u003esoftware peer review process\u003c/a\u003e, and I would be eager to have eDNAjoint be a landing spot for folks interested in \u003ca href=\"https://ropensci.org/events/coworking-2025-03/\"\u003egetting involved with rOpenSci\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eAre you interested in collaborating?\u003c/strong\u003e Open an \u003ca href=\"https://github.com/ropensci/eDNAjoint/issues\"\u003eissue on Github\u003c/a\u003e or send me an email (\u003ca href=\"mailto:agkeller@berkeley.edu\"\u003eagkeller@berkeley.edu\u003c/a\u003e)!\u003c/p\u003e\u003ch2 id=\"acknowledgements\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#acknowledgements\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAcknowledgements\u003c/h2\u003e\u003cp\u003eThanks to \u003ca href=\"/author/mark-padgham/\"\u003eMark Padgham\u003c/a\u003e (\u003ca href=\"https://github.com/mpadge\"\u003e@mpadge\u003c/a\u003e) for helping me at every stop along the rOpenSci review process, the rOpenSci reviewers Saras Windecker (\u003ca href=\"https://github.com/smwindecker\"\u003e@smwindecker\u003c/a\u003e), Chitra M Saraswati (\u003ca href=\"https://github.com/chitrams\"\u003e@chitrams\u003c/a\u003e) and editor \u003ca href=\"/author/emi-tanaka/\"\u003eEmi Tanaka\u003c/a\u003e (\u003ca href=\"https://github.com/emitanaka\"\u003e@emitanaka\u003c/a\u003e), my PhD advisor \u003ca href=\"/author/carl-boettiger/\"\u003eCarl Boettiger\u003c/a\u003e (\u003ca href=\"https://github.com/cboettig\"\u003e@cboettig\u003c/a\u003e) who has answered many small questions along the way, and the many early users who have been valuable beta testers and sources of encouragement.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eSchmelzle, M.C. and Kinziger, A.P. (2016). Using occupancy modelling to compare environmental DNA to traditional field methods for regional-scale monitoring of an endangered aquatic species. \u003cem\u003eMolecular Ecology Resources\u003c/em\u003e. 16(4): 895-908. \u003ca href=\"https://doi.org/10.1111/1755-0998.12501\"\u003ehttps://doi.org/10.1111/1755-0998.12501\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2025/04/10/ednajoint-a-modeling-tool-for-environmental-dna-data/","date_published":"2025-04-10T00:00:00+00:00","date_modified":"2025-04-28T15:27:34+02:00"},{"id":"https://doi.org/10.59350/mha7y-jeg07","title":"Supporting rOpenSci Mentors with Practical Tools","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["mentors","training","champions-program","community"],"content_html":"\u003cp\u003eMentoring is at the heart of what makes rOpenSci a community.Our members mentoring each other at different moments:when someone new joins and needs help navigating the community;when a member steps into a new role, like a reviewer for our software peer review,or project, like become the maintainer of a package, and could use some guidance;during everyday interactions, where people share tips and advise with each other;when someone shares an idea and gets constructive and friendly feedbackor when a more experienced member helps others grow into leadership roles.Each of these moments is a chance to share what you know, build connections, and keep the community strong.\u003c/p\u003e\u003cp\u003eSince 2022 we have had our Champions Program with a formal role of mentoring.To help our Champions Program mentors do their best work, we\u0026rsquo;ve put together a set of resources: a training, a handbook, and a monthly charter.In this post, we\u0026rsquo;ll walk you through what we\u0026rsquo;ve created and show how these resources can support your mentoring as well —whether you\u0026rsquo;re part of rOpenSci or mentoring in another context.\u003c/p\u003e\u003ch2 id=\"mentoring-workshop\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mentoring-workshop\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMentoring workshop\u003c/h2\u003e\u003cp\u003eThe \u003ca href=\"https://ropensci-training.github.io/ropensci-mentors/\"\u003eMentorship Training and Orientation\u003c/a\u003e course is a key resource in the rOpenSci Champions Program, equipping mentors with the skills and tools they need to guide their mentees.\u003c/p\u003e\u003cp\u003eKey learning outcomes include active listening, effective questioning, providing constructive feedback, and setting expectations for mentorship relationships. The course also provides practical resources to help mentors navigate their roles.\u003c/p\u003e\u003cp\u003eBuilt on materials from open initiatives like \u003ca href=\"https://foundation.mozilla.org/en/initiatives/mozilla-open-leaders/\"\u003eMozilla Open Leaders\u003c/a\u003e and \u003ca href=\"https://carpentries.github.io/instructor-training/\"\u003eThe Carpentries Instructor Training\u003c/a\u003e, this training embodies a collaborative and inclusive approach to mentorship. All materials are openly licensed under CC BY-NC 4.0, ensuring they can be freely reused and adapted.  The course includes slides, collaborative note-taking templates, exercises, and instructor notes for instructors who want to use the material to teach.\u003c/p\u003e\u003ch2 id=\"mentor-guidelines\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mentor-guidelines\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMentor Guidelines\u003c/h2\u003e\u003cp\u003eWe wrote the \u003ca href=\"https://ropensci-org.github.io/champions-mentor-guidelines/\"\u003erOpenSci Champions Program Mentor Guidelines\u003c/a\u003e to provide mentors with a comprehensive framework of tools and insights to navigate their roles effectively. It begins with an overview of mentors\u0026rsquo; responsibilities, emphasizing their role in inspiring and advising mentees while connecting them to valuable resources, networks, and experiences.  The \u0026ldquo;Mentors Tools\u0026rdquo; section offers practical guidance on essential resources, including program infrastructure, tools for effective meetings, collaborative note-taking systems, scheduling aids, and a Code of Conduct. In \u0026ldquo;Mentorship Meetings,\u0026rdquo; the handbook emphasizes the importance of setting an agenda for the meetings, note-taking, setting an appropriate meeting frequency, and maintaining structured tracking to ensure accountability and progress.  It provides \u003ca href=\"https://docs.google.com/document/d/1vjmfbjv9ABJ6fkbtQRMFPydJZ3ypKOIpZ-xf7_iBhvo/\"\u003etemplates\u003c/a\u003e for all these items.The \u0026ldquo;Mentorship Skills\u0026rdquo; section is meant to be a reminder of the core competencies mentioned in the mentors\u0026rsquo; training, like active listening, effective questioning, and giving constructive feedback. Additionally, this section describes the GROW model, a goal-setting framework that helps mentors and mentees define clear objectives and actionable plans.We developed this resource as a living document, and we are always grateful for feedback and updates to ensure it remains a valuable resource for our mentors and community\u003c/p\u003e\u003ch2 id=\"monthly-charter\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#monthly-charter\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMonthly charter\u003c/h2\u003e\u003cp\u003eA monthly charter is a document that outlines the action items for a specific month within the Champions Program. It is particularly useful for our structured program because it helps mentors, mentees, and program management stay focused and organized while tracking progress in a manageable, time-bound way.\u003c/p\u003e\u003cp\u003eThis is an \u003ca href=\"https://docs.google.com/document/d/1-eUCiBukCYRx2Ff6VpMZh2xjAPAxXq5tppVUQjrOWxE/edit?usp=sharing\"\u003eexample of the monthly charter\u003c/a\u003e we use with the second cohort of mentors of the Champions Program.\u003c/p\u003e\u003ch2 id=\"summary\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#summary\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSummary\u003c/h2\u003e\u003cp\u003eThese tools are designed with the rOpenSci Champions Program mentors in mind, but we hope they\u0026rsquo;re also useful for anyone in a mentoring role.We would love to hear if you know of other useful resources for mentors.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/04/08/mentoring-tools/","date_published":"2025-04-08T00:00:00+00:00","date_modified":"2025-04-11T13:24:59+02:00"},{"id":"https://doi.org/10.59350/a6syn-6hc72","title":"rOpenSci News Digest, March 2025","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2025/03/27/news-march-2025\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"ropensci-champions-program-2025-in-spanish-apply-before-april-30th\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-champions-program-2025-in-spanish-apply-before-april-30th\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci Champions Program 2025 In Spanish: Apply before April 30th!\u003c/h3\u003e\u003cp\u003eWe have great news: The call for applications to be part of the new cohort of our 2025 Program is now open! And for the first time it will be in Spanish!\u003c/p\u003e\u003cp\u003eOur program seeks to identify, recognize and reward people who are leaders in an open science community, research software engineering and the R programming community.\u003c/p\u003e\u003cp\u003eThis year\u0026rsquo;s program is focused on people from Latin America and for the first time will be conducted entirely in Spanish. The main goal is to foster sustainable research software as a pillar of Open Science in Latin America through capacity and community building.\u003c/p\u003e\u003cp\u003eFind out more in our \u003ca href=\"/blog/2025/03/10/champeons-latin-america/\"\u003ecall for applications\u003c/a\u003e open until \u003cstrong\u003eWednesday, April 30, 2025\u003c/strong\u003e.\u003c/p\u003e\u003ch3 id=\"better-documentation-for-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#better-documentation-for-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBetter documentation for R-universe!\u003c/h3\u003e\u003cp\u003eThanks to funding by \u003ca href=\"/blog/2024/04/12/gsod-announcement/\"\u003eGoogle Season of Docs\u003c/a\u003e, we were able to start a new comprehensive documentation project for all users and developers of R-universe. We established a central place where we collect the various sources of information and describe examples and use cases, using popular authoring tools to support collective maintenance.\u003c/p\u003e\u003cp\u003eRead more in our \u003ca href=\"/blog/2025/02/28/r-universe-docs-launch/\"\u003eblog post\u003c/a\u003e, read the \u003ca href=\"https://docs.r-universe.org\"\u003edocumentation website\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"ropensci-participation-at-numfocus-disc-unconf-2025\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-participation-at-numfocus-disc-unconf-2025\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci Participation at NumFOCUS\u0026rsquo; DISC Unconf 2025\u003c/h3\u003e\u003cp\u003e\u003ca href=\"https://numfocus.github.io/disc-unconference-2025/\"\u003eThe NumFOCUS Diversity \u0026amp; Inclusion in Scientific Computing (\u0026ldquo;DISC\u0026rdquo;) Unconf\u003c/a\u003e took place as a hybrid event in São Paulo, Brazil, from March 14 to 16, 2025. Our community manager, \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e, and rOpenSci Champions, \u003ca href=\"/author/andrea-gomez-vargas/\"\u003eAndrea Gomez Vargas\u003c/a\u003e and \u003ca href=\"/author/liz-hare/\"\u003eLiz Hare\u003c/a\u003e, participated.\u003c/p\u003e\u003cp\u003eRead more in our \u003ca href=\"/blog/2025/03/24/numfocus-unconf/\"\u003ereport from the event\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThis event also presented the opportunity to meet in person with other members of the rOpenSci community in Sao Paulo, in the picture we can see \u003ca href=\"/author/francesca-belem-lopes-palmeira/\"\u003eFrancesca Palmeira\u003c/a\u003e (rOpenSci Champions), \u003ca href=\"/author/andrea-gomez-vargas/\"\u003eAndrea Gomez Vargas\u003c/a\u003e (rOpenSci Champions), \u003ca href=\"/author/beatriz-milz/\"\u003eBeatriz Milz\u003c/a\u003e (rOpenSci Editor and Mentor), \u003ca href=\"/author/hayd%C3%A9e-svab/\"\u003eHaydée Svab\u003c/a\u003e (rOpenSci Champions) and Yanina Bellini Saibene (rOpenSci Community Manager).\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/03/27/news-march-2025/rOpenSciBrazil.jpeg\"\t\t\talt=\"Francesca, Andrea, Beatriz, Heydee and Yani stand up and smiling for the picture\"\u003e\u003c/figure\u003e\u003ch3 id=\"community-call-fomentando-la-ciencia-abierta-en-américa-latina---programa-de-ropensci-resources\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call-fomentando-la-ciencia-abierta-en-am%c3%a9rica-latina---programa-de-ropensci-resources\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity Call \u0026ldquo;Fomentando la Ciencia Abierta en América Latina - Programa de rOpenSci\u0026rdquo; Resources\u003c/h3\u003e\u003cp\u003eAll the resources for the community call in Spanish \u003ca href=\"/es/commcalls/champions-latino-2025/\"\u003eFomentando la Ciencia Abierta en América Latina - Programa de rOpenSci\u003c/a\u003e are now available on our website. Check the video and links to other resources related to speakers\u0026rsquo; experience as mentors and mentees in the rOpenSci Champions Program.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2025-04\"\u003eTuesday April 1st 9:00 Americas Pacific (16:00 UTC)\u003c/a\u003e, \u0026ldquo;R you joking? Silly R packages for April Fools\u0026rsquo; day\u0026rdquo; with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e\u003cul\u003e\u003cli\u003eExplore silly R packages\u003c/li\u003e\u003cli\u003eChat with our hosts and other attendees and share your favourite silly R packages!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/events/clinica-champions-2025-04/\"\u003eTuesday, 15 April 2025 13:00 UTC\u003c/a\u003e (\u003cstrong\u003eSpanish\u003c/strong\u003e) \u0026ldquo;Clinica de Aplicación para el Programa de Campeon(e|a)s de rOpenSci\u0026rdquo; with \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003cul\u003e\u003cli\u003ePrepara tu solicitud para el Programa de Campeones.\u003c/li\u003e\u003cli\u003eConoce a la co-anfitriona Yanina Bellini Saibene para charlar sobre el Programa de Campeones.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday May 6th 9:00 Australia Western (01:00 UTC), Theme TBA with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and cohost TBA.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cp\u003eThe following five packages recently became a part of our software suite:\u003c/p\u003e\u003cdiv class='highlight'\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/pangoling\"\u003epangoling\u003c/a\u003e, developed by Bruno Nicenboim: Provides access to word predictability estimates using large language models (LLMs) based on transformer architectures via integration with the Hugging Face ecosystem. The package interfaces with pre-trained neural networks and supports both causal/auto-regressive LLMs (e.g., GPT-2; Radford et al., 2019) and masked/bidirectional LLMs (e.g., BERT; Devlin et al., 2019, \u003ca href=\"doi:10.48550/arXiv.1810.04805\"\u003edoi:10.48550/arXiv.1810.04805\u003c/a\u003e) to compute the probability of words, phrases, or tokens given their linguistic context. By enabling a straightforward estimation of word predictability, the package facilitates research in psycholinguistics, computational linguistics, and natural language processing (NLP). It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003ereviewed\u003c/a\u003e by Lisa Levinson and Utku Turk.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/mbquartR\"\u003embquartR\u003c/a\u003e, developed by Alex Koiter: This package has four main functions: 1) download the Manitoba Original Survey Legal Descriptions data set; 2) find the coordinates of a quarter sections given the legal land description (e.g., \u0026ldquo;NE-11-33-29W\u0026rdquo;); 3) find the legal land description using coordinates (lat and long); and 4) plot these points on a map. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/658\"\u003ereviewed\u003c/a\u003e by Emily H Markowitz and Sheila Saia.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/mapmetadata\"\u003emapmetadata\u003c/a\u003e, developed by Rachael Stickland: Prior to gaining full access to health datasets, explore publicly available metadata and map metadata onto predefined research domains. This package uses structural metadata files downloaded from the Health Data Research Gateway (\u003ca href=\"https://healthdatagateway.org/en\"\u003ehttps://healthdatagateway.org/en\u003c/a\u003e). In theory, any metadata file with the same structure as the files downloaded from this gateway can be used with this package, but the package has been developed and tested on metadata files from this gateway only. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/674\"\u003ereviewed\u003c/a\u003e by Zoë Turner and Yohann Mansiaux.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/geotargets\"\u003egeotargets\u003c/a\u003e, developed by Nicholas Tierney together with Eric Scott and Andrew Brown: Provides extensions for various geographic spatial file formats, such as shape files and rasters. Currently provides support for the terra geographic spatial formats. See the vignettes for worked examples, demonstrations, and explanations of how to use the various package extensions. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/675\"\u003ereviewed\u003c/a\u003e by Anthony Martinez and Denisse Fierro Arcos.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/saperlipopette\"\u003esaperlipopette\u003c/a\u003e, developed by Maëlle Salmon: Holds functions creating Git messes, that users would then solve, to follow \u003ca href=\"https://ohshitgit.com/\"\u003ehttps://ohshitgit.com/\u003c/a\u003e.\u003c/p\u003e\u003c/div\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cp\u003eThe following five packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/ijtiff\" title=\"Comprehensive TIFF I/O with Full Support for ImageJ TIFF Files\"\u003eijtiff\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ijtiff/releases/tag/v3.1.0\"\u003e\u003ccode\u003ev3.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/mapmetadata\" title=\"Map health metadata onto predefined research domains\"\u003emapmetadata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/mapmetadata/releases/tag/v4.0.2\"\u003e\u003ccode\u003ev4.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tidyhydat\" title=\"Extract and Tidy Canadian Hydrometric Data\"\u003etidyhydat\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidyhydat/releases/tag/0.7.1\"\u003e\u003ccode\u003e0.7.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/vcr\" title=\"Record HTTP Calls to Disk\"\u003evcr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/vcr/releases/tag/v1.7.0\"\u003e\u003ccode\u003ev1.7.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/waywiser\" title=\"Ergonomic Methods for Assessing Spatial Models\"\u003ewaywiser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/waywiser/releases/tag/v0.6.2\"\u003e\u003ccode\u003ev0.6.2\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cdiv class='highlight'\u003e\u003cp\u003eThere are twelve recently closed and active submissions and 6 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/676\"\u003ebutterfly\u003c/a\u003e, Verification For Continually Updating Timeseries Data. Submitted by \u003ca href=\"https://thomaszwagerman.co.uk/\"\u003eThomas Zwagerman\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/675\"\u003egeotargets\u003c/a\u003e, Targets Extensions for Geospatial Formats. Submitted by \u003ca href=\"https://www.njtierney.com\"\u003eNicholas Tierney\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/674\"\u003emapmetadata\u003c/a\u003e, Map health metadata onto predefined research domains. Submitted by \u003ca href=\"https://github.com/RayStick\"\u003eRachael Stickland\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/658\"\u003embquartR\u003c/a\u003e, Finding Manitoba Quarter Sections. Submitted by \u003ca href=\"http://www.alexkoiter.ca\"\u003eAlex Koiter\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/684\"\u003egtexr\u003c/a\u003e, Query the GTEx Portal API. Submitted by \u003ca href=\"https://github.com/rmgpanw\"\u003eAlasdair Warwick\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/660\"\u003eforcis\u003c/a\u003e, An R Client to Access the FORCIS Database. Submitted by \u003ca href=\"https://nicolascasajus.fr\"\u003eNicolas Casajus\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%222/seeking-reviewer(s)%22\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.github.io/\"\u003eØystein Sørensen\u003c/a\u003e. (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/667\"\u003eread.abares\u003c/a\u003e, Provides simple downloading, parsing and importing of Australian. Submitted by \u003ca href=\"https://adamhsparks.netlify.app/\"\u003eAdam H. Sparks\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/645\"\u003ecapybara\u003c/a\u003e, Fast and Memory Efficient Fitting of Linear Models With High-Dimensional. Submitted by \u003ca href=\"https://pacha.dev\"\u003eMauricio \u0026ldquo;Pachá\u0026rdquo; Vargas Sepúlveda\u003c/a\u003e.\u003c/p\u003e\u003c/div\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/03/25/r-package-review\"\u003eSoftware Review, Perspectives from an Academic\u003c/a\u003e by Alex Koiter. Comparing rOpenSci peer review to traditional academic reviews. Other languages: \u003ca href='/es/blog/2025/03/25/r-package-review' lang='es'\u003eRevisión del software, perspectivas de un académico (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/02/28/r-universe-docs-launch\"\u003eBetter documentation for R-universe!\u003c/a\u003e by Maëlle Salmon, Jeroen Ooms, and Noam Ross. We are excited to announce that R-Universe now has a documentation website thanks to Google Season of Docs.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/03/10/champeons-latin-america\"\u003erOpenSci Champions Program 2025: In Spanish!\u003c/a\u003e by Yanina Bellini Saibene. The call is open for a new cohort of our Champions Program with a focus on Latin America. Apply. Other languages: \u003ca href='/es/blog/2025/03/10/campeones-america-latina' lang='es'\u003eNueva cohorte del Programa de Campeon(a|e)s rOpenSci (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/03/20/coc-incident-template\"\u003eTemplate To Handle Code of Conduct Incidents Reports\u003c/a\u003e by Natalia Morandeira and Yanina Bellini Saibene. Learn how rOpenSci\u0026rsquo;s template provides a structured approach to effectively and confidentially analyze Code of Conduct incident reports.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/03/21/conduct2024\"\u003erOpenSci Code of Conduct Annual Review\u003c/a\u003e by Yanina Bellini Saibene, Mark Padgham, and Natalia Morandeira. Updates for version 2.5 of rOpenSci\u0026rsquo;s Code of Conduct.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/03/24/numfocus-unconf\"\u003erOpenSci Participation at NumFOCUS\u0026rsquo; DISC Unconf\u003c/a\u003e by Yanina Bellini Saibene. Report of rOpenSci participation at the NumFOCUS hybrid unconference.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cp\u003eThree use cases of our packages and resources have been reported since we sent the last newsletter.\u003c/p\u003e\u003cdiv class='highlight'\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/visualizing-highways-toll-booths-with-ggplot2-in-r-with-osmextract/4181\"\u003eVisualizing Highways, Toll Booths with {ggplot2} in R with {osmextract}\u003c/a\u003e. Reported by Aditya Dahiya.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/combining-with-population-density-rasters-with-osm-data-in-r-with-sf-osmextract-and-ggplot2/4182\"\u003eCombining with Population Density Rasters with OSM data in R with {sf}, {osmextract} and {ggplot2}\u003c/a\u003e. Reported by Aditya Dahiya.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/translating-course-to-spanish-and-french/4207\"\u003eTranslating course to Spanish and French\u003c/a\u003e. Reported by Yann Say.\u003c/p\u003e\u003c/div\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/photosearcher/\"\u003ephotosearcher\u003c/a\u003e, Searches Flickr for photographs and metadata. \u003ca href=\"https://github.com/ropensci/photosearcher/issues/21\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/MODIStsp/\"\u003eMODIStsp\u003c/a\u003e, automatic download and preprocessing of MODIS Land Products Time Series. \u003ca href=\"https://github.com/ropensci/MODIStsp/issues/262\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools/\"\u003ehddtools\u003c/a\u003e, Hydrological Data Discovery Tools. \u003ca href=\"https://github.com/ropensci/hddtools/issues/36\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003cp\u003eThe bib2df package, for parsing BibTeX files into tibbles, would need some help! \u003ca href=\"https://github.com/ropensci/bib2df/issues/65\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"lintruse_lintr\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#lintruse_lintr\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ccode\u003elintr::use_lintr()\u003c/code\u003e\u003c/h3\u003e\u003cp\u003eIf you use the lintr package for static code analysis, you might need to add a configuration file that will activate some linters, deactive others, exclude files from the linting. To create it, you can run \u003ca href=\"https://lintr.r-lib.org/reference/use_lintr.html\"\u003e\u003ccode\u003elintr::use_lintr()\u003c/code\u003e\u003c/a\u003e. Remember this is a function of lintr, not usethis!\u003c/p\u003e\u003ch3 id=\"flint-renamed-flir\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#flint-renamed-flir\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eflint renamed flir\u003c/h3\u003e\u003cp\u003eSpeaking of linting, you might remember about a package we mentioned in \u003ca href=\"/blog/2024/08/30/news-august-2024/#find-and-fix-problems-in-r-code-automatically\"\u003elast August\u0026rsquo;s newsletter\u003c/a\u003e, that would not only find problems in your package like lintr, but also fix them. This package by Etienne Bacher is now called \u003ca href=\"https://flir.etiennebacher.com/\"\u003eflir\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"air-a-new-formatter-for-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#air-a-new-formatter-for-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAir, a new formatter for R\u003c/h3\u003e\u003cp\u003eHave you ever used the styler R package to style your codebase? You might be interested in the new formatter \u003ca href=\"https://posit-dev.github.io/air/\"\u003eAir\u003c/a\u003e. Read more in the \u003ca href=\"https://www.tidyverse.org/blog/2025/02/air/\"\u003epost by Davis Vaughan and Lionel Henry on the tidyverse blog\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eCompared to styler, Air offers much less customization, but is much faster. A section of the announcement is dedicated to the \u003ca href=\"https://www.tidyverse.org/blog/2025/02/air/#how-is-this-different-from-styler\"\u003ecomparison with styler\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"ides-for-r-package-developers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ides-for-r-package-developers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIDEs for R package developers\u003c/h3\u003e\u003cp\u003eHave you heard of the beta IDE \u003ca href=\"https://positron.posit.co/\"\u003ePositron\u003c/a\u003e developed by Posit (formerly RStudio)? It might be worth a try, for instance for being able to install Git extensions like GitLens, or for the nice UI for unit tests. Note that it\u0026rsquo;s still in beta.\u003c/p\u003e\u003cp\u003eOther IDEs popular in the R community are\u003c/p\u003e\u003cul\u003e\u003cli\u003eThe precursor of Positron developed by Posit: \u003ca href=\"https://docs.posit.co/ide/user/\"\u003eRStudio\u003c/a\u003e that Posit said will still be maintained;\u003c/li\u003e\u003cli\u003eThe cousins of Positron \u003ca href=\"https://vscodium.com/\"\u003eVSCodium\u003c/a\u003e or \u003ca href=\"https://code.visualstudio.com/\"\u003eVSCode\u003c/a\u003e with the \u003ca href=\"https://open-vsx.org/extension/REditorSupport/r\"\u003eR Extension\u003c/a\u003e. Positron is a fork of VSCode like VSCodium, therefore its interface will be familiar to VSCode or VSCodium users.\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://github.com/R-nvim/R.nvim\"\u003eNeovim\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://github.com/MilesMcBain/esscss\"\u003eESS\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"penguins-data-in-base-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#penguins-data-in-base-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePenguins data in base R!\u003c/h3\u003e\u003cp\u003eLooking for a dataset for tests or docs, available in base R? The penguins dataset, originally from the \u003ca href=\"https://allisonhorst.github.io/palmerpenguins/\"\u003epalmerpenguins\u003c/a\u003e package, is \u003ca href=\"https://developer.r-project.org/blosxom.cgi/R-devel/NEWS/2025/02/22\"\u003ecoming\u003c/a\u003e to the base R datasets package! Thanks to to Ella Kaye, Heather Turner, and Kristen Gorman for their work on this.\u003c/p\u003e\u003ch3 id=\"git-stash-for-newbies\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#git-stash-for-newbies\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGit Stash for Newbies\u003c/h3\u003e\u003cp\u003eRead all about \u003ca href=\"https://thetidytrekker.com/post/git-stash-for-newbies/git-stash-for-newbies.html\"\u003eGit Stash, and why and how you might use it\u003c/a\u003e, in a post by Meghan Harris.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases. You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/03/27/news-march-2025/","date_published":"2025-03-27T00:00:00+00:00","date_modified":"2025-04-08T11:17:46+02:00"},{"id":"https://doi.org/10.59350/r0dkq-5jt28","title":"Software Review, Perspectives from an Academic","language":"en","authors":[{"name":"Alex Koiter","url":"https://orcid.org/0000-0002-9355-9561","avatar":"https://github.com/alex-koiter.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["Software Peer Review","packages","R","community","mbquartR"],"content_html":"\u003cblockquote\u003e\u003cp\u003eThere\u0026rsquo;s an R package for this\u0026hellip; right?\u003c/p\u003e\u003c/blockquote\u003e\u003ch2 id=\"how-it-started\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-it-started\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow it started\u003c/h2\u003e\u003cp\u003eMy journey in creating my first R package all started when I received an email from a colleague who was working with archived soil samples that were collected prior to the advent of GPS technology.These samples were georeferenced using the Manitoba Original Survey Legal Descriptions, which originate from the \u003ca href=\"https://en.wikipedia.org/wiki/Dominion_Land_Survey\"\u003eDominion Land Survey system\u003c/a\u003e, introduced in the late 19th century to organize the European settlement and colonization of Western Canada.I was asked by my colleague if there was an R package that could locate these samples so they could be plotted on a map.There wasn\u0026rsquo;t.The data was publicly available so I wrote a short script that searched the data set for the legal land description and returned the coordinates.This morphed into a series of functions, which eventually turned into a package!And thanks to the encouragement of the rOpenSci community assistant, \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e, I submitted my package for peer review.That is how \u003ca href=\"https://github.com/ropensci/mbquartR/\"\u003e\u003ccode\u003embquartR\u003c/code\u003e\u003c/a\u003e was born.\u003c/p\u003e\u003ch2 id=\"a-little-about-me\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-little-about-me\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA little about me\u003c/h2\u003e\u003cp\u003eI have always thought of myself as more of a soil/environmental scientist than an R programmer so I was a bit apprehensive to even create an R package let alone have it peer reviewed.This is was my first R package, and developing it not only tested my R skills, but meant I had to learn so much along the way.I also felt the functionality of my package was pretty minimal given all the excellent and extensive R packages already available.I definitely had a case of the \u003ca href=\"https://en.wikipedia.org/wiki/Impostor_syndrome\"\u003eimpost\u003cstrong\u003eR\u003c/strong\u003e syndrome!\u003c/a\u003e\u003c/p\u003e\u003cp\u003eI have also had lots of experiences with peer review, all of it through academic journals.I have had my work reviewed by others, I have reviewed others\u0026rsquo; work, and as a subject/submission editor for an international journal I have solicited and read many reviews.All of this has been single-blind review, where the authors do not know the identity of the reviewers, but the reviewers know the identity of the authors.The review process is also done in a closed manner, where only the authors, reviewers, and journal staff ever see the process.This is relatively commonplace in my academic world.Overall, I would say that in my experience this type of review process has been fairly respectful and functional (\u003ca href=\"https://dictionary.cambridge.org/dictionary/english/ymmv\"\u003eYMMV\u003c/a\u003e).However, I have definitely seen both reviewer\u0026rsquo;s comments and author\u0026rsquo;s responses be somewhat rude, abrupt, and often lacking any pleasantries.Further, both as an author and a reviewer I have often wished there was an opportunity and a space to have a discussion, ask for clarification and advice, and to say thank you to authors and reviewers for their work.Finally, there is also the dreaded \u0026ldquo;desk rejection\u0026rdquo;, where the manuscript never makes it out for peer review because the journal deems the work to be out of scope, lacking scientific rigor, poor fit, and/or lacking novelty.Never mind the hours spent formatting to meet author guidelines only to get rejected immediately.\u003c/p\u003e\u003ch2 id=\"my-ropensci-software-peer-review-experience\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#my-ropensci-software-peer-review-experience\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMy rOpenSci software peer review experience\u003c/h2\u003e\u003cp\u003eRight from the start, I really appreciated the ability to do a \u003ca href=\"https://github.com/ropensci/software-review/issues/649\"\u003ePre-Submission Enquiry\u003c/a\u003e.No more hours of formatting only to get the dreaded desk rejection! or, in this case, meeting the submission requirements for package functionality and documentation.This process was very straightforward, create a new \u003ca href=\"https://github.com/ropensci/software-review/issues\"\u003eissue\u003c/a\u003e and fill out the pre-submission template.I got an enthusiastic response within less than 2 weeks letting me know that \u003ccode\u003embquartR\u003c/code\u003e was a good fit.Time to get to work!Once I felt that I had met all the guidelines as outlined in the \u003ca href=\"https://devguide.ropensci.org/\"\u003erOpenSci Dev Guide\u003c/a\u003e I was ready to submit.The straightforward instructions made the submission process a breeze.I opened a new \u003ca href=\"https://github.com/ropensci/software-review/issues/658\"\u003eissue\u003c/a\u003e and filled in the template.\u003c/p\u003e\u003cp\u003eThe assigned editor and the two volunteer reviewers were fantastic!Despite the package returning errors at multiple steps along the review process I was never made to feel bad for submitting something that wasn\u0026rsquo;t perfect.At every step and interaction I felt like the reviewers were trying to help me make the package better, not simply telling me to do better.The reviewers had great suggestions on how to improve the package user experience.The package now has more informative warnings and errors, and additional functionality was added to the mapping function.I also really appreciated the reviewers attention to package as a whole, not only did they review the functionality of the package, they also paid attention to all the documentation.From the README, to articles, to functions, it all got reviewed.\u003c/p\u003e\u003cp\u003eThe openness and discussion thread nature of the review process made it possible for me to ask questions and get clarification on revision requests, suggestions, and the review process itself.This was a pretty big departure from my past experiences with the review process and one I would \u003cstrong\u003elove\u003c/strong\u003e to see more in the academic journal review process that I often find myself in.Scientific writing, like all forms of communication, will be interpreted differently by different people and this is where having the ability to have a discussion between the authors and the reviewers can be so beneficial.I can still see a benefit even if the process remained blind (anonymous).I suspect this approach would promote a collaborative environment which would result in more robust and reliable science.I also really appreciate that the work and contributions of the reviewers are clearly visible to everyone and they get the credit they deserve.I was also able to thank them both as part of review process and within the package \u003ca href=\"https://docs.ropensci.org/mbquartR/authors.html\"\u003eDESCRIPTION\u003c/a\u003e.I have written journal articles that have been substantially improved based on reviewer suggestions and ideas and in many cases there is not a great way to acknowledge this contribution or for the reviewer to get credit.I feel the \u0026ldquo;Authors would like to thank the two anonymous reviewers for their help in improving this paper\u0026rdquo; statement doesn\u0026rsquo;t give them proper recognition or show my gratitude.\u003c/p\u003e\u003ch2 id=\"summary\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#summary\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSummary\u003c/h2\u003e\u003cp\u003eSubmitting my R package for peer review with rOpenSci was a completely different experience from the traditional academic reviews I am used to.The process was open, collaborative, and constructive.Instead of the closed, single-blind system I was used to, where reviewers are often anonymous and interactions limited, the rOpenSci review felt more like a conversation.I could ask questions and get thoughtful and respectful feedback aimed at making the package better.The reviewers focused on everything from package functionality to documentation and overall user experience.The reviewers helped me improve the package and, importantly, they received clear recognition and my thanks for their contributions.It made me realize how valuable open dialogue and credit-sharing can be in peer review, something I would love to see more of in academic publishing.\u003c/p\u003e\u003cp\u003eA \u003cstrong\u003ehuge\u003c/strong\u003e thank you to editor \u003ca href=\"/author/jeff-hollister/\"\u003eJeff Hollister\u003c/a\u003e, as well as to \u003ca href=\"https://github.com/sheilasaia\"\u003eSheila Saia\u003c/a\u003e and \u003ca href=\"https://emilyhmarkowitz.github.io/emilyhmarkowitz/\"\u003eEmily (Em) Markowitz\u003c/a\u003e for their thoughtful reviews and support in making my package shine!They not only helped improve the package but also made the entire review experience an enjoyable one.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/03/25/r-package-review/","date_published":"2025-03-25T00:00:00+00:00","date_modified":"2025-03-25T09:01:51-05:00"},{"id":"https://doi.org/10.59350/xke0n-r6681","title":"rOpenSci Participation at NumFOCUS’ DISC Unconf","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","champions"],"content_html":"\u003cp\u003e\u003ca href=\"https://numfocus.github.io/disc-unconference-2025/\"\u003eThe NumFOCUS Diversity \u0026amp; Inclusion in Scientific Computing (“DISC”) Unconf\u003c/a\u003e took place as a hybrid event in São Paulo, Brazil, from March 14 to 16, 2025.Our community manager, \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e, and rOpenSci Champions, \u003ca href=\"/author/andrea-gomez-vargas/\"\u003eAndrea Gomez Vargas\u003c/a\u003e and \u003ca href=\"/author/liz-hare/\"\u003eLiz Hare\u003c/a\u003e, participated.In this short post we report on our experience at and around the unconference.\u003c/p\u003e\u003cp\u003ePrior to the meeting in São Paulo, participants met online to get to know each other and present their ideas for projects.Ten projects were selected and then developed during the weekend.\u003c/p\u003e\u003cp\u003eDuring the event, rOpenSci members collaborated with other participants to exchange experiences, brainstorm solutions, and design practical resources that could be shared with the broader community.They worked on projects related to \u003ca href=\"https://numfocus.github.io/disc-unconference-2025-projects/en/creating_an_open_mentorship_initiative.html\"\u003eopen mentoring programs\u003c/a\u003e, leadership skill training, and \u003ca href=\"https://numfocus.github.io/disc-unconference-2025-projects/en/navigating-funding-landscape.html\"\u003einternational research funding\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe also had the chance to hear about other projects that interest the rOpenSci community, like open science training for researchers in the Global South and \u003ca href=\"/multilingual-publishing/\"\u003emultilingual\u003c/a\u003e solutions for open science.\u003c/p\u003e\u003cp\u003eThis unconference provided a valuable space to discuss pressing issues related to open research, education, software, and science.It was inspiring to work alongside peers who are committed to building more inclusive and accessible systems.\u003c/p\u003e\u003cp\u003eThis event also presented the opportunity to meet in person with other members of the rOpenSci community in São Paulo. Several members got together and discussed our \u003ca href=\"/multilingual-publishing/\"\u003etranslations\u003c/a\u003e efforts, updates on \u003ca href=\"/champions\"\u003eChampions\u003c/a\u003e\u0026rsquo; work after the program, and our \u003ca href=\"/blog/2025/03/10/champeons-latin-america/\"\u003enew Champion Program cohort\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIn the picture below we can see \u003ca href=\"/author/francesca-belem-lopes-palmeira/\"\u003eFrancesca Palmeira\u003c/a\u003e (rOpenSci Champion), \u003ca href=\"/author/andrea-gomez-vargas/\"\u003eAndrea Gomez Vargas\u003c/a\u003e (rOpenSci Champions), \u003ca href=\"/author/beatriz-milz/\"\u003eBeatriz Milz\u003c/a\u003e (rOpenSci Editor and Champions Mentor), \u003ca href=\"/author/hayd%C3%A9e-svab/\"\u003eHaydée Svab\u003c/a\u003e (rOpenSci Champion) and Yanina Bellini Saibene (rOpenSci Community Manager).\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2025/03/24/numfocus-unconf/rOpenSciBrazil.jpeg\"\t\t\talt=\"Francesca, Andrea, Beatriz, Heydee and Yani stand up and smiling for the picture\"\u003e\u003c/figure\u003e","url":"https://ropensci.org/blog/2025/03/24/numfocus-unconf/","date_published":"2025-03-24T00:00:00+00:00","date_modified":"2025-04-08T11:17:46+02:00"},{"id":"https://doi.org/10.59350/s04cn-nya15","title":"rOpenSci Code of Conduct Annual Review","language":"en","authors":[{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Natalia Morandeira","url":"https://ropensci.org/author/natalia-morandeira/","avatar":"https://github.com/nmorandeira.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["code of conduct","governance","community"],"content_html":"\u003cp\u003erOpenSci’s activities and spaces are supported by a \u003ca href=\"/code-of-conduct/\"\u003eCode of Conduct\u003c/a\u003ethat applies to all people participating in the rOpenSci community,including rOpenSci staff and leadership.It applies to all modes of interaction including GitHub project repositories,the rOpenSci discussion forum, Slack, Community Calls, Co-working and social sessions,and in person at rOpenSci-hosted events, including affiliated social gatherings.Our Code of Conduct is developed and enforced by a committee including rOpenSci staff and an independent community member.\u003c/p\u003e\u003cp\u003eHere we report our annual review of rOpenSci\u0026rsquo;s Code of Conduct,reporting process, and internal guidelines for handling reports and enforcement.\u003c/p\u003e\u003ch2 id=\"updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdates\u003c/h2\u003e\u003col\u003e\u003cli\u003e\u003cp\u003eNo changes of Committee members for 2025.The committee members are \u003ca href=\"/author/natalia-morandeira/\"\u003eNatalia Morandeira\u003c/a\u003e (independent member),\u003ca href=\"/author/mark-padgham\"\u003eMark Padgham\u003c/a\u003e (rOpenSci Software Research Scientist) and\u003ca href=\"/author/yanina-bellini-saibene\"\u003eYanina Bellini Saibene\u003c/a\u003e (rOpenSci Community Manager).We are responsible for receiving, investigating, adjudicating, enforcing,and responding to all reports of potential violations of our Code.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eNo changes have been made to the text of the Code in English or Spanish.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe text of the Code of Conduct has been translated into Portuguese, thanks to \u003ca href=\"/author/beatriz-milz/\"\u003eBeatriz Milz\u003c/a\u003e and \u003ca href=\"/author/francesca-belem-lopes-palmeira/\"\u003eFrancesca Palmeira\u003c/a\u003e.The Portuguese version is available at \u003ca href=\"/pt/c%C3%B3digo-de-conduta/\"\u003ehttps://ropensci.org/pt/código-de-conduta/\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eBecause the text has remained unchanged, the version number is kept at 2.5, dated January 30, 2024.\u003c/p\u003e\u003ch2 id=\"committee-members-activities\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#committee-members-activities\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommittee Members Activities\u003c/h2\u003e\u003cp\u003eWe reflected on how we handle incidents, make decisions, take necessary actions, and communicate both with reporters and/or reported persons. As a result of this reflection, we have been working on a \u003ca href=\"/blog/2025/03/20/coc-incident-template/\"\u003etemplate to guide the CoC steps during an incident report\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eYanina Bellini Saibene attended the Book Club organized by R-Ladies+ Global toread and discuss the book \u003ca href=\"https://files.frameshiftconsulting.com/books/cocguide.pdf\"\u003e\u0026ldquo;How to Respond to Code of Conduct Reports\u0026rdquo;\u003c/a\u003e. It was a good opportunity to discuss with and learn fromother CoC member of other organizations including \u003ca href=\"https://rladies.org\"\u003eR-Ladies\u003c/a\u003e, \u003ca href=\"https://www.bioconductor.org\"\u003eBioconductor\u003c/a\u003e and \u003ca href=\"https://forwards.github.io\"\u003eForwards\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe welcome your feedback by \u003ca href=\"mailto:conduct@ropensci.org\"\u003eemail\u003c/a\u003e to conduct at ropensci.org,and we thank you for continuing to work with us to ensure that rOpenSci remains a safe,enjoyable, friendly and enriching environment for everyone who participates.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/03/21/conduct2024/","date_published":"2025-03-21T00:00:00+00:00","date_modified":"2025-03-21T09:13:15-03:00"},{"id":"https://doi.org/10.59350/48jjf-qqm52","title":"Template To Handle Code of Conduct Incidents Reports","language":"en","authors":[{"name":"Natalia Morandeira","url":"https://ropensci.org/author/natalia-morandeira/","avatar":"https://github.com/nmorandeira.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["code of conduct","community","governance"],"content_html":"\u003cp\u003eHandling reported incidents related to a Code of Conduct (CoC) is a complex and delicate task. Managing reports timely and with care is crucial for maintaining a healthy and inclusive community.\u003c/p\u003e\u003cp\u003eTo assist with this process we’ve developed a template, based on the work of the \u003ca href=\"https://rconf.gitlab.io/userknowledgebase/main/code-of-conduct-response-team-documents.html\"\u003euseR! 2021 CoC Team\u003c/a\u003e, designed specifically for analyzing \u003ca href=\"/code-of-conduct/\"\u003erOpenSci\u0026rsquo;s CoC\u003c/a\u003e incident reports. This template aims to provide a structured approach for assessing and addressing reports, ensuring that each report is reviewed with consistency.\u003c/p\u003e\u003cp\u003eIn this post, we walk through the key components of the template and how it can support teams in managing CoC incidents effectively.It must be noted that using this template to review a report is a private, confidential, and internal action of the CoC team. The information is not shared with other rOpenSci members nor is it published. Annual transparency reports shared with the community only include \u003cstrong\u003eanonymized\u003c/strong\u003e descriptions of reported incidents and actions taken.\u003c/p\u003e\u003ch2 id=\"the-template\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-template\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe Template\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eReport ID\u003c/strong\u003e: A code to identify each report uniquely.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eDate and time of the report\u003c/strong\u003e: When the report was submitted. This is used to track our response times to ensure we comply with the process. For example, our policy is to send an acknowledgment email within 24 hours of receiving a report.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eMedium used to report\u003c/strong\u003e: How the report was submitted. For example, form, direct message, email, phone, personal conversation.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eFirst deadline\u003c/strong\u003e: When the a public acknowledgment needs to be made by.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eSecond deadline clock\u003c/strong\u003e: When a decision needs to be made by.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eReporter(s)\u0026rsquo;s contact information\u003c/strong\u003e: How to best contact the reporter. This ensures quick communication during the process.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eIncident report checklist\u003c/strong\u003e: The checklist of steps the CoC Team has to take to resolve the incident. For example:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eStep 1: Email \u003ca href=\"mailto:conduct@ropensci.org\"\u003econduct@ropensci.org\u003c/a\u003e to mark dates and timeline for planned response.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eStep 2: Open new document with Committee-only permissions and link to reported information.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eStep 3: Email person reporting to acknowledge receipt and cc \u003ca href=\"mailto:conduct@ropensci.org\"\u003econduct@ropensci.org\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eStep n: \u0026hellip;\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eReported person(s)\u003c/strong\u003e: Who is being reported for inappropriate behavior.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eTarget(s)\u003c/strong\u003e: Who was the target of the inappropriate behavior.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eWitnesses\u003c/strong\u003e: Any witnesses of the inappropriate behaviour.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eCoC first responder\u003c/strong\u003e: CoC team member who received the report and triggered the process to handle it.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eConflicts of interest\u003c/strong\u003e: Any conflicts of interest on the CoC team. In the case of any conflicts of interest, the recused member will be excluded from the process. The remaining CoC members may ask for the assistance of an another independent person (preferring people with experience in CoC teams of other communities).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eCoC sub-team\u003c/strong\u003e:  The sub-team that is handling the report, which may be smaller than the CoC team.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eIncident - brief description\u003c/strong\u003e: A description of the reported incident.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eIncident - evidence\u003c/strong\u003e: Evidence of inappropriate behaviour. For example, emails or screenshots of direct or public messages on different platforms like GitHub, Slack, Discourse.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eType of unacceptable behavior:\u003c/strong\u003e Selected from a (non-exhaustive) checklist of inappropriate behaviors identified in the CoC.  \u003cem\u003eWhen selecting, remember that we prioritize marginalized people’s safety over privileged people’s comfort. We will not act on complaints regarding: ‘reverse’ -isms, including ‘reverse racism,’ ‘reverse sexism,’ and ‘cisphobia’; reasonable communication of boundaries, such as “leave me alone,” “go away,” or “I’m not discussing this with you”; communicating in a ’tone’ you don’t find congenial;  criticizing racist, sexist, cissexist, or otherwise oppressive behavior or assumptions\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eoffensive comments related to gender, gender identity and expression, age, sexual orientation, disability, physical appearance, body size, race, ethnicity, religion (or lack thereof), nationality, native language, or technology choices.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eunwelcome comments regarding a person’s lifestyle choices and practices, including those related to food, health, parenting, drugs, or employment.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003esustained or willful disruption of discussions, talks, or other events, including online discussion.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003edeliberate intimidation.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003econtinued one-on-one communication after requests to cease.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eunwanted photography or recording, including logging online activity for harassment purposes.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003epattern of inappropriate social contact, such as requesting/assuming inappropriate levels of intimacy with others.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003einappropriate physical contact without consent or after a request to stop. In virtual settings, inappropriate simulated physical contact used without consent, such as textual descriptions like “hug” or “backrub” or emojis representing such contacts.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003estalking or following, including in virtual settings behavior such as persistent unwanted direct messages, sending unwanted pictures or malware links, or logging online activity for harassment purposes.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003ethreats of violence or incitement of violence towards any individual, including encouraging a person to commit suicide or to engage in self-harm.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003euse of sexual or discriminatory imagery, comments, or jokes.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eunwelcome sexual attention, which can include inappropriate questions of a sexual nature, asking for sexual favors, or repeatedly asking for dates or contact information.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003edeliberate ‘outing’ of any aspect of a person’s identity without their consent except as necessary to protect vulnerable people from intentional abuse\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003edeliberate misgendering or use of ‘dead’ or rejected names\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003enon-consensual publication of non-harassing private communication, including screenshots of private discussion channels or direct messages.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eResponse:\u003c/strong\u003e A description of the incident, the decision made by the CoC committee, and the rational for that decision.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eActions\u003c/strong\u003e: Description/checklist of the actions to be taken by the CoC team and other community teams to implement the response.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eInform the reporter\u003c/strong\u003e: The date, time and text for the communication of the response to the reporter.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eInform the reported person\u003c/strong\u003e: The date, time and text for the communication of the response to the reported person (if necessary). Note that the decision may involve taking no action, so communication with the reported person is not mandatory.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003ePublic Statement:\u003c/strong\u003e An anonymized description of the reported incident for the annual CoC transparency report.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eFuture actions to avoid this type of incident\u003c/strong\u003e: Description/checklist of actions which can be taken to help avoid future incidents.This is part of the reflection process that helps to improve our CoC and our community. For example, we may clarify our CoC, or update text in our online resources.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003ca href=\"https://docs.google.com/document/d/1_CIFwszBLbfKcewf11Fl76UP6IcSpHBC98XhK8V4LvM/\"\u003eThis template serves as a guide for the CoC Team in handling incident reports and you can access it also on this google document format\u003c/a\u003e. Through testing in both simulated scenarios and real cases, we have found that it aids decision-making and helps reduce bias in our responses—especially in complex situations. Additionally, this template:\u003c/p\u003e\u003cul\u003e\u003cli\u003estandardizes the creation of anonymized descriptions for our annual rOpenSci CoC transparency report;\u003c/li\u003e\u003cli\u003eis open to revision after each use, allowing for continuous improvement by the team;\u003c/li\u003e\u003cli\u003eand its use facilitates knowledge transfer to future CoC Team members.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe share this template not only for transparency but also in the hope that it may benefit other organizations. We welcome any suggestions based on your experience with CoC committees!\u003c/p\u003e","url":"https://ropensci.org/blog/2025/03/20/coc-incident-template/","date_published":"2025-03-20T00:00:00+00:00","date_modified":"2025-03-20T09:00:08-03:00"},{"id":"https://doi.org/10.59350/chtnj-rec16","title":"rOpenSci Champions Program 2025: In Spanish!","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["comunity","champions program","multilingual"],"content_html":"\u003cp\u003eWe have great news: The call for applications to be part of the new cohort of our 2025 Program is now open! And for the first time it will be in Spanish!\u003c/p\u003e\u003cp\u003eOur program seeks to identify, recognize and reward people who are leaders in an open science community, research software engineering and the R programming community.\u003c/p\u003e\u003cp\u003eThis year\u0026rsquo;s program is focused on people from Latin America and for the first time will be conducted entirely in Spanish.  The main goal is to foster sustainable research software as a pillar of Open Science in Latin America through capacity and community building.\u003c/p\u003e\u003cp\u003eThis program is an amazing platform for developing your open source project with the support of experts, interacting, sharing, and strengthening a network with other people also developing open and reproducible science in your part of the world.\u003c/p\u003e\u003ch2 id=\"who-can-participate\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#who-can-participate\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWho can participate?\u003c/h2\u003e\u003cp\u003eWe are looking for people who work in STEAM, who are from Latin America, who have a good oral and written command of the Spanish language and who already have knowledge and experience developing with R.\u003c/p\u003e\u003cp\u003eFor those who want to be mentors, we are looking for people who have previous experience developing, maintaining, or contributing to R packages (at rOpenSci is even better), or have participated in the rOpenSci review process or another peer code review project. It is also important that they are willing to guide and teach other people and work collaboratively.\u003c/p\u003e\u003cp\u003eYou can see more details about the requirements to participate in each role on \u003ca href=\"https://ropenscilabs.github.io/ChampionsProgram/\"\u003eour specific program website (in Spanish)\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"why-be-a-champion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-be-a-champion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy be a Champion?\u003c/h2\u003e\u003cp\u003eOver the course of 12 months, Champions receive training, individual mentoring in the development of an open source project, an annual stipend, and the opportunity to participate in various community building and strengthening activities.\u003c/p\u003e\u003cp\u003eDuring this program, Champions will develop a project, such as the creation of a new R package or participating in the rOpenSci peer review process. This offers opportunities to learn best practices for developing and sharing research software and an invitation to become part of an international community.\u003c/p\u003e\u003cp\u003eAt the end of the program, participants can choose how they want to give back to their own communities and institutions. That could be through outreach, mentoring, or promoting open science and open source research practices.\u003c/p\u003e\u003cp\u003eWhen they finish, Champions are fully integrated into the rOpenSci community, which provides them with ongoing support and growth opportunities.\u003c/p\u003e\u003ch2 id=\"why-be-a-mentor\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-be-a-mentor\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy be a mentor?\u003c/h2\u003e\u003cp\u003eMentors play a key role in the rOpenSci program, helping to select, mentor, and inspire those who participate as Champions.Mentors will connect their Champions with people, programs, and organizations; will recommend resources, readings, training, and experiences; and will provide feedback on the project they develop.\u003c/p\u003e\u003cp\u003eMentors will receive mentoring training, and have opportunities to gain experience and skills to perform their tasks. They will receive an annual stipend, be recognized on the rOpenSci website and social media channels, and make new connections through the networks of others who participate.\u003c/p\u003e\u003cp\u003eBy mentoring our selected Champions and helping to shape this program, mentors will also be giving back to the rOpenSci community in a great and meaningful way 🙏🏼 .\u003c/p\u003e\u003ch2 id=\"how-to-apply\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-apply\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to apply?\u003c/h2\u003e\u003cp\u003eThe application form must be completed \u003cstrong\u003ein Spanish by Wednesday, April 30, 2025\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eIf you would like to know more about the information needed to complete the form \u003ca href=\"https://ropenscilabs.github.io/ChampionsProgram/\"\u003eyou can see it on the program\u0026rsquo;s website\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://airtable.com/appF6OXmxkk8VmR8a/shrZnWDRKxXUEmLRM\"\u003eFill out the Mentors application form\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://airtable.com/appF6OXmxkk8VmR8a/shrlvgcNz1R4CoaQN\"\u003eFill out the Champions application form\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIf you have any questions you can participate in the \u003ca href=\"/es/commcalls/champions-latino-2025/\"\u003e\u003cem\u003eCommunity Call\u003c/em\u003e to be held on March 12, 2025\u003c/a\u003e where mentors and Champions from previous cohorts will participate and share their experiences in the program.\u003c/p\u003e\u003cp\u003eIn addition, we will have an \u003ca href=\"/events/clinica-champions-2025-04/\"\u003eapplication clinic\u003c/a\u003e on \u003cstrong\u003eTuesday, April 15, 2025\u003c/strong\u003e. At this clinic, the program coordinator will be available to answer questions and help applicants complete the application form.\u003c/p\u003e\u003cp\u003eAnd if you still have any questions or concerns, \u003ca href=\"mailto:info@ropensci.org\"\u003eyou can email us at info@ropensci.org\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe look forward to receiving your application!\u003c/p\u003e","url":"https://ropensci.org/blog/2025/03/10/champeons-latin-america/","date_published":"2025-03-10T00:00:00+00:00","date_modified":"2025-03-24T15:35:08+01:00"},{"id":"https://doi.org/10.59350/p2pxy-jma94","title":"Better documentation for R-universe!","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["author"]}],"tags":["r-universe","documentation"],"content_html":"\u003cp\u003eSince the initial launch in 2021, our \u003ca href=\"https://r-universe.dev\"\u003eR-universe\u003c/a\u003e platform has steadily grown into a comprehensive infrastructure for publishing and discovering R material.As functionality keeps evolving and community adoption increases, we felt the need for a central documentation point.\u003c/p\u003e\u003cp\u003eNew features and developments are generally discussed in the \u003ca href=\"https://github.com/r-universe-org/help/issues\"\u003eissue tracker\u003c/a\u003e or \u003ca href=\"https://github.com/r-universe-org/help/discussions\"\u003ediscussion board\u003c/a\u003e, and sometimes on the \u003ca href=\"/technotes/\"\u003erOpenSci blog\u003c/a\u003e.Technical details can be found in the README files and source code of the respective repositories under \u003ca href=\"https://github.com/r-universe-org/\"\u003er-universe-org\u003c/a\u003e that contain all the workflows, actions, and server code (the R-universe system is entirely open source).This fragmentation can make it difficult to find up-to-date information, especially for new users.\u003c/p\u003e\u003cp\u003eThanks to funding by \u003ca href=\"/blog/2024/04/12/gsod-announcement/\"\u003eGoogle Season of Docs\u003c/a\u003e, we were able to start a new comprehensive documentation project for all users and developers of R-universe.We established a central place where we collect the various sources of information and describe examples and use cases, using popular authoring tools to support collective maintenance.\u003c/p\u003e\u003ch2 id=\"new-r-universe-docs\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-r-universe-docs\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew r-universe docs\u003c/h2\u003e\u003cp\u003eThe new R-universe documentation website is now live at \u003ca href=\"https://docs.r-universe.org\"\u003ehttps://docs.r-universe.org\u003c/a\u003e.You can find the source code on \u003ca href=\"https://github.com/r-universe-org/docs\"\u003eGitHub\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe created it as a \u003ca href=\"https://quarto.org/docs/books/\"\u003eQuarto book\u003c/a\u003e as this is a common format that many members of the R community are used to reading (for instance in \u003ca href=\"https://r-pkgs.org/\"\u003eR Packages\u003c/a\u003e, \u003ca href=\"https://r4ds.hadley.nz/\"\u003eR for Data Science\u003c/a\u003e, \u003ca href=\"https://devguide.ropensci.org/\"\u003eour development guide\u003c/a\u003e\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e) and can contribute to.\u003c/p\u003e\u003cp\u003eThe documentation is currently organized into four main sections:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eBrowse\u003c/strong\u003e that documents the user experience navigating packages and universes.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eInstall\u003c/strong\u003e that explains how to install packages from R-universe, how to ensure reproducibility, and how to create a dependency on a package published on R-universe.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003ePublish\u003c/strong\u003e that focuses on the package developer experience: why and how to publish packages.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eInfrastructure\u003c/strong\u003e, documenting governance, funding, and how R-universe works under the hood for those who want to contribute. (A work in progress!)\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIn addition the website has search functionality, and features links to the GitHub repository where you can contribute to the documentation.\u003c/p\u003e\u003cp\u003e\u003cimg src=\"/blog/2025/02/28/r-universe-docs-launch/docs.png\" alt=\"screenshot of r-universe documentation website\"\u003e\u003c/p\u003e\u003cp\u003eWe are thankful to the documentation reviewers \u003ca href=\"/author/llu%C3%ADs-revilla-sancho/\"\u003eLluís Revilla\u003c/a\u003e and \u003ca href=\"/author/yaoxiang-li/\"\u003eYaoxiang Li\u003c/a\u003e who provided insightful feedback that helped us improve the initial version of the website.\u003c/p\u003e\u003ch2 id=\"interactive-website-tour\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#interactive-website-tour\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eInteractive website tour\u003c/h2\u003e\u003cp\u003eBesides a new docs site, we also added some \u003cem\u003eembedded\u003c/em\u003e documentation into the website: each package page has a \u003ca href=\"https://docs.r-universe.dev/browse/packages.html#website-tour\"\u003e\u0026ldquo;Website tour\u0026rdquo; button\u003c/a\u003e in the navbar, that guides you through all the information displayed on the page.Go give it a try!\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://ropensci.r-universe.dev/textreuse\"\u003e\u003cimg src=\"/blog/2025/02/28/r-universe-docs-launch/textreuse.png\" alt=\"screenshot of r-universe dashboard\"\u003e\u003c/a\u003e\u003c/p\u003e\u003ch2 id=\"a-streamlined-docs-experience\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-streamlined-docs-experience\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA streamlined docs experience\u003c/h2\u003e\u003cp\u003eWhile working on the documentation we also updated other information sources:\u003c/p\u003e\u003cp\u003eWe simplified the \u003ca href=\"/r-universe\"\u003eR-universe project page on the rOpenSci website\u003c/a\u003e the be easier to maintain. It now contains a big-picture description of the project, as well as links to relevant resources including the documentation website, technical notes, recent talk recordings.That web page is also available in \u003ca href=\"/es/r-universe/\"\u003eSpanish\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe README on the \u003ca href=\"https://github.com/r-universe-org/\"\u003eorganization profile on GitHub\u003c/a\u003e was updated to list relevant websites and online spaces such as the docs, obviously, but also the discussion board and general issue tracker.The former \u003ca href=\"https://github.com/r-universe-org/help\"\u003eFAQ list\u003c/a\u003e was retired and replaced with links to relevant docs chapters, and references on where to get help and participate to the project.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eThe new docs project will become the central place where we maintain up-to-date information for users and developers of R-universe.The initial version of the site has the most important bits, but is far from complete.Just like R-universe itself, the documentation is a living project that has to grow iteratively based on your needs and contributions.\u003c/p\u003e\u003cp\u003eIf you have used R-universe in one way or another, and have ideas on how documentation could be improved, we welcome your \u003ca href=\"https://docs.r-universe.dev/#contributing-to-this-guide\"\u003econtributions\u003c/a\u003e.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eOur dev guide is a special Quarto book, as it has multilingual support thanks to our R package \u003ca href=\"https://docs.ropensci.org/babelquarto\"\u003ebabelquarto\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eThe tour is not available on mobile.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2025/02/28/r-universe-docs-launch/","date_published":"2025-02-28T00:00:00+00:00","date_modified":"2025-02-28T08:14:21+01:00"},{"id":"https://doi.org/10.59350/kjhev-zgn32","title":"rOpenSci News Digest, February 2025","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2025/02/27/news-february-2025\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"open-science-and-open-source-only-with-diversity-equity-inclusion-and-accessibility\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#open-science-and-open-source-only-with-diversity-equity-inclusion-and-accessibility\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOpen Science and Open Source only with Diversity, Equity, Inclusion, and Accessibility\u003c/h3\u003e\u003cp\u003eIncluding all of humanity is and always will be at the heart of open science.Read more about our mission in our \u003ca href=\"/blog/2025/02/05/no-science-without-deia/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"mark-padgham-is-now-software-review-lead\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mark-padgham-is-now-software-review-lead\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMark Padgham is now Software Review Lead\u003c/h3\u003e\u003cp\u003e\u003ca href=\"/author/mark-padgham\"\u003eMark Padgham\u003c/a\u003e is now lead for software peer review. Noam Ross, the former lead, became Executive Director \u003ca href=\"/blog/2024/03/29/hello-from-our-new-executive-director/\"\u003elast year\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-ropensci-championaes-program-cohort\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-ropensci-championaes-program-cohort\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew rOpenSci Champion(a|e)s Program cohort\u003c/h3\u003e\u003cp\u003eWe have great news!  We will have a new cohort of our \u003ca href=\"/champions/\"\u003eChampion(a|e) Program\u003c/a\u003e during 2025!\u003c/p\u003e\u003cp\u003eOur program seeks to identify, recognize, and reward individuals who are leaders in an open science community, research software engineering, and the R programming community.\u003c/p\u003e\u003cp\u003eThis year\u0026rsquo;s program, thanks to \u003ca href=\"/blog/2024/10/10/czi-latam-grant/\"\u003efunding by CZI\u003c/a\u003e, is focused on people from Latin America and will be conducted entirely in Spanish.\u003c/p\u003e\u003cp\u003eThis program is an incredible platform for developing your open-source project with expert support, interacting, sharing, and strengthening a network with other people determined to develop open and reproducible science in your part of the world.Stay tuned for our announcement of the opening call to apply as a champion or mentor and join a global community of people using and developing scientific and open-source software.\u003c/p\u003e\u003ch3 id=\"this-is-tech-talks-episode-with-yanina-bellini-saibene\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#this-is-tech-talks-episode-with-yanina-bellini-saibene\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u0026ldquo;This is Tech Talks\u0026rdquo; episode with Yanina Bellini Saibene\u003c/h3\u003e\u003cp\u003eYanina Bellini Saibene was interviewed by Santosh Yadav about her role as rOpenSci community manager.Watch the \u003ca href=\"https://www.youtube.com/watch?v=6PsbCPtxWXk\"\u003erecording\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"from-novice-to-contributor-on-the-r-weekly-highlights-podcast\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#from-novice-to-contributor-on-the-r-weekly-highlights-podcast\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u0026ldquo;From Novice to Contributor\u0026rdquo; on the R Weekly Highlights podcast\u003c/h3\u003e\u003cp\u003eOur community call \u003ca href=\"/commcalls/first-time-contributor/\"\u003e\u0026ldquo;From Novice to Contributor: Making and Supporting First-Time Contributions to FOSS\u0026rdquo;\u003c/a\u003e with Yi-Chin Sunny Tseng, Pascal Burkhard, Yaoxiang Li, Hugo Gruson was featured in the \u003ca href=\"https://serve.podhome.fm/episodepage/r-weekly-highlights/193\"\u003eR Weekly Highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas.\u003c/p\u003e\u003ch3 id=\"coworking-mini-hackathons\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking-mini-hackathons\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking Mini-hackathons\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for our second \u003ca href=\"/events/coworking-2025-03/\"\u003eCoworking Mini-Hackatho for First-Time Contributors\u003c/a\u003e.If you’re curious about contributing to Open Source Software, and would like some support to get started, this event is for you!\u003c/p\u003e\u003cp\u003eDuring this session you’ll join others making contributions to R packages while \u003ca href=\"/blog/2024/10/22/first-time-contributions/\"\u003epackage maintainers and other mentors\u003c/a\u003e are available ’live’ to answer questions and give guidance.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2025-03\"\u003eTuesday March 4th 14:00 European Central (13:00 UTC)\u003c/a\u003eAfter this we return to our regular monthly social coworking \u0026amp; office hours held on first Tuesdays! Hosted by Steffi LaZerte and various community hosts. Everyone welcome. No RSVP needed. Consult our \u003ca href=\"/events/\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2025-04\"\u003eTuesday April 1st 9:00 Americas Pacific (16:00 UTC)\u003c/a\u003e, \u0026ldquo;R you joking? Silly R packages for April Fools\u0026rsquo; day\u0026rdquo; with \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore silly R packages\u003c/li\u003e\u003cli\u003eChat with our hosts and other attendees and share your favourite silly R packages!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch3 id=\"new-pkgcheck-checks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-pkgcheck-checks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew pkgcheck checks\u003c/h3\u003e\u003cp\u003eOur \u003ca href=\"https://docs.ropensci.org/pkgcheck/\"\u003epkgcheck\u003c/a\u003e package is used both for our \u003ca href=\"/software-review/\"\u003esoftware review\u003c/a\u003e submission checks, and in \u003ca href=\"https://github.com/ropensci-review-tools/pkgcheck-action\"\u003epkgcheck-action\u003c/a\u003e.It now features two additional checks:\u003c/p\u003e\u003cul\u003e\u003cli\u003eA check that packages do not \u003ca href=\"https://docs.ropensci.org/pkgcheck/articles/list-checks.html#pkgchk_num_imports\"\u003elist excessive numbers of package \u003cem\u003eImports\u003c/em\u003e\u003c/a\u003e.Packages with numbers of imports exceeding the 95% of current CRAN packages (which is currently 21 imported packages) will receive an \u0026#x1f440; note.\u003c/li\u003e\u003cli\u003eA check that repositories do not \u003ca href=\"https://docs.ropensci.org/pkgcheck/articles/list-checks.html#pkgchk_branch_is_master\"\u003ename the default GitHub branch \u0026ldquo;master\u0026rdquo;\u003c/a\u003e, and will fail if so.See \u003ca href=\"https://www.tidyverse.org/blog/2021/10/renaming-default-branch/\"\u003ethis tidyverse blog post\u003c/a\u003e for helpful advice on renaming default branches.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe \u003ca href=\"https://github.com/ropensci-review-tools/pkgcheck-action\"\u003epkgcheck-action\u003c/a\u003e has also been updated to run on Ubuntu 24.04, and to include quarto to enable packages to use \u003ca href=\"https://quarto.org/\"\u003eQuarto\u003c/a\u003e as a vignette engine.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following four packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/commonmetar\"\u003ecommonmetar\u003c/a\u003e, developed by Maëlle Salmon: Uses the commonmeta Go library to generate random DOI strings.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/repometrics\"\u003erepometrics\u003c/a\u003e, developed by Mark Padgham: Metrics for your code repository. Call one function to generate an interactive dashboard displaying the state of your code.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/fireexposuR\"\u003efireexposuR\u003c/a\u003e, developed by Air Forbes: This package computes and visualizes wildfire exposure using the methods documented in a series of scientific publications. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/659\"\u003ereviewed\u003c/a\u003e by Sherry Zhang  and Ronny A. Hernández Mora.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/QuadratiK\"\u003eQuadratiK\u003c/a\u003e, developed by Giovanni Saraceno together with Marianthi Markatou, Raktim Mukhopadhyay, and Mojgan Golzy: It includes test for multivariate normality, test for uniformity on the d-dimensional Sphere, non-parametric two- and k-sample tests, random generation of points from the Poisson kernel-based density and clustering algorithm for spherical data. For more information see Saraceno G., Markatou M., Mukhopadhyay R. and Golzy M. (2024) \u003ca href=\"doi:10.48550/arXiv.2402.02290\"\u003edoi:10.48550/arXiv.2402.02290\u003c/a\u003e Markatou, M. and Saraceno, G. (2024) \u003ca href=\"doi:10.48550/arXiv.2407.16374\"\u003edoi:10.48550/arXiv.2407.16374\u003c/a\u003e, Ding, Y., Markatou, M. and Saraceno, G. (2023) \u003ca href=\"doi:10.5705/ss.202022.0347\"\u003edoi:10.5705/ss.202022.0347\u003c/a\u003e, and Golzy, M. and Markatou, M. (2020) \u003ca href=\"doi:10.1080/10618600.2020.1740713\"\u003edoi:10.1080/10618600.2020.1740713\u003c/a\u003e.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=QuadratiK\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/632\"\u003ereviewed\u003c/a\u003e by Hingee Kassel and Emi Tanaka.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following sixteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/agroclimatico\" title=\"Índices y Estadísticos Climáticos e Hidrológicos\"\u003eagroclimatico\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/agroclimatico/releases/tag/1.1.1\"\u003e\u003ccode\u003e1.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/BaseSet\" title=\"Working with Sets the Tidy Way\"\u003eBaseSet\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/BaseSet/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/biomartr\" title=\"Genomic Data Retrieval\"\u003ebiomartr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/biomartr/releases/tag/v1.0.10\"\u003e\u003ccode\u003ev1.0.10\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/c14bazAAR\" title=\"Download and Prepare C14 Dates from Different Source Databases\"\u003ec14bazAAR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/c14bazAAR/releases/tag/5.1.0\"\u003e\u003ccode\u003e5.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/DataSpaceR\" title=\"Interface to the CAVD DataSpace\"\u003eDataSpaceR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/DataSpaceR/releases/tag/v0.7.7\"\u003e\u003ccode\u003ev0.7.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/getCRUCLdata\" title=\"CRU CL v. 2.0 Climatology Client\"\u003egetCRUCLdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/getCRUCLdata/releases/tag/v1.0.3\"\u003e\u003ccode\u003ev1.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gigs\" title=\"Assess Fetal, Newborn, and Child Growth with International Standards\"\u003egigs\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gigs/releases/tag/v0.5.2\"\u003e\u003ccode\u003ev0.5.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/riem\" title=\"Accesses Weather Data from the Iowa Environment Mesonet\"\u003eriem\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/riem/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rredlist\" title=\"IUCN Red List Client\"\u003erredlist\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rredlist/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spiro\" title=\"Manage Data from Cardiopulmonary Exercise Testing\"\u003espiro\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spiro/releases/tag/v0.2.3\"\u003e\u003ccode\u003ev0.2.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.12.0\"\u003e\u003ccode\u003e0.12.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.10.1\"\u003e\u003ccode\u003e1.10.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/taxize\" title=\"Taxonomic Information from Around the Web\"\u003etaxize\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/taxize/releases/tag/v0.10.0\"\u003e\u003ccode\u003ev0.10.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/weathercan\" title=\"Download Weather Data from Environment and Climate Change Canada\"\u003eweathercan\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weathercan/releases/tag/v0.7.3\"\u003e\u003ccode\u003ev0.7.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/weatherOz\" title=\"An API Client for Australian Weather and Climate Data Resources\"\u003eweatherOz\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weatherOz/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/webmockr\" title=\"Stubbing and Setting Expectations on HTTP Requests\"\u003ewebmockr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/webmockr/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are seventeen recently closed and active submissions and 5 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%226/approved%22\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/663\"\u003erredlist\u003c/a\u003e, IUCN Red List Client. Submitted by \u003ca href=\"http://williamgearty.com\"\u003eWilliam Gearty\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/659\"\u003efireexposuR\u003c/a\u003e, Compute and Visualize Wildfire Exposure. Submitted by \u003ca href=\"https://wildfireanalytics.org/forbes.html\"\u003eAir Forbes\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/632\"\u003eQuadratiK\u003c/a\u003e, A Collection of Methods Using Kernel-Based Quadratic Distances for. Submitted by \u003ca href=\"https://github.com/giovsaraceno\"\u003eGiovanni Saraceno\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%224/review(s)-in-awaiting-changes%22\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/675\"\u003egeotargets\u003c/a\u003e, Targets Extensions for Geospatial Formats. Submitted by \u003ca href=\"https://www.njtierney.com\"\u003eNicholas Tierney\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/674\"\u003emapmetadata\u003c/a\u003e, Map health metadata onto predefined research domains. Submitted by \u003ca href=\"https://github.com/RayStick\"\u003eRachael Stickland\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/658\"\u003embquartR\u003c/a\u003e, Finding Manitoba Quarter Sections. Submitted by \u003ca href=\"http://www.alexkoiter.ca\"\u003eAlex Koiter\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003epangoling\u003c/a\u003e, Access to Large Language Model Predictions. Submitted by \u003ca href=\"https://bnicenboim.github.io/\"\u003eBruno Nicenboim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%223/reviewer(s)-assigned%22\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/676\"\u003ebutterfly\u003c/a\u003e, Verification For Continually Updating Timeseries Data. Submitted by \u003ca href=\"https://thomaszwagerman.co.uk/\"\u003eThomas Zwagerman\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%222/seeking-reviewer(s)%22\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/684\"\u003egtexr\u003c/a\u003e, Query the GTEx Portal API. Submitted by \u003ca href=\"https://github.com/rmgpanw\"\u003eAlasdair Warwick\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.rbind.io\"\u003eØystein Sørensen\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%221/editor-checks%22\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/673\"\u003esasquatch\u003c/a\u003e, Use SAS, R, and quarto Together. Submitted by \u003ca href=\"http://ryanzomorrodi.github.io\"\u003eRyan Zomorrodi\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/667\"\u003eread.abares\u003c/a\u003e, Provides simple downloading, parsing and importing of Australian. Submitted by \u003ca href=\"https://adamhsparks.netlify.app/\"\u003eAdam H. Sparks\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/660\"\u003eforcis\u003c/a\u003e, An R Client to Access the FORCIS Database. Submitted by \u003ca href=\"https://nicolascasajus.fr\"\u003eNicolas Casajus\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/645\"\u003ecapybara\u003c/a\u003e, Fast and Memory Efficient Fitting of Linear Models With High-Dimensional. Submitted by \u003ca href=\"https://pacha.dev\"\u003eMauricio \u0026ldquo;Pachá\u0026rdquo; Vargas Sepúlveda\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/02/05/no-science-without-deia\"\u003eOpen Science and Open Source only with Diversity, Equity, Inclusion, and Accessibility\u003c/a\u003e by The rOpenSci Team. Including all of humanity is and always will be at the heart of open science. Other languages: \u003ca href='/es/blog/2025/02/05/no-ciencia-sin-deia' lang='es'\u003eCiencia Abierta y Código Abierto sólo con Diversidad, Equidad, Inclusión y Accesibilidad (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/02/20/forks-upstream-relationship\"\u003eThe Dynamic Relationship of Forks with their Upstream Repository\u003c/a\u003e by Hugo Gruson, Stefanie Butland, and Ruby Krasnow.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eOne use case of our packages and resources has been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://discuss.ropensci.org/t/metar-analysis-for-flight-conditions/4174\"\u003eMETAR analysis for flight conditions\u003c/a\u003e. Reported by Maëlle Salmon.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/photosearcher/\"\u003ephotosearcher\u003c/a\u003e, Searches Flickr for photographs and metadata. \u003ca href=\"https://github.com/ropensci/photosearcher/issues/21\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/MODIStsp/\"\u003eMODIStsp\u003c/a\u003e, automatic download and preprocessing of MODIS Land Products Time Series. \u003ca href=\"https://github.com/ropensci/MODIStsp/issues/262\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools/\"\u003ehddtools\u003c/a\u003e, Hydrological Data Discovery Tools. \u003ca href=\"https://github.com/ropensci/hddtools/issues/36\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003cp\u003eThe bib2df package, for parsing BibTeX files into tibbles, would need some help! \u003ca href=\"https://github.com/ropensci/bib2df/issues/65\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"how-to-deal-with-testthat-snapshots-with-variable-output\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-deal-with-testthat-snapshots-with-variable-output\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to deal with testthat snapshots with variable output\u003c/h3\u003e\u003cp\u003e\u003ca href=\"https://testthat.r-lib.org/articles/snapshotting.html\"\u003eSnapshot test\u003c/a\u003e are a great way to ensure messages and complicated output aren\u0026rsquo;t broken.Now, some randomness might lead to snapshot test failure: for instance, if your function\u0026rsquo;s message displays a Git commit hash that changes every time.\u003c/p\u003e\u003cp\u003eHow to handle this?Two possibilities\u0026hellip;\u003c/p\u003e\u003cul\u003e\u003cli\u003eYou can use the \u003ccode\u003etransform\u003c/code\u003e argument of \u003ccode\u003etestthat::expect_snapshot()\u003c/code\u003e, that accepts a function transforming a character input into a character output. For instance, an unit test of \u003ccode\u003eggplot2::ggsave()\u003c/code\u003e creates PNG files in a temporary directory. That temporary directory changes at every run. Therefore, the \u003ca href=\"https://github.com/tidyverse/ggplot2/blob/d835cfe2ffb0ff68c9a4b224ec1fcb4caba83892/tests/testthat/test-ggsave.R#L85\"\u003ecall to \u003ccode\u003eexpect_snapshot()\u003c/code\u003e\u003c/a\u003e is:\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eexpect_snapshot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esuppressMessages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eggsave\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efile1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efile2\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003eplot\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etransform\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"nf\"\u003egsub\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34; \\\\\u0026#39;.*\\\\.png\\\\\u0026#39;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\u0026#39;PATH\u0026#39;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThat handy \u003ccode\u003etransform\u003c/code\u003e argument of \u003ccode\u003eexpect_snapshot()\u003c/code\u003e might get even better over time, as an open issue suggests \u003ca href=\"https://github.com/r-lib/testthat/issues/1822\"\u003eproviding a set of default transformers for snapshot tests\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eAnother solution is to make the random part of your function\u0026rsquo;s messages and output fixed based on an environment variable that you \u003ca href=\"https://withr.r-lib.org/reference/with_envvar.html\"\u003eset in tests\u003c/a\u003e (or using \u003ca href=\"https://blog.r-hub.io/2024/03/21/mocking-new-take/\"\u003emocking\u003c/a\u003e).\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"how-to-load-packages-in-testthat-tests\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-load-packages-in-testthat-tests\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to load packages in testthat tests\u003c/h3\u003e\u003cp\u003eAnother testthat topic, thanks to software review editor \u003ca href=\"https://github.com/MargaretSiple-NOAA\"\u003eMargaret Siple\u003c/a\u003e.How to load packages used in tests?\u003c/p\u003e\u003cul\u003e\u003cli\u003eThere is no need to load the package under development, testthat will do it for you. This includes loading internal functions. This means that the test files of package \u003cem\u003emypackage\u003c/em\u003e should \u003cem\u003enot\u003c/em\u003e start with \u003ccode\u003elibrary(mypackage)\u003c/code\u003e.\u003c/li\u003e\u003cli\u003eThere\u0026rsquo;s rarely a need for using \u003ccode\u003elibrary()\u003c/code\u003e calls in test files or helper files. Indeed, testthat will load your own package, and any package or function imported in your package. Now, for packages listed in for instance \u003ccode\u003eSuggests\u003c/code\u003e and used only in tests, you should use \u003ca href=\"https://r-pkgs.org/testing-design.html#sec-testing-design-tension\"\u003e\u003ccode\u003epkg::function_name()\u003c/code\u003e\u003c/a\u003e. This makes it possible for R to find the function, but also for easier \u003ca href=\"https://r-pkgs.org/testing-design.html#plan-for-test-failure\"\u003edebugging of a failed test\u003c/a\u003e. An example \u003cem\u003eexception\u003c/em\u003e is the \u003ca href=\"https://enpiar.com/httptest2/reference/use_httptest2.html\"\u003eloading of httptest2\u003c/a\u003e in a helper file.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"dont-get-bitten-by-github-protected-branches\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#dont-get-bitten-by-github-protected-branches\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDon\u0026rsquo;t get bitten by GitHub Protected Branches\u003c/h3\u003e\u003cp\u003eGitHub\u0026rsquo;s branch protection rules can prevent pushing directly to protected branches.It is, however, still possible to locally commit to a protected branch, but an attempt to push to GitHub will be rejected.You then have a commit tree that can\u0026rsquo;t be pushed, and that must somehow be reverted.An easy way to prevent this is to use Lorenz Walthert\u0026rsquo;s \u003ca href=\"https://lorenzwalthert.github.io/precommit/\"\u003eprecommit R package\u003c/a\u003e with a local hook like this:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#!/usr/bin/env Rscript\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eidentical \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_branch \u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;main\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"c1\"\u003e# or whatever protected branch is called\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003estop \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;main branch is protected on GitHub; commits must be made via PR from other branch\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eLocal hooks can be called from your \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e file like in \u003ca href=\"https://github.com/ropensci-review-tools/pkgmatch/blob/47e0775e6bdc3f96f146f4fd959affe50c9dd4bf/.pre-commit-config.yaml#L79-L82\"\u003ethis example\u003c/a\u003e, which has the hook defined above in a \u003ccode\u003e.hook/\u003c/code\u003e sub-directory.That precommit hook will then prevent you from local commits to any branch that is protected on GitHub.\u003c/p\u003e\u003ch3 id=\"what-is-laziness-in-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-laziness-in-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is laziness in R\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re confused about the meaning of \u0026ldquo;lazy\u0026rdquo; in R programming, you might benefit from this blog post by Maëlle Salmon, Athanasia Mo Mowinckel and Hannah Frick on the R-hub blog: \u003ca href=\"https://blog.r-hub.io/2025/02/13/lazy-meanings/\"\u003eLazy introduction to laziness in R\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"find-missing-rd-tags-with-checkhelper\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#find-missing-rd-tags-with-checkhelper\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFind missing .Rd tags with {checkhelper}\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://thinkr-open.r-universe.dev/checkhelper\"\u003echeckhelper package\u003c/a\u003e by \u003ca href=\"/author/s%C3%A9bastien-rochette/\"\u003eSébastien Rochette\u003c/a\u003e helps you identify missing documentation pieces before a submission to CRAN: for instance, missing \u003ccode\u003e@return\u003c/code\u003e.There might be false positives, for instance if you document several functions on a single page with the same \u003ccode\u003e@return\u003c/code\u003e (\u003ca href=\"https://github.com/ThinkR-open/checkhelper/issues/84\"\u003eissue\u003c/a\u003e) but it\u0026rsquo;s nonetheless a handy tool when preparing a CRAN submission.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/02/27/news-february-2025/","date_published":"2025-02-27T00:00:00+00:00","date_modified":"2025-02-27T09:40:33+01:00"},{"id":"https://doi.org/10.59350/5n1pv-3sg04","title":"The Dynamic Relationship of Forks with their Upstream Repository","language":"en","authors":[{"name":"Hugo Gruson","url":"https://orcid.org/0000-0002-4094-1476","avatar":"https://ropensci.org/img/community/hugo-gruson.jpg","_role":["author"]},{"name":"Ruby Krasnow","url":"https://orcid.org/0009-0007-0531-8420","avatar":"https://github.com/rmk118.png","_role":["author"]},{"name":"Stefanie Butland","url":"https://orcid.org/0000-0002-5427-8951","avatar":"https://ropensci.org/img/team/stefanie_butland.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["community","meetings","open science","maintenance","open-source","carpentries","coworking"],"content_html":"\u003ch2 id=\"context-setting\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#context-setting\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eContext setting\u003c/h2\u003e\u003cp\u003erOpenSci organizes \u003ca href=\"/coworking/\"\u003emonthly co-working hours\u003c/a\u003e on a variety of topics.But the constant is the quality of the discussion that ensues and the renewed energy that comes from it.\u003c/p\u003e\u003cp\u003eThe November coworking session welcomed Stefanie Butland from \u003ca href=\"https://www.openscapes.org/\"\u003eOpenscapes\u003c/a\u003e as a co-host.She shared Openscapes\u0026rsquo; approach of \u003ca href=\"https://docs.google.com/presentation/d/1aL0TVFM7xxzTCJoE3tEArDE32wh59wkmBCy6Vcmwvy4/\"\u003e\u0026ldquo;Forking as a worldview\u0026rdquo;\u003c/a\u003e.Forks in the open-source software world refer to copies of an existing open-source project that add their own changes on top of the original codebase.Openscapes is extending this classic software development interpretation to an even more open philosophy of encouraging people to take anything that works to new places.Things like the value of sharing, reusing, and remixing of \u003cem\u003ehow we work\u003c/em\u003e, in addition to the work itself.Stefanie invited participants to share their experiences in forking to adapt or build on existing projects, and we came back to some practical challenges of forking.\u003c/p\u003e\u003cp\u003eThis blog post summarizes and develops some of the insights that emerged during the subsequent discussion,where we focused on the specific case of forks of open-source codebases,such as the ones you can find on GitHub.\u003c/p\u003e\u003ch2 id=\"the-different-types-of-forks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-different-types-of-forks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe different types of forks\u003c/h2\u003e\u003cp\u003eWe identified two different types of forks, which take place in different contexts,and will have different relationships with their upstream repository in the long-run:\u003c/p\u003e\u003col\u003e\u003cli\u003e\u003cp\u003eForks can be used as a starting point for a new diverging project, rather than starting from scratch.In this situation, the fork author does not intend to sync with the upstream repository after the initial fork.This type of fork may therefore miss out on new features developed in upstream.This type of fork will often happen when you copy a template for a personal website (an example shared by \u003ca href=\"https://williamgearty.com/\"\u003eWill Gearty\u003c/a\u003e in our discussions),or when you re-use an existing project of yours as a boilerplate to build your new project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eForks can also be used to customize or tweak the original project,in a way that upstream cannot or doesn\u0026rsquo;t have capacity to address.In this type of forks, we usually try to not diverge too much from upstream to benefit from new features,and we regularly sync with them.A major downside is that syncing will often come with gnarly git conflicts.An example of this is \u003ca href=\"https://hugogruson.fr/workbench-beyond-carpentries/\"\u003evarious organizations forking the Carpentries workbench to customize the look and feel of their internal Carpentries-style training materials\u003c/a\u003e.People who work in Linux operating systems, such as Debian, may also recognize this is what happens when open-source projects are packaged by the operating system.The \u003ca href=\"https://www.debian.org/doc/debian-policy/ch-source.html#changes-to-the-upstream-sources\"\u003eDebian package maintainers often tweak some settings or make minor code modifications to improve integration with the rest of the system\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003ch2 id=\"facilitating-cross-pollination-between-forks-and-upstream\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#facilitating-cross-pollination-between-forks-and-upstream\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFacilitating cross-pollination between forks and upstream\u003c/h2\u003e\u003cp\u003eIn this section, we focus on the second type of forks,where the fork author wants to stay in sync with the upstream repository.We mentioned that conflicts were a major downside of this approach.\u003c/p\u003e\u003cp\u003eWhat are the strategies to minimize the conflicts?And why is it in the interest of everyone (not only the fork owners, but also upstream maintainers) to minimize them?\u003c/p\u003e\u003ch3 id=\"simplifying-syncs\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#simplifying-syncs\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSimplifying syncs and reducing git conflicts\u003c/h3\u003e\u003cp\u003eGoing back to the example of organizations forking the Carpentries workbench,Hugo has \u003ca href=\"https://github.com/epiverse-trace/varnish/pull/7\"\u003eforked the workbench\u003c/a\u003e to customize \u003ca href=\"https://epiverse-trace.github.io/tutorials\"\u003eEpiverse-TRACE lessons with their own branding\u003c/a\u003e.Indeed, the Carpentries workbench provides a fully free and open-source learning management system,which has accessibility features and pedagogical best practices built-in.It makes sense for external organizations, beyond the Carpentries themselves, to use the workbench as the infrastructure to build and host their training materials.\u003c/p\u003e\u003cp\u003eHowever, at the time of writing this post, the workbench doesn\u0026rsquo;t allow users to customize the theme and adopt a branding different than the official Carpentries one.The recommended way to do this is to fork the workbench and adjust the HTML templates to your needs.\u003c/p\u003e\u003cp\u003eHowever, the upstream repository regularly receives updates with bug fixes or new features that forks may want to benefit from.This requires the fork to sync with upstream regularly.\u003c/p\u003e\u003cp\u003eFor the Epiverse Carpentries fork, the few first months were painful because of the conflicts that arose when syncing with upstream.But a couple of recent changes in upstream have greatly reduced the probability of conflicts.\u003c/p\u003e\u003cp\u003eIn a nutshell, upstream can make it easier for forks to stay in sync by reducing the number of files that a fork needs to modify,and by isolating these changes in specific locations.\u003c/p\u003e\u003cp\u003eIn practice, this can for example be done by using configuration files and variables.This serves the double purpose of being more \u003ca href=\"https://en.wikipedia.org/wiki/Don%27t_repeat_yourself\"\u003eDRY\u003c/a\u003eand of separating changes a fork may want to implement from the core codebase a fork is unlikely to modify.\u003c/p\u003e\u003cp\u003eAlthough these changes need to take place in the upstream repository,it doesn\u0026rsquo;t necessarily mean that the upstream maintainers are responsible for making these changes.Fork maintainers are both the beneficiaries and the best placed to identify required changes,and should be encouraged to submit pull requests to upstream to make these changes.\u003c/p\u003e\u003cp\u003eIn the example of the Carpentries workbench, \u003ca href=\"https://github.com/carpentries/varnish/pull/151\"\u003eHugo submitted a pull request to implement a Sass variable for defining the font\u003c/a\u003e,removing the need to change it in multiple locations.\u003c/p\u003e\u003cp\u003eOn the fork\u0026rsquo;s side, some other techniques can also make conflict resolution smoother.A major location of conflicts are auto-generated changes or files.In the workbench example, this is the concatenated and minified CSS files.They tend to concentrate conflicts because they regroup changes from multiple files,and they are minified on a single line, which means git cannot distinguish what was changed.\u003c/p\u003e\u003cp\u003eBut you can automate the conflict resolution for these cases.The key is to \u003ca href=\"https://github.com/epiverse-trace/varnish/pull/7/commits/b7633fa9107e11d0a5147488b9c9c1c4855f6ff0\"\u003emake automated changes in a separate commit\u003c/a\u003e.When this commit conflicts, you can re-run the script that generates the file,and commit the result, without having to think about what should be kept or not.\u003c/p\u003e\u003cp\u003eAlternatively, upstream can sometimes stop tracking auto-generated files from git,and instead render them on the fly at build time.\u003c/p\u003e\u003cp\u003eIn the context of R packages, common auto-generated files are \u003ccode\u003e.Rd\u003c/code\u003e documentation files,which are often auto-generated from roxygen2 comments in \u003ccode\u003e.R\u003c/code\u003e files.Isolating these changes \u003ca href=\"https://github.com/ropensci/lightr/commit/4dcb21e72f6df71e2cc46d12244cde8dcc3e2635\"\u003ein a separate commit\u003c/a\u003e can also facilitate conflict resolution.\u003c/p\u003e\u003ch3 id=\"integrating-the-fork-changes-back-into-upstream\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#integrating-the-fork-changes-back-into-upstream\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIntegrating the fork changes back into upstream\u003c/h3\u003e\u003cp\u003eThe previous section highlighted how much work goes into maintaining a fork.And while we shared techniques to alleviate some of this work, regular syncing is still required, and conflicts are still going to come up from time to time.So, is it perhaps possible to integrate the features to upstream and avoid having to maintain a fork altogether?\u003c/p\u003e\u003cp\u003eForks are sometimes intended from the start as short-lived.They only exist until the PR to upstream is merged when the user cannot wait for the PR to be merged, especially if upstream is slow to review PRs.\u003c/p\u003e\u003cp\u003eBut in other cases, forks start as a way to customize a project and accumulate new features, without necessarily the intention to contribute them back initially.But it\u0026rsquo;s possible for the fork maintainer to change their mind at any time and decide to contribute back.In fact, this can be a very successful contribution scenario.Forks can indeed be a great way to pilot new features, and to show the value of these features to upstream to motivate their integration.It can also build confidence to show that you\u0026rsquo;ve been using this feature for a while without issues.\u003c/p\u003e\u003cp\u003eIn the ecosystem of the Carpentries workbench forks, a good example is a contributor exploring python support in their own fork and \u003ca href=\"https://github.com/carpentries/sandpaper/pull/448\"\u003econtributing it back to upstream\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eNote that it is not always possible to integrate your changes as upstream may have a restricted scope, or limited resources for maintenance.\u003c/p\u003e\u003cp\u003eWhen contributing back, each pull request should focus on a single feature or bug fix, rather than pushing all changes the fork has accumulated.\u003c/p\u003e\u003ch3 id=\"it-takes-two-to-tango\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#it-takes-two-to-tango\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIt takes two to tango\u003c/h3\u003e\u003cp\u003eGetting forks to contribute back is only possible if they can stay in touch with upstream.Indeed, forks that have diverged too much from upstream will have a hard time contributing back, and making nice palatable pull requests.In other words, communication, and where possible, following the steps outlined in the \u003ca href=\"#simplifying-syncs\"\u003e\u0026ldquo;Simplifying syncs and reducing git conflicts\u0026rdquo;\u003c/a\u003e section above are key to ensuring forks can more easily stay in sync.\u003c/p\u003e\u003cp\u003eConversely, forks benefit from contributing to upstream as it can reduce their maintenance burden.They can either make it easier to sync by reducing the number of changes required to implement their customizations,or they can even make their custom features part of the upstream repository.\u003c/p\u003e\u003cp\u003eThis highlights the symbiotic relationship that can exist between forks and upstream repositories, when both parties are willing to make the effort.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eWhile sometimes presented as a fracture, forks are an integral part of the open-source ecosystem.They offer a way to build on existing projects, to add extra features without increasing the maintenance burden of the upstream repository, and to pilot new features.They can be hard to maintain, but it is also possible for the fork and upstream maintainers to work together to make the process smoother.\u003c/p\u003e\u003cp\u003eWe would love to hear from you if you\u0026rsquo;ve forked or if you\u0026rsquo;re considering forking a project.What were your motivations?Do you plan trying to contribute back to upstream?What challenges have you faced?What techniques have you found useful to maintain your fork?\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eThank you to Daniel Morillo, John Ellis, Mark Padgham, Pablo Serrati, Richard Littauer, Sergio Cabrera, Will Gearty and Yanina Bellini Saibene for their insights during the coworking session and their comments during the production of this post.\u003c/strong\u003e\u003c/p\u003e","url":"https://ropensci.org/blog/2025/02/20/forks-upstream-relationship/","date_published":"2025-02-20T00:00:00+00:00","_relationships":[{"url":"https://openscapes.org/blog/2025-02-20-forks-upstream-relationship","title":"Openscapes","relation":"IsIdenticalTo"}],"date_modified":"2025-02-20T22:15:51-08:00"},{"id":"https://doi.org/10.59350/8vw43-jy784","title":"Open Science and Open Source only with Diversity, Equity, Inclusion, and Accessibility","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["community"],"content_html":"\u003cp\u003eAt rOpenSci, our mission is to\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003efoster a culture that values open and reproducible research using shared data and reusable software\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eand we achieve this through\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003ecreating social infrastructure through a welcoming and diverse community\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eWe feel it is a time  to reiterate and clarify why this is and what it means.\u003c/p\u003e\u003cp\u003eThe open in open source and open science means more than how we share code or data.It means knocking down the barriers to participation so that it is open and accessible to all,that everyone can join in the benefits and joys of science, and removing our blinders to the humanity of those we previously missed.\u003c/p\u003e\u003cp\u003eBy expanding the circle of our collaborators, we expand knowledge and perspectives.This in turn helps us solve problems more quickly and efficiently, and helps  us to anticipate and adapt to more situations.A diverse circle of collaborators enables more robust results, better software and stronger science.We can move towards those goals faster, further, and better together.\u003c/p\u003e\u003cp\u003eThis utilitarian perspective, though, is only one reason for welcoming everyone into our community.Doing our best science, and recognizing the humanity of every person, both serve the same goal.We practice and preach open source and open science in order for science to get better, so that it can produce innovation and public goods that lift everyone up.If we fail to support each others\u0026rsquo; human rights, we fail at why we do science in the first place.\u003c/p\u003e\u003cp\u003eTo be absolutely clear, when we say everyone, we include:\u003c/p\u003e\u003cp\u003eLGBTQ+ people.\u003c/p\u003e\u003cp\u003eTrans people.\u003c/p\u003e\u003cp\u003eEvery gender.\u003c/p\u003e\u003cp\u003eIndigenous people.\u003c/p\u003e\u003cp\u003ePeople of color.\u003c/p\u003e\u003cp\u003eImmigrants and refugees in any nation.\u003c/p\u003e\u003cp\u003eNeurodivergent people.\u003c/p\u003e\u003cp\u003ePeople with disabilities.\u003c/p\u003e\u003cp\u003eWe are proud of our \u003ca href=\"/champions/\"\u003eChampions Program\u003c/a\u003e, in which we\u0026rsquo;ve paired mentors and mentees from groups historically excluded from scientific computing to make contributions to open source and promote open science in their local communities.We are also proud of our \u003ca href=\"/multilingual-publishing/\"\u003emultilingual program\u003c/a\u003e, to make R development resources and peer-review available in Spanish, and now Portuguese, through community-supported translation and human-first LLM workflows.Our \u003ca href=\"/code-of-conduct/\"\u003eCode of Conduct\u003c/a\u003e is an essential tool for inclusion and safety.We take it seriously.We are proud of the work we do with partners such as \u003ca href=\"https://rladies.org/\"\u003eR-Ladies\u003c/a\u003e and \u003ca href=\"https://latinr.org/\"\u003eLatinR\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eDiversity, Equity, Inclusion, and Accessibility (DEIA) is a  phrase or framework used to describe the work of making every person welcome in a community.The progress that these programs have made is under threat by governments and institutions worldwide that try to suppress DEIA programs and exclude and erase the people these programs seek to recognize.We condemn these attacks.rOpenSci is a global community, with members on every continent, and in the face of these threats our mission will not change.We will not rescind our values and the welcome we extend to all, and we will continue to support our community and peers in doing the same.\u003c/p\u003e\u003cp\u003eThis is a journey, and we’re nowhere near finished.We can do more and become better.We strive to cultivate  a community where everyone is welcomed, respected, supported, and valued.Including all of humanity is and always will be at the heart of open science.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/02/05/no-science-without-deia/","date_published":"2025-02-05T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/khq9y-0w472","title":"rOpenSci News Digest, January 2025","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2025/01/27/news-january-2025\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"ropensci-2024-highlights-and-what-comes-next-in-2025\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-2024-highlights-and-what-comes-next-in-2025\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci 2024 Highlights and what comes next in 2025\u003c/h3\u003e\u003cp\u003eIn this blog post, the rOpenSci Team shares the highlights of 2024 and what come next in 2025. \u003ca href=\"/blog/2025/01/22/year-in-review-2024/\"\u003eRead the full story\u003c/a\u003e for details about our project\u0026rsquo;s progress and activities, from R-Universe, our software peer review system, to the champions program and the multilingual project to the great work of our community.We are excited to continue building an open science for all in 2025.\u003c/p\u003e\u003ch3 id=\"ropensci-statistical-software-peer-review-the-importance-and-challenge-of-community-engagement\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-statistical-software-peer-review-the-importance-and-challenge-of-community-engagement\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u0026ldquo;rOpenSci Statistical Software Peer Review: The importance and challenge of community engagement\u0026rdquo;\u003c/h3\u003e\u003cp\u003eFind the \u003ca href=\"https://www.youtube.com/watch?v=7H4FCpZa3w8\"\u003erecording\u003c/a\u003e of Mark Padgham\u0026rsquo;s talk at RSE CONF 2024.The talk was second in a two-part session devoted to software peer review, and followed a \u003ca href=\"https://virtual.oxfordabstracts.com/event/49081/submission/69\"\u003ewalk-through demonstration of the process of submitting to Journal of Open Source software\u003c/a\u003e.Explore \u003ca href=\"https://mpadge.github.io/presentations/2024/rseconf/\"\u003eMark\u0026rsquo;s slides\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"community-call-from-novice-to-contributor-making-and-supporting-first-time-contributions-to-foss\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call-from-novice-to-contributor-making-and-supporting-first-time-contributions-to-foss\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity Call From Novice to Contributor: Making and Supporting First-Time Contributions to FOSS\u003c/h3\u003e\u003cp\u003eIn our first community call of 2025, we explored the journey of open source contributions. \u003ca href=\"/author/hugo-gruson/\"\u003eHugo Gruson\u003c/a\u003e moderated a dynamic discussion featuring insights from three community members: \u003ca href=\"/author/yi-chin-sunny-tseng/\"\u003eSunny Tseng\u003c/a\u003e offered practical advice for navigating the challenges of initial open source involvement, \u003ca href=\"/author/pascal-burkhard/\"\u003ePascal Burkhard\u003c/a\u003e shared essential git skills for first-time contributors, and \u003ca href=\"/author/yaoxiang-li/\"\u003eYaoxiang Li\u003c/a\u003e delved into test strategies for enhancing R package quality using testthat.\u003c/p\u003e\u003cp\u003e\u003ca href=\"/commcalls/first-time-contributor/\"\u003eCheck the video recording (with captions) and all the resources shared in the call on our website\u003c/a\u003e. Also, check the next coworking session and mini hackathon to learn how to join us to support first-time contributions to open source projects.\u003c/p\u003e\u003ch3 id=\"coworking-mini-hackathons\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking-mini-hackathons\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking Mini-hackathons\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for two special \u003ca href=\"/blog/2025/01/24/coworking-hackathons/\"\u003eCoworking Mini-Hackathon for First-Time Contributors\u003c/a\u003e. If you’re curious about contributing to Open Source Software, and would like some support to get started, these events are for you!\u003c/p\u003e\u003cp\u003eDuring these sessions you’ll join others making contributions to R packages while \u003ca href=\"https://ropensci.org/blog/2024/10/22/first-time-contributions/\"\u003epackage maintainers and other mentors\u003c/a\u003e are available ’live’ to answer questions and give guidance.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://ropensci.org/events/coworking-2025-02\"\u003eTuesday February 4th 09:00 Australian Western (01:00 UTC)\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://ropensci.org/events/coworking-2025-03\"\u003eTuesday March 4th 14:00 European Central (13:00 UTC)\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDon\u0026rsquo;t forget to register to participate!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following  package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/emodnet.wfs\"\u003eemodnet.wfs\u003c/a\u003e, developed by Salvador Fernández-Bejarano together with Anna Krystalli and Maëlle Salmon: Access and interrogate EMODnet (European Marine Observation and Data Network) Web Feature Service data through R. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/653\"\u003ereviewed\u003c/a\u003e by Alec L. Robitaille, Liz Hare, and François Michonneau.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following seven packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/rsi\" title=\"Efficiently Retrieve and Process Satellite Imagery\"\u003ersi\u003c/a\u003e (\u003ca href=\"https://github.com/Permian-Global-Research/rsi/releases/tag/v0.3.2\"\u003e\u003ccode\u003ev0.3.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (cff) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/hoardr\" title=\"Manage Cached Files\"\u003ehoardr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/hoardr/releases/tag/v0.5.5\"\u003e\u003ccode\u003ev0.5.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nasapower\" title=\"NASA POWER API Client\"\u003enasapower\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nasapower/releases/tag/v4.2.2\"\u003e\u003ccode\u003ev4.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/readODS\" title=\"Read and Write ODS Files\"\u003ereadODS\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/readODS/releases/tag/v2.3.2\"\u003e\u003ccode\u003ev2.3.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stats19\" title=\"Work with Open Road Traffic Casualty Data from Great Britain\"\u003estats19\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stats19/releases/tag/v3.3.0\"\u003e\u003ccode\u003ev3.3.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.10.0\"\u003e\u003ccode\u003e1.10.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are sixteen recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/653\"\u003eemodnet.wfs\u003c/a\u003e, Access EMODnet Web Feature Service data through R. Submitted by \u003ca href=\"https://masalmon.eu/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/663\"\u003erredlist\u003c/a\u003e, IUCN Red List Client. Submitted by \u003ca href=\"http://williamgearty.com\"\u003eWilliam Gearty\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/659\"\u003efireexposuR\u003c/a\u003e, Compute and Visualize Wildfire Exposure. Submitted by \u003ca href=\"https://wildfireanalytics.org/forbes.html\"\u003eAir Forbes\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/658\"\u003embquartR\u003c/a\u003e, Finding Manitoba Quarter Sections. Submitted by \u003ca href=\"http://www.alexkoiter.ca\"\u003eAlex Koiter\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003epangoling\u003c/a\u003e, Access to Large Language Model Predictions. Submitted by \u003ca href=\"https://bnicenboim.github.io/\"\u003eBruno Nicenboim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSix at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/676\"\u003ebutterfly\u003c/a\u003e, Verification For Continually Updating Timeseries Data. Submitted by \u003ca href=\"https://thomaszwagerman.co.uk/\"\u003eThomas Zwagerman\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/675\"\u003egeotargets\u003c/a\u003e, Targets Extensions for Geospatial Formats. Submitted by \u003ca href=\"https://www.njtierney.com\"\u003eNicholas Tierney\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/674\"\u003emapmetadata\u003c/a\u003e, Map health metadata onto predefined research domains. Submitted by \u003ca href=\"https://github.com/RayStick\"\u003eRachael Stickland\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/632\"\u003eQuadratiK\u003c/a\u003e, A Collection of Methods Using Kernel-Based Quadratic Distances for. Submitted by \u003ca href=\"https://github.com/giovsaraceno\"\u003eGiovanni Saraceno\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.rbind.io\"\u003eØystein Sørensen\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/673\"\u003esasquatch\u003c/a\u003e, Use SAS, R, and quarto Together. Submitted by \u003ca href=\"http://ryanzomorrodi.github.io\"\u003eRyan Zomorrodi\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/660\"\u003eforcis\u003c/a\u003e, An R Client to Access the FORCIS Database. Submitted by \u003ca href=\"https://nicolascasajus.fr\"\u003eNicolas Casajus\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/645\"\u003ecapybara\u003c/a\u003e, Fast and Memory Efficient Fitting of Linear Models With High-Dimensional. Submitted by \u003ca href=\"https://pacha.dev\"\u003eMauricio \u0026ldquo;Pachá\u0026rdquo; Vargas Sepúlveda\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/01/20/transparencyCoC2024\"\u003erOpenSci 2024 Code of Conduct Transparency Report\u003c/a\u003e by Yanina Bellini Saibene, Mark Padgham, and Natalia Morandeira. rOpenSci 2024 Code of Conduct Transparency Report.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/01/22/year-in-review-2024\"\u003erOpenSci 2024 Highlights\u003c/a\u003e by The rOpenSci Team. A summary of the highlights of the rOpenSci community in 2024 and some news for 2025.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2025/01/24/coworking-hackathons\"\u003eCoworking Mini-Hackathon for First-Time Contributors\u003c/a\u003e by Steffi LaZerte, Yanina Bellini Saibene, Yi-Chin Sunny Tseng, Pascal Burkhard, Yaoxiang Li, and Hugo Gruson. Announcing mini-hackathons to support first time contributors.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools/\"\u003ehddtools\u003c/a\u003e, Hydrological Data Discovery Tools. \u003ca href=\"https://github.com/ropensci/hddtools/issues/36\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/tic/\"\u003etic\u003c/a\u003e, Tasks Integrating Continuously: CI-Agnostic Workflow Definitions. \u003ca href=\"https://github.com/ropensci/tic/issues/339\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003cp\u003eThe bib2df package, for parsing BibTeX files into tibbles, would need some help! \u003ca href=\"https://github.com/ropensci/bib2df/issues/65\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"how-to-change-stuff-in-your-package-deprecations\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-change-stuff-in-your-package-deprecations\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to change stuff in your package (deprecations)\u003c/h3\u003e\u003cp\u003ePrompted by a discussion in the rOpenSci slack workspace on how to gracefully change default values in R functions, we thought it\u0026rsquo;d be worth mentioning the dev guide\u0026rsquo;s chapter on \u0026ldquo;\u003ca href=\"https://devguide.ropensci.org/maintenance_evolution.html\"\u003ePackage evolution - changing stuff in your package\u003c/a\u003e\u0026rdquo; again.Changing stuff entails: deprecating functions, arguments, values of arguments (and even changing maintainers!).\u003c/p\u003e\u003cp\u003eWe also discussed other relevant resources such as:\u003c/p\u003e\u003cul\u003e\u003cli\u003eThe \u003ca href=\"https://lifecycle.r-lib.org/\"\u003elifecycle R package\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eThe rlang functions for \u003ca href=\"https://rlang.r-lib.org/reference/missing_arg.html\"\u003ehandling missing arguments\u003c/a\u003e like \u003ccode\u003erlang::is_missing()\u003c/code\u003e (thanks to Jon Harmon for pointing those out).\u003c/li\u003e\u003cli\u003eHadley Wickham\u0026rsquo;s keynote talk at rstudio::global 2021 \u003ca href=\"https://posit.co/resources/videos/maintaining-the-house-the-tidyverse-built/\"\u003e\u0026ldquo;Maintaining the house the tidyverse built\u0026rdquo;\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"gotcha-if-using-r-on-github-actions-ubuntu-latest\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#gotcha-if-using-r-on-github-actions-ubuntu-latest\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGotcha if using R on GitHub Actions ubuntu-latest\u003c/h3\u003e\u003cp\u003eGábor Csárdi posted on Bluesky about \u003ca href=\"https://bsky.app/profile/gaborcsardi.org/post/3lfeu6tzr5c2l\"\u003ea change in GHA ubuntu-latest\u003c/a\u003e that might affect R workflows.The new ubuntu-latest by GHA does not have R installed by default so you need to either\u003c/p\u003e\u003cul\u003e\u003cli\u003eUse \u003ccode\u003er-lib/actions/setup-r@v2\u003c/code\u003e from github.com/r-lib/actions (which is already the case if you use the example workflows from that repository), or\u003c/li\u003e\u003cli\u003eUse a Docker container.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"reminder-use-the-newest-tools-for-mocking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#reminder-use-the-newest-tools-for-mocking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReminder: use the newest tools for mocking\u003c/h3\u003e\u003cp\u003eIn honor of \u003ccode\u003elocal_mock()\u003c/code\u003e and \u003ccode\u003ewith_mock()\u003c/code\u003e\u0026rsquo;s getting \u003ca href=\"https://github.com/r-lib/testthat/pull/1986\"\u003eremoved from testthat\u003c/a\u003e as they won\u0026rsquo;t work with R 4.5, let\u0026rsquo;s remember that testthat has \u003ca href=\"https://testthat.r-lib.org/reference/local_mocked_bindings.html?q=local_mocked_bindings\"\u003enewer functions for mocking\u003c/a\u003e: \u003ccode\u003ewith_mocked_bindings()\u003c/code\u003e and \u003ccode\u003elocal_mocked_bindings()\u003c/code\u003e.See also the \u003ca href=\"https://blog.r-hub.io/2024/03/21/mocking-new-take/\"\u003eR-hub blog post on the topic\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-expectations-from-testthat-322\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-expectations-from-testthat-322\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew expectations from testthat 3.2.2\u003c/h3\u003e\u003cp\u003eNew expectations have been added to testthat in the \u003ca href=\"https://testthat.r-lib.org/news/index.html#new-expectations-3-2-2\"\u003e3.2.2 version\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003eA new inheritance expectation, \u003ca href=\"https://testthat.r-lib.org/reference/inheritance-expectations.html\"\u003e\u003ccode\u003eexpect_s7_class()\u003c/code\u003e\u003c/a\u003e (S7 being a \u003ca href=\"https://rconsortium.github.io/S7/\"\u003enew object-oriented programming system for R\u003c/a\u003e.)\u003c/li\u003e\u003cli\u003eA bit meta: tools for testing\u0026hellip; \u003ca href=\"https://testthat.r-lib.org/reference/expect_success.html\"\u003eexpectations\u003c/a\u003e. See their \u003ca href=\"https://github.com/search?q=repo%3Ar-lib%2Ftestthat+expect_snapshot_failure+language%3AR+path%3A%2F%5Etests%5C%2Ftestthat%5C%2F%2F\u0026amp;type=code\"\u003euse in testthat\u0026rsquo;s tests\u003c/a\u003e. \u0026#x1f92a;\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/01/27/news-january-2025/","date_published":"2025-01-27T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/h666e-50h82","title":"Coworking Mini-Hackathon for First-Time Contributors","language":"en","authors":[{"name":"Hugo Gruson","url":"https://orcid.org/0000-0002-4094-1476","avatar":"https://ropensci.org/img/community/hugo-gruson.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["editor"]},{"name":"Pascal Burkhard","url":"https://ropensci.org/author/pascal-burkhard/","avatar":"https://ropensci.org/img/community/pascal-burkhard.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]},{"name":"Yaoxiang Li","url":"https://ropensci.org/author/yaoxiang-li/","avatar":"https://ropensci.org/img/community/yaoxiang-li.jpg","_role":["author"]},{"name":"Yi-Chin Sunny Tseng","url":"https://ropensci.org/author/yi-chin-sunny-tseng/","avatar":"https://github.com/SunnyTseng.png","_role":["author"]}],"tags":["R","community","maintenance","contributions","events","welcome","beginner"],"content_html":"\u003cp\u003eThis week we had a wonderful community call, \u003ca href=\"/commcalls/first-time-contributor/\"\u003eFrom Novice to Contributor: Making and Supporting First-Time Contributions to FOSS\u003c/a\u003e, where Sunny Tseng, Pascal Burkhard, and Yaoxiang Li shared with us their experiences with, and advice for, first time contributors, with the excellent moderation of \u003ca href=\"/author/hugo-gruson/\"\u003eHugo Gruson\u003c/a\u003e.This was a perfect start to our \u003ca href=\"/blog/2024/10/22/first-time-contributions/\"\u003especial series of activities\u003c/a\u003e to support first time contributors to Open Source Software.\u003c/p\u003e\u003cp\u003eOur next two activities, Coworking Mini-Hackathons for First-Time Contributors, will take place \u003cstrong\u003e\u003ca href=\"/events/coworking-2025-02/\"\u003eFebruary 4th 2025 1-3 UTC\u003c/a\u003e\u003c/strong\u003e and \u003cstrong\u003e\u003ca href=\"/events/coworking-2025-03/\"\u003eMarch 4th 2025 13-15 UTC\u003c/a\u003e\u003c/strong\u003e (see below for details), but first, let\u0026rsquo;s review what we learned from this Community Call.\u003c/p\u003e\u003ch3 id=\"community-call\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity call\u003c/h3\u003e\u003cp\u003eOur three panellists each shared different experiences and perspectives on making contributions to open source software.Sunny and Pascal shared their experiences with getting involved, Pascal and Yaoxiang shared technical tips for git and testing, and all three offered advice for first time contributors.\u003c/p\u003e\u003cp\u003eSunny focused on her journey making her first R package, \u003ca href=\"https://sunnytseng.github.io/bbsTaiwan/\"\u003ebbsTaiwan\u003c/a\u003e as part of the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e and Pascal shared his experiences as a first time contributor to the \u003ca href=\"https://docs.ropensci.org/babelquarto\"\u003ebabelquarto\u003c/a\u003e package after being a long-time solo user of git.Then Yaoxiang rounded out our call with advice for first-time contributors on the importance of including tests and how to deal with different testing situations, referring to his experience with \u003ca href=\"https://docs.ropensci.org/medrxivr\"\u003emedrxivr\u003c/a\u003e.\u003c/p\u003e\u003cdiv class=\"gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition\" itemscope itemtype=\"http://schema.org/ImageGallery\"\u003e\t  \u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2025/01/24/coworking-hackathons/sunny.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2025/01/24/coworking-hackathons/sunny.png\" alt=\"Screenshot of Sunny\u0026#39;s title slide featuring her package bbsTawain\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2025/01/24/coworking-hackathons/sunny.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2025/01/24/coworking-hackathons/pascal.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2025/01/24/coworking-hackathons/pascal.png\" alt=\"Slide from Pascal\u0026#39;s presentation \u0026#39;Collaboration with git\u0026#39; featuring his main take-aways: use branches a lot, commit often, write meaningful commit messages, learn how to undo stuff, learn how to rebase, and get familiar with GitHub\u0026#39;s Pull Requests\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2025/01/24/coworking-hackathons/pascal.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2025/01/24/coworking-hackathons/yaoxiang.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2025/01/24/coworking-hackathons/yaoxiang.png\" alt=\"Slide from Yaoxiang\u0026#39;s presentation featuring testthat Basics and core features, such as the test_that function, basic expectations like expect_equal, and error and warning testing like expect_error and expect_warning.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2025/01/24/coworking-hackathons/yaoxiang.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003eSunny recommended that you have a plan for your contributions, but remain flexible as things change or don\u0026rsquo;t proceed as you may have expected.Both Sunny and Pascal pointed out that they found git to be less scary than they expected once they got started, and that they learned so much while collaborating with others.Among other technical suggestions, Pascal and Yaoxiang both commented that starting small and using good descriptions can be really helpful, whether for git commit messages or code tests.\u003c/p\u003e\u003ch3 id=\"mini-hackathons\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mini-hackathons\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMini-hackathons\u003c/h3\u003e\u003cp\u003eHopefully this community call has inspired you to get involved open source software.If you\u0026rsquo;re curious about contributing to Open Source Software, and would like some support to get started, our coworking mini-hackathons are for you!\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;ll be hosting two events, the first on \u003cstrong\u003e\u003ca href=\"/events/coworking-2025-02/\"\u003eFebruary 4th 2025 1-3 UTC\u003c/a\u003e\u003c/strong\u003e and the second on \u003cstrong\u003e\u003ca href=\"/events/coworking-2025-03/\"\u003eMarch 4th 2025 13-15 UTC\u003c/a\u003e\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eDuring these session you\u0026rsquo;ll join others making contributions to R packages while \u003ca href=\"/blog/2024/10/22/first-time-contributions/\"\u003epackage maintainers and other mentors\u003c/a\u003e are available \u0026rsquo;live\u0026rsquo; to answer questions and give guidance.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;ll also have a special Slack channel ready as a place for asynchronous questions during the event and in the week following.\u003c/p\u003e\u003cp\u003eThese collaborative events are designed to help first-time contributors get started with open-source projects.Whether you\u0026rsquo;re improving documentation, reviewing translations, fixing bugs, or adding new features, our mentors will guide you every step of the way.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eNo prior experience required. Non-first time contributors are very welcome too—just bring your curiosity and enthusiasm!\u003c/strong\u003e\u003c/p\u003e\u003cp\u003e\u003cdel\u003eNote that this event requires registration.\u003c/del\u003e\u003c/p\u003e\u003cp\u003eRegistration is appreciated but \u003cstrong\u003enot required\u003c/strong\u003e!Please fill out this \u003ca href=\"https://airtable.com/appRpJelSoXWcYCG1/pagXLEueuI2o3GuBQ/form\"\u003eshort form\u003c/a\u003e to sign up.\u003c/p\u003e\u003cp\u003eIf you register, we\u0026rsquo;ll send out reminders and more details about the event closer to the date.\u003c/p\u003e\u003ch3 id=\"resources\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#resources\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eResources\u003c/h3\u003e\u003cul\u003e\u003cli\u003eCommunity Call - Jan 20 2025 - \u003ca href=\"/commcalls/first-time-contributor/\"\u003eFrom Novice to Contributor: Making and Supporting First-Time Contributions to FOSS\u003c/a\u003e (Including video)\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/SunnyTseng/bbsTaiwan_develop/blob/main/docs/2025_01_rOpenSci_community_call/bbsTaiwan%20update.pdf\"\u003eSunny\u0026rsquo;s Slides\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://key.edunum.tech/ropensci/\"\u003ePascal\u0026rsquo;s Slides\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/commcalls/first-time-contributor/2025-01-20_Supercharging-R-Package-Quality-with-testthat_yaoxiang-li.pdf\"\u003eYaoxiang\u0026rsquo;s Slides\u003c/a\u003e and \u003ca href=\"/commcalls/first-time-contributor/2025-01-20-ExampleTestPackage.zip\"\u003eExample package\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://docs.google.com/document/d/1au27HeGYgEbfEMM_m376rwSuA0hIpPzfuRCav_g9M7I/edit?tab=t.0\"\u003eCommunity Call Notes\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eBlog Post - Oct 22 2024 - \u003ca href=\"/blog/2024/10/22/first-time-contributions/\"\u003eLooking for Maintainers to Support First-Time Contributors\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/coworking/\"\u003erOpenSci Coworking\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/events/\"\u003erOpenSci Events\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e","url":"https://ropensci.org/blog/2025/01/24/coworking-hackathons/","date_published":"2025-01-24T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/820ry-ye386","title":"rOpenSci 2024 Highlights","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["community"],"content_html":"\u003cp\u003eIn 2024, we remained committed to open science and open source software.We continued to build a welcoming andinclusive community, through innovation and collaboration.\u003c/p\u003e\u003cp\u003eHere are the highlights of the year:\u003c/p\u003e\u003ch2 id=\"r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-Universe\u003c/h2\u003e\u003cp\u003eR-Universe, rOpenSci\u0026rsquo;s platform for finding and publishing R packages,saw major advancements in 2024,making it an increasingly useful and trusted resource for the wider R community.\u003c/p\u003e\u003cp\u003eSome of the highlights of our work have included a big rewrite of the \u003ca href=\"https://r-universe.dev\"\u003eweb frontend\u003c/a\u003eand search engine to serve faster, beautiful, informative webpages, andsearch through tens of thousands \u003ca href=\"https://r-universe.dev/packages\"\u003epackages\u003c/a\u003e,\u003ca href=\"https://r-universe.dev/articles\"\u003earticles\u003c/a\u003e and \u003ca href=\"https://r-universe.dev/datasets\"\u003edatasets\u003c/a\u003e.On the build side we added support for new tools like Rust and Quarto,and improved the process of building binaries for WebAssembly and Apple Silicon.\u003c/p\u003e\u003cp\u003eMoreover, we received a \u003ca href=\"/blog/2024/04/12/gsod-announcement/\"\u003eGoogle Season of Docs grant\u003c/a\u003e, aimed at centralizing thedocumentation. The project focused on consolidating numerous tech notes and READMEsinto a unified and easily navigable \u003ca href=\"https://docs.r-universe.dev\"\u003eQuarto website\u003c/a\u003e,highlighting best practices and guiding users to maximize the platform\u0026rsquo;s features.\u003c/p\u003e\u003cp\u003eThese enhancements have resulted in even more users and projects joining R-Universe.We saw more than a doubling of traffic, and R-Universe has become the distributionplatform of choice for anchor community projects like\u003ca href=\"https://discourse.mc-stan.org/t/announcement-stan-r-packages-repo-deprecated-moving-to-r-universe/35341\"\u003eStan\u003c/a\u003e,\u003ca href=\"https://duckdb.org/docs/installation/index.html?version=main\u0026amp;environment=r\"\u003eDuckDB\u003c/a\u003e,and \u003ca href=\"https://pola-rs.github.io/r-polars/vignettes/install.html\"\u003ePolars\u003c/a\u003e,and we\u0026rsquo;ve seen the creation of new community initiatives that build on R-Universe,like \u003ca href=\"https://r-multiverse.org/\"\u003eR-Multiverse\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eFor 2025, we have once again been awarded support by the R-Consortium, nowbeing \u003ca href=\"/blog/2024/12/03/r-universe-r-consortium-tlp/\"\u003enamed a top-level consortium project\u003c/a\u003e!With this long-term support, we will be investing even more in making R-Universea platform that supports building large-scale, collaborative repositories thatexperiment with new models for release, reproducibility, and governance.\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eIn 2024, rOpenSci’s software peer review program continued to grow,showcasing our community\u0026rsquo;s commitment to improving software quality andvalidating R packages for a variety of applications.\u003c/p\u003e\u003cp\u003eWe’ve had \u003cstrong\u003e17\u003c/strong\u003e packages successfully complete software peer review with the help of about \u003cstrong\u003e33\u003c/strong\u003e reviewersand \u003cstrong\u003e11\u003c/strong\u003e editors, with \u003ca href=\"/authors/emi-tanaka\"\u003ethree\u003c/a\u003e new \u003ca href=\"/blog/2024/07/03/editors2024/\"\u003eeditors\u003c/a\u003e. We also did the \u003ca href=\"https://github.com/ropensci/software-review/issues/620\"\u003efirst bilingual review\u003c/a\u003e in English and Spanish.\u003c/p\u003e\u003cp\u003eWe also streamlined the review process and provided transparency through regular updateson the number of submissions, approvals,and the status of packages under review. These updates were shared through newsletters,our Slack and our open GitHub organization.We built a new \u003ca href=\"https://dashboard.ropensci.org/\"\u003edashboard\u003c/a\u003e to monitor the health and responsiveness of our system for authors, reviewers, and editors.Peer review remains a cornerstone of how we maintain quality and reproducibility in R software developmentand how we build community.\u003c/p\u003e\u003cp\u003eIn the year ahead, we are going to keep pushing our tooling to make review moreefficient and helpful, and we have plans to do more to make oursoftware peer-review process a tool that other organizations can use to curatetheir own software ecosystems and build collaborations and community.\u003c/p\u003e\u003ch2 id=\"multilingual-resources\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#multilingual-resources\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMultilingual Resources\u003c/h2\u003e\u003cp\u003eIn 2024, we worked hard to expanded our multilingual resources. We finished translatingour core resource, the \u003ca href=\"/blog/2024/03/11/devguide-0.9.0/\"\u003e\u0026ldquo;rOpenSci Packages: Development, Maintenance, and Peer Review\u0026rdquo;into Spanish\u003c/a\u003e. This has been the central projectaround which we developed our multilingual toolkit, including packages like\u003ca href=\"https://docs.ropensci.org/babeldown/\"\u003ebabeldown\u003c/a\u003e and\u003ca href=\"https://docs.ropensci.org/babelquarto/\"\u003ebabelquarto\u003c/a\u003e, that facilitate LLM-supportedtranslation workflows.This work also led to our \u003ca href=\"/blog/2024/12/17/localization-guide/\"\u003erOpenSci Localization and Translation Guidelines\u003c/a\u003ewhich we published in Spanish and English to assist our community as well as other groups in translating and localizing open science resources.\u003c/p\u003e\u003cp\u003eWe hosted a series of great community events on multilingual publishing,like our \u003ca href=\"/commcalls/translation-portuguese/\"\u003efirst Portuguese Community Call\u003c/a\u003e and\u003ca href=\"https://github.com/orgs/ropensci/projects/7\"\u003eour first Traslathon\u003c/a\u003e, which reinforced theimportance of breaking language barriers in open science.\u003c/p\u003e\u003cp\u003eWhat\u0026rsquo;s happening with translation in 2025? \u003ca href=\"https://github.com/orgs/ropensci/projects/7\"\u003ePortuguese translations of the development guide are underway\u003c/a\u003e,supported by dedicated community volunteers. It’s been inspiring to see the enthusiasm from contributorsand volunteers driving this effort forward, and we will be giving it an extra push with additional support of ournew \u003ca href=\"/blog/2024/10/10/czi-latam-grant/\"\u003eCZI-funded Latin America program\u003c/a\u003e. We are alsoin the midst of Spanish-language revisions of our website and Champions programs materials.\u003c/p\u003e\u003ch2 id=\"champions-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#champions-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChampions Program\u003c/h2\u003e\u003cp\u003eWe had an inspiring 2024 with the \u003ca href=\"/blog/2024/02/15/champions-program-champions-2024/\"\u003esecond cohort of our Champions Program\u003c/a\u003e.These leaders have tackled projects that span disciplines and geographies,driving open science and open data initiatives with creativity andlocal impact.\u003c/p\u003e\u003cp\u003ePackage development is most common type of project tackled by our Champions,but some have also taken on the challenge of becoming reviewers in our software peer-review community.\u003c/p\u003e\u003cp\u003eMultilingualism plays an important role in the Champions Program,and this year, as part of their outreach activity, Champions put on events and workshopsin \u003ca href=\"/events/rsr-learn-and-use/\"\u003eTurkish\u003c/a\u003e,\u003ca href=\"https://www.youtube.com/watch?v=YYfyBrQhMQc\"\u003eSpanish\u003c/a\u003e,\u003ca href=\"https://www.eventbrite.cl/e/traducao-hackathon-traslaton-ropensci-tickets-1045507530167\"\u003ePortuguese\u003c/a\u003e,Chinese and, of course, English.\u003c/p\u003e\u003cp\u003eIn 2025, we will run our first cohort of Champions with a fully Spanish-languagecurriculum, under the \u003ca href=\"/blog/2024/10/10/czi-latam-grant/\"\u003esupport of our new Latin America focus program, funded by CZI\u003c/a\u003e.We are also excited to be working on new models and partnerships for the Champions Programto make it more sustainable and self-supporting, and to be follow upwith our first cohort of Champions (2022-2023) to better understand the long-term impacts of this program.\u003c/p\u003e\u003ch2 id=\"community-engagement\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-engagement\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity Engagement\u003c/h2\u003e\u003cp\u003eThis past year we\u0026rsquo;ve had 49 new code contributors to rOpenSci packages.Other community members shared new \u003ca href=\"/usecases/\"\u003euse cases\u003c/a\u003e to help package authors see how their work isbeing used and to help other users see how these packages might be used.\u003c/p\u003e\u003cp\u003eOur blog featured many different voices and experiences during 2024.We have a total of 35 community authors, of which 18 are first time community authors!Counting our staff, 42 authors wrote 54 blog posts, 63% of which were written by community authorsand 13% were multilingual.\u003c/p\u003e\u003cp\u003eWe also celebrated our vibrant package ecosystem with the \u003ca href=\"https://hachyderm.io/@rOpenSci/tagged/APackageADay\"\u003e“A Package a Day”\u003c/a\u003ecampaign on Mastodon and \u003ca href=\"https://www.linkedin.com/feed/hashtag/?keywords=packageweeklydigest\u0026amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7170464303186108416\"\u003eWeekly Package Digests\u003c/a\u003e in LinkedIn.These efforts showcased the incredible diversity of our over300 federated open-source packages.\u003c/p\u003e\u003cp\u003eCommunity Calls and virtual Social Coworking and Office Hoursbrought together people from over 20 countries to learn,get their own work doneand to join in some spirited scavenger hunts!\u003c/p\u003e\u003cp\u003eMany others have continued to \u003ca href=\"/news/\"\u003eread our newsletter\u003c/a\u003e,cite our software,\u003ca href=\"https://discuss.ropensci.org\"\u003eask or answer questions\u003c/a\u003e,open issues to report bugs or request features,weigh in on standards and best practices,invite us \u003ca href=\"/talks-papers/\"\u003eto talk about our work\u003c/a\u003e,or mentioned us in presentations, posts, or social media.\u003c/p\u003e\u003cp\u003eWe will continue to support our community\u0026rsquo;s amazing contributions and plan to offer even more opportunities to get involved in 2025. We started with a \u003ca href=\"/commcalls/first-time-contributor/\"\u003eCommunity Call\u003c/a\u003eand will continue with a series of \u003ca href=\"/coworking/\"\u003emini-hackathons\u003c/a\u003eduring our co-working sessions to support first-time contributorsto open source projects.These events will provide opportunities forknowledge-sharing, networking and up-skilling in asafe and friendly space encompasing the collaborative spirit of rOpenSci.\u003c/p\u003e\u003cp\u003eWe are also looking forward to collaborations with partnersand other communities, like \u003ca href=\"https://epiverse-trace.github.io\"\u003eEpiverse\u003c/a\u003e,\u003ca href=\"https://www.repidemicsconsortium.org\"\u003eRECON\u003c/a\u003e,\u003ca href=\"https://data.org\"\u003edata.org\u003c/a\u003e,\u003ca href=\"https://latinr.org\"\u003eLatinR\u003c/a\u003e,\u003ca href=\"https://www.pyopensci.org\"\u003ePyOpenSci\u003c/a\u003e,\u003ca href=\"https://openscapes.org\"\u003eOpenScapes\u003c/a\u003e and other Open-Source Program offices.Watch this space for new projects and events!\u003c/p\u003e\u003ch2 id=\"leadership\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#leadership\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLeadership\u003c/h2\u003e\u003cp\u003eIn 2024 we \u003ca href=\"/blog/2024/03/29/from-the-founding-director-my-farewell-to-ropensci/\"\u003ebade farewell to Karthik Ram, our co-founder and Executive Director of 13 years\u003c/a\u003e and welcomedNoam Ross, formerly our leader for peer-review, \u003ca href=\"/blog/2024/03/29/hello-from-our-new-executive-director/\"\u003einto the role\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"thanks-to-our-community\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#thanks-to-our-community\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThanks to our Community\u003c/h2\u003e\u003cp\u003eAn enormous thank you to all our \u003cstrong\u003eauthors, maintainers, reviewers, editors, mentors, Champions,package contributors, commenters, bloggers, translators, bug-reporters, documentation-copy-editors,package-publishers, issue-filers, and event-attendees\u003c/strong\u003e for giving rOpenSci an amazing 2024.  rOpenSci \u003cem\u003eis\u003c/em\u003e our community.We are grateful for it all and look forward to what we will do together in 2025!\u003c/p\u003e","url":"https://ropensci.org/blog/2025/01/22/year-in-review-2024/","date_published":"2025-01-22T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/h6rzg-1a460","title":"rOpenSci 2024 Code of Conduct Transparency Report","language":"en","authors":[{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Natalia Morandeira","url":"https://ropensci.org/author/natalia-morandeira/","avatar":"https://github.com/nmorandeira.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","code of conduct","governance"],"content_html":"\u003ch2 id=\"maintaining-community-trust-and-safety\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#maintaining-community-trust-and-safety\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMaintaining Community Trust and Safety\u003c/h2\u003e\u003cp\u003eThe rOpenSci community is supported by our \u003ca href=\"/code-of-conduct\"\u003eCode of Conduct\u003c/a\u003ewith a clear description of unacceptable behaviors,instructions on how to make a report,and information on how reports are handled.We, the Code of Conduct Committee,are responsible for receiving, investigating, deciding,enforcing and reporting on all reports of potential violations of our Code.We are committed to transparency with our community while upholding the privacyof people who experience or report incidents.\u003c/p\u003e\u003cp\u003eIn 2024, we received one Code of Conduct incident report.\u003c/p\u003e\u003ch3 id=\"summary-of-reported-incident\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#summary-of-reported-incident\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSummary of reported incident\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cem\u003eDescription of the incident:\u003c/em\u003e\u003cbr\u003eWe received a Code of Conduct report regarding sharing a message in Slack,including the topic and tone of that message.After review, we found that the original message did not violate the Code of Conduct guidelines.However, one response to the message was considered inappropriate and was addressed bythe Community Manager by making a visible response in the message thread.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cem\u003eCommunity space:\u003c/em\u003e Slack\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"community-feedback-and-contact-information\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-feedback-and-contact-information\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity Feedback and Contact Information\u003c/h2\u003e\u003cp\u003eThe Code of Conduct Committee continues our commitment to maintaining awelcoming space where all members of the rOpenSci community can participate fully and confidently.This code of conduct belongs to the community.We welcome your feedback at any time by emailing \u003ca href=\"mailto:conduct@ropensci.org\"\u003econduct@ropensci.org\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2025/01/20/transparencycoc2024/","date_published":"2025-01-20T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/yttcr-f0m22","title":"rOpenSci News Digest, December 2024","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2024/12/19/news-december-2024\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"r-universe-named-an-r-consortium-top-level-project\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-named-an-r-consortium-top-level-project\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-Universe Named an R Consortium Top-Level Project\u003c/h3\u003e\u003cp\u003eWe are excited to announce that \u003ca href=\"/r-universe/\"\u003eR-Universe\u003c/a\u003ehas been \u003ca href=\"https://r-consortium.org/posts/r-universe-named-r-consortiums-newest-top-level-project/\"\u003enamed\u003c/a\u003e the \u003ca href=\"https://r-consortium.org\"\u003eR Consortium\u0026rsquo;s\u003c/a\u003e newest \u003ca href=\"https://r-consortium.org/all-projects/\"\u003eTop-Level Project\u003c/a\u003e!  We\u0026rsquo;re gladto be in the company of community and infrastructure projects that have beendesignated critical to the R Ecosystem, such as \u003ca href=\"https://blog.r-hub.io/\"\u003eR-hub\u003c/a\u003e, \u003ca href=\"https://r-dbi.org/\"\u003eDBI\u003c/a\u003e, \u003ca href=\"https://rladies.org/\"\u003eR-Ladies\u003c/a\u003e, and the\u003ca href=\"https://r-consortium.org/all-projects/isc-working-groups.html\"\u003eR User Group program\u003c/a\u003e, and we are grateful for the support of the R Consortium andits \u003ca href=\"https://r-consortium.org/about/governance#infrastructure-steering-committee\"\u003eInfrastructure Steering Committee (ISC)\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eRead more in our \u003ca href=\"/blog/2024/12/03/r-universe-r-consortium-tlp/\"\u003eannouncement\u003c/a\u003e!\u003c/p\u003e\u003ch3 id=\"community-call-from-novice-to-contributor-making-and-supporting-first-time-contributions-to-foss\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call-from-novice-to-contributor-making-and-supporting-first-time-contributions-to-foss\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity Call \u0026ldquo;From Novice to Contributor: Making and Supporting First-Time Contributions to FOSS\u0026rdquo;\u003c/h3\u003e\u003cp\u003eContributing to open source can be very rewarding but also incredibly intimidating.In this community call, moderated by \u003ca href=\"/author/hugo-gruson/\"\u003eHugo Gruson\u003c/a\u003e, our speakers, \u003ca href=\"/author/yaoxiang-li/\"\u003eYaoxiang Li\u003c/a\u003e, \u003ca href=\"/author/pascal-burkhard/\"\u003ePascal Burkhard\u003c/a\u003e, and \u003ca href=\"/author/yi-chin-sunny-tseng/\"\u003eSunny Tseng\u003c/a\u003e, will share practical advice for making first contributions, how to use tools like git and testthat, and common challenges and how to overcome them.\u003c/p\u003e\u003cp\u003e📆 Monday, 20 January 2025 16:00 UTC🎤 With \u003ca href=\"/author/yi-chin-sunny-tseng/\"\u003eYi-Chin Sunny Tseng\u003c/a\u003e, \u003ca href=\"/author/pascal-burkhard/\"\u003ePascal Burkhard\u003c/a\u003e, \u003ca href=\"/author/yaoxiang-li/\"\u003eYaoxiang Li\u003c/a\u003e, \u003ca href=\"/author/hugo-gruson/\"\u003eHugo Gruson\u003c/a\u003e.\u003ca href=\"/commcalls/first-time-contributor/\"\u003eCheck your local time + info to join + speakers bio and resources\u003c/a\u003e\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2025-01/\"\u003eTuesday, January 14th, 14:00 European Central (13:00 UTC)\u003c/a\u003e, \u0026ldquo;Working with Parquet in R\u0026rdquo; with cohosts \u003ca href=\"/author/rainer-m-krug/\"\u003eRainer M Krug\u003c/a\u003e, and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003cul\u003e\u003cli\u003eRead up on what Parquet is.\u003c/li\u003e\u003cli\u003eExplore how to use Parquet in R.\u003c/li\u003e\u003cli\u003eMeet community host, Rainer Krug, and discuss benefits and tips for using Parquet in R and how you might use it in your work.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd stay tuned for some special coworking sessions \u003ca href=\"/blog/2024/10/22/first-time-contributions/\"\u003esupporting first-time contributors\u003c/a\u003e to open source coming up in February and March 2025!\u003c/p\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch3 id=\"multilingual-project\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#multilingual-project\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMultilingual Project\u003c/h3\u003e\u003cp\u003eThis year, we have made important progress, working with our community to create content in several languages.\u003c/p\u003e\u003cp\u003eWe had our \u003ca href=\"/commcalls/translation-portuguese/\"\u003efirst community call in Portuguese\u003c/a\u003e and made our first translaton together with the LatinR Conference.\u003c/p\u003e\u003cp\u003eThe progress of the \u003ca href=\"https://devdevguide.netlify.app/pt/preface.pt\"\u003ePortuguese translation of our development guide\u003c/a\u003e is amazing!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e21\u003c/strong\u003e/30 chapters + CoC - 70% - merged\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e3\u003c/strong\u003e/30 chapters + CoC - 10% - under first review\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e6\u003c/strong\u003e/30 chapters + CoC - 20% - under second review\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe are very grateful to all the people who have made this possible.\u003cbr\u003eWe are very close to achieving our goal!\u003c/p\u003e\u003cp\u003eWe also published the first version of our \u003ca href=\"https://translationguide.ropensci.org/\"\u003eLocalization and Translation Guidelines. Why and how we localize and translate our resources\u003c/a\u003e.Everything we developed and learned during the translations \u0026amp; localizations of our content is detailed in this book: the processes, the roles, and the technical tools.\u003cbr\u003eWe hope it will be helpful to other groups!\u003c/p\u003e\u003cp\u003eStay tuned for more news and activities on multilingual projects in 2025!.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following  package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/agroclimatico\"\u003eagroclimatico\u003c/a\u003e, developed by Paola Corrales together with Elio Campitelli and Natalia Gattinoni: Conjunto de funciones para calcular índices y estadísticos climáticos hidrológicos a partir de datos tidy. Incluye una función para graficar resultados georeferenciados y e información cartográfica. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003ereviewed\u003c/a\u003e by Verónica Cruz-Alonso and Priscilla Minotti.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following eight packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/drake\" title=\"A Pipeline Toolkit for Reproducible Computation at Scale\"\u003edrake\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/drake/releases/tag/7.13.11\"\u003e\u003ccode\u003e7.13.11\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/getCRUCLdata\" title=\"CRU CL v. 2.0 Climatology Client\"\u003egetCRUCLdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/getCRUCLdata/releases/tag/v1.0.2\"\u003e\u003ccode\u003ev1.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/jagstargets\" title=\"Targets for JAGS Pipelines\"\u003ejagstargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/jagstargets/releases/tag/1.2.3\"\u003e\u003ccode\u003e1.2.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lightr\" title=\"Read Spectrometric Data and Metadata\"\u003elightr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lightr/releases/tag/v1.8.0\"\u003e\u003ccode\u003ev1.8.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rerddap\" title=\"General Purpose Client for ERDDAP™ Servers\"\u003ererddap\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rerddap/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spatsoc\" title=\"Group Animal Relocation Data by Spatial and Temporal Relationship\"\u003espatsoc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spatsoc/releases/tag/v0.2.8\"\u003e\u003ccode\u003ev0.2.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stantargets\" title=\"Targets for Stan Workflows\"\u003estantargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stantargets/releases/tag/0.1.2\"\u003e\u003ccode\u003e0.1.2\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.9.1\"\u003e\u003ccode\u003e1.9.1\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are seventeen recently closed and active submissions and 6 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/626\"\u003egigs\u003c/a\u003e, Assess Fetal, Newborn, and Child Growth with International Standards. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"https://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/663\"\u003erredlist\u003c/a\u003e, IUCN Red List Client. Submitted by \u003ca href=\"http://williamgearty.com\"\u003eWilliam Gearty\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/658\"\u003embquartR\u003c/a\u003e, Finding Manitoba Quarter Sections. Submitted by \u003ca href=\"http://www.alexkoiter.ca\"\u003eAlex Koiter\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/653\"\u003eemodnet.wfs\u003c/a\u003e, Access EMODnet Web Feature Service data through R. Submitted by \u003ca href=\"https://masalmon.eu/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/637\"\u003ecancerprof\u003c/a\u003e, API Client for State Cancer Profiles. Submitted by \u003ca href=\"https://github.com/realbp\"\u003eBrian Park\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/676\"\u003ebutterfly\u003c/a\u003e, Verification For Continually Updating Timeseries Data. Submitted by \u003ca href=\"https://thomaszwagerman.co.uk/\"\u003eThomas Zwagerman\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/659\"\u003efireexposuR\u003c/a\u003e, Compute and Visualize Wildfire Exposure. Submitted by \u003ca href=\"https://wildfireanalytics.org/forbes.html\"\u003eAir Forbes\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/632\"\u003eQuadratiK\u003c/a\u003e, A Collection of Methods Using Kernel-Based Quadratic Distances for. Submitted by \u003ca href=\"https://github.com/giovsaraceno\"\u003eGiovanni Saraceno\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.rbind.io\"\u003eØystein Sørensen\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/675\"\u003egeotargets\u003c/a\u003e, Targets Extensions for Geospatial Formats. Submitted by \u003ca href=\"https://www.njtierney.com\"\u003eNicholas Tierney\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/673\"\u003esasquatch\u003c/a\u003e, Use SAS, R, and quarto Together. Submitted by \u003ca href=\"http://ryanzomorrodi.github.io\"\u003eRyan Zomorrodi\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/660\"\u003eforcis\u003c/a\u003e, An R Client to Access the FORCIS Database. Submitted by \u003ca href=\"https://nicolascasajus.fr\"\u003eNicolas Casajus\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/645\"\u003ecapybara\u003c/a\u003e, Fast and Memory Efficient Fitting of Linear Models With High-Dimensional. Submitted by \u003ca href=\"https://pacha.dev\"\u003eMauricio \u0026ldquo;Pachá\u0026rdquo; Vargas Sepúlveda\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/12/03/r-universe-r-consortium-tlp\"\u003eR-Universe Named R Consortium Top-Level Project\u003c/a\u003e by Noam Ross and Jeroen Ooms. We\u0026rsquo;re excited to announce R-Universe has been named the R-Consortium\u0026rsquo;s newest Top-Level Project. Other languages: \u003ca href='/es/blog/2024/12/03/r-universe-r-consortium-tlp' lang='es'\u003eR-Universe es ahora un proyecto de alto nivel del R Consortium (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/12/17/localization-guide\"\u003eIntroducing the rOpenSci Localization and Translation Guidelines\u003c/a\u003e by Yanina Bellini Saibene, Maëlle Salmon, Pao Corrales, and Elio Campitelli. rOpenSci has developed a set of guidelines to assist our community in translating and localizing our resources. We\u0026rsquo;re excited to share the first version of the rOpenSci Localization and Translation Guidelines. Other languages: \u003ca href='/es/blog/2024/12/17/guia-localizacion' lang='es'\u003ePresentación de la Guía de localización y traducción de rOpenSci (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools/\"\u003ehddtools\u003c/a\u003e, Hydrological Data Discovery Tools. \u003ca href=\"https://github.com/ropensci/hddtools/issues/36\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/circle/\"\u003ecircle\u003c/a\u003e, R client package for the Continuous Integration (CI) provider Circle CI. \u003ca href=\"https://github.com/ropensci/circle/issues/46\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/tic/\"\u003etic\u003c/a\u003e, Tasks Integrating Continuously: CI-Agnostic Workflow Definitions. \u003ca href=\"https://github.com/ropensci/tic/issues/339\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003cp\u003eThe bib2f package, for parsing BibTeX files into tibbles, would need some help! \u003ca href=\"https://github.com/ropensci/bib2df/issues/65\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"r-cmd-check-results-as-structured-data\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-cmd-check-results-as-structured-data\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR CMD Check results as structured data!\u003c/h3\u003e\u003cp\u003eHere are two functions that parse the \u003ccode\u003e*.Rcheck\u003c/code\u003e folders in the given directory:\u003c/p\u003e\u003cp\u003e\u003ccode\u003etools::check_packages_in_dir_details()\u003c/code\u003e gives a data frame, one line for each NOTE, WARNING or ERROR in the check logs.Therefore, one gets multiple lines per package.We can convert the output to JSON:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edf\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003etools\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003echeck_packages_in_dir_details\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;.\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etoJSON\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epretty\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-json\" data-lang=\"json\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"err\"\u003e...\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;Package\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;EXAMPLE\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;Version\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;3.2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;Check\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;examples\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;Status\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ERROR\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;Output\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Running examples in ‘EXAMPLE-Ex.R’ failed\\nThe error most likely occurred in:\\n\\n\u0026gt; ### Name: core_cpp\\n\u0026gt; ### Title: Maximization of Cross-Validateed Accuracy Methods\\n\u0026gt; ### Aliases: core_cpp\\n\u0026gt; \\n\u0026gt; ### ** Examples\\n\u0026gt; \\n\u0026gt; # Here, the famous (Fisher\u0026#39;s or Anderson\u0026#39;s) iris data set was loaded\\n\u0026gt; data(iris)\\n\u0026gt; u=as.matrix(iris[,-5])\\n\u0026gt; s=sample(1:150,150,TRUE)\\n\u0026gt; \\n\u0026gt; # The maximization of the accuracy of the vector s is performed\\n\u0026gt; results=core_cpp(u, clbest=s,fpar = 5)\\nError in core_cpp(u, clbest = s, fpar = 5) : unused argument (fpar = 5)\\nExecution halted\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;Flags\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;--no-manual --no-vignettes\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003cspan class=\"err\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;Package\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;EXAMPLE\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;Version\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;3.2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;Check\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;package vignettes\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;Status\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;WARNING\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;Output\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Located more than one ‘weave’ output file (by engine ‘knitr::rmarkdown’) for vignette with name ‘EXAMPLE’: ‘EXAMPLE.html’ (28837 bytes), ‘EXAMPLE.pdf’ (986231 bytes)\\nPackage vignette without corresponding single PDF/HTML:\\n  ‘EXAMPLE.Rmd’\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;Flags\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;--no-manual --no-vignettes\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eTo instead obtain the final \u0026ldquo;conclusion\u0026rdquo; for each package log, use this:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eoutput\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003etools\u003c/span\u003e\u003cspan class=\"o\"\u003e:::\u003c/span\u003e\u003cspan class=\"nf\"\u003echeck_packages_in_dir_results\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;.\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eoutput\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eEXAMPLE\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$status[1] \u0026#34;ERROR\u0026#34;$lines...[8] \u0026#34;* checking examples ... ERROR\u0026#34;[9] \u0026#34;* checking package vignettes ... WARNING\u0026#34;\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"the-cran-cookbook\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-cran-cookbook\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe CRAN cookbook\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://contributor.r-project.org/cran-cookbook/\"\u003eCRAN Cookbook\u003c/a\u003e by Jasmine Daly and Beni Altmann with participation of Heather Turner is a guide for solving common (and often recurring) issues spotted by CRAN volunteers during package submissions and re-submissions.The guide present practical “recipes” organized by different parts of the package structure.\u003c/p\u003e\u003ch3 id=\"usethis-310\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#usethis-310\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eusethis 3.1.0\u003c/h3\u003e\u003cp\u003eFor those using the usethis package for their package development tasks, here are two highlights from the \u003ca href=\"https://usethis.r-lib.org/news/index.html#usethis-310\"\u003e3.1.0 release\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003euse_vignette()\u003c/code\u003e and \u003ccode\u003euse_article()\u003c/code\u003e now support Quarto (not as default yet).\u003c/li\u003e\u003cli\u003e\u0026ldquo;\u003ca href=\"https://usethis.r-lib.org/reference/tidyverse.html\"\u003e\u003ccode\u003euse_tidy_upkeep_issue()\u003c/code\u003e\u003c/a\u003e records the year it is being run in the Config/usethis/upkeep field in \u003ccode\u003eDESCRIPTION\u003c/code\u003e. If this value exists, it is used to filter the checklist when making the issue.\u0026rdquo;\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/12/19/news-december-2024/","date_published":"2024-12-19T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/a184p-50q69","title":"Introducing the rOpenSci Localization and Translation Guidelines","language":"en","authors":[{"name":"Elio Campitelli","url":"https://ropensci.org/author/elio-campitelli/","avatar":"https://ropensci.org/img/team/elio-campitelli.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Pao Corrales","url":"https://orcid.org/0000-0003-1923-9129","avatar":"https://ropensci.org/img/team/paola-corrales.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["multilingual","community"],"content_html":"\u003cp\u003eSince 2022, rOpenSci has been developing tools and processes to localize and translate our content.As a result of this effort, we created a set of guidelines to assist our community in translating and localizing our resources.What started as an internal challenge has evolved into a collaborative blueprint that we believe can help transform how scientific resources are shared in a multilingual research landscape.\u003c/p\u003e\u003cp\u003eTherefore, we\u0026rsquo;re excited to share the first version of the \u003ca href=\"https://translationguide.ropensci.org/\"\u003erOpenSci Localization and Translation Guidelines\u003c/a\u003e!\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/12/17/localization-guide/multilingual-chapter.png\"\t\t\talt=\"The first paragraphs of the section General aspects of the stage 1 of the translation process in English (left side) and Spanish (right side). Showing text and concept maps in both languages.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eChapter on General aspects of the stage 1 of the translation process in English and Spanish\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThese guidelines explain the rationale behind and the process for localizing and translating our resources.They are designed to support community members contributing to the \u003ca href=\"/multilingual-publishing/\"\u003emultilingual publishing project\u003c/a\u003e.As a result, this is guide is also multilingual in itself, offering both general and specific guidelines for translating and localizing our resources across all \u003ca href=\"https://github.com/ropensci-review-tools/translation_guide/?tab=readme-ov-file#languages-with-active-projects\"\u003eactive languages\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe guideline is more than a reference—it\u0026rsquo;s a living document of the collective expertise of our community and all volunteers contributing to this project.\u003c/p\u003e\u003cp\u003eLet\u0026rsquo;s introduce you to the guide with a walk through the six sections.\u003c/p\u003e\u003ch3 id=\"preface-a-collaborative-invitation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#preface-a-collaborative-invitation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ca href=\"https://translationguide.ropensci.org\"\u003ePreface\u003c/a\u003e: A collaborative invitation\u003c/h3\u003e\u003cp\u003eA brief overview of the book\u0026rsquo;s purpose, intended audience, the goals of the guidelines, and instructions on how to contribute. We wanted to create something that would welcome contributors from all backgrounds—whether you\u0026rsquo;re a professional translator, a developer, or simply someone passionate about making scientific knowledge more accessible.\u003c/p\u003e\u003ch3 id=\"motivation-confronting-language-inequality\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#motivation-confronting-language-inequality\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ca href=\"https://translationguide.ropensci.org/motivation.html\"\u003eMotivation\u003c/a\u003e: Confronting language inequality\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;ve seen firsthand the challenges non-native English speakers face in scientific communication.This section explains the importance of localizing and translating our resources.It discusses the impact of language barriers, the principles of community-driven localization and translation, and how these activities contribute to community building. This chapter is our argument for change.\u003c/p\u003e\u003ch3 id=\"overview--our-technical-framework\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#overview--our-technical-framework\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ca href=\"https://translationguide.ropensci.org/intro.html\"\u003eOverview\u003c/a\u003e:  Our technical framework\u003c/h3\u003e\u003cp\u003eThis section introduces the concepts of localization and translation, explaining how they enhance accessibility. We introduce the tools and methods that make community-driven translation possible,outlining the technical infrastructure, work organization, and general aspects of our translation and localization process.\u003c/p\u003e\u003ch3 id=\"translation-and-review-guidelines-our-ideas-in-practice\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#translation-and-review-guidelines-our-ideas-in-practice\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ca href=\"https://translationguide.ropensci.org/howtoreview.html\"\u003eTranslation and Review Guidelines\u003c/a\u003e: Our ideas in practice\u003c/h3\u003e\u003cp\u003eThis section offers a detailed guide on translating and reviewing our resources.It covers how to contribute to a new or existing language project and manage the localization and translation process.It also provides technical and general review guidelines to ensure translation quality: balancing the efficiency of machine translation with the qualified understanding that only human reviewers can provide.\u003c/p\u003e\u003ch3 id=\"specific-language-guidelines-embracing-linguistic-diversity\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#specific-language-guidelines-embracing-linguistic-diversity\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ca href=\"https://translationguide.ropensci.org/specific_guidelines.html\"\u003eSpecific Language Guidelines\u003c/a\u003e: Embracing linguistic diversity\u003c/h3\u003e\u003cp\u003eThis chapter has specific content to each language version of the guide.This means that the instructions for English, Spanish and Portuguese may differ from each other,according to the agreements reached by the community and reflected in this chapter.It aims to offer guidance on handling everything from technical terms to cultural nuances,respecting the unique characteristics of each language and the community agreements on how to localize and translate content.This section also addresses the localization of citations, code, diagrams, and data.This chapter includes collaborative glossaries which are comprehensive terminology resources, useful as a reference and which help translators make consistent, informed choices.\u003c/p\u003e\u003ch3 id=\"news\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#news\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ca href=\"https://translationguide.ropensci.org/booknews.html\"\u003eNEWS\u003c/a\u003e\u003c/h3\u003e\u003cp\u003eThis section documents all changes made to the guidelines in each version, by whom, and shows the continuous improvement of the guide.\u003c/p\u003e\u003ch2 id=\"next-steps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#next-steps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNext steps\u003c/h2\u003e\u003cp\u003eThis guide is designed for those interested in localizing rOpenSci materials or contributing to the maintenance of localized content, but we hope it is also useful for anyone tasked with localizing material beyond our community.We want our processes, agreements, and the lessons we\u0026rsquo;ve learned to benefit other communities as well.\u003c/p\u003e\u003cp\u003eThis guide is a living document that will continue to improve with contributions from members of our community, refining and expanding our work.It is available in English and Spanish, with plans to translate it into other languages based on our active translation projects, like Portuguese.\u003c/p\u003e\u003cp\u003eWe see it as a starting point for conversation, collaboration and meaningful change in the way we share scientific knowledge across language boundaries.\u003c/p\u003e\u003cp\u003eIf you\u0026rsquo;d like to contribute to translation efforts or improve this guide, please check out the \u003ca href=\"https://github.com/ropensci-review-tools/translation_guide#active\"\u003elist of languages for which there are active translation projects and their statuses\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eYou can contact us at \u003ca href=\"mailto:info@ropensci.org\"\u003einfo@ropensci.org\u003c/a\u003e or \u003ca href=\"https://github.com/ropensci-review-tools/translation_guide/issues\"\u003eopen an issue in the guidelines repository\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eNow go forth and translate and localize!\u003c/p\u003e","url":"https://ropensci.org/blog/2024/12/17/localization-guide/","date_published":"2024-12-17T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/d0a4r-44j50","title":"R-Universe Named an R Consortium Top-Level Project","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]},{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["r-universe","grant","funding","infrastructure"],"content_html":"\u003cp\u003eWe are excited to announce that \u003ca href=\"/r-universe/\"\u003eR-Universe\u003c/a\u003ehas been \u003ca href=\"https://r-consortium.org/posts/r-universe-named-r-consortiums-newest-top-level-project/\"\u003enamed\u003c/a\u003e the \u003ca href=\"https://r-consortium.org\"\u003eR Consortium\u0026rsquo;s\u003c/a\u003e newest \u003ca href=\"https://r-consortium.org/all-projects/\"\u003eTop-Level Project\u003c/a\u003e!  We\u0026rsquo;re gladto be in the company of community and infrastructure projects that have beendesignated critical to the R Ecosystem, such as \u003ca href=\"https://blog.r-hub.io/\"\u003eR-hub\u003c/a\u003e, \u003ca href=\"https://r-dbi.org/\"\u003eDBI\u003c/a\u003e, \u003ca href=\"https://rladies.org/\"\u003eR-Ladies\u003c/a\u003e, and the\u003ca href=\"https://r-consortium.org/all-projects/isc-working-groups.html\"\u003eR User Group program\u003c/a\u003e, and we are grateful for the support of the R Consortium andits \u003ca href=\"https://r-consortium.org/about/governance#infrastructure-steering-committee\"\u003eInfrastructure Steering Committee (ISC)\u003c/a\u003e\u003c/p\u003e\u003cp\u003eThe R Consortium supports the R community to help develop the infrastructurerequired to ensure the long-term stability and growth of the R Ecosystem. Theyhave generously supported R-Universe for the past year. Now, ingranting R-Universe top-level status, the R Consortium has committed to supportus for three more years. This endorsement and investment will help us meet our goalof making R-Universe a sustainable and scalable platform for R packagedevelopment that individuals and organizations can rely on. Jeroen Ooms,R-Universe\u0026rsquo;s lead developer, will also join the R-Consortium\u0026rsquo;s InfrastructureSteering Committee. We are glad to play a part in helping support importantR community projects in the future!\u003c/p\u003e\u003cp\u003eR-Universe is rOpenSci’s platform for improving publication and discovery of research software in R.It serves as a \u003cstrong\u003eglobal catalog\u003c/strong\u003e of software, articles, and data foundacross R repositories.  It is a \u003cstrong\u003esoftware publication platform\u003c/strong\u003e providing a fullyautomated pipeline for testing, building, and publishing R packages. It is alsoa \u003cstrong\u003emeta-repository\u003c/strong\u003e, providing common infrastructure for both individuals andorganizations to manage custom R package repositories using their own approachto curation, release management, and quality control.\u003c/p\u003e\u003cp\u003eR-Universe already serves tens of thousands of packages published by over a thousandorganizations, and we are excited for what\u0026rsquo;s ahead. This year, our aim is to improve features which serve groups thatare building large-scale, collaborative repositories using R-Universe\u0026rsquo;s platformand API, like the new \u003ca href=\"https://r-multiverse.org/\"\u003eR-Multiverse\u003c/a\u003e. This includessupport for things like development and production branches of universes, custompackage checks, and manual approval steps so universe owners can curate and governpackage collections as they see fit.We also plan to expand our contributor base through more documentation andpartner outreach, and to improve performance and reliability as we continue togrow. We look forward to working with the R Community on making R-Universe afirst-class home for R software.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/12/03/r-universe-r-consortium-tlp/","date_published":"2024-12-03T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/c3ywd-nqk96","title":"rOpenSci News Digest, November 2024","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2024/11/29/news-november-2024\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"looking-for-maintainers-to-support-first-time-contributors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#looking-for-maintainers-to-support-first-time-contributors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLooking for Maintainers to Support First-Time Contributors\u003c/h3\u003e\u003cp\u003e\u003cstrong\u003eNow open to non-rOpenSci package maintainers!\u003c/strong\u003e\u003c/p\u003e\u003cp\u003eMaking your first contribution to Open Source can be both empowering and intimidating. As such, we’re exited to announce a special series of activities to support first-time contributors! 🎉\u003c/p\u003e\u003cp\u003eAre you an package maintainer who would like to help someone make their first contribution? We limited our initial call to rOpenSci package maintainers, but we still have some room, so have decided to open this up to all package maintainers!\u003c/p\u003e\u003cp\u003eSee our \u003ca href=\"/blog/2024/10/22/first-time-contributions/\"\u003eblog post\u003c/a\u003e for more details and how to sign up (by December 9th).\u003c/p\u003e\u003ch3 id=\"a-fast-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-fast-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA fast R-Universe!\u003c/h3\u003e\u003cp\u003eThanks to optimized caching, the web front-end pages load much faster, making it even more fun to \u003ca href=\"https://r-universe.dev/search\"\u003ebrowse around the R ecosystem\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"yanina-bellini-saibenes-keynote-talk-at-carpentryconnect-and-biont-2024\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#yanina-bellini-saibenes-keynote-talk-at-carpentryconnect-and-biont-2024\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eYanina Bellini Saibene\u0026rsquo;s keynote talk at CarpentryConnect and BioNT 2024\u003c/h3\u003e\u003cp\u003eIn her keynote Yanina Bellini Saibene invited the audience to reflect on how to measure the impact of our work in our communities.She shared two frameworks we use at rOpenSci and severals tool to measure different aspects of our work and our impact, not only with numbers, but with stories.\u003ca href=\"https://yabellini.netlify.app/talk/2024_carpentryconbiont/\"\u003eSlidedeck\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"tradução--hackathon--traslatón-ropensci\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tradu%c3%a7%c3%a3o--hackathon--traslat%c3%b3n-ropensci\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTradução + Hackathon = Traslatón rOpenSci\u003c/h3\u003e\u003cp\u003eWe had a very nice and productive event during \u003ca href=\"/events/latinr-2024/\"\u003eLatinR\u003c/a\u003e, with people registered from thirteen countries.Some people stayed for the whole event and others participated during some of the working sessions.\u003c/p\u003e\u003cp\u003eWe discussed the \u003ca href=\"/blog/2023/09/26/how-to-translate-a-hugo-blog-post-with-babeldown/\"\u003eGitHub workflow\u003c/a\u003e and the \u003ca href=\"https://docs.ropensci.org/babelquarto/\"\u003ebabelquarto\u003c/a\u003e and \u003ca href=\"https://docs.ropensci.org/babeldown/\"\u003ebabeldown\u003c/a\u003e packages.We also reviewed the \u003ca href=\"https://translationguide.ropensci.org/\"\u003etranslation guidelines\u003c/a\u003e and started working on a Portuguese glossary for the translations.\u003c/p\u003e\u003cp\u003eParticipants worked on reviewing the rOpenSci \u003ca href=\"https://devdevguide.netlify.app/pt/index.pt.html\"\u003edev guide\u003c/a\u003e.As a result, we now have two more chapters with their first review started, two chapters with the second review under work, and five chapters merged with the complete translation. We also started the translation of our Code of Conduct.  🚀\u003c/p\u003e\u003cp\u003eWe are very grateful to Pedro Faria, Beatriz Milz, Francesca Palmeira, Rafael Fontenelle, Ildeberto Vasconcelos,  Samuel Carleial, and Ariana Cabral for their contributions during the Traslatón 🙏.\u003c/p\u003e\u003cp\u003eIf you want to participate in this collaborative translation effort, please \u003ca href=\"https://github.com/orgs/ropensci/projects/7/views/1\"\u003echeck out our project\u003c/a\u003e and add a comment to the pull request you would like to review.\u003c/p\u003e\u003ch3 id=\"community-call-a-comunidade-r-fala-português-resources\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call-a-comunidade-r-fala-portugu%c3%aas-resources\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity Call \u0026ldquo;A comunidade R fala português\u0026rdquo; Resources\u003c/h3\u003e\u003cp\u003eAll the \u003ca href=\"/commcalls/translation-portuguese/\"\u003eresources for our first community call in português\u003c/a\u003e are now available on our website.\u003c/p\u003e\u003cp\u003eCheck the video, speakers slides, and links to other resources related to translation efforts in the R Community.\u003c/p\u003e\u003ch3 id=\"give-thanks-with-the-allcontributors-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#give-thanks-with-the-allcontributors-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGive Thanks with the allcontributors Package\u003c/h3\u003e\u003cp\u003eMark Padgham published a \u003ca href=\"/blog/2024/11/26/allcontributors/\"\u003eblog post\u003c/a\u003e about his \u003ca href=\"https://docs.ropensci.org/allcontributors/\"\u003eallcontributors package\u003c/a\u003e, which provides a very easy way to acknowledge all contributions to your software.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eJoin us for \u003ca href=\"/blog/2023/06/21/coworking/\"\u003esocial coworking \u0026amp; office hours\u003c/a\u003e monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-12\"\u003eTuesday, December 3rd, 09:00 Australia Western (01:00 UTC)\u003c/a\u003e, \u0026ldquo;Getting Involved in the Antarctic/Southern Ocean rOpenSci Community\u0026rdquo; with cohosts \u003ca href=\"/author/michael-sumner\"\u003eMichael Sumner\u003c/a\u003e and \u003ca href=\"/author/ben-raymond\"\u003eBen Raymond\u003c/a\u003e, and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2018/11/13/antarctic/#demo\"\u003eExplore rOpenSci R packages\u003c/a\u003e supporting Antarctic and Southern Ocean Research.\u003c/li\u003e\u003cli\u003eChat with our cohosts to find out how you can be involved in this community.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2025-01/\"\u003eTuesday, January 14th, 14:00 European Central (13:00 UTC)\u003c/a\u003e, \u0026ldquo;Working with Parquet in R\u0026rdquo; with cohosts \u003ca href=\"/author/rainer-m-krug/\"\u003eRainer M Krug\u003c/a\u003e, and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eRead up on what Parquet is.\u003c/li\u003e\u003cli\u003eExplore how to use Parquet in R.\u003c/li\u003e\u003cli\u003eMeet community host, Rainer Krug, and discuss benefits and tips for using Parquet in R and how you might use it in your work.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following twenty-one packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/rsi\" title=\"Efficiently Retrieve and Process Satellite Imagery\"\u003ersi\u003c/a\u003e (\u003ca href=\"https://github.com/Permian-Global-Research/rsi/releases/tag/v0.3.1\"\u003e\u003ccode\u003ev0.3.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/allcontributors\" title=\"Acknowledge all Contributors to a Project\"\u003eallcontributors\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/allcontributors/releases/tag/v0.2.2\"\u003e\u003ccode\u003ev0.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/av\" title=\"Working with Audio and Video in R\"\u003eav\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/av/releases/tag/v0.9.3\"\u003e\u003ccode\u003ev0.9.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/comtradr\" title=\"Interface with the United Nations Comtrade API\"\u003ecomtradr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/comtradr/releases/tag/v1.0.3\"\u003e\u003ccode\u003ev1.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/FedData\" title=\"Download Geospatial Data Available fromSeveral Federated Data Sources\"\u003eFedData\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/FedData/releases/tag/v4.1.0\"\u003e\u003ccode\u003ev4.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gitignore\" title=\"Create Useful .gitignore Files for your Project\"\u003egitignore\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gitignore/releases/tag/v0.1.8.9000\"\u003e\u003ccode\u003ev0.1.8.9000\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/GLMMcosinor\" title=\"Fit a Cosinor Model Using a Generalized Mixed Modeling Framework\"\u003eGLMMcosinor\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/GLMMcosinor/releases/tag/v0.2.1\"\u003e\u003ccode\u003ev0.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/jagstargets\" title=\"Targets for JAGS Pipelines\"\u003ejagstargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/jagstargets/releases/tag/1.2.2\"\u003e\u003ccode\u003e1.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lingtypology\" title=\"Linguistic Typology and Mapping\"\u003elingtypology\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lingtypology/releases/tag/v1.1.20v1\"\u003e\u003ccode\u003ev1.1.20v1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.11.0\"\u003e\u003ccode\u003ev0.11.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/occCite\" title=\"Querying and Managing Large Biodiversity Occurrence Datasets\"\u003eoccCite\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/occCite/releases/tag/v0.5.9\"\u003e\u003ccode\u003ev0.5.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmapiR\" title=\"OpenStreetMap API\"\u003eosmapiR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmapiR/releases/tag/v0.2.2\"\u003e\u003ccode\u003ev0.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmextract\" title=\"Download and Import Open Street Map Data Extracts\"\u003eosmextract\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmextract/releases/tag/v0.5.2\"\u003e\u003ccode\u003ev0.5.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/readODS\" title=\"Read and Write ODS Files\"\u003ereadODS\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/readODS/releases/tag/v2.3.1\"\u003e\u003ccode\u003ev2.3.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ruODK\" title=\"An R Client for the ODK Central API\"\u003eruODK\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ruODK/releases/tag/v1.5.1\"\u003e\u003ccode\u003ev1.5.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spatsoc\" title=\"Group Animal Relocation Data by Spatial and Temporal Relationship\"\u003espatsoc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spatsoc/releases/tag/v0.2.7\"\u003e\u003ccode\u003ev0.2.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stats19\" title=\"Work with Open Road Traffic Casualty Data from Great Britain\"\u003estats19\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stats19/releases/tag/v3.2.0\"\u003e\u003ccode\u003ev3.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.11.0\"\u003e\u003ccode\u003e0.11.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.9.0\"\u003e\u003ccode\u003e1.9.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/UCSCXenaTools\" title=\"Download and Explore Datasets from UCSC Xena Data Hubs\"\u003eUCSCXenaTools\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/UCSCXenaTools/releases/tag/v1.6.0\"\u003e\u003ccode\u003ev1.6.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/weathercan\" title=\"Download Weather Data from Environment and Climate Change Canada\"\u003eweathercan\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weathercan/releases/tag/v0.7.2\"\u003e\u003ccode\u003ev0.7.2\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are twelve recently closed and active submissions and 7 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"https://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/663\"\u003erredlist\u003c/a\u003e, IUCN Red List Client. Submitted by \u003ca href=\"http://williamgearty.com\"\u003eWilliam Gearty\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/659\"\u003efireexposuR\u003c/a\u003e, Compute and Visualize Wildfire Exposure. Submitted by \u003ca href=\"https://wildfireanalytics.org/forbes.html\"\u003eAir Forbes\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/637\"\u003ecancerprof\u003c/a\u003e, API Client for State Cancer Profiles. Submitted by \u003ca href=\"https://github.com/realbp\"\u003eBrian Park\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/626\"\u003egigs\u003c/a\u003e, Assess Fetal, Newborn, and Child Growth with International Standards. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/658\"\u003embquartR\u003c/a\u003e, Finding Manitoba Quarter Sections. Submitted by \u003ca href=\"http://www.alexkoiter.ca\"\u003eAlex Koiter\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/632\"\u003eQuadratiK\u003c/a\u003e, A Collection of Methods Using Kernel-Based Quadratic Distances for. Submitted by \u003ca href=\"https://github.com/giovsaraceno\"\u003eGiovanni Saraceno\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.rbind.io\"\u003eØystein Sørensen\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/671\"\u003epkgmatch\u003c/a\u003e, Find R Packages Matching Either Descriptions or Other R Packages. Submitted by \u003ca href=\"https://mpadge.github.io\"\u003emark padgham\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/660\"\u003eforcis\u003c/a\u003e, An R Client to Access the FORCIS Database. Submitted by \u003ca href=\"https://nicolascasajus.fr\"\u003eNicolas Casajus\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/10/22/first-time-contributions\"\u003eLooking for Maintainers to Support First-Time Contributors\u003c/a\u003e by Steffi LaZerte and Yanina Bellini Saibene. Announcing a Community Call and Coworking sessions to support first contributions.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/11/26/allcontributors\"\u003eGive Thanks with the allcontributors Package\u003c/a\u003e by Mark Padgham. The allcontributors package helps to given thanks to software contributions.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools/\"\u003ehddtools\u003c/a\u003e, Hydrological Data Discovery Tools. \u003ca href=\"https://github.com/ropensci/hddtools/issues/36\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/circle/\"\u003ecircle\u003c/a\u003e, R client package for the Continuous Integration (CI) provider Circle CI. \u003ca href=\"https://github.com/ropensci/circle/issues/46\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/tic/\"\u003etic\u003c/a\u003e, Tasks Integrating Continuously: CI-Agnostic Workflow Definitions. \u003ca href=\"https://github.com/ropensci/tic/issues/339\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003cp\u003eThe bib2f package, for parsing BibTeX files into tibbles, would need some help! \u003ca href=\"https://github.com/ropensci/bib2df/issues/65\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"positconf2024-session-recordings\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#positconf2024-session-recordings\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eposit::conf(2024) session recordings\u003c/h3\u003e\u003cp\u003eThe recordings of talks at posit::conf(2024) are now available on \u003ca href=\"https://www.youtube.com/playlist?list=PL9HYL-VRX0oSFkdF4fJeY63eGDvgofcbn\"\u003eYouTube\u003c/a\u003e.Particularly relevant for package developers are:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=q4vmmlUEoQg\u0026amp;list=PL9HYL-VRX0oSFkdF4fJeY63eGDvgofcbn\u0026amp;index=85\"\u003eWhy’d you load that package for?\u003c/a\u003e by Luis D. Verde Arregoitia.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=vdwBTbaRYOg\u0026amp;list=PL9HYL-VRX0oSFkdF4fJeY63eGDvgofcbn\u0026amp;index=93\"\u003eOpen-Source Initiatives in Pharma - What\u0026rsquo;s Out There and Why You Should Join\u003c/a\u003e by Nicholas Masel.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=Pw-wvDYD0Ks\u0026amp;list=PL9HYL-VRX0oSFkdF4fJeY63eGDvgofcbn\u0026amp;index=69\"\u003eArt of R Packages: Forging Community with Hex Stickers\u003c/a\u003e by Hubert Halun.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=8uRcB34Hhsw\u0026amp;list=PL9HYL-VRX0oSFkdF4fJeY63eGDvgofcbn\u0026amp;index=3\"\u003eIntroducing Positron, a new data science IDE\u003c/a\u003e by Julia Silge, Isabel Zimmerman, Tom Mock, Jonathan McPherson, Lionel Henry, Davis Vaughan, and Jenny Bryan.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=gegeaoMSgzc\u0026amp;list=PL9HYL-VRX0oSFkdF4fJeY63eGDvgofcbn\u0026amp;index=38\"\u003eContributing to the R Project\u003c/a\u003e by Heather Turner.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=mtUKYGvkXm8\u0026amp;list=PL9HYL-VRX0oSFkdF4fJeY63eGDvgofcbn\u0026amp;index=43\"\u003eAPI-first package design — and learning patchwork in the process\u003c/a\u003e by Thomas Lin Pedersen.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=y2qdvYKKVdc\u0026amp;list=PL9HYL-VRX0oSFkdF4fJeY63eGDvgofcbn\u0026amp;index=50\"\u003e\u0026ldquo;Please Let Me Merge Before I Start Crying\u0026rdquo;: And Other Things I\u0026rsquo;ve Said at The Git Terminal\u003c/a\u003e by Meghan Harris.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=8174mk6SGcU\u0026amp;list=PL9HYL-VRX0oSFkdF4fJeY63eGDvgofcbn\u0026amp;index=57\"\u003eMixing R, Python, and Quarto: Crafting the Perfect Open Source Cocktail\u003c/a\u003e by Alenka Frim \u0026amp; Nic Crane.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u0026hellip; and more! Happy watching.\u003c/p\u003e\u003ch3 id=\"api-packages-and-cran\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#api-packages-and-cran\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAPI packages and CRAN\u003c/h3\u003e\u003cp\u003eDon\u0026rsquo;t miss the blog post \u003ca href=\"https://blog.thecoatlessprofessor.com/programming/r/api-packages-and-cran-requirements/\"\u003eHandling CRAN Requirements for Web API R Packages\u003c/a\u003e by James Balamuta!\u003c/p\u003e\u003cp\u003eAlso relevant, this chapter of the HTTP testing in R book: \u003ca href=\"https://books.ropensci.org/http-testing/cran-preparedness.html\"\u003eCRAN- (and Bioconductor) preparedness for your tests\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"update-your-github-actions-workflow\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#update-your-github-actions-workflow\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdate your GitHub Actions workflow\u003c/h3\u003e\u003cp\u003eIf you were still using version 3 of the Artifacts action, upgrade as your workflows will start \u003ca href=\"https://github.blog/changelog/2024-04-16-deprecation-notice-v3-of-the-artifact-actions/\"\u003efailing\u003c/a\u003e.Thanks to Hugo Gruson for pointing this out!\u003c/p\u003e\u003cp\u003eA tip by Jacob Wujciak-Jens: Github provides the \u003ca href=\"https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot\"\u003edependabot service\u003c/a\u003e that can help you keep actions updated hassle free! Just add the following simple yaml file as \u003ccode\u003e.github/dependabot.yml\u003c/code\u003e in your repo and a friendly bot will open PRs to keep you workflows up to date!\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eversion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eupdates\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003epackage-ecosystem\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;github-actions\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003edirectory\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eschedule\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003einterval\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;monthly\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eopen-pull-requests-limit\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e10\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"an-attack-vector-on-github-actions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#an-attack-vector-on-github-actions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAn attack vector on GitHub Actions\u003c/h3\u003e\u003cp\u003eThanks to Zhian Kamvar for bringing up the article \u003ca href=\"https://unit42.paloaltonetworks.com/github-repo-artifacts-leak-tokens/\"\u003e\u0026ldquo;ArtiPACKED: Hacking Giants Through a Race Condition in GitHub Actions Artifacts\u0026rdquo;\u003c/a\u003e in our slack workspace.In Zhian\u0026rsquo;s words: if you upload an artifact that contains the \u003ccode\u003e.git/\u003c/code\u003e directory of a cloned repo, the \u003ccode\u003eGITHUB_TOKEN\u003c/code\u003e is exposed.While it expires at the end of the run, there is a small delay, which is long enough for a targeted attack.The solution is to set \u003ccode\u003epersist-credentials\u003c/code\u003e: false for every \u003ccode\u003eactions/checkout\u003c/code\u003e run.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/11/29/news-november-2024/","date_published":"2024-11-29T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/sx67b-fkj06","title":"Give Thanks with the allcontributors Package","language":"en","authors":[{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["editor"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["tech-notes","github","how-to","metadata"],"content_html":"\u003cp\u003eThanksgiving is celebrated in \u003ca href=\"https://en.wikipedia.org/wiki/Thanksgiving\"\u003emany parts of the world\u003c/a\u003e.The USA, rOpenSci\u0026rsquo;s official location, celebrates Thanksgiving this Thursday, 28th November.Giving thanks to contributors is also an \u003ca href=\"https://devguide.ropensci.org/maintenance_collaboration.html#attributions\"\u003eimportant part of open-source software development\u003c/a\u003e.Many open-source software projects use the \u003ca href=\"https://allcontributors.org/\"\u003eallcontributors.org system\u003c/a\u003e to acknowledge contributions, which includes\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003ea bot to automate the tedious stuff for adding project contributors, so youcan focus on your project instead of managing your ReadMe.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eOne strong motivation for \u003ca href=\"https://allcontributors.org\"\u003eallcontributors.org\u003c/a\u003e is to \u0026ldquo;Recognize all contributors, including those that don\u0026rsquo;t push code.\u0026rdquo;Usage of the bot is described in \u003ca href=\"https://allcontributors.org/docs/en/bot/usage\"\u003ethe documentation\u003c/a\u003e.Acknowledgement happens through commit comments, which generally follow the format:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e@all-contributors please add @\u0026lt;username\u0026gt; \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u0026lt;contributions\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ewhere \u0026ldquo;\u0026lt;contributions\u0026gt;\u0026rdquo; can be one of a large variety of \u003ca href=\"https://allcontributors.org/docs/en/emoji-key\"\u003econtribution types\u003c/a\u003e, such as \u0026ldquo;code\u0026rdquo;, \u0026ldquo;doc\u0026rdquo;, or any one of 33 currently recognized contribution types.\u003c/p\u003e\u003cp\u003eThis system is great, it is widely used, and we encourage everybody to please use it!It nevertheless has two disadvantages:\u003c/p\u003e\u003col\u003e\u003cli\u003eit requires you to remember to acknowledge contributions through commit comments, with an encouragement to comment as close as possible to the time of the contribution.If you forget, you can comment at some later time, but it will then be more difficult to connect that acknowledgement with the contribution.If you forget entirely, the contribution will never be acknowledged.It is up to the software maintainers to actively remember to acknowledge contributions, a task which can \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003esometimes be quite a burden\u003c/a\u003e!\u003c/li\u003e\u003cli\u003eAcknowledgements are packed together in a single \u0026ldquo;Contributors\u0026rdquo; section, with little ability to customize the appearance, and no ability to link contributors to their actual contributions.\u003c/li\u003e\u003c/ol\u003e\u003ch2 id=\"the-allcontributors-r-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-allcontributors-r-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe allcontributors R package\u003c/h2\u003e\u003cp\u003eThese two disadvantages motivated us to develop our own way to acknowledge all contributors: The \u003ca href=\"https://docs.ropensci.org/allcontributors/\"\u003eallcontributors R package\u003c/a\u003e.The package enables all contributions to be acknowledged without you having to actively remember to do so, and also allows flexible customization of how your contributors appear.It can even be run as a \u003ca href=\"https://github.com/ropensci/allcontributors/blob/main/.github/workflows/allcontributors.yml\"\u003eGitHub workflow\u003c/a\u003e so your contributors will always be acknowledged without you ever having to remember to do so at all.\u003c/p\u003e\u003cp\u003eBefore describing how it works, and why we think you should use it, it is important to note that, unlike the truly general \u003ca href=\"https://allcontributors.org\"\u003eallcontributors.org\u003c/a\u003e system, rOpenSci\u0026rsquo;s \u003ca href=\"https://docs.ropensci.org/allcontributors/\"\u003eallcontributors R package\u003c/a\u003e can only acknowledge contributions that are recorded in the git log of a repository, or via GitHub interactions.This effectively reduces the 33 different kinds of contributions in the former system down to a much smaller subset, excluding the kinds of contributions not likely to appear in actual commits or issue comments, such as planning, finances, or general organisational tasks.\u003c/p\u003e\u003cp\u003eIf you think acknowledging these kinds of contributions may be important for your project, then please use the original \u003ca href=\"https://allcontributors.org\"\u003eallcontributors.org\u003c/a\u003e system, rather than our package.We are nevertheless convinced that our package offers important advantages including:\u003c/p\u003e\u003ch3 id=\"you-never-need-to-worry-about-forgetting-to-acknowledge-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#you-never-need-to-worry-about-forgetting-to-acknowledge-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eYou never need to worry about forgetting to acknowledge contributions\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://docs.ropensci.org/allcontributors/\"\u003eallcontributors package\u003c/a\u003e has only one main function which you\u0026rsquo;ll likely ever need, \u003ca href=\"https://docs.ropensci.org/allcontributors/reference/add_contributors.html\"\u003e\u003ccode\u003eadd_contributors()\u003c/code\u003e\u003c/a\u003e. This function includes a large number of parameters, all of which are set to sensible default values that should work for most projects.Simply running \u003ca href=\"https://docs.ropensci.org/allcontributors/reference/add_contributors.html\"\u003e\u003ccode\u003eadd_contributors()\u003c/code\u003e\u003c/a\u003e in the root directory of your repository will automatically add or update your lists of contributors.An even simpler option is to run the function regularly via a \u003ca href=\"https://github.com/ropensci/allcontributors/blob/main/.github/workflows/allcontributors.yml\"\u003eGitHub workflow\u003c/a\u003e, so you\u0026rsquo;ll never need to worry about forgetting to update your allcontributors lists.The \u003ca href=\"https://docs.ropensci.org/allcontributors/\"\u003eallcontributors package\u003c/a\u003e includes a demonstration \u003ca href=\"https://github.com/ropensci/allcontributors/blob/main/.github/workflows/allcontributors.yml\"\u003eworkflow file\u003c/a\u003e, which you can simply copy into your own repository.From the first commit of that file, your allcontributors list will be automatically updated on every push, as well as at regular intervals as defined at the top of that file.Regardless of how you update your lists, and no matter how long after the contribution this function is called, contributions will always be acknowledged.\u003c/p\u003e\u003ch3 id=\"contributors-are-linked-directly-to-their-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#contributors-are-linked-directly-to-their-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eContributors are linked directly to their contributions\u003c/h3\u003e\u003cp\u003eBy restricting acknowledgement to git and GitHub, the \u003ca href=\"https://docs.ropensci.org/allcontributors/\"\u003eallcontributors package\u003c/a\u003e can link each acknowledged contributor directly to a GitHub link of their contributions.See, for example, the \u003ca href=\"https://github.com/ropensci/allcontributors/?tab=readme-ov-file#contributors\"\u003eREADME of this package\u003c/a\u003e, where clicking on the image of any contributor leads to their profile, while clicking on their handles below the images leads to their actual contributions. (The \u003ca href=\"https://allcontributors.org\"\u003eallcontributors.org\u003c/a\u003e system, in contrasts, only provides links to contributors GitHub profiles, but not to their actual contributions.)\u003c/p\u003e\u003ch3 id=\"you-can-organise-your-contributions-the-way-you-like\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#you-can-organise-your-contributions-the-way-you-like\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eYou can organise your contributions the way you like\u003c/h3\u003e\u003cp\u003eThe array of parameters accepted by \u003ca href=\"https://docs.ropensci.org/allcontributors/reference/add_contributors.html\"\u003ethe \u003ccode\u003eadd_contributors()\u003c/code\u003e function`\u003c/a\u003e helps to arrange your allcontributors section any way, and anywhere, you like.Because the package is restricted to contributions from git and GitHub, the sources of contributions are grouped into code, issue authors, and issue comments.The ways contributions from these three sources are arranged in your README (or wherever else you might choose) can nevertheless be customized almost any way you like, as described in \u003ca href=\"https://docs.ropensci.org/allcontributors/reference/add_contributors.html\"\u003ethe function documentation\u003c/a\u003e, and demonstrated in \u003ca href=\"https://docs.ropensci.org/allcontributors/articles/allcontributors.html\"\u003ethe main package vignette\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"go-forth-and-give-thanks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#go-forth-and-give-thanks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGo forth and give thanks!\u003c/h2\u003e\u003cp\u003eIn the spirit of Thanksgiving, we encourage all developers of packages both within rOpenSci and beyond to acknowledge contributions wherever and whenever possible.If you care about acknowledging contributions of any type whatsoever, whether directly to your code or beyond it, then please use \u003ca href=\"https://allcontributors.org\"\u003eallcontributors.org\u003c/a\u003e and the \u003ccode\u003e@all-contributors\u003c/code\u003e bot.\u003c/p\u003e\u003cp\u003eIf instead you prefer a system that can simply automate-away the inconvenience of having to remember your acknowledgements in commit comments, which gives you more flexibility in how contributions appear, and which links contributors directly to their actual contributions, then please use our \u003ca href=\"https://docs.ropensci.org/allcontributors/\"\u003eallcontributors R package\u003c/a\u003e.For even greater ease, you can copy \u003ca href=\"https://github.com/ropensci/allcontributors/blob/main/.github/workflows/allcontributors.yml\"\u003eour GitHub workflow file\u003c/a\u003e to automatically update your contributors lists.If you manage package releases with the \u003ca href=\"https://usethis.r-lib.org/reference/use_release_issue.html\"\u003e\u003ccode\u003eusethis::use_release_issue()\u003c/code\u003e function\u003c/a\u003e, you can also add a small helper function to include an item there to remind you to update your allcontributors lists prior to release.See the \u003ca href=\"https://docs.ropensci.org/allcontributors/\"\u003eallcontributors README\u003c/a\u003e for more detail.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/11/26/allcontributors/","date_published":"2024-11-26T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/76jc2-ry443","title":"rOpenSci News Digest, October 2024","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2024/10/23/news-october-2024\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"fostering-open-science-in-latin-america-czi-awards-funds-for-sustainable-research-software-development\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#fostering-open-science-in-latin-america-czi-awards-funds-for-sustainable-research-software-development\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFostering open science in Latin America: CZI awards funds for sustainable research software development\u003c/h3\u003e\u003cp\u003eExciting News!The Chan Zuckerberg Initiative has awarded rOpenSci a new grant to foster sustainable scientific software as a pillar of Open Science in Latin America by building capacity and community.With this $340K grant, we’re planning to launch a Spanish-language version of our Champions Program, along with other new initiatives to make sustainable software development more accessible to researchers across the region.Read more in our \u003ca href=\"/blog/2024/10/10/czi-latam-grant/\"\u003eannouncement\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"r-universe-interactive-tour\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-interactive-tour\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-Universe interactive tour\u003c/h3\u003e\u003cp\u003eEach package page on R-universe now features a guided tour built with intro.js, so that you might get an overview of all information presented on package pages.To start the tour, click on the \u0026ldquo;Website Tour\u0026rdquo; button on the navbar \u0026ndash; note that it does not work on mobile devices.Example: \u003ca href=\"https://r-lib.r-universe.dev/xml2\"\u003exml2 package\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"the-ropensci-community-at-upcoming-events\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-ropensci-community-at-upcoming-events\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe rOpenSci community at upcoming events\u003c/h3\u003e\u003cp\u003erOpenSci Community Manager \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e will deliver a keynote talk at \u003ca href=\"/events/carpentryconnect-2024/\"\u003eBioNT Community Event \u0026amp; CarpentryConnect-Heidelberg 2024\u003c/a\u003e, on November 14th in Heidelberg, Germany.\u003c/p\u003e\u003cp\u003eSeveral members of the rOpenSci community will be part of this year’s \u003ca href=\"/events/latinr-2024/\"\u003eLatinR—Latin American Conference About the Use of R in R\u0026amp;D\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/will-landau/\"\u003eWill Landau\u003c/a\u003e and \u003ca href=\"/author/julia-silge/\"\u003eJulia Silge\u003c/a\u003e are the keynote speakers of the conference!\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/fran%C3%A7ois-michonneau/\"\u003eFrançois Michonneau\u003c/a\u003e will teach the tutorial \u003ca href=\"https://www.eventbrite.cl/e/tutorial-working-with-larger-than-memory-data-in-r-with-arrow-and-duckdb-tickets-1044938257457?utm-campaign=social\u0026amp;utm-content=attendeeshare\u0026amp;utm-medium=discovery\u0026amp;utm-term=listing\u0026amp;utm-source=cp\u0026amp;aff=ebdsshcopyurl\"\u003eWorking with larger than memory data in R with Arrow and DuckDB\u003c/a\u003e in English. Tuesday, November 19th. 10:00 to 12:00 UTC -3.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/author/beatriz-milz/\"\u003eBeatriz Milz\u003c/a\u003e and \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYani Bellini Saibene\u003c/a\u003e tutorial \u003ca href=\"https://www.eventbrite.cl/e/introduccion-a-github-para-investigadoraes-tickets-1045617188157?utm-campaign=social\u0026amp;utm-content=attendeeshare\u0026amp;utm-medium=discovery\u0026amp;utm-term=listing\u0026amp;utm-source=cp\u0026amp;aff=ebdsshcopyurl\"\u003eIntroduccion a Github para Investigador(a|e)s\u003c/a\u003e in Spanish. Monday, November 18th. 14:00 to 17:00 UTC -3.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003erOpenSci also organizes one of the satellite event \u003ca href=\"https://www.eventbrite.cl/e/traducao-hackathon-traslaton-ropensci-tickets-1045507530167\"\u003eTradução + Hackathon = Traslaton rOpenSci\u003c/a\u003e with \u003ca href=\"/author/pedro-faria/\"\u003ePedro Faria\u003c/a\u003e, \u003ca href=\"/author/francesca-belem-lopes-palmeira/\"\u003eFrancesca Palmeira\u003c/a\u003e, \u003ca href=\"/author/beatriz-milz/\"\u003eBeatriz Milz\u003c/a\u003e, and \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYani Bellini Saibene\u003c/a\u003e: we will get together to learn about rOpenSci and how to contribute to the \u003ca href=\"https://github.com/orgs/ropensci/projects/7\"\u003ePortuguese translation project\u003c/a\u003e. Monday, November 18th. 10:00 to 12:00 UTC-3. (\u003ca href=\"https://www.timeanddate.com/worldclock/fixedtime.html?msg=Tradu%C3%A7%C3%A3o+%2B+Hackathon+%3D+Traslaton+rOpenSci\u0026amp;iso=20241118T10\u0026amp;p1=51\u0026amp;ah=1\"\u003efind your time\u003c/a\u003e)\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003ca href=\"/events/latinr-2024/\"\u003eCheck the full list of talks and other events were rOpenSci members will be participating\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"ropensci-at-uk-research-software-engineers-conference\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-at-uk-research-software-engineers-conference\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci at UK Research Software Engineers conference\u003c/h3\u003e\u003cp\u003eThe eighth annual \u003ca href=\"https://rsecon24.society-rse.org/\"\u003eUK Research Software Engineering conference\u003c/a\u003e took place in Newcastle from September 3rd to 5th.\u003ca href=\"/author/mark-padgham\"\u003eMark Padgham\u003c/a\u003e presented a talk  on \u0026ldquo;\u003cem\u003erOpenSci statistical software peer-review: The importance and challenge of community engagement\u003c/em\u003e\u0026rdquo;.The talk was second in a two-part session devoted to software peer review, and followed a \u003ca href=\"https://virtual.oxfordabstracts.com/event/49081/submission/69\"\u003ewalk-through demonstration of the process of submissing to Journal of Open Source software\u003c/a\u003e.Find \u003ca href=\"https://mpadge.github.io/presentations/2024/rseconf/\"\u003eMark\u0026rsquo;s slides\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"our-first-community-call-in-portuguese\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#our-first-community-call-in-portuguese\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOur first community call in Portuguese!\u003c/h3\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"/commcalls/translation-portuguese/\"\u003eA comunidade R fala português\u003c/a\u003e\u003c/strong\u003e🕓 Wednesday, 06 November 2024 13:00 UTCWith \u003ca href=\"/author/pedro-faria/\"\u003ePedro Faria\u003c/a\u003e, \u003ca href=\"/author/beatriz-milz/\"\u003eBeatriz Milz\u003c/a\u003e, \u003ca href=\"/author/francesca-belem-lopes-palmeira/\"\u003eFrancesca Belem Lopes Palmeira\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe R Community is carrying out several translations into Portuguese of different resources: books, packages and guides.\u003c/p\u003e\u003cp\u003eIn this community call, three leaders from the Portuguese-speaking community will present their experiences leading and being part of these projects and share how we can participate in these efforts, including rOpenSci Developer Guide translation project.\u003c/p\u003e\u003cp\u003eThis community call will be followed by a \u003ca href=\"https://www.eventbrite.cl/e/traducao-hackathon-traslaton-ropensci-tickets-1045507530167\"\u003etraslaton at LatinR\u003c/a\u003e, for those who want to contribute.\u003c/p\u003e\u003ch3 id=\"looking-for-maintainers-to-support-first-time-contributors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#looking-for-maintainers-to-support-first-time-contributors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLooking for Maintainers to Support First-Time Contributors\u003c/h3\u003e\u003cp\u003eMaking your first contribution to Open Source can be both empowering and intimidating. As such, we’re exited to announce a special series of activities to support first-time contributors to rOpenSci packages! 🎉\u003c/p\u003e\u003cp\u003eAre you an rOpenSci package maintainer who would like to help someone make their first contribution?\u003c/p\u003e\u003cp\u003eSee our \u003ca href=\"https://ropensci.org/blog/2024/10/22/first-time-contributions/\"\u003eblog post\u003c/a\u003e for more details and how to sign up (by November 24).\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-11\"\u003eTuesday, November 5th, 09:00 Americas Pacific (17:00 UTC)\u003c/a\u003e, \u0026ldquo;Getting to know Openscapes\u0026rdquo; with cohost \u003ca href=\"/author/stefanie-butland\"\u003eStefanie Butland\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eLook up \u003ca href=\"https://openscapes.org/\"\u003eOpenscapes\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eChat with our cohost to learn more about the Openscapes organization, and how they use R to automate creating open education infrastructure.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-12\"\u003eTuesday, December 3rd, 09:00 Australia Western (01:00 UTC)\u003c/a\u003e, \u0026ldquo;Getting Involved in the Antarctic/Southern Ocean rOpenSci Community\u0026rdquo; with cohosts \u003ca href=\"/author/michael-sumner\"\u003eMichael Sumner\u003c/a\u003e and \u003ca href=\"/author/ben-raymond\"\u003eBen Raymond\u003c/a\u003e, and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2018/11/13/antarctic/#demo\"\u003eExplore rOpenSci R packages\u003c/a\u003e supporting Antarctic and Southern Ocean Research.\u003c/li\u003e\u003cli\u003eChat with our cohosts to find out how you can be involved in this community.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following five packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/pkgmatch\"\u003epkgmatch\u003c/a\u003e, developed by Mark Padgham: Find R packages matching either descriptions or other R packages.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/rsi\"\u003ersi\u003c/a\u003e, developed by Michael Mahoney: Downloads spatial data from spatiotemporal asset catalogs (STAC), computes standard spectral indices from the Awesome Spectral Indices project (Montero et al. (2023) \u003ca href=\"doi:10.1038/s41597-023-02096-0\"\u003edoi:10.1038/s41597-023-02096-0\u003c/a\u003e) against raster data, and glues the outputs together into predictor bricks. Methods focus on interoperability with the broader spatial ecosystem; function arguments and outputs use classes from sf and terra, and data downloading functions support complex CQL2 queries using rstac.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=rsi\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/636\"\u003ereviewed\u003c/a\u003e by Felipe Carvalho and Michael Sumner.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/allcontributors\"\u003eallcontributors\u003c/a\u003e, developed by Mark Padgham together with Chris Hartgerink: Acknowledge all contributors to a project via a single function call. The function appends to a README or other specified file(s) a table with names of all individuals who contributed via code or repository issues. The package also includes several additional functions to extract and quantify contributions to any repository.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=allcontributors\"\u003eCRAN\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/chopin\"\u003echopin\u003c/a\u003e, developed by Insang Song together with Kyle Messier: Geospatial data computation is parallelized by grid, hierarchy, or raster files. Based on future and mirai parallel backends, terra and sf functions as well as convenience functions in the package can be distributed over multiple threads. The simplest way of parallelizing generic geospatial computation is to start from \u003ccode\u003epar_pad_*\u003c/code\u003e functions to \u003ccode\u003epar_grid\u003c/code\u003e, \u003ccode\u003epar_hierarchy\u003c/code\u003e, or \u003ccode\u003epar_multirasters\u003c/code\u003e functions. Virtually any functions accepting classes in terra or sf packages can be used in the three parallelization functions. A common raster-vector overlay operation is provided as a function \u003ccode\u003eextract_at\u003c/code\u003e, which uses exactextractr, with options for kernel weights for summarizing raster values at vector geometries. Other convenience functions for vector-vector operations including simple areal interpolation (\u003ccode\u003esummarize_aw\u003c/code\u003e) and summation of exponentially decaying weights (\u003ccode\u003esummarize_sedc\u003c/code\u003e) are also provided. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/638\"\u003ereviewed\u003c/a\u003e by Alec L. Robitaille and Eric R. Scott.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/eDNAjoint\"\u003eeDNAjoint\u003c/a\u003e, developed by Abigail G. Keller: Models integrate environmental DNA (eDNA) detection data and traditional survey data to jointly estimate species catch rate (see package vignette: \u003ca href=\"https://ednajoint.netlify.app/\"\u003ehttps://ednajoint.netlify.app/\u003c/a\u003e). Models can be used with count data via traditional survey methods (i.e., trapping, electrofishing, visual) and replicated eDNA detection/nondetection data via polymerase chain reaction (i.e., PCR or qPCR) from multiple survey locations. Estimated parameters include probability of a false positive eDNA detection, a site-level covariates that scale the sensitivity of eDNA surveys relative to traditional surveys, and catchability coefficients for traditional gear types. Models are implemented with a Bayesian framework (Markov chain Monte Carlo) using the Stan probabilistic programming language.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=eDNAjoint\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/642\"\u003ereviewed\u003c/a\u003e by Chitra M. Saraswati and Saras M. Windecker.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following eleven packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/pkgmatch\" title=\"Find R Packages Matching Either Descriptions or Other R Packages\"\u003epkgmatch\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/pkgmatch/releases/tag/v0.4.0\"\u003e\u003ccode\u003ev0.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rsi\" title=\"Efficiently Retrieve and Process Satellite Imagery\"\u003ersi\u003c/a\u003e (\u003ca href=\"https://github.com/Permian-Global-Research/rsi/releases/tag/v0.3.0\"\u003e\u003ccode\u003ev0.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/charlatan\" title=\"Make Fake Data\"\u003echarlatan\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/charlatan/releases/tag/v0.6.1\"\u003e\u003ccode\u003ev0.6.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/git2r\" title=\"Provides Access to Git Repositories\"\u003egit2r\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/git2r/releases/tag/v0.35.0\"\u003e\u003ccode\u003ev0.35.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.10.7\"\u003e\u003ccode\u003ev0.10.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgbif\" title=\"Interface to the Global Biodiversity Information Facility API\"\u003ergbif\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgbif/releases/tag/v3.8.1\"\u003e\u003ccode\u003ev3.8.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/riem\" title=\"Accesses Weather Data from the Iowa Environment Mesonet\"\u003eriem\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/riem/releases/tag/v0.3.2\"\u003e\u003ccode\u003ev0.3.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ruODK\" title=\"An R Client for the ODK Central API\"\u003eruODK\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ruODK/releases/tag/v1.5.0\"\u003e\u003ccode\u003ev1.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spatsoc\" title=\"Group Animal Relocation Data by Spatial and Temporal Relationship\"\u003espatsoc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spatsoc/releases/tag/v0.2.6\"\u003e\u003ccode\u003ev0.2.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.8.0\"\u003e\u003ccode\u003e1.8.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/tidyhydat\" title=\"Extract and Tidy Canadian Hydrometric Data\"\u003etidyhydat\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidyhydat/releases/tag/v0.7.0\"\u003e\u003ccode\u003ev0.7.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are thirteen recently closed and active submissions and 6 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/636\"\u003ersi\u003c/a\u003e, Efficiently Retrieve and Process Satellite Imagery. Submitted by \u003ca href=\"https://mm218.dev/\"\u003eMichael Mahoney\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"https://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/637\"\u003ecancerprof\u003c/a\u003e, API Client for State Cancer Profiles. Submitted by \u003ca href=\"https://github.com/realbp\"\u003eBrian Park\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/626\"\u003egigs\u003c/a\u003e, Assess Fetal, Newborn, and Child Growth with International Standards. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/653\"\u003eemodnet.wfs\u003c/a\u003e, Access EMODnet Web Feature Service data through R. Submitted by \u003ca href=\"https://masalmon.eu/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/632\"\u003eQuadratiK\u003c/a\u003e, A Collection of Methods Using Kernel-Based Quadratic Distances for. Submitted by \u003ca href=\"https://github.com/giovsaraceno\"\u003eGiovanni Saraceno\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.rbind.io\"\u003eØystein Sørensen\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/663\"\u003erredlist\u003c/a\u003e, IUCN Red List Client. Submitted by \u003ca href=\"http://williamgearty.com\"\u003eWilliam Gearty\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/660\"\u003eforcis\u003c/a\u003e, An R Client to Access the FORCIS Database. Submitted by \u003ca href=\"https://nicolascasajus.fr\"\u003eNicolas Casajus\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/659\"\u003efireexposuR\u003c/a\u003e, Compute and Visualize Wildfire Exposure. Submitted by \u003ca href=\"https://wildfireanalytics.org/forbes.html\"\u003eAir Forbes\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/658\"\u003embquartR\u003c/a\u003e, Finding Manitoba Quarter Sections. Submitted by \u003ca href=\"http://www.alexkoiter.ca\"\u003eAlex Koiter\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/10/10/czi-latam-grant\"\u003eFostering Open Science in Latin America: CZI Awards Funds for Sustainable Research Software Development\u003c/a\u003e by Yanina Bellini Saibene. Foster sustainable scientific software as a pillar of open science in Latin America through building capacity and community. Other languages: \u003ca href='/es/blog/2024/10/10/czi-america-latina-grant' lang='es'\u003eFomentando la Ciencia Abierta en América Latina: CZI otorga fondos para el desarrollo sostenible de software de investigación (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/10/22/first-time-contributions\"\u003eLooking for Maintainers to Support First-Time Contributors\u003c/a\u003e by Steffi LaZerte and Yanina Bellini Saibene. Announcing a Community Call and Coworking sessions to support first contributions.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/01/qualtrics-call-help/\"\u003eHelp make qualtRics better! Code contributions wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/27/assertr-call-help/\"\u003eHelp make assertr better! Come close issues\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/29/targets-call-help/\"\u003eHelp users and developers of targets by answering questions!\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/19/waywiser-call-help/\"\u003eHelp make waywiser better! User requests wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAlso refer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"using-property-based-testing-in-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#using-property-based-testing-in-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUsing property-based testing in R\u003c/h3\u003e\u003cp\u003eWant to add more variation to your test cases?Don\u0026rsquo;t miss Etienne Bacher\u0026rsquo;s post \u003ca href=\"https://www.etiennebacher.com/posts/2024-10-01-using-property-testing-in-r/\"\u003eUsing property-based testing in R\u003c/a\u003e where he explains \u003cem\u003e\u0026ldquo;Property-based testing is a way of testing where we give random inputs to the function we want to test and we want to ensure that no matter the inputs, the output will respect some properties.\u0026rdquo;\u003c/em\u003e.The post includes examples.\u003c/p\u003e\u003ch3 id=\"useful-functions-for-comparing-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#useful-functions-for-comparing-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUseful functions for comparing versions\u003c/h3\u003e\u003cp\u003eIf you need to compare versions in your code, for instance installed version and version at which a feature was added, these two functions might prove handy:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003enumeric_version()\u003c/code\u003e from base R that, given a string representation of a version, creates an object you can for instance compare. \u003ca href=\"https://github.com/search?q=repo%3Agreta-dev%2Fgreta%20numeric_version\u0026amp;type=code\"\u003eExample usage in the greta R package\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003ccode\u003eutils::compareVersion()\u003c/code\u003e that compares string representations of versions. \u003ca href=\"https://github.com/ropensci/targets/blob/9843fbd6cb31d2d4936cd0d96f1c06da2831a2d1/R/utils_assert.R#L611\"\u003eExample usage in the targets R package\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"create-and-use-a-custom-roxygen2-tag\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#create-and-use-a-custom-roxygen2-tag\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCreate and use a custom roxygen2 tag\u003c/h3\u003e\u003cp\u003eIn a \u003ca href=\"https://masalmon.eu/2024/09/03/roxygen2-custom-tag/\"\u003eblog post\u003c/a\u003e, Maëlle Salmon describes how to create and use a simple custom roxygen2 tag that adds a section to the Rd file.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/10/23/news-october-2024/","date_published":"2024-10-23T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/36jse-ebg83","title":"Looking for Maintainers to Support First-Time Contributors","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["editor"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","maintenance","contributions","events","welcome","beginner"],"content_html":"\u003cp\u003eDo you remember your first contribution to open source?Or are you still waiting to make it?\u003c/p\u003e\u003cp\u003eContributing to open source can be very rewarding, but also incredibly intimidating.When we asked about first time contributions on the \u003ca href=\"https://contributing.ropensci.org/resources.html#channels\"\u003erOpenSci Slack\u003c/a\u003e,people recalled the challenges and mistakes they made, but mostly how much they learned from and enjoyed that experience.For open source maintainers, contributions can also lead to mixed feelings,as reviewing contributions and making your repository contributor-friendly\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e can take time.Despite this, contributions can super helpful and mentoring contributors is rewarding!\u003c/p\u003e\u003cp\u003eBecause of both the value and the challenge to both contributors and maintainers,we\u0026rsquo;re exited to announce a special series of activities to support first contributors to rOpenSci packages 🎉.\u003c/p\u003e\u003cp\u003eThese activities consist of\u003c/p\u003e\u003cul\u003e\u003cli\u003ea \u003cstrong\u003eCommunity Call \u0026ldquo;Making and Supporting First Time Contributions\u0026rdquo;\u003c/strong\u003e (January 2025), and\u003c/li\u003e\u003cli\u003etwo \u003cstrong\u003e2-hour Coworking (mini-hack-a-thon) Sessions\u003c/strong\u003e (January-March 2025)\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExact dates and times will depend on the availability of speakers and maintainers.\u003c/p\u003e\u003cp\u003eIn the Community Call we\u0026rsquo;ll discus how maintainers can benefit from and support contributors,as well as how to go about making contributions and why you might want to.\u003c/p\u003e\u003cp\u003eIn the coworking sessions rOpenSci staff will support rOpenSci package maintainersand contributors in making contributions.As a contributor, you can come to the coworking session to work with others or ask questions andyou can continue to contribute throughout the week as part of this activity(of course you can \u003ca href=\"https://contributing.ropensci.org/resources.html#issues\"\u003econtinue to contribute\u003c/a\u003e afterwards as well).\u003c/p\u003e\u003cp\u003eIf this sounds interesting, keep an eye on the \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page, our social media feeds on\u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon\u003c/a\u003e and\u003ca href=\"https://www.linkedin.com/company/ropensci/\"\u003eLinkedIn\u003c/a\u003e, or the rOpenSci \u003ca href=\"/news\"\u003eNewsletter\u003c/a\u003eto hear when the dates are settled.\u003c/p\u003e\u003cp\u003eIn the meanwhile we\u0026rsquo;re looking for some interested maintainers\u0026hellip;\u003c/p\u003e\u003ch2 id=\"a-call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA call for maintainers\u003c/h2\u003e\u003cp\u003eBecause we want this to be an enjoyable and valuable experience for everyone,we want to solicit support from maintainers of \u003cdel\u003erOpenSci\u003c/del\u003e R packages.For each coworking mini-hack-a-thon, we\u0026rsquo;re looking for about 5 maintainers to support participants inmaking contributions to their packages.\u003c/p\u003e\u003cp\u003eHowever, we know that maintenance can be a challenge\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e and finding the timeto support others can also be difficult. That\u0026rsquo;s why we\u0026rsquo;re happy to announce thatwe have funding\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e to offer a stipend to maintainers who participate.\u003c/p\u003e\u003cp\u003eTo participate, we ask that maintainers fill out the application form (below) by \u003cstrong\u003eDec 9th, 2024 \u003cdel\u003eNov 24th, 2024\u003c/del\u003e\u003c/strong\u003e\u003csup id=\"fnref:4\"\u003e\u003ca href=\"#fn:4\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e4\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eThen, if participating, we ask that maintainers\u003c/p\u003e\u003cul\u003e\u003cli\u003eWork with rOpenSci staff to pick dates/times for the coworking events which best work for everyone.\u003c/li\u003e\u003cli\u003e\u003ca href=\"/blog/2023/09/19/help-wanted/\"\u003eCreate and/or identify issues\u003c/a\u003e inyour R \u003cdel\u003erOpenSci\u003c/del\u003e repository as \u0026lsquo;Help wanted\u0026rsquo; and \u0026lsquo;Good first issue\u0026rsquo;. These canrange from documentation to coding changes. We just ask that some issues are relatively accessible to contributors with less experience.\u003c/li\u003e\u003cli\u003eAttend one of the Coworking sessions to be available to offer advice or answer questions.\u003c/li\u003e\u003cli\u003eHave some availability before and after the Coworking event to respond via GitHub and Slack toissues, comments, or PRs which may arise from contributors outside of the two-hour coworking slot.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIf you participate, you can also expect that\u003c/p\u003e\u003cul\u003e\u003cli\u003eWe will connect with you before the events to find a date/time for the coworking sessions andsee if you have any questions regarding issue-labelling or the coworking sessions.\u003c/li\u003e\u003cli\u003eWe will be available to support you during the Coworking sessions on Zoom,as well as on GitHub, Slack, or by email before and after.\u003c/li\u003e\u003cli\u003eYou will receive a $200 USD stipend to help offset the time you spend teaching and mentoring these new contributors.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"interested-in-participating\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#interested-in-participating\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eInterested in participating?\u003c/h3\u003e\u003cp\u003e\u003cstrong\u003ePlease fill out \u003ca href=\"https://airtable.com/appRpJelSoXWcYCG1/shrgFCAdgR4g8k45Q\"\u003ean application form\u003c/a\u003e by Dec 9th, 2024 \u003cdel\u003eNov 24th, 2024.\u003c/del\u003e\u003c/strong\u003e\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eNote:\u003c/strong\u003e We understand that without dates/times, you can\u0026rsquo;t fully commit to being available,but once we know who is interested in participating, we will try to find a time that works for everyone!\u003c/p\u003e\u003ch2 id=\"want-to-contribute-to-open-source-software\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#want-to-contribute-to-open-source-software\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWant to contribute to Open Source Software?\u003c/h2\u003e\u003cp\u003eGreat! These events are designed to support first time contributors, but any and all contributors are welcome!Stay tuned for more announcements about the Community Call date and dates of the Coworking sessions.Once we know which maintainers will be participating we\u0026rsquo;ll have a better idea of exactly when things will happen.\u003c/p\u003e\u003cp\u003eAnd remember, although these Coworking sessions will be a great time to participate,you can also make contributions asynchronously in the week around the event,or any other time by checking out issues on our \u003ca href=\"/help-wanted/\"\u003eHelp Wanted\u003c/a\u003e page.\u003c/p\u003e\u003ch2 id=\"resources\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#resources\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eResources\u003c/h2\u003e\u003cul\u003e\u003cli\u003eBlog: \u003ca href=\"/blog/2022/06/14/communication-with-contributors-in-an-open-source-organization/\"\u003eCommunication \u0026amp; Collaboration with Contributors in an Open-Source Organization\u003c/a\u003e\u003c/li\u003e\u003cli\u003eBlog: \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e\u003c/li\u003e\u003cli\u003eBlog: \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/\"\u003eMaintain or Co-Maintain an rOpenSci Package!\u003c/a\u003e\u003c/li\u003e\u003cli\u003eBlog: \u003ca href=\"/blog/2023/09/19/help-wanted/\"\u003eAttract Contributors with \u0026lsquo;help wanted\u0026rsquo; Issues\u003c/a\u003e\u003c/li\u003e\u003cli\u003eCommunity Call: \u003ca href=\"/commcalls/apr2021-pkg-community/\"\u003eSet Up Your Package to Foster a Community\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eSee blog posts\u003ca href=\"/blog/2023/09/19/help-wanted/\"\u003eAttract Contributors with \u0026lsquo;help wanted\u0026rsquo; Issues\u003c/a\u003e and\u003ca href=\"/blog/2021/04/28/commcall-pkg-community/\"\u003eSet Up Your Package to Foster a Community \u0026ndash; Community Call Summary\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eSee blog posts\u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e and\u003ca href=\"/blog/2024/08/20/my-experience-with-long-term-maintenance-of-an-r-package/\"\u003eMy Experience With Long Term Maintenance Of An R Package\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eThanks to a \u003ca href=\"https://numfocus.org/programs/small-development-grants\"\u003eNumFocus Small Development Grant\u003c/a\u003e 🎉\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:4\"\u003e\u003cp\u003eAs we won\u0026rsquo;t have room for more than about 10 maintainers, we may need to select from among the applications, depending how many we receive.\u0026#160;\u003ca href=\"#fnref:4\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2024/10/22/first-time-contributions/","date_published":"2024-10-22T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/zxmfb-h8022","title":"Fostering Open Science in Latin America: CZI Awards Funds for Sustainable Research Software Development","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["grant","funding","community","capacity building","Champions Program","multilingual"],"content_html":"\u003cp\u003e\u003cstrong\u003eExciting News!\u003c/strong\u003e The Chan Zuckerberg Initiative has awarded rOpenSci a new grant to foster sustainable scientific software as a pillar of Open Science in Latin America by building capacity and community. With this $340K grant, we’re planning to launch a Spanish-language version of our Champions Program, along with other new initiatives to make sustainable software development more accessible to researchers across the region. Let’s dive into how this project will support Latin American scientists.\u003c/p\u003e\u003cp\u003eIn open science, creating and maintaining good software has become essential for ensuring research quality and making findings reproducible and accessible. Latin America has been building a strong, open, collaborative research infrastructure since the 1950s, thanks to institutional open access policies. These policies have focused on open-access publications and research data, but software isn\u0026rsquo;t often seen as a crucial part of research. Most researchers don’t receive formal training in software development, and there’s no clear career path for those who focus on this area.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e Further, as in academia throughout the world,  software development isn’t often recognized as an academic accomplishment.\u003c/p\u003e\u003ch2 id=\"a-champions-program-with-latin-america-focus\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-champions-program-with-latin-america-focus\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA Champions Program with Latin America focus\u003c/h2\u003e\u003cp\u003eThat’s where the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e comes in. Launched in 2022 - with the support of CZI - it’s designed to help individuals from underrepresented groups get involved in open science, research software engineering, and the R programming community. Over 12 months, participants go through onboarding, training, mentorship, and various community-building activities. They develop projects like creating new R packages or participating in the \u003ca href=\"/software-review/\"\u003erOpenSci peer review process\u003c/a\u003e, which teaches them best practices for developing and sharing research software and invites them to become part of an international community.\u003c/p\u003e\u003cp\u003eAt the end of the program, participants get to choose how they want to give back to their own communities and institutions—whether it’s through outreach, mentoring, or promoting open science practices. By the time they finish, they’re fully integrated into rOpenSci’s community, which provides them with ongoing support and opportunities for growth.\u003c/p\u003e\u003cp\u003eDemand is especially high in Latin America, where sustainable software development is becoming more and more important. In just two years, the program received 227 applications from 55 countries, with 40% of applicants coming from Latin America. There’s also significant diversity in terms of gender and language, with over half the applicants identifying as women or gender minorities, and 42% with Spanish as their primary language.\u003c/p\u003e\u003cp\u003eLanguage barriers are a big challenge for Latin American researchers who want to engage in global open science\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e. To break down these barriers, we plan to run a Spanish-language version of the Champions Program, as well as localizing rOpenSci’s materials into Portuguese.\u003c/p\u003e\u003cp\u003eWe’re excited and proud that Spanish-speaking mentors \u003cem\u003eand\u003c/em\u003e mentees from previous cohorts of the Champions Program will be joining as mentors and instructors for this language-specific program supporting future rOpenSci Champions.\u003c/p\u003e\u003cp\u003eWe also plan to evaluate different models to sustain the Champions Program by conducting market research and stakeholder outreach during 2025. This will be followed by a pilot to gather feedback and refine the model as needed.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eLook for an rOpenSci Champions Program open call for applications and the Localization Projects announcement in 2025.\u003c/strong\u003e\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eDirectorate-General for Research and Innovation (European Commission). Open access policies in Latin America, the Caribbean and the European Union. Progress towards a political dialogue. 2023. \u003ca href=\"https://op.europa.eu/publication-detail/-/publication/8a4852c6-bca3-11ed-8912-01aa75ed71a1\"\u003ehttps://op.europa.eu/publication-detail/-/publication/8a4852c6-bca3-11ed-8912-01aa75ed71a1\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eTatsuya Amano, Valeria Ramírez-Castañeda, Violeta Berdejo-Espinola, Israel Borokini, Shawan Chowdhury, Marina Golivets, Juan David González-Trujillo, Flavia Montaño-Centellas, Kumar Paudel, Rachel Louise White, Diogo Veríssimo. 2023. The manifold costs of being a non-native English speaker in science. PLOS Biology 21(7): e3002184. \u003ca href=\"https://doi.org/10.1371/journal.pbio.3002184\"\u003ehttps://doi.org/10.1371/journal.pbio.3002184\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2024/10/10/czi-latam-grant/","date_published":"2024-10-10T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/wf5av-sam76","title":"rOpenSci News Digest, September 2024","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2024/09/27/news-september-2024\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"community-call-recording-navigating-the-r-ecosystem-using-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call-recording-navigating-the-r-ecosystem-using-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity call recording: Navigating the R ecosystem using R-universe\u003c/h3\u003e\u003cp\u003e\u003ca href=\"/commcalls/nov2024-r-universe/\"\u003eVideo and resources\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eLearn more about R-Universe and how you can use it to improve your R package development workflow.\u003c/p\u003e\u003cp\u003eIn this community call, \u003ca href=\"/author/jeroen-ooms/\"\u003eJeroen Ooms\u003c/a\u003e provided details on what R-Universe is and an update on what you can do with it today.He also discussed the future of R-Universe and how it can be used to navigate the R ecosystem.\u003c/p\u003e\u003ch3 id=\"r-universe-list-pages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-list-pages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-Universe list pages\u003c/h3\u003e\u003cp\u003eR-Universe now features a \u003ca href=\"https://r-universe.dev/datasets\"\u003elist of all datasets in all packages\u003c/a\u003e and a \u003ca href=\"https://r-universe.dev/articles\"\u003elist of all vignettes  from CRAN, Bioconductor, and others\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eAnother important global table is the \u003ca href=\"https://r-universe.dev/scores\"\u003epackage scoreboard\u003c/a\u003e that lets you explore the scores used by R-Universe search engine for ranking, which is based on:\u003c/p\u003e\u003cul\u003e\u003cli\u003eStars: Number of stars on GitHub;\u003c/li\u003e\u003cli\u003eDownloads per month from CRAN or Bioconductor mirrors;\u003c/li\u003e\u003cli\u003eScripts: (NEW) number of files on GitHub that mention \u0026rsquo;library(pkgname)';\u003c/li\u003e\u003cli\u003eDependents: recursive reverse dependencies;\u003c/li\u003e\u003cli\u003eUnique contributors;\u003c/li\u003e\u003cli\u003eYearly commits.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"resources-from-ropensci-training-sessions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#resources-from-ropensci-training-sessions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eResources from rOpenSci training sessions\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;ve added a searchable table of \u003ca href=\"/training/\"\u003epast training sessions\u003c/a\u003e to our resources hosted on the rOpenSci website.Explore the full list of our \u003ca href=\"/resources\"\u003eresources\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"noam-ross-ropensci-and-communities-empowering-open-science\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#noam-ross-ropensci-and-communities-empowering-open-science\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNoam Ross, rOpenSci, and communities empowering open science\u003c/h3\u003e\u003cp\u003eDataLatam Podcast \u003ca href=\"https://www.datalatam.com/109/\"\u003einterviewed\u003c/a\u003e rOpenSci director Noam Ross.Learn about his work at the intersection of health and the environment and his journey with rOpenSci.\u003c/p\u003e\u003ch3 id=\"materials-screen-reader-accessible-tools-and-resources-for-learning-and-working-with-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#materials-screen-reader-accessible-tools-and-resources-for-learning-and-working-with-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMaterials: Screen Reader Accessible Tools and Resources for Learning and Working with R\u003c/h3\u003e\u003cp\u003eWe have now published the recording of the webinar that walks through learning and using R with screen readers — and it\u0026rsquo;s bilingual (English \u0026amp; Turkish)! with subtitles in English.\u003c/p\u003e\u003cp\u003e📹 \u003ca href=\"https://vimeo.com/1008631708\"\u003eWebinar video\u003c/a\u003e featuring \u003ca href=\"/author/liz-hare/\"\u003eLiz Hare, PhD\u003c/a\u003eand \u003ca href=\"/author/alican-cagri-gokcek/\"\u003eAlican Cagri Gokcek\u003c/a\u003e\u003c/p\u003e\u003cp\u003eAlso, don\u0026rsquo;t miss the \u003ca href=\"/blog/2024/09/05/screen-readers-tools/\"\u003edetailed technical note\u003c/a\u003e by Liz Hare with all the necessary resources to get started.\u003c/p\u003e\u003ch3 id=\"the-ropensci-community-at-upcoming-events\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-ropensci-community-at-upcoming-events\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe rOpenSci community at upcoming events\u003c/h3\u003e\u003cp\u003erOpenSci Community Manager \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e will deliver a keynote talk at \u003ca href=\"/events/carpentryconnect-2024/\"\u003eBioNT Community Event \u0026amp; CarpentryConnect-Heidelberg 2024\u003c/a\u003e, on November 14th in Heidelberg, Germany.\u003c/p\u003e\u003cp\u003e\u003ca href=\"/author/will-landau/\"\u003eWill Landau\u003c/a\u003e will deliver a keynote talk at \u003ca href=\"/events/latinr-2024/\"\u003eLatinR (Latin American Conference About the Use of R in R\u0026amp;D)\u003c/a\u003e. The conference is happening online from November 18-22.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2024-10\"\u003eTuesday, October 1st, 14h00 Europe Central (12:00 UTC)\u003c/a\u003e, \u0026ldquo;Using R to tell (data science) stories\u0026rdquo; with cohost \u003ca href=\"/author/apoorv-anand\"\u003eApoorv Anand\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003cul\u003e\u003cli\u003eExplore how others use R to tell data stories\u003c/li\u003e\u003cli\u003eStart work on a project using R to craft a narrative through data\u003c/li\u003e\u003cli\u003eChat with our cohost to discuss and explore the use of R in data stories\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2024-11\"\u003eTuesday, November 5th, 09:00 Americas Pacific (17:00 UTC)\u003c/a\u003e, \u0026ldquo;Getting to know Openscapes\u0026rdquo; with cohost \u003ca href=\"/author/stefanie-butland\"\u003eStefanie Butland\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003cul\u003e\u003cli\u003eLook up \u003ca href=\"https://openscapes.org/\"\u003eOpenscapes\u003c/a\u003e\u003c/li\u003e\u003cli\u003eChat with our cohost to learn more about the Openscapes organization, and how they use R to automate creating open education infrastructure\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following two packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/eDNAjoint\"\u003eeDNAjoint\u003c/a\u003e, developed by Abigail G. Keller: Models integrate environmental DNA (eDNA) detection data and traditional survey data to jointly estimate species catch rate (see package vignette: \u003ca href=\"https://bookdown.org/abigailkeller/eDNAjoint_vignette/)\"\u003ehttps://bookdown.org/abigailkeller/eDNAjoint_vignette/)\u003c/a\u003e. Models can be used with count data via traditional survey methods (i.e., trapping, electrofishing, visual) and replicated eDNA detection/nondetection data via polymerase chain reaction (i.e., PCR or qPCR) from multiple survey locations. Estimated parameters include probability of a false positive eDNA detection, a site-level covariates that scale the sensitivity of eDNA surveys relative to traditional surveys, and catchability coefficients for traditional gear types. Models are implemented with a Bayesian framework (Markov chain Monte Carlo) using the Stan probabilistic programming language. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/642\"\u003ereviewed\u003c/a\u003e by Chitra M Saraswati and Saras Windecker.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/rix\"\u003erix\u003c/a\u003e, developed by Bruno Rodrigues together with Philipp Baumann: Simplifies the creation of reproducible data science environments using the Nix package manager, as described in Dolstra (2006) \u0026lt;ISBN 90-393-4130-3\u0026gt;. The included \u003ccode\u003erix()\u003c/code\u003e function generates a complete description of the environment as a \u003ccode\u003edefault.nix\u003c/code\u003e file, which can then be built using Nix. This results in project specific software environments with pinned versions of R, packages, linked system dependencies, and other tools. Additional helpers make it easy to run R code in Nix software environments for testing and production.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=rix\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/625\"\u003ereviewed\u003c/a\u003e by David Watkins and Jacob Wujiciak-Jens.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following thirteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/comtradr\" title=\"Interface with the United Nations Comtrade API\"\u003ecomtradr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/comtradr/releases/tag/v1.0.2\"\u003e\u003ccode\u003ev1.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/DataPackageR\" title=\"Construct Reproducible Analytic Data Sets as R Packages\"\u003eDataPackageR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/DataPackageR/releases/tag/v0.16.1\"\u003e\u003ccode\u003ev0.16.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/datefixR\" title=\"Standardize Dates in Different Formats or with Missing Data\"\u003edatefixR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/datefixR/releases/tag/v1.7.0\"\u003e\u003ccode\u003ev1.7.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/epubr\" title=\"Read EPUB File Metadata and Text\"\u003eepubr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/epubr/releases/tag/v0.6.5\"\u003e\u003ccode\u003ev0.6.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/git2rdata\" title=\"Store and Retrieve Data.frames in a Git Repository\"\u003egit2rdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/git2rdata/releases/tag/v0.4.1\"\u003e\u003ccode\u003ev0.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/GSODR\" title=\"Global Surface Summary of the Day (GSOD) Weather Data Client\"\u003eGSODR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/GSODR/releases/tag/v4.1.2\"\u003e\u003ccode\u003ev4.1.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/jagstargets\" title=\"Targets for JAGS Pipelines\"\u003ejagstargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/jagstargets/releases/tag/1.2.1\"\u003e\u003ccode\u003e1.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/mregions2\" title=\"Gazetteer \u0026amp; Data Products\"\u003emregions2\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/mregions2/releases/tag/v1.1.1\"\u003e\u003ccode\u003ev1.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/occCite\" title=\"Querying and Managing Large Biodiversity Occurrence Datasets\"\u003eoccCite\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/occCite/releases/tag/v0.5.8\"\u003e\u003ccode\u003ev0.5.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmapiR\" title=\"OpenStreetMap API\"\u003eosmapiR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmapiR/releases/tag/v0.2.1\"\u003e\u003ccode\u003ev0.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/robotstxt\" title=\"A robots.txt Parser and Webbot/Spider/Crawler Permissions Checker\"\u003erobotstxt\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/robotstxt/releases/tag/v0.7.15\"\u003e\u003ccode\u003ev0.7.15\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.10.0\"\u003e\u003ccode\u003e0.10.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/tiler\" title=\"Create Geographic and Non-Geographic Map Tiles\"\u003etiler\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tiler/releases/tag/v0.3.2\"\u003e\u003ccode\u003ev0.3.2\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are fourteen recently closed and active submissions and 6 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/642\"\u003eeDNAjoint\u003c/a\u003e, Joint Modeling of Traditional and Environmental DNA Survey Data. Submitted by \u003ca href=\"https://github.com/abigailkeller\"\u003eAbigail Keller\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/638\"\u003echopin\u003c/a\u003e, CHOPIN: Computation for Climate and Health research On Parallelized INfrastructure. Submitted by \u003ca href=\"https://www.issong.net\"\u003eInsang Song\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/625\"\u003erix\u003c/a\u003e, Rix: Reproducible Environments with Nix. Submitted by \u003ca href=\"https://brodrigues.co\"\u003eBruno Rodrigues\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/636\"\u003ersi\u003c/a\u003e, Efficiently Retrieve and Process Satellite Imagery. Submitted by \u003ca href=\"https://mm218.dev/\"\u003eMichael Mahoney\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"https://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/637\"\u003ecancerprof\u003c/a\u003e, API Client for State Cancer Profiles. Submitted by \u003ca href=\"https://github.com/realbp\"\u003eBrian Park\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/626\"\u003egigs\u003c/a\u003e, Assess Fetal, Newborn, and Child Growth with International Standards. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/653\"\u003eemodnet.wfs\u003c/a\u003e, Access EMODnet Web Feature Service data through R. Submitted by \u003ca href=\"https://masalmon.eu/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/626\"\u003egigs\u003c/a\u003e, Assess Fetal, Newborn, and Child Growth with International Standards. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/632\"\u003eQuadratiK\u003c/a\u003e, A Collection of Methods Using Kernel-Based Quadratic Distances for. Submitted by \u003ca href=\"https://github.com/giovsaraceno\"\u003eGiovanni Saraceno\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/615\"\u003egalamm\u003c/a\u003e, Generalized Additive Latent and Mixed Models. Submitted by \u003ca href=\"https://osorensen.rbind.io\"\u003eØystein Sørensen\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/658\"\u003embquartR\u003c/a\u003e, Finding Manitoba Quarter Sections. Submitted by \u003ca href=\"http://www.alexkoiter.ca\"\u003eAlex Koiter\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/09/17/deposits-in-the-wild\"\u003eDeposits In The Wild\u003c/a\u003e by Collin Schwantes. Using the deposits and frictionless packages to create FAIR data for a complex project.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/09/05/screen-readers-tools\"\u003eResources For Using R With Screen Readers\u003c/a\u003e by Liz Hare. Tools and resources to use R with screen readers. Other languages: \u003ca href='/es/blog/2024/09/05/recursos_para_utilizar_r_con_lectores_de_pantalla' lang='es'\u003eRecursos para utilizar R con lectores de pantalla (es)\u003c/a\u003e, \u003ca href='/tr/blog/2024/09/05/ekran_okuyucularla_r_kullanımı_i̇çin_kaynaklar' lang='tr'\u003eEkran Okuyucularla R Kullanımı İçin Kaynaklar (tr)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/09/10/script-screenshots\"\u003eCapturing Screenshots Programmatically With R\u003c/a\u003e by Maëlle Salmon.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/09/12/labels-writing-projects\"\u003eLabels For Technical Writing Projects\u003c/a\u003e by Greg Wilson. Greg discusses the challenges of organizing non-software projects in GitHub and shares the label system he uses for technical writing projects like books and lessons.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/medrxivr/\"\u003emedrxivr\u003c/a\u003e, access and search MedRxiv and BioRxiv preprint data. \u003ca href=\"https://github.com/ropensci/medrxivr/issues/41\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/01/qualtrics-call-help/\"\u003eHelp make qualtRics better! Code contributions wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/27/assertr-call-help/\"\u003eHelp make assertr better! Come close issues\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/29/targets-call-help/\"\u003eHelp users and developers of targets by answering questions!\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/19/waywiser-call-help/\"\u003eHelp make waywiser better! User requests wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAlso refer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"reminder-r-consortium-infrastructure-steering-committee-isc-grant-program-accepting-proposals-until-october-1st\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#reminder-r-consortium-infrastructure-steering-committee-isc-grant-program-accepting-proposals-until-october-1st\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReminder: R Consortium Infrastructure Steering Committee (ISC) Grant Program Accepting Proposals until October 1st!\u003c/h3\u003e\u003cp\u003eThe R Consortium \u003ca href=\"https://www.r-consortium.org/all-projects/call-for-proposals\"\u003eCall for Proposals\u003c/a\u003e might be a relevant funding opportunity for your package!If you can\u0026rsquo;t prepare your proposal in time, the next call should start \u003ca href=\"https://www.r-consortium.org/all-projects/call-for-proposals\"\u003eMarch 1st 2025\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"how-to-demonstrate-an-error-in-an-r-markdown-vignette\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-demonstrate-an-error-in-an-r-markdown-vignette\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to demonstrate an error in an R Markdown vignette\u003c/h3\u003e\u003cp\u003eAn useful piece of information shared by Hugo Gruson in our \u003ca href=\"https://contributing.ropensci.org/resources.html#channels\"\u003eSlack workspace\u003c/a\u003e.To demonstrate an error in a vignette, try setting \u003ccode\u003epurl = FALSE\u003c/code\u003e in chunks with \u003ccode\u003eerror = TRUE\u003c/code\u003e.\u003ca href=\"https://github.com/yihui/knitr/issues/2338\"\u003eMore info in a knitr issue\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"better-titles-for-roxygen2-family-cross-references\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#better-titles-for-roxygen2-family-cross-references\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBetter titles for roxygen2 \u0026ldquo;family\u0026rdquo; cross-references\u003c/h3\u003e\u003cp\u003eDo you use the \u0026ldquo;family\u0026rdquo; roxygen2 tag for grouping and cross-linking manual pages?Did you know you can override the default title from, for instance, \u0026ldquo;Other blabla\u0026rdquo; to \u0026ldquo;blabla functions and related data\u0026rdquo;?If not, refer to \u003ca href=\"https://roxygen2.r-lib.org/articles/index-crossref.html#family\"\u003eroxygen2 documentation\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"create-and-use-a-custom-roxygen2-tag\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#create-and-use-a-custom-roxygen2-tag\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCreate and use a custom roxygen2 tag\u003c/h3\u003e\u003cp\u003eRead more about creating a custom tag that adds a new section to a manual page in this \u003ca href=\"https://masalmon.eu/2024/09/03/roxygen2-custom-tag/\"\u003eblog post by Maëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"materials-from-positconf2024-workshops\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#materials-from-positconf2024-workshops\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMaterials from posit::conf(2024) workshops\u003c/h3\u003e\u003cp\u003eMaterials from posit::conf(2024) workshops have been \u003ca href=\"https://posit-conf-2024.github.io/workshops/\"\u003eposted\u003c/a\u003e.Especially relevant to package developers: \u003ca href=\"https://posit-conf-2024.github.io/programming-r/\"\u003eFrom R User to R Programmer\u003c/a\u003e by Emma Rand and Ian Lyttle; and \u003ca href=\"https://github.com/posit-conf-2024/pkg-dev\"\u003ePackage Development: The Rest of the Owl\u003c/a\u003e by Jenny Bryan whose introduction slidedeck features GitHub search tips.\u003c/p\u003e\u003ch3 id=\"some-tips-when-searching-github-issues\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#some-tips-when-searching-github-issues\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSome tips when searching GitHub issues\u003c/h3\u003e\u003cp\u003eSpeaking of GitHub search\u0026hellip;\u003c/p\u003e\u003cp\u003eMichael Chirico shared the following tip on Mastodon: \u003ca href=\"https://fosstodon.org/@michaelchirico/113083595380080927\"\u003e\u0026quot;[you can use] the \u0026lsquo;in:title\u0026rsquo; operator in GitHub search to restrict a search to issues/PRs matching a query in the title\u0026quot;\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eJenny Bryan answered with another tip: \u003ca href=\"https://mastodon.social/@jennybryan@fosstodon.org/113085363392572924\"\u003e\u0026ldquo;involves:USERNAME\u0026rdquo; for \u0026ldquo;I was once part of a conversation about this\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"a-usethis-function-to-create-a-test-helper-file\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-usethis-function-to-create-a-test-helper-file\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA usethis function to create a test helper file\u003c/h3\u003e\u003cp\u003eThe new usethis function \u003ca href=\"https://usethis.r-lib.org/reference/use_test_helper.html\"\u003e\u003ccode\u003e usethis::use_test_helper(\u0026quot;mocks\u0026quot;)\u003c/code\u003e\u003c/a\u003e will create a \u003ca href=\"https://testthat.r-lib.org/articles/special-files.html\"\u003ehelper file\u003c/a\u003e under \u003ccode\u003etests/testthat/helper-mocks.R\u003c/code\u003e.\u003c/p\u003e\u003ch3 id=\"a-devtools-function-for-building-the-readme-and-vignettes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-devtools-function-for-building-the-readme-and-vignettes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA devtools function for building the README and vignettes\u003c/h3\u003e\u003cp\u003eNot a new function, but in case you missed it\u0026hellip;The \u003ca href=\"https://devtools.r-lib.org/reference/build_rmd.html\"\u003e\u003ccode\u003edevtools::build_rmd()\u003c/code\u003e and \u003ccode\u003edevtools::build_readme()\u003c/code\u003e functions\u003c/a\u003e render R Markdown files using a temporary install of your current development package.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/09/27/news-september-2024/","date_published":"2024-09-27T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/zdmg9-ryp97","title":"Deposits In The Wild","language":"en","authors":[{"name":"Collin Schwantes","url":"https://orcid.org/0000-0002-9882-941X","avatar":"https://github.com/collinschwantes.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["deposits","FAIR-data","reproducibility","zenodo","frictionless","community"],"content_html":"\u003cscript type=\"module\"\u003e    import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';    mermaid.initialize({ startOnLoad: true });  \u003c/script\u003e\u003cp\u003eFor the better part of a year, I have been looking for an opportunity to use the rOpenSci package \u003ca href=\"https://docs.ropensci.org/deposits/\"\u003edeposits\u003c/a\u003e in myrole as the Data Librarian at EcoHealth Alliance.I had done some initial testing with \u003ca href=\"/author/mark-padgham/\"\u003eMark Padgham\u003c/a\u003e, the brilliant person who developed this package, but there weren\u0026rsquo;t any projects ready for me to put deposits through its paces.Enter the \u003cem\u003eRift Valley Fever Virus in South Africa\u003c/em\u003e project, a ten year, multiple part study of humans, wildlife (mosquitoes and wild ungulates), and domestic animals that uses every data store from Dropbox to Google Drive to Airtable to ODK with a healthy mix of file formats for tabular data.Additionally, the principal investigators (PIs) on the project are very enthusiastic about making the data FAIR (Findability, Accessibility, Interoperability, and Reusability).\u003c/p\u003e\u003cp\u003eThe team and I put together workflow in \u003ca href=\"https://books.ropensci.org/targets/\"\u003etargets\u003c/a\u003e with the mechanics of ETL (Extract, Transform and Load) largely handled by our \u003ca href=\"https://ecohealthalliance.github.io/ohcleandat/\"\u003eohcleandat\u003c/a\u003e package.The underlying philosophy of the ETL process is the original data are only lightly modified (stripping white spaces, column names to snake case, etc) while humans do any cleaning that requires thought via validation logs.Changes made in logs are then applied to the data before they are integrated into various larger workpackages.Those workpackages are then deposited into Zenodo to create versioned single sources of truth with digital object identifiers.\u003c/p\u003e\u003cpre class=\"mermaid\"\u003eflowchart LR    accTitle: Workflow Overview for cleaning data from multiple sources    accDescr {        Data from multiple sources including dropbox, googledrive, airtable, and open data kit are     ingested and transformed.         Data entry errors are recorded in a validation log and corrected manually in the log.Corrections made in the validation logs are applied to the data, the data are then integrated before being prepared for archive in Zenodo.              }    A[Dropbox] --\u003e E(ETL in targets with ohcleandat)    B[GoogleDrive] --\u003e E    C[Airtable] --\u003e E    D[ODK] --\u003e E    J[Validation Logs] --\u003e E    E --\u003e J    E --\u003e F[Cleaned Integrated Data]      F --\u003e G(Prep for Archive in targets with deposits)    G --\u003e H{Zenodo}\u003c/pre\u003e\u003ch2 id=\"an-abbreviated-intro-to-deposits\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#an-abbreviated-intro-to-deposits\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAn abbreviated intro to deposits\u003c/h2\u003e\u003cp\u003eThe first thing you have to know about deposits is that it uses the R6 class.R6 is an object oriented framework where each class of object has a set of methods (functions) that can be applied to it.This is really nice because you can access all of the available methods of a \u003ccode\u003edepositClient\u003c/code\u003e object by using \u003ccode\u003ecli$SOME_METHOD()\u003c/code\u003e - where its less convenient for people who work in Rstudio is when you\u0026rsquo;re looking for the help page for \u003ccode\u003eSOME_METHOD\u003c/code\u003e - instead you have to look for \u003ccode\u003edepositClient\u003c/code\u003e and scroll to the link to \u003ccode\u003eSOME_METHOD\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eThe next kind of tricky thing is \u003ca href=\"https://docs.ropensci.org/deposits/articles/install-setup.html#setup-api-tokens\"\u003eadding api tokens to the environment\u003c/a\u003e.This can be done in a number of different ways (\u003ca href=\"https://ecohealthalliance.github.io/eha-ma-handbook/16-encryption.html\"\u003eencrypted .env file\u003c/a\u003e, \u003ca href=\"https://usethis.r-lib.org/reference/edit.html\"\u003eusethis::edit_r_environ\u003c/a\u003e, etc) but is essential to using this package. Remember that these tokens are sensitive credentials and should not be openly shared.\u003c/p\u003e\u003cp\u003edeposits works as an intermediary between a remote service (\u003ca href=\"https://zenodo.org/\"\u003eZenodo\u003c/a\u003e or \u003ca href=\"https://figshare.com/\"\u003eFigshare\u003c/a\u003e) and your local machine.Via deposits you can create, read, update, or delete items on a remote service.\u003c/p\u003e\u003cpre class=\"mermaid\"\u003eflowchart LR    accTitle: Basic overview of the deposits client    accDescr: The deposits client keeps track of local and remote data and monitoring both for changes.    A[Local storage] \u003c--\u003e B{depositsClient}    B \u003c--\u003e C[Zenodo/Figshare]\u003c/pre\u003e    \u003cp\u003edeposits allows you to pre-populate the metadata for those items. This is incredibly useful if you have to deposit many items with similar metadata, if you have highly collaborative items with dozens of co-authors/contributors, or if you want to update many items with the same bit of metadata.You might be asking yourself - do Zenodo and Figshare really use the same terms with the same properties in their APIs? The answer is no, but they both use flavors of \u003ca href=\"https://www.dublincore.org/specifications/dublin-core/dcmi-terms/#section-1\"\u003eDublin Core\u003c/a\u003e that Mark has mapped to common standard.deposits uses JSON validation to enforce the standard and the package also provides a template of properly formatted metadata.\u003c/p\u003e\u003cp\u003eFinally, deposits allows you to push items to a service and publish them.On zenodo, you may push items up as embargoed or open (restricted is coming soon pending a pull request).\u003c/p\u003e\u003ch2 id=\"what-does-our-workflow-look-like\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-does-our-workflow-look-like\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat does our workflow look like?\u003c/h2\u003e\u003cp\u003eWe created a \u003ccode\u003edeposits_metadata.csv\u003c/code\u003e that contains all of the DCMI (Dublin Core Metadata Initiative) terms we would like to pre-populate across ~35 zenodo deposits.Because certain DCMI terms like creator can have multiple attributes, we augmented the \u003ccode\u003edeposits_metadata.csv\u003c/code\u003e with a \u003ccode\u003ecreator_metadata.csv\u003c/code\u003e file that contains additional terms.I opted to use csv files because:\u003c/p\u003e\u003col\u003e\u003cli\u003ethey are very easy to maintain\u003c/li\u003e\u003cli\u003ethe are extremely interoperable\u003c/li\u003e\u003cli\u003ewe have a very limited number of tables.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eIf there were additional tables to link or more complicated relationships I would use a relational database like MySQL (or Airtable).\u003c/p\u003e\u003cpre class=\"mermaid\"\u003eflowchart LR    accTitle: Overview of metadata workflow    accDescr {       Deposit metadata and creator metadata are stored as CSV files.        Those CSV files are ingested into targets along with their corresponding data files.        The metadata files and data files are combined in targets to create a Zenodo deposit.        }    A[Deposit Metadata CSV] --\u003e G(ELT in targets)    B[Creator Metadata CSV] --\u003e G    C[ Data Files]  --\u003e G    G --\u003e H{Zenodo}\u003c/pre\u003e\u003cp\u003e\u003ccode\u003edeposits_metadata.csv\u003c/code\u003e\u003c/p\u003e\u003ctable\u003e\t\u003cthead\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003cth\u003etitle\u003c/th\u003e\t\t\t\t\t\u003cth\u003eformat\u003c/th\u003e\t\t\t\t\t\u003cth\u003ecreated\u003c/th\u003e\t\t\t\t\t\u003cth\u003ecreator\u003c/th\u003e\t\t\t\t\t\u003cth\u003efiles\u003c/th\u003e\t\t\t\t\t\u003cth\u003e\u0026hellip;\u003c/th\u003e\t\t\t\u003c/tr\u003e\t\u003c/thead\u003e\t\u003ctbody\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eWork package 1\u003c/td\u003e\t\t\t\t\t\u003ctd\u003edataset\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e2024-09-01\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u0026ldquo;Collin, Mindy, Johana\u0026rdquo;\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u0026ldquo;dat1.csv, dat2.csv\u0026rdquo;\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u0026hellip;\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003eEach row in \u003ccode\u003edeposits_metadata.csv\u003c/code\u003e corresponds to a work package - a collection of data files that will become a deposit.The PIs on the project requested access to raw, semi-clean, and clean versions of the data.They also provided lists of who should be credited for what and who should have access to what.Unfortunately in Zenodo you cannot restrict access to specific files like you can in the \u003ca href=\"https://osf.io/\"\u003eOpen Science Framework\u003c/a\u003e (OSF), so a different deposit has to be made for each group that needs access.\u003c/p\u003e\u003cp\u003eWe then map over each row in the dataset in targets using \u003ca href=\"https://docs.ropensci.org/targets/reference/tar_group.html\"\u003ethe group iterator\u003c/a\u003e to create the draft deposits that we need.The \u003ccode\u003edepositClient\u003c/code\u003e plays very nicely with targets, and can even be tar_loaded when you need to interactively debug.\u003c/p\u003e\u003cp\u003eAnother important component of our workflow is generating codebooks/data dictionaries/structural metadata for the different work packages.By default, deposits creates a frictionless data package that describes all the files/resources in a deposit.The \u003ccode\u003edatapackage.json\u003c/code\u003e file contains a minimal description of the different files that contains the field name and field type.We can augment this with field descriptions, term URIs, or any number of additional attributes that would helpful when describing the data.\u003cbr\u003eTo do this, we use  \u003ccode\u003eohcleandat::create_structural_metadata\u003c/code\u003e and \u003ccode\u003eohcleandat::update_structural_metadata\u003c/code\u003e to create/update the codebooks then \u003ccode\u003eohcleandat::expand_frictionless_metadata()\u003c/code\u003e to add those elements to \u003ccode\u003edatapackage.json\u003c/code\u003e.Because each deposit contains multiple data files and multiple codebook files, we have to iteratively \u003ccode\u003epurrr::walk\u003c/code\u003e over them to properly update the data.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-R\" data-lang=\"R\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; purrr::walk over ohcleandat::expand_frictionless_metadata\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @param file_paths List with the elements data and codebook\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @return Invisible. writes updated datapackage.json\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @export\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @examples\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewalk_expand_frictionless_metadata\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efile_paths\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003edir_path\u003c/span\u003e\u003cspan class=\"p\"\u003e){\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003epurrr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ewalk2\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efile_paths\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ecodebook\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003efile_paths\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecodebook_path\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003edata_path\u003c/span\u003e\u003cspan class=\"p\"\u003e){\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003eif\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eis.na\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecodebook_path\u003c/span\u003e\u003cspan class=\"p\"\u003e)){\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003emsg\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esprintf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;No codebook listed for %s\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003edata_path\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"kr\"\u003ereturn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kc\"\u003eNA\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecodebook_df\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ereadr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eread_csv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efile\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecodebook_path\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e## check dataset_name matches resource_name\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eresource_name\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_resource_name\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata_path\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003eif\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eunique\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecodebook_df\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edataset_name\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e!=\u003c/span\u003e \u003cspan class=\"n\"\u003eresource_name\u003c/span\u003e\u003cspan class=\"p\"\u003e){\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003emsg\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esprintf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;resource_name and dataset_name do not match. \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eCheck that the proper name was added to the codebook and that\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003ethe files are in the proper order in deposits_metadata.csv. \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003eresource_name is taken from the file name for a given dataset.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s\"\u003e%s != %s\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"n\"\u003eresource_name\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eunique\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecodebook_df\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edataset_name\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nf\"\u003estop\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emsg\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003edata_package_path\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esprintf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;%s/datapackage.json\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003edir_path\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eohcleandat\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eexpand_frictionless_metadata\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estructural_metadata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecodebook_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                             \u003cspan class=\"n\"\u003eresource_name\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eresource_name\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"c1\"\u003e# name of the file with no extension\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                             \u003cspan class=\"n\"\u003eresource_path\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edata_path\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                             \u003cspan class=\"n\"\u003edata_package_path\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edata_package_path\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWhen we go to add this updated \u003ccode\u003edatapackage.json\u003c/code\u003e file to the deposit, the order of operations matters.If we are creating an item, the function might look like this:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-R\" data-lang=\"R\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; Create Zenodo Deposit and Expand Metadata\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @param cli deposits client\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @param metadata_dcmi_complete list of DCMI metadata terms\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @param file_paths paths to data files\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @param dir_path path to directory where workpackage files are stored locally\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @return updated deposits client\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @export\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @examples\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecreate_zenodo_deposit\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003emetadata_dcmi_complete\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efile_paths\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003edir_path\u003c/span\u003e\u003cspan class=\"p\"\u003e){\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e## populate descriptive metadata for zenodo\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003edeposit_fill_metadata\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emetadata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emetadata_dcmi_complete\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003edeposit_new\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eprereserve_doi\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e## add resources - adds everything in dir_path\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003edeposit_add_resource\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edir_path\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e#upload files  \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003edeposit_upload_file\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edir_path\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# expand structural metadata\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ewalk_expand_frictionless_metadata\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efile_paths\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003edir_path\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# update structural metadata - has to be done in this order or datapackage.json is re-written on upload\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003edeposit_update\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edir_path\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003ereturn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eand updating a deposit might look something like:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-R\" data-lang=\"R\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eupdate_zenodo_deposit\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emetadata_updated\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003emetadata_dcmi_complete\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efile_paths\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edir_path\u003c/span\u003e\u003cspan class=\"p\"\u003e){\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e## retrieve the deposit\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;getting deposit from id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003edeposit_retrieve\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eas.integer\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emetadata_updated\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edeposit_id\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003edata_package_path\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esprintf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;%s/datapackage.json\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003edir_path\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e## update descriptive metadata\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e## don\u0026#39;t need to walk over this because there is only one set of descriptive for the data package\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e## metadata for the deposit\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;updating descriptive metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eohcleandat\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eupdate_frictionless_metadata\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edescriptive_metadata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emetadata_dcmi_complete\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                           \u003cspan class=\"n\"\u003edata_package_path\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edata_package_path\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003edeposit_fill_metadata\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emetadata_dcmi_complete\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e## expand metadata\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;expanding metadata\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ewalk_expand_frictionless_metadata\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efile_paths\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003edir_path\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e## update the deposit\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;updating deposit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003edeposit_upload_file\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edir_path\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;returning cli\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003ereturn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWe can even keep our \u003ccode\u003edeposits_metadata.csv\u003c/code\u003e file updated using the \u003ccode\u003edepositClient\u003c/code\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-R\" data-lang=\"R\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; Update deposits metadata\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; Find workpackage titles that match deposit titles \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @param cli deposits Client\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @param metadata_formatted dataframe of formatted descriptive metadata\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @return\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @author Collin Schwantes\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @export\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eupdate_zenodo_metadata\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emetadata_formatted\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003edf_doi_id\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003epurrr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003emap_df\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emetadata_formatted\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e){\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003edf\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003edata.frame\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eidentifier\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNA_character_\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edeposit_id\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNA_character_\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003edeposits_found\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edeposits\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edoi\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003eif\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003enrow\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edeposits_found\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e){\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nf\"\u003emessage\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;No matching items found\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"kr\"\u003ereturn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003eif\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003enrow\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edeposits_found\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e){\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nf\"\u003ewarning\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;clean up your deposits?\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"kr\"\u003ereturn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003edf\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eidentifier\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eas.character\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edeposits_found\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edoi\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003edf\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edeposit_id\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eas.character\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edeposits_found\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"kr\"\u003ereturn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003emetadata_formatted\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eidentifier\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003edf_doi_id\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eidentifier\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003emetadata_formatted\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edeposit_id\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003edf_doi_id\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edeposit_id\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003ereturn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emetadata_formatted\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWe can create many deposits with good descriptive metadata, extend the structural metadata, and keep out deposits_metadata.csv up to date using deposits, ohcleandat, and a little dplyr.\u003c/p\u003e\u003ch2 id=\"potential-pain-points\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#potential-pain-points\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePotential pain points\u003c/h2\u003e\u003col\u003e\u003cli\u003eSome of the more complex DCMI terms require nested lists with very particular structures.This can be hard to reason about if you\u0026rsquo;re not super familiar with \u003ca href=\"https://eloquentjavascript.net/04_data.html\"\u003eJSON\u003c/a\u003e or how the \u003ca href=\"https://arxiv.org/abs/1403.2805\"\u003ejsonlite\u003c/a\u003e package converts json to R objects.Mark provides good examples of constructing the \u003ccode\u003ecreator\u003c/code\u003e objects in the deposits documentation.Even if you are a JSON wizard,the \u003ca href=\"https://developers.zenodo.org/#entities\"\u003eentities documentation\u003c/a\u003e in the Zenodo API is super helpful.\u003c/li\u003e\u003cli\u003eMetadata errors can feel a little cryptic until you get a better understanding of \u003ca href=\"https://cran.rstudio.com/web/packages/jsonvalidate/vignettes/jsonvalidate.html\"\u003eJSON validation\u003c/a\u003e and stare at the \u003ca href=\"https://github.com/ropenscilabs/deposits/blob/main/inst/extdata/dc/schema.json\"\u003edeposits json schema\u003c/a\u003e for a minute or two.\u003c/li\u003e\u003cli\u003eCollaboration can be challenging because drafts have to be manually shared in Zenodo.  \u003ccode\u003e¯\\_(ツ)_/¯\u003c/code\u003e.\u003c/li\u003e\u003c/ol\u003e\u003ch2 id=\"conclusions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusions\u003c/h2\u003e\u003cp\u003eWe were able put the deposits package through the wringer with the RVF2 project and it performed extremely well.The deposits package is great for making and managing a collection of Zenodo deposits.It takes a second to get the hang of the \u003ccode\u003eR6\u003c/code\u003e object oriented structure and JSON data validation, but once you do, the thoughtful package design results in a smooth workflow whether you\u0026rsquo;re updating a single deposit or a large batch.\u003c/p\u003e\u003cpre class=\"mermaid\"\u003eflowchart LR    accTitle: Expanded diagram of data deposition workflow    accDescr {        Deposit and creator metadata files are ingested into targets along with all the files for a set workpackages that will be stored in Zenodo.         Those files are manipulated in targets to create or update a valid deposit.         Finaly the deposit is  pushed to Zenodo and the deposit metadata csv is updated with digital object identifiers and a zenodo deposit identifier.         }    A[Deposit Metadata CSV] --\u003e G[ETL in targets]    B[Creator Metadata CSV] --\u003e G    C[Workpackage Files]  --\u003e G    G --\u003e H{Zenodo}    G ---\u003e A\u003c/pre\u003e","url":"https://ropensci.org/blog/2024/09/17/deposits-in-the-wild/","date_published":"2024-09-17T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/ks62y-93g15","title":"Labels For Technical Writing Projects","language":"en","authors":[{"name":"Greg Wilson","url":"https://orcid.org/0000-0001-8659-8979","avatar":"https://github.com/gvwilson.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["tech notes","github","community"],"content_html":"\u003cp\u003eOver the past thirty years I have written \u003ca href=\"https://third-bit.com/bib/\"\u003efive technical books,co-written three others,and edited a further six\u003c/a\u003e.Since 2007 they have all lived in GitHub repositories,as did the first versions of the \u003ca href=\"https://carpentries.org/\"\u003eSoftware Carpentry\u003c/a\u003e lessons that I helped to write.\u003c/p\u003e\u003cp\u003eA few months ago I wrote about \u003ca href=\"https://third-bit.com/2024/03/07/labels/\"\u003ethe GitHub issue labels I use\u003c/a\u003efor writing projects like these.As I put that post together,I realized that I wasn\u0026rsquo;t actually using all of the labels I had created,and that the problem of choosing good labels for a mixture of code and proseis more complicated than it seems.\u003c/p\u003e\u003ch3 id=\"1-labels-level\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#1-labels-level\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e1. Labels level\u003c/h3\u003e\u003cp\u003eGitHub only allows one set of labels per project,which means that the labels you would want to apply to issuesare in the same pile as labels you\u0026rsquo;d want to apply to pull requests (PRs).This overlap quickly leads to confusion:\u0026ldquo;bug\u0026rdquo; is the right label for an issue reporting a problem,but doesn\u0026rsquo;t feel appropriate for the PR that fixes the problem.(\u0026ldquo;Wait, is this PR adding a bug?\u0026rdquo;)Most projects use two different labels (e.g., \u0026ldquo;bug\u0026rdquo; and \u0026ldquo;fix\u0026rdquo;),but after going back and forth,I\u0026rsquo;ve settled on \u0026ldquo;fix\u0026rdquo; to mean both \u0026ldquo;Please fix this\u0026rdquo; (in an issue)and \u0026ldquo;This contains a fix\u0026rdquo; (in a PR).\u003c/p\u003e\u003ch3 id=\"2-default-labels\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#2-default-labels\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e2. Default labels\u003c/h3\u003e\u003cp\u003eBy default,GitHub provides nine labels for issues and PRs.Fully a third of these—\u003ccode\u003eduplicate\u003c/code\u003e, \u003ccode\u003einvalid\u003c/code\u003e, and \u003ccode\u003ewontfix\u003c/code\u003e—describe reasons to close an issueor discard a PR.That seems excessive to me,and I feel it\u0026rsquo;s polite to add a sentence or two of explanation as a comment.(You have to do this anyway when marking an issue or PR as \u003ccode\u003eduplicate\u003c/code\u003e to point at what it\u0026rsquo;s duplicating.)\u003c/p\u003e\u003cp\u003e\u003cem\u003eNote: I find it a bit ironic that GitHub provides three ways to say \u0026ldquo;no\u0026rdquo; but none for saying \u0026ldquo;yes\u0026rdquo;.If I was going to use labels to mark closed issues,I would include \u003ccode\u003eresolved\u003c/code\u003e and/or \u003ccode\u003emerged\u003c/code\u003e.\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cem\u003eAlso note: English doesn\u0026rsquo;t have an antonym for \u0026ldquo;mistake\u0026rdquo;, i.e., we don\u0026rsquo;t have a single word that means, \u0026ldquo;A thing done well.\u0026rdquo;We sometimes say \u0026ldquo;a score\u0026rdquo; or \u0026ldquo;a win\u0026rdquo; to mean this,but those are the outcome, not the act itself.I sometimes wonder what this absence says about English speakers\u0026rsquo; view of the world…\u003c/em\u003e\u003c/p\u003e\u003ch3 id=\"3-license\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#3-license\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e3. License\u003c/h3\u003e\u003cp\u003eWhen you create a new project on GitHub,you can select any of several widely-used licenses.However,all of those licenses apply to code:the \u003ca href=\"https://creativecommons.org/\"\u003eCreative Commons\u003c/a\u003e licenses for prose (written work) aren\u0026rsquo;t offered.I always wind up writing \u003ca href=\"https://github.com/gvwilson/sql-tutorial/blob/main/LICENSE.md\"\u003ea custom \u003ccode\u003eLICENSE.md\u003c/code\u003e\u003c/a\u003e to say thatall of the written material is made available under the CC-BY-NC-4.0 licensewhile the software is made available under the MIT License.\u003c/p\u003e\u003cp\u003eI mention this here because I find other things missing as well for writing projects.One of GitHub\u0026rsquo;s default issue labels is \u0026ldquo;documentation\u0026rdquo;,but I don\u0026rsquo;t think the prose in a lesson or chapter is documentation of code:the code is there to support the writing.\u003c/p\u003e\u003ch2 id=\"custom-labels-system\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#custom-labels-system\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCustom Labels System\u003c/h2\u003e\u003cp\u003eSo here\u0026rsquo;s what I\u0026rsquo;m using in my \u003ca href=\"https://github.com/gvwilson\"\u003ecurrent writing projects\u003c/a\u003e:\u003c/p\u003e\u003ctable\u003e\t\u003cthead\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003cth\u003eName\u003c/th\u003e\t\t\t\t\t\u003cth\u003ePurpose\u003c/th\u003e\t\t\t\u003c/tr\u003e\t\u003c/thead\u003e\t\u003ctbody\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eadd\u003c/td\u003e\t\t\t\t\t\u003ctd\u003erequest for new feature\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003echange\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eexists but could be better\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003ecode\u003c/td\u003e\t\t\t\t\t\u003ctd\u003ein software\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003ediscussion\u003c/td\u003e\t\t\t\t\t\u003ctd\u003equestions and conversations\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003efix\u003c/td\u003e\t\t\t\t\t\u003ctd\u003esomething is broken\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003egood first issue\u003c/td\u003e\t\t\t\t\t\u003ctd\u003egood for newcomers\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003egovernance\u003c/td\u003e\t\t\t\t\t\u003ctd\u003emeta-discussion of project management\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eprose\u003c/td\u003e\t\t\t\t\t\u003ctd\u003ein written content\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003etask\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eone-off task\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003etooling\u003c/td\u003e\t\t\t\t\t\u003ctd\u003einfrastructure\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003eIn more detail:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003eadd\u003c/code\u003e, \u003ccode\u003echange\u003c/code\u003e, and \u003ccode\u003efix\u003c/code\u003e are meant to be mutually exclusive\u003c/li\u003e\u003cli\u003e\u003ccode\u003ecode\u003c/code\u003e and \u003ccode\u003eprose\u003c/code\u003e can be used together (e.g., a new lesson adds both)\u003c/li\u003e\u003cli\u003e\u003ccode\u003ediscussion\u003c/code\u003e and \u003ccode\u003egovernance\u003c/code\u003e are for project management\u003c/li\u003e\u003cli\u003e\u003ccode\u003etooling\u003c/code\u003e is used for the build system, page templates, etc.\u003c/li\u003e\u003cli\u003e\u003ccode\u003etask\u003c/code\u003e is something that needs to be done once (e.g., \u0026ldquo;publish a release\u0026rdquo;)\u003c/li\u003e\u003cli\u003e\u003ccode\u003egood first issue\u003c/code\u003e is there because we want people to feel welcome\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eI\u0026rsquo;d enjoy hearing about what you\u0026rsquo;re using—please \u003ca href=\"mailto:gvwilson@third-bit.com\"\u003eemail me\u003c/a\u003eif you\u0026rsquo;d like to start a conversation.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/09/12/labels-writing-projects/","date_published":"2024-09-12T00:00:00+00:00","_relationships":[{"url":"https://third-bit.com/2024/09/13/writing-project-labels-revisited/","title":"The Third Bit","relation":"IsIdenticalTo"}],"date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/1rgm4-kjk76","title":"Capturing Screenshots Programmatically With R","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["tech notes","how to","r-universe","screenshot","magick"],"content_html":"\u003cp\u003eAs part of our work \u003ca href=\"/blog/2024/04/12/gsod-announcement/\"\u003edocumenting R-Universe\u003c/a\u003e,we\u0026rsquo;re adding screenshots of the interface to the \u003ca href=\"https://docs.r-universe.org\"\u003edocumentation website\u003c/a\u003e.Taking screenshots manually could quickly become very cumbersome, especially as we expect they\u0026rsquo;ll need updating in future: we might want to change the universes we feature, the interface might improve \u003ca href=\"/blog/2024/06/12/runiverse-frontend/\"\u003eyet again\u003c/a\u003e and therefore look slightly different.Therefore, we decided to opt for a programmatic approach.In this post we shall present our learnings from using the R packages \u003ca href=\"https://rstudio.github.io/chromote/\"\u003echromote\u003c/a\u003e and \u003ca href=\"https://docs.ropensci.org/magick/\"\u003emagick\u003c/a\u003e to produce screenshots.\u003c/p\u003e\u003ch2 id=\"main-packages-needed\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#main-packages-needed\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMain packages needed\u003c/h2\u003e\u003ch3 id=\"the-chromote-r-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-chromote-r-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe chromote R package\u003c/h3\u003e\u003cp\u003eTo take a screenshot programmatically, we need to somehow get control of a browser from a script.The \u003ca href=\"https://rstudio.github.io/chromote/\"\u003echromote R package\u003c/a\u003e is an actively maintained wrapper for \u003ca href=\"https://github.com/cyrus-and/chrome-remote-interface\"\u003eChrome Remote Interface\u003c/a\u003e, authored by Winston Chang and Barrett Schloerke.With chromote, you can open a browser in the background, navigate to the page of your choice, interact with it, and capture screenshots.chromote powers the experimental \u003ca href=\"https://rvest.tidyverse.org/reference/read_html_live.html\"\u003elive web-scraping in the rvest package\u003c/a\u003e and is also used in \u003ca href=\"https://rstudio.github.io/shinytest2/\"\u003eshinytest2\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"the-magick-r-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-magick-r-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe magick R package\u003c/h3\u003e\u003cp\u003eGenerally, \u003ca href=\"/author/jeroen-ooms\"\u003eJeroen Ooms\u0026rsquo;\u003c/a\u003e \u003ca href=\"https://docs.ropensci.org/magick/\"\u003emagick R package\u003c/a\u003e isn\u0026rsquo;t required to take screenshots, but we wanted to format the images by adding \u003cem\u003eshadows\u003c/em\u003e.Therefore this tool for image manipulation was necessary.\u003c/p\u003e\u003ch2 id=\"a-first-screenshot\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-first-screenshot\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA first screenshot\u003c/h2\u003e\u003cp\u003eWe start by initiating a chromote session of a standard screen size.We found the default screen size too narrow for our needs.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;chromote\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003escreen_width\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"m\"\u003e1920\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003escreen_height\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"m\"\u003e1080\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003eChromoteSession\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003enew\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eheight\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003escreen_height\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ewidth\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003escreen_width\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWe created a function that wraps \u003ccode\u003eb$screenshot()\u003c/code\u003e while still exposingthe parameters we need to tweak for some of the pages.The chromote package, like Shiny, uses R6.\u003c/p\u003e\u003cp\u003eOur function also calls the handy \u003ca href=\"https://docs.ropensci.org/magick/reference/composite.html\"\u003e\u003ccode\u003emagick::image_shadow()\u003c/code\u003e\u003c/a\u003e for adding a shadow to the image.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003escreenshot\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eimg_path\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                       \u003cspan class=\"n\"\u003eselector\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                       \u003cspan class=\"n\"\u003ecliprect\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etop\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eleft\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ewidth\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1920\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eheight\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1080\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                       \u003cspan class=\"n\"\u003eexpand\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNULL\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003escreenshot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eimg_path\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eselector\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eselector\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003edelay\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecliprect\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecliprect\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eexpand\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eexpand\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003emagick\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eimage_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eimg_path\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emagick\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eimage_shadow\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emagick\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eimage_write\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eimg_path\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003equality\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWe can now capture the search interface of R-Universe.In our script, we\u0026rsquo;ve added a generous \u003ccode\u003eSys.sleep()\u003c/code\u003e call to ensure pages are properly loaded.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ePage\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003enavigate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://r-universe.dev/search/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eSys.sleep\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003escreenshot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;search.png\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThis example captures the screenshot below.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/09/10/script-screenshots/search.png\"\t\t\talt=\"Screenshot of R-universe search interface, showing the search bar\"\u003e\u003c/figure\u003e\u003ch2 id=\"screenshots-after-filling-a-text-input-area\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#screenshots-after-filling-a-text-input-area\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eScreenshots after filling a text input area\u003c/h2\u003e\u003cp\u003eWe also wanted to demonstrate searching for something.We followed the example in a \u003ca href=\"https://gist.github.com/oganm/50a8020f718842aa3eee04dcfd57c198\"\u003egist\u003c/a\u003e to enter text into the search navbar\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003ewe needed to find the search input area, whose idea is \u0026ldquo;search-input\u0026rdquo;, by a call to \u003ccode\u003eb$DOM$querySelector()\u003c/code\u003e;\u003c/li\u003e\u003cli\u003ethen we focussed on that area through \u003ccode\u003eb$DOM$focus()\u003c/code\u003e;\u003c/li\u003e\u003cli\u003efinally we added text with \u003ccode\u003eb$Input$insertText()\u003c/code\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIt was easier to reload the page than to try and delete the current text before doing a new search.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003escreenshot_search\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003equery\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003escreen_width\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ePage\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003enavigate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://r-universe.dev/search/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eSys.sleep\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003esearch_box\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eDOM\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003equerySelector\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eDOM\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003egetDocument\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eroot\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003enodeId\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#search-input\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eDOM\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003efocus\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esearch_box\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003enodeId\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eInput\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003einsertText\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etext\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003equery\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eSys.sleep\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003escreenshot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003esprintf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;search-%s.png\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esnakecase\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eto_lower_camel_case\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003equery\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epurrr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ewalk\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;\u0026#34;missing-data\u0026#34;\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;author:jeroen json\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;exports:tojson\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003escreenshot_search\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003escreen_width\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003escreen_width\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"screenshots-after-clicking-on-something\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#screenshots-after-clicking-on-something\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eScreenshots after clicking on something\u003c/h2\u003e\u003cp\u003eThe search interface of R-universe suggests some advanced research fields if one clicks on the arrow-down button near the search button.Through a GitHub search for code we found an example of clicking in the \u003ca href=\"https://github.com/tidyverse/rvest/blob/c9be5b8dd9d672e84dd0dc515e3a37ab5c03111f/R/live.R#L145\"\u003esource code of rvest\u003c/a\u003e that we were able to adapt.\u003c/p\u003e\u003cp\u003eThe code finds the arrow-down button through its class rather than id so it might be a bit brittle over time.Once the class is found, we retrieve its \u0026ldquo;box model\u0026rdquo; which is a bunch of coordinates, and then calculate the centre coordinates.After that, a \u0026ldquo;click\u0026rdquo; which is actually a three-step action: moving the mouse, pressing the mouse, releasing the mouse.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Searching, advanced fields ----\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ePage\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003enavigate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://r-universe.dev/search/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eSys.sleep\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esearch_info\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eDOM\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003equerySelector\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eDOM\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003egetDocument\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eroot\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003enodeId\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s\"\u003e\u0026#34;button.btn.btn-outline-secondary.dropdown-toggle.dropdown-toggle-split\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003equads\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eDOM\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003egetBoxModel\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esearch_info\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003enodeId\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003econtent_quad\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eas.numeric\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003equads\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003emodel\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003econtent\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecenter_x\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003econtent_quad\u003c/span\u003e\u003cspan class=\"nf\"\u003e[c\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e7\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecenter_y\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003econtent_quad\u003c/span\u003e\u003cspan class=\"nf\"\u003e[c\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e6\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e8\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eInput\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003edispatchMouseEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;mouseMoved\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenter_x\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenter_y\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eInput\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003edispatchMouseEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;mousePressed\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenter_x\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenter_y\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ebutton\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;left\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eclickCount\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eInput\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003edispatchMouseEvent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;mouseReleased\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenter_x\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecenter_y\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ebutton\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;left\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eclickCount\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eSys.sleep\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003escreenshot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eb\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;search-advanced.png\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/09/10/script-screenshots/search-advanced.png\"\t\t\talt=\"Screenshot of R-universe search interface, showing the search bar and the advanced search fields\"\u003e\u003c/figure\u003e\u003ch2 id=\"other-gotchas-about-using-chromote\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-gotchas-about-using-chromote\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOther gotchas about using chromote\u003c/h2\u003e\u003cp\u003eThe package pages on R-universe are quite exhaustive.We needed to capture screenshots of different sections.When using an URL with a fragment, for instance \u003ccode\u003ehttps://r-spatial.r-universe.dev/sf#citation\u003c/code\u003e,we got the exact same screenshot as for \u003ccode\u003ehttps://r-spatial.r-universe.dev/sf\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eWe therefore had to use the \u003ccode\u003ecliprect\u003c/code\u003e argument of the screenshot method.Figuring out we needed it was a first gotcha.\u003c/p\u003e\u003cp\u003eA second gotcha is that \u003ccode\u003ecliprect\u003c/code\u003e is \u003ca href=\"https://github.com/rstudio/chromote/issues/168#issuecomment-2302422282\"\u003e\u0026ldquo;a (unnamed) vector/list with left, top, width and height\u0026rdquo;\u003c/a\u003e\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e:and it\u0026rsquo;s the \u003cem\u003eorder\u003c/em\u003e, not the names, that matters.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we explained how we used the chromote and magick R packages to produce screenshots for the documentation website of R-universe.Find the \u003ca href=\"https://github.com/r-universe-org/hitchhikers-guide/blob/main/R/screenshots.R\"\u003ecurrent version of our script\u003c/a\u003e.Do you use sometimes chromote or a similar programmatic browser interface?\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eOur need to interact with the webpage \u003cem\u003ebefore\u003c/em\u003e capturing the screenshot prevented our using \u003ca href=\"https://rstudio.github.io/webshot2/\"\u003ewebshot2\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eWe appreciated the fast and helpful user support!\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2024/09/10/script-screenshots/","date_published":"2024-09-10T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/f6g6z-2hk94","title":"Resources For Using R With Screen Readers","language":"en","authors":[{"name":"Liz Hare","url":"https://ropensci.org/author/liz-hare/","avatar":"https://ropensci.org/img/team/liz-hare.jpg","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["tech notes","screen-readers","champions program","community","accessibility"],"content_html":"\u003cp\u003eR is a language and environment for statistical computing.There are several tools and approaches for interacting with R, but not all are accessible with screen readers.This guide provides an overview of the tools and techniques available to screen reader users across different operating systems, with practical tips and resources to help them navigate the R environment.This guide may not be complete, but I hope it serves as a valuable starting point. We welcome suggestions from other users to enhance it further.\u003c/p\u003e\u003ch2 id=\"where-to-start-\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#where-to-start-\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhere to start ?\u003c/h2\u003e\u003cp\u003eThe set of tool and resources in this section apply for all operating systems.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://www.r-project.org\"\u003eThe R Project for Statistical Computing\u003c/a\u003e is the site where you can download R for Windows, Linux, and Mac.\u003c/p\u003e\u003cp\u003eWhen you install R, it has basic statistical functions.We call this installation \u0026ldquo;base R.\u0026rdquo;Users add functionality by writing packages in the R language.Dr. Jonathan Godfrey has written a package called BrailleR that produces statistical output in text or Braille format that are more accessible than base R functions.\u003ca href=\"https://r-resources.massey.ac.nz/BrailleR/\"\u003eDr. Godfrey\u0026rsquo;s website\u003c/a\u003e has information about this package as well as general advice about using R as a Braille or screen reader user.\u003c/p\u003e\u003cp\u003eThe \u003ca href=\"https://www.nfbnet.org/mailman/listinfo/blindrug_nfbnet.org\"\u003eBlind R Users mailing list\u003c/a\u003e is another place you can go for answers about using R.\u003c/p\u003e\u003ch2 id=\"how-do-you-interact-with-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-do-you-interact-with-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow do you interact with R?\u003c/h2\u003e\u003cp\u003ePossibilities include:\u003c/p\u003e\u003cul\u003e\u003cli\u003eRunning R at the \u003ca href=\"https://en.wikipedia.org/wiki/Terminal_emulator\"\u003ecommand prompt in a terminal\u003c/a\u003e. This has the large disadvantage of not saving your commands and output.\u003c/li\u003e\u003cli\u003eUsing a text editor to write scripts (groups of R commands) and submitting them at the \u003ca href=\"https://en.wikipedia.org/wiki/Command-line_interface\"\u003ecommand line\u003c/a\u003e. This used to be the preferred approach for many blind users, but is less convenient than in interactive tool.\u003c/li\u003e\u003cli\u003eUsing R\u0026rsquo;s GUI (graphical user interface). This might be accessible on Windows, but it is inaccessible on Mac.\u003c/li\u003e\u003cli\u003eUsing an accessible integrated development environment (IDE) for writing, editing, submitting, and reusing R code (see next section).\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"ides-and-operating-systems\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ides-and-operating-systems\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIDEs and Operating Systems\u003c/h3\u003e\u003cp\u003eAn IDE is software that supports programmers in developing software efficiently by providing a set of tools in the same environment. There are several IDEs in the market.IDEs have several advantages over working at the command prompt or in the R GUI:\u003c/p\u003e\u003cul\u003e\u003cli\u003eSpecialized commands for running code and reviewing results.\u003c/li\u003e\u003cli\u003eHelp with editing by doing things like notifying the user of mismatched parentheses.\u003c/li\u003e\u003cli\u003eEasily switch between editing code and reading output.\u003c/li\u003e\u003cli\u003eEase of saving your work and reusing it again later.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe popular RStudio IDE is not accessible for screen reader users on any platform.It is very important for teachers to understand that blind students won\u0026rsquo;t have access to this environment and so won\u0026rsquo;t be using its buttons or shortcuts. The same applies to those who write documentation.\u003c/p\u003e\u003ch4 id=\"windows\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#windows\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWindows\u003c/h4\u003e\u003cp\u003eMany blind R users use the \u003ca href=\"https://code.visualstudio.com\"\u003eVisual Studio Code (VS Code)\u003c/a\u003e IDE with screen readers.The \u003ca href=\"https://marketplace.visualstudio.com/items?itemName=REditorSupport.r\"\u003eR extension for VS code\u003c/a\u003eprovides additional functionality to make working in R more convenient.A second option for working with R in Windows is to install \u003ca href=\"https://learn.microsoft.com/en-us/windows/wsl/about\"\u003eWindows Subsystem for Linux\u003c/a\u003e(WSL).With WSL, you can run a Linux command line environment on Windows.You can access the Terminal using the NVDA or JAWS screen readers.An R session in the terminal would be accessible, or you could read input and output in the text editor of your choice from either the Windows or Linux operating system.This would be a great option for people who are experienced NVDA or JAWS users who want to learn about both R and Linux.\u003c/p\u003e\u003ch4 id=\"mac-and-linux\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mac-and-linux\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMac and Linux\u003c/h4\u003e\u003cp\u003eThe software listed below works together to provide an environment for working with R:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://www.gnu.org/software/emacs/\"\u003eEmacs\u003c/a\u003e is a powerful and customizable IDE thatcan be used with R, although there are many commands to learn at first.\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://github.com/tvraman/emacspeak\"\u003eEmacspeak\u003c/a\u003e is a screen reader designed specifically for use in a Linux (or Mac) terminal with Emacs.It works much better than VoiceOver, Apple\u0026rsquo;s native screen reader, in the terminal.Emacspeak is powerful but also involves learning many keyboard commands.\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://ess.r-project.org\"\u003eEmacs Speaks Statistics (ESS)\u003c/a\u003e is a package you can add to Emacs that will allow you to edit and submit code and view your output in another text window.It customizes the emacs environment for R.\u003c/li\u003e\u003cli\u003eAnother useful emacs package is \u003ca href=\"https://polymode.github.io\"\u003ePolymode\u003c/a\u003e which facilitates using R Markdown to produce documents like reports and slides that are very accessible if you output them in HTML format.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe last time I tested VScode on a Mac, it was not fully accessible with VoiceOver.\u003c/p\u003e\u003ch2 id=\"useful-r-features\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#useful-r-features\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUseful R Features\u003c/h2\u003e\u003cp\u003eR Markdown and \u003ccode\u003equarto\u003c/code\u003e are useful R tools.They allow you to make a single text file containing both plain text and R code.The resulting document can show both text explanation of your work and R output.These tools produce several file types as output.The HTML output is easy to navigate in similar ways to sighted colleagues.This accessibility makes these tools ideal for reports, homework assignments, websites, and slide presentations.\u003c/p\u003e\u003cp\u003eI haven\u0026rsquo;t included documentation here because it\u0026rsquo;s hard to find documentation that doesn\u0026rsquo;t assume the use of RStudio.\u003c/p\u003e\u003ch2 id=\"learning-to-use-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#learning-to-use-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLearning to Use R\u003c/h2\u003e\u003cp\u003eIt\u0026rsquo;s important to practice reading and learning from R\u0026rsquo;s documentation, but it takes time to learn to understand it. There are lots of helpful resources out there including:\u003c/p\u003e\u003cul\u003e\u003cli\u003eUCLA has great \u003ca href=\"https://stats.oarc.ucla.edu/r/\"\u003elearning modules and FAQs\u003c/a\u003e on R that are in simple text formats.\u003c/li\u003e\u003cli\u003eSearching the Web for examples and tutorials (as long as they aren\u0026rsquo;t videos) for the kind of analysis you want to do can help a lot. Avoid the commercial sites with lots of ads that interfere with screen reader navigation. I prefer the ones hosted on personal or academic sites.\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://www.bigbookofr.com\"\u003eOscar Baruffa\u0026rsquo;s website\u003c/a\u003e lists free, online books about R. Many of them are quite accessible except for the data visualizations. Also, many of them assume you\u0026rsquo;re using RStudio, so you\u0026rsquo;ll have to adapt your work to your own environment.\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://bookshare.org\"\u003eBookshare\u003c/a\u003e is an electronic book repository for print disabled people in some countries. They have many books on R, but accessibility can vary, for example, sometimes the code snippets are missing. These books can be quite helpful, though.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"summary\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#summary\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSummary\u003c/h2\u003e\u003cp\u003eThis guide has outlined several ways for screen reader users to work with R across different operating systems, highlighting accessible tools like BrailleR, VS Code, and Emacs. By exploring these options, users can choose the tools that best fit their needs and preferences.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/09/05/screen-readers-tools/","date_published":"2024-09-05T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/4z5by-bgz25","title":"rOpenSci News Digest, August 2024","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2024/08/30/news-august-2024\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"community-call-navigating-the-r-ecosystem-using-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call-navigating-the-r-ecosystem-using-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity call: Navigating the R ecosystem using R-Universe!\u003c/h3\u003e\u003cp\u003eOn \u003ca href=\"/commcalls/nov2024-r-universe/\"\u003eTuesday, 24 September 2024 16:00 UTC\u003c/a\u003e (no RSVP needed), join us to learn more about R-Universe and how you can use it to improve your R package development workflow.\u003c/p\u003e\u003cp\u003eIn this community call, \u003ca href=\"/author/jeroen-ooms/\"\u003eJeroen Ooms\u003c/a\u003e will provide details on what R-Universe is and an update on what you can do with it today.He will also discuss the future of R-Universe and how it can be used to navigate the R ecosystem.\u003c/p\u003e\u003ch3 id=\"webinar-screen-reader-accessible-tools-and-resources-for-learning-and-working-with-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#webinar-screen-reader-accessible-tools-and-resources-for-learning-and-working-with-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWebinar: Screen Reader Accessible Tools and Resources for Learning and Working with R\u003c/h3\u003e\u003cp\u003e\u003ca href=\"/author/liz-hare/\"\u003eLiz Hare\u003c/a\u003e and \u003ca href=\"/author/alican-cagri-gokcek/\"\u003eAlican Cagri Gokcek\u003c/a\u003e, both rOpenSci \u003ca href=\"/champions/\"\u003eChampions\u003c/a\u003e will participate in a \u003ca href=\"/events/rsr-learn-and-use/\"\u003epanel\u003c/a\u003e sharing their experiences with screen reader-accessible tools and resources for learning and working with R.\u003c/p\u003e\u003cp\u003eThe \u003ca href=\"/events/rsr-learn-and-use/\"\u003eevent\u003c/a\u003e is co-organized by rOpenSci and the \u003ca href=\"https://bogazici.edu.tr/en-US/Index\"\u003eBoğaziçi University\u003c/a\u003e and will be held on \u003cstrong\u003eSeptember 10\u003c/strong\u003e.\u003c/p\u003e\u003ch3 id=\"blog-post-series-two-years-and-twelve-projects-as-community-manager-at-ropensci\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#blog-post-series-two-years-and-twelve-projects-as-community-manager-at-ropensci\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBlog post series: Two years and twelve projects as Community Manager at rOpenSci\u003c/h3\u003e\u003cp\u003eIn June 2022 Yani became the Community Manager of rOpenSci.Now she has started a \u003ca href=\"https://yabellini.netlify.app/blog/2024-06-23-ropensci-2years-cm-en/\"\u003eseries of blog posts\u003c/a\u003e to share 12 projects she was involved in these two years to tell you more about the kind of work and activities a community manager of a technology community of practice does and what she learned in the process.\u003c/p\u003e\u003cp\u003eThe series is also available in \u003ca href=\"https://yabellini.netlify.app/blog/2024-06-23-ropensci-2years-cm/\"\u003eSpanish\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"our-stats-on-all-cran-packages-now-updated-daily\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#our-stats-on-all-cran-packages-now-updated-daily\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOur stats on all CRAN packages now updated daily\u003c/h3\u003e\u003cp\u003erOpenSci\u0026rsquo;s \u003ca href=\"https://docs.ropensci.org/pkgstats\"\u003epkgstats\u003c/a\u003e package generates summary statistics on R packages.Our \u003ca href=\"https://docs.ropensci.org/pkgcheck\"\u003epkgcheck\u003c/a\u003e system compares the statistical properties of packages being checked with equivalent properties of all CRAN packages.We now generate daily updates of our reference database of \u003ca href=\"https://docs.ropensci.org/pkgstats\"\u003epkgstats\u003c/a\u003e for all CRAN packages, so the \u003ca href=\"https://docs.ropensci.org/pkgcheck\"\u003epkgcheck\u003c/a\u003e output will always be against the current state of CRAN.The databases are published with \u003ca href=\"https://github.com/ropensci-review-tools/pkgstats/releases/tag/v0.1.6\"\u003ethe v0.1.6 release of pkgstats\u003c/a\u003e, and can be downloaded from there.Alternatively, to know how \u0026ldquo;noteworthy\u0026rdquo; your package is compared to CRAN packages, simply call \u003ca href=\"https://docs.ropensci.org/pkgcheck\"\u003epkgcheck\u003c/a\u003e on your package (perhaps with \u003ccode\u003egoodpractice = FALSE\u003c/code\u003e to speed things up by skipping those parts of checks). Then, either print the results directly in the console, or use \u003ccode\u003eout \u0026lt;- checks_to_markdown(checks, render = TRUE)\u003c/code\u003e to generate and automatically open a rendered HTML version, where \u0026ldquo;Statistical Properties\u0026rdquo; will include the comparison of your package to all current CRAN packages.\u003c/p\u003e\u003ch3 id=\"the-ropensci-community-at-upcoming-events\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-ropensci-community-at-upcoming-events\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe rOpenSci community at upcoming events\u003c/h3\u003e\u003cp\u003eMeet rOpenSci team and community members at events in the near future!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003erOpenSci Software Research Scientist \u003ca href=\"/author/mark-padgham/\"\u003eMark Padgham\u003c/a\u003e will be at the \u003ca href=\"https://rsecon24.society-rse.org/\"\u003eRSECon, the Research Software Engineering Conference 2024\u003c/a\u003e in Newcastle, UK from 3rd to 5th September 2024 where he will deliver his talk \u003ca href=\"/events/rseuk-2024/\"\u003e\u0026ldquo;rOpenSci Statistical Software Peer Review: The importance and challenge of community engagement\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003erOpenSci Director \u003ca href=\"/author/noam-ross/\"\u003eNoam Ross\u003c/a\u003e and rOpenSci Lead Infrastructure Engineer \u003ca href=\"/author/jeroen-ooms/\"\u003eJeroen Ooms\u003c/a\u003e will take part in the \u003ca href=\"/events/numfocussummit-2024/\"\u003eNumFOCUS Project Summit 2024\u003c/a\u003e on \u003ca href=\"https://numfocus.org/2024-project-summit-openmbee\"\u003eSeptember 5-7, 2024\u003c/a\u003e in Cambridge, Massachusetts, USA. Come to chat if you are around!\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003erOpenSci Community Manager \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e will deliver a keynote talk at \u003ca href=\"/events/carpentryconnect-2024/\"\u003eBioNT Community Event \u0026amp; CarpentryConnect-Heidelberg 2024\u003c/a\u003e, on November 14th in Heidelberg, Germany.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cdel\u003eTuesday, September 3rd, 9:00 Australia Western (01:00 UTC)\u003c/del\u003e \u003cstrong\u003eCancelled\u003c/strong\u003e\u003c/li\u003e\u003cli\u003eTuesday, October 1st, 14h00 Europe Central (12:00 UTC), Theme TBA with cohost TBA and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following  package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/karel\"\u003ekarel\u003c/a\u003e, developed by Marcos Prunello: This is the R implementation of Karel the robot, a programming language created by Dr. R. E. Pattis at Stanford University in 1981. Karel is an useful tool to teach introductory concepts about general programming, such as algorithmic decomposition, conditional statements, loops, etc., in an interactive and fun way, by writing programs to make Karel the robot achieve certain tasks in the world she lives in. Originally based on Pascal, Karel was implemented in many languages through these decades, including Java, C++, Ruby and Python. This is the first package implementing Karel in R.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=karel\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/620\"\u003ereviewed\u003c/a\u003e by Veronica Jimenez-Jacinto and Joel Nitta.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following twenty-two packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/frictionless\" title=\"Read and Write Frictionless Data Packages\"\u003efrictionless\u003c/a\u003e (\u003ca href=\"https://github.com/frictionlessdata/frictionless-r/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gert\" title=\"Simple Git Client for R\"\u003egert\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/gert/releases/tag/v2.1.0\"\u003e\u003ccode\u003ev2.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pkgstats\" title=\"Metrics of R Packages\"\u003epkgstats\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/pkgstats/releases/tag/v0.1.6\"\u003e\u003ccode\u003ev0.1.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (cff) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v1.1.1\"\u003e\u003ccode\u003ev1.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/circle\" title=\"R Client Package for Circle CI\"\u003ecircle\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/circle/releases/tag/v0.7.3\"\u003e\u003ccode\u003ev0.7.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/crul\" title=\"HTTP Client\"\u003ecrul\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/crul/releases/tag/v1.5.0\"\u003e\u003ccode\u003ev1.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/GSODR\" title=\"Global Surface Summary of the Day (GSOD) Weather Data Client\"\u003eGSODR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/GSODR/releases/tag/v4.1.1\"\u003e\u003ccode\u003ev4.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/historydata\" title=\"Datasets for Historians\"\u003ehistorydata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/historydata/releases/tag/v0.3.0\"\u003e\u003ccode\u003ev0.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lingtypology\" title=\"Linguistic Typology and Mapping\"\u003elingtypology\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lingtypology/releases/tag/v1.1.18v2\"\u003e\u003ccode\u003ev1.1.18v2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/mapscanner\" title=\"Print Maps, Draw on Them, Scan Them Back in\"\u003emapscanner\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/mapscanner/releases/tag/v0.1.1\"\u003e\u003ccode\u003ev0.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.10.6\"\u003e\u003ccode\u003ev0.10.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/phonfieldwork\" title=\"Linguistic Phonetic Fieldwork Tools\"\u003ephonfieldwork\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/phonfieldwork/releases/tag/v0.0.17\"\u003e\u003ccode\u003ev0.0.17\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/qualtRics\" title=\"Download Qualtrics Survey Data\"\u003equaltRics\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/qualtRics/releases/tag/v3.2.1\"\u003e\u003ccode\u003ev3.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rangr\" title=\"Mechanistic Simulation of Species Range Dynamics\"\u003erangr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rangr/releases/tag/v1.0.5\"\u003e\u003ccode\u003ev1.0.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rdataretriever\" title=\"R Interface to the Data Retriever\"\u003erdataretriever\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rdataretriever/releases/tag/v.3.1.1\"\u003e\u003ccode\u003ev.3.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/refsplitr\" title=\"author name disambiguation, author georeferencing, and mapping of coauthorship networks with Web of Science data\"\u003erefsplitr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/refsplitr/releases/tag/v1.0.1\"\u003e\u003ccode\u003ev1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rOPTRAM\" title=\"Derive Soil Moisture Using the OPTRAM Algorithm\"\u003erOPTRAM\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rOPTRAM/releases/tag/v0.3\"\u003e\u003ccode\u003ev0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stats19\" title=\"Work with Open Road Traffic Casualty Data from Great Britain\"\u003estats19\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stats19/releases/tag/v3.1.0\"\u003e\u003ccode\u003ev3.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stplanr\" title=\"Sustainable Transport Planning\"\u003estplanr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stplanr/releases/tag/v1.2.2\"\u003e\u003ccode\u003ev1.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/vcr\" title=\"Record HTTP Calls to Disk\"\u003evcr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/vcr/releases/tag/v1.6.0\"\u003e\u003ccode\u003ev1.6.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/weatherOz\" title=\"An API Client for Australian Weather and Climate Data Resources\"\u003eweatherOz\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weatherOz/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/webmockr\" title=\"Stubbing and Setting Expectations on HTTP Requests\"\u003ewebmockr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/webmockr/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are ten recently closed and active submissions and 6 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"https://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/638\"\u003echopin\u003c/a\u003e, CHOPIN: Computation for Climate and Health research On Parallelized INfrastructure. Submitted by \u003ca href=\"https://www.issong.net\"\u003eInsang Song\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/637\"\u003ecancerprof\u003c/a\u003e, API Client for State Cancer Profiles. Submitted by \u003ca href=\"https://github.com/realbp\"\u003eBrian Park\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/636\"\u003ersi\u003c/a\u003e, Efficiently Retrieve and Process Satellite Imagery. Submitted by \u003ca href=\"https://mm218.dev/\"\u003eMichael Mahoney\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/625\"\u003erix\u003c/a\u003e, Rix: Reproducible Environments with Nix. Submitted by \u003ca href=\"https://brodrigues.co\"\u003eBruno Rodrigues\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/642\"\u003eeDNAjoint\u003c/a\u003e, Joint Modeling of Traditional and Environmental DNA Survey Data. Submitted by \u003ca href=\"https://github.com/abigailkeller\"\u003eAbigail Keller\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/632\"\u003eQuadratiK\u003c/a\u003e, A Collection of Methods Using Kernel-Based Quadratic Distances for. Submitted by \u003ca href=\"https://github.com/giovsaraceno\"\u003eGiovanni Saraceno\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/626\"\u003egigs\u003c/a\u003e, Assess Fetal, Newborn, and Child Growth with International Standards. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/08/06/git-tricks\"\u003eGit Tricks for Working with Large Repositories\u003c/a\u003e by Mauro Lepore. \u003ccode\u003egit clone\u003c/code\u003e isn\u0026rsquo;t always the right tool. Other languages: \u003ca href='/es/blog/2024/08/06/git-tricks' lang='es'\u003eTrucos de Git para trabajar con repositorios grandes (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/08/20/my-experience-with-long-term-maintenance-of-an-r-package\"\u003eMy Experience With Long Term Maintenance Of An R Package\u003c/a\u003e by Vincent van Hees. I discuss various strategies for package maintenance, drawing on my experience with the GGIR package, and explore how funding, community involvement, and scope management can help ensure continued success.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/medrxivr/\"\u003emedrxivr\u003c/a\u003e, access and search MedRxiv and BioRxiv preprint data. \u003ca href=\"https://github.com/ropensci/medrxivr/issues/41\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/01/qualtrics-call-help/\"\u003eHelp make qualtRics better! Code contributions wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/27/assertr-call-help/\"\u003eHelp make assertr better! Come close issues\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/29/targets-call-help/\"\u003eHelp users and developers of targets by answering questions!\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/19/waywiser-call-help/\"\u003eHelp make waywiser better! User requests wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAlso refer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003ch3 id=\"playing-on-the-same-team-as-your-dependency\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#playing-on-the-same-team-as-your-dependency\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePlaying on the same team as your dependency\u003c/h3\u003e\u003cp\u003eWe recently re-shared the older tidyverse post \u003ca href=\"https://www.tidyverse.org/blog/2022/09/playing-on-the-same-team-as-your-dependecy/\"\u003e\u0026ldquo;Playing on the same team as your dependency\u0026rdquo;\u003c/a\u003e by Thomas Lin Pedersen.A further tip would be to make it easier for the maintainer of the dependency to submit patches to your package if needed, by listing the link to the source (GitHub or GitLab repository for instance) in the URL field of \u003ccode\u003eDESCRIPTION\u003c/code\u003e.Creating the update for you is easier on the maintainer of the dependency than sending you an email with code inside.\u003c/p\u003e\u003ch3 id=\"update-your-pkgdown-navbar-configuration-if-needed\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#update-your-pkgdown-navbar-configuration-if-needed\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdate your pkgdown navbar configuration if needed\u003c/h3\u003e\u003cp\u003eIf your pkgdown \u003ca href=\"https://pkgdown.r-lib.org/articles/customise.html#navbar-heading\"\u003enavbar configuration\u003c/a\u003e does not explicitly mentions \u0026ldquo;search\u0026rdquo; as a component, your website will not include a search bar in its navbar.This is due to a \u003ca href=\"https://pkgdown.r-lib.org/news/index.html#front-end-changes-2-1-0\"\u003efix\u003c/a\u003e in how pkgdown handles the search component, but from your perspective it might well look like a bug, so check your pkgdown configuration!\u003c/p\u003e\u003cp\u003eIf you maintain an rOpenSci package, you might have already gotten a \u003ca href=\"https://github.com/ropensci-org/rotemplate/issues/112\"\u003epull request from the rotemplate team\u003c/a\u003e. \u0026#x1f609;\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/MtreeRing/pull/16/files\"\u003eExample of a fix\u003c/a\u003e, \u003ca href=\"https://github.com/ropensci/targets/pull/1303/files\"\u003eanother example that also updates the navbar config syntax\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"another-ide-to-try-out\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#another-ide-to-try-out\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAnother IDE to try out?\u003c/h3\u003e\u003cp\u003eRemember Athanasia Mo Mowinckel\u0026rsquo;s post about the \u003ca href=\"https://drmowinckels.io/blog/2024/ide/\"\u003eIDEs she uses\u003c/a\u003e?She wrote a follow-up about the new IDE by Posit, \u003ca href=\"https://drmowinckels.io/blog/2024/positron/\"\u003ePositron\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eOther new IDE developments include \u003ca href=\"https://zed.dev/blog/zed-ai\"\u003eZed AI\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"find-and-fix-problems-in-r-code-automatically\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#find-and-fix-problems-in-r-code-automatically\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFind and fix problems in R code automatically!\u003c/h3\u003e\u003cp\u003eEtienne Bacher created an enticing R package called \u003ca href=\"https://flint.etiennebacher.com/\"\u003eflint\u003c/a\u003e, that finds \u003cem\u003eand fixes\u003c/em\u003e lints in R code.Imagine \u003ca href=\"https://lintr.r-lib.org/\"\u003elintr\u003c/a\u003e being as active as \u003ca href=\"https://styler.r-lib.org/\"\u003estyler\u003c/a\u003e instead of just telling you what to amend. \u0026#x1f601;Note that at the moment, flint does not have as many rules as lintr.\u003c/p\u003e\u003cp\u003eThe existence of flint is yet another benefit from \u003ca href=\"/blog/2024/07/19/news-july-2024/#on-tools\"\u003eDavis Vaughan\u0026rsquo;s building an R grammar for tree-sitter\u003c/a\u003e, since flint builds on Etienne Bacher\u0026rsquo;s \u003ca href=\"https://astgrepr.etiennebacher.com/\"\u003eastgrepr\u003c/a\u003e, that binds the \u003ca href=\"https://ast-grep.github.io/\"\u003eRust ast-grep crate\u003c/a\u003e, that in turns\u0026hellip; uses tree-sitter!\u003c/p\u003e\u003ch3 id=\"create-content-for-help-pages-on-the-fly\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#create-content-for-help-pages-on-the-fly\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCreate content for help pages on the fly\u003c/h3\u003e\u003cp\u003eDid you know that you can create dynamic content for the help page of a function in your R package using \u003ccode\u003e#' \\Sexpr[results=rd,stage=render]{\u0026lt;some-code\u0026gt;}\u003c/code\u003e?The code can even call an internal function!\u003ca href=\"https://github.com/maelle/personalized.help\"\u003eMinimal example\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThanks Rich FitzJohn for sharing about this idea that he uses in his \u003ca href=\"https://github.com/cran/stevedore/blob/74b63bfcff2af200367fbd78febfd2d36855d500/R/help.R#L4\"\u003estevedore package\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eRelatedly, if you want to provide different content in the manual page depending on the OS, that\u0026rsquo;s also \u003ca href=\"https://cran.r-project.org/doc/manuals/R-exts.html#Platform_002dspecific-sections\"\u003epossible\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you\u0026rsquo;re taking it a bit further and want to change what \u003ccode\u003e?foo\u003c/code\u003e returns, you might be interested in these two strategies (but be warned, these are not necessarily CRAN-compatible!):\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eElio Campitelli\u0026rsquo;s rhelpi18n package \u003ca href=\"https://github.com/eliocamp/rhelpi18n/blob/main/R/zzzz.R\"\u003ecurrently overwrites the \u003ccode\u003e.getHelpFile()\u003c/code\u003e\u003c/a\u003e function to make it possible to get a manual page in the correct language.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe \u0026ldquo;shims\u0026rdquo; created by \u003ca href=\"https://github.com/r-lib/pkgload/blob/a20161ecc5b3645a9555832bd0a02fd14c80be82/R/shims.R#L11\"\u003epkgload\u003c/a\u003e that allow \u003cem\u003ein development\u003c/em\u003e documentation pages to be loaded.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/08/30/news-august-2024/","date_published":"2024-08-30T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/271wf-gsr30","title":"My Experience With Long Term Maintenance Of An R Package","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["editor"]},{"name":"Vincent van Hees","url":"https://ropensci.org/author/vincent-van-hees/","avatar":"https://github.com/vincentvanhees.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["maintenance","sustainability","community"],"content_html":"\u003cp\u003eR packages, like any software, require \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003emaintenance\u003c/a\u003e. Package maintenance includes:\u003c/p\u003e\u003cul\u003e\u003cli\u003eFixing bugs when discovered.\u003c/li\u003e\u003cli\u003eAdapting to updates in package dependencies.\u003c/li\u003e\u003cli\u003eProviding some level of user and contributor support.\u003c/li\u003e\u003cli\u003eWhen desired, refactoring code or adding new functionality.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWithout maintenance efforts a package is at risk of losing its value. Yet, maintaining a package for years or even decades can be challenging as it is time consuming. Therefore, it is important for any package maintainer to adopt a strategy for sustaining the maintenance effort. In this blog post I share my own experience with a variety of strategies that I have explored myself. For readability I have categorized them into:\u003c/p\u003e\u003cul\u003e\u003cli\u003eFunding: Ways to pay for maintenance time.\u003c/li\u003e\u003cli\u003eCommunity: Ways to involve others.\u003c/li\u003e\u003cli\u003eScope: Strategic decisions on how to approach the maintenance effort.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eBefore I start, it may be good to briefly summarize my own package maintenance experience. I created and maintain the \u003ca href=\"https://wadpac.github.io/GGIR/\"\u003eR package GGIR\u003c/a\u003e since 2013. GGIR is a processing pipeline for wearable movement sensor data used in sleep and physical activity research. GGIR is designed for researchers with typically limited to no programming skills. As such, GGIR attempts to automate the entire process from raw binary data handling and quality assessment to the generation of research friendly summary reports. The growing demand for enhancements and support for GGIR in 2019 led me to start my own business, \u003ca href=\"https://www.accelting.com/\"\u003eAccelting\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"funding-ways-to-pay-for-maintenance-time\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#funding-ways-to-pay-for-maintenance-time\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFunding: Ways to pay for maintenance time.\u003c/h2\u003e\u003ch3 id=\"research-grants\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#research-grants\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eResearch grants\u003c/h3\u003e\u003cp\u003eGetting a research grant could result in a substantial amount of resources (people time) for a certain period of time. This option is most realistic if you are an academic. There may not be many funding calls dedicated to research software maintenance, but it may be possible to incorporate some time for package maintenance in a grant proposal if it is a logical step towards achieving your research goals. Applying for research grants is not necessarily something a non-academic package author would do, but they could encourage the academics who use the package to account for package maintenance time in their grant applications. That said, some software grants exists\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e \u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e \u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e \u003csup id=\"fnref:4\"\u003e\u003ca href=\"#fn:4\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e4\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eMy experience:\u003c/strong\u003e So far, several users of my package have successfully applied for research grants to pay for enhancements of the package. I do not apply for grants myself as I think it is more convincing if a package user asks for it.\u003c/p\u003e\u003ch3 id=\"maintenance-as-a-paid-service\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#maintenance-as-a-paid-service\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMaintenance as a paid service\u003c/h3\u003e\u003cp\u003ePackage stakeholders are those who benefit from the ongoing maintenance of the package, which include:\u003c/p\u003e\u003cp\u003ei. The package users.ii. Those who benefit from the work done by package users, e.g. colleagues of the package user or their supervisor.iii. Yourself, because being the maintainer could look good on your resume.\u003c/p\u003e\u003cp\u003eMaintenance as a paid service has the advantage that you, as package maintainer, make clear to other stakeholders that your time and expertise are not for free. I see three variants on this:\u003c/p\u003e\u003col\u003e\u003cli\u003eAs part of your regular job with payments going directly to your employer in exchange for the hours you work on the package. This requires that the work is in line with the mission of the organization you work for, which may limit the scope of the maintenance work you can do.\u003c/li\u003e\u003cli\u003eAs side job in spare time. Some tips: make sure to not overload yourself with contractual obligations as even three hours of spare time work per week on top of a full time job can already feel like a burden. Also note that not all employment contracts allow for spare time consultancy.\u003c/li\u003e\u003cli\u003eYour own (full-time) company around servicing the R package.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003e\u003cstrong\u003eMy experience:\u003c/strong\u003e For option 1 and 2 I was lucky that my employer at the time (2016-2019) facilitated me doing them. Option 1 was good for me to make some well-defined larger enhancements to the package defined in 3-6 month projects. Whereas, option 2 which I did next was great for doing projects requiring 0-10 day time investments that were too small to be of interest for my employer but perfect for resolving some issues. For the past five years I have been following option 3, which has been good for being available for both small and large projects. My clients are typically from group ii listed above because they either have budget or know how to find it.\u003c/p\u003e\u003ch3 id=\"unpaid-spare-time-efforts\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#unpaid-spare-time-efforts\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUnpaid spare time efforts\u003c/h3\u003e\u003cp\u003eUnpaid spare time efforts can sometimes be an attractive option if you were the creator of the package and none of the other options in this list are feasible or immediately available to you. Doing the work in your spare time has the advantage that you can do it whenever it suits you without time pressure. You may even want to see some of the spare time efforts as an investment in your personal skills. Further, spare time efforts can be an effective solution when the amount of work is relatively low and the expected impact is high. The disadvantage of working on the package in your spare time is that it may give other stakeholders the impression that your time and expertise are for free, which is not the case.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eMy experience:\u003c/strong\u003e I do this primarily by providing quick user-support. Providing some level of free support feels necessary to generate enough opportunities for the other strategies in this list. For example, sometimes a bit of free support leads to paid support and sometimes a user with questions becomes a contributors. I do not like the idea of asking users to sponsor me via a patron account or similar as I \u003ca href=\"https://www.accelting.com/updates/how-to-keep-ggir-alive/\"\u003emotivated\u003c/a\u003e a couple of years ago.\u003c/p\u003e\u003ch2 id=\"community-ways-to-involve-others\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-ways-to-involve-others\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity: Ways to involve others.\u003c/h2\u003e\u003ch3 id=\"increase-user-base\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#increase-user-base\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIncrease user base\u003c/h3\u003e\u003cp\u003eAttempt to increase your package\u0026rsquo;s user base and by that increase the number of stakeholders that may be able to help. For example by actively \u003ca href=\"/blog/2024/03/07/package-marketing/\"\u003eadvertising your package\u003c/a\u003e if you have not done so before or by joining forces with a similar and/or complementary package like facilitating each others data formats.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eMy experience:\u003c/strong\u003e I have prioritized making the package functional for all types of data used in our research field and the package offers the user many parameters to tailor the functionality to their own needs. Finally, I have created an online \u003ca href=\"https://www.accelting.com/ggir-training/\"\u003etraining course\u003c/a\u003e to help new users get started.\u003c/p\u003e\u003ch3 id=\"academic-student-projects\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#academic-student-projects\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAcademic student projects\u003c/h3\u003e\u003cp\u003eStudent projects can help to review, test, and improve a package. However, students expect active coaching and project goals relevant to their degree.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eMy experience:\u003c/strong\u003e One PhD-student, Jairo Migueles, who used the package in his thesis project (2016-2020) helped fix bugs and enhance the code. Currently there is another PhD-student, Gaia Segantin, who is proof-reading the elaborate almost book-style \u003ca href=\"https://wadpac.github.io/GGIR/\"\u003enarrative documentation\u003c/a\u003e that we recently added. Their efforts have been valuable.\u003c/p\u003e\u003ch3 id=\"build-developer-community\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#build-developer-community\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBuild developer community\u003c/h3\u003e\u003cp\u003eGrowing a \u003ca href=\"/commcalls/apr2021-pkg-community/\"\u003ecommunity\u003c/a\u003e of code contributors around your package could reduce the work load on individual contributors. However, whether this makes things easier for you really depends on the type of contributors and how good they are. The downside of a larger community is that there is a stronger need for a good central coordination to safeguard quality. Google Season of Code \u003csup id=\"fnref1:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e and Google Season of Docs \u003csup id=\"fnref1:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e are possible avenues.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eMy experience:\u003c/strong\u003e I have had several contributors who worked on the code or helped respond to user questions. My efforts to grow the community are limited to having some documentation on how to contribute and trying to be welcoming to contributors more generally. I am not sure what else I can do to grow the community. Most of my package users are not R programmers themselves as the package is designed to for a users with very limited R experience, which is good for building a broad user community but not necessarily for building a broad developer community. I did consider Google Season of Code and Google Season of Docs but missed the deadline twice already as the application windows for organisations was not clear to me.\u003c/p\u003e\u003ch3 id=\"outsource-the-maintenance-work\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#outsource-the-maintenance-work\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOutsource the maintenance work\u003c/h3\u003e\u003cp\u003eOutsourcing to commercial parties could be an option if you, lack access to software engineers and do not have time yourself, but already have financial resources, and if you have clearly defined package maintenance target(s).\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eMy experience:\u003c/strong\u003e I have outsourced some of the maintenance work items to other freelancers when either I did not have time for it or if I felt that my skills in a certain were insufficient.\u003c/p\u003e\u003ch2 id=\"scope-strategic-decisions-on-how-to-approach-the-maintenance-effort\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#scope-strategic-decisions-on-how-to-approach-the-maintenance-effort\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eScope: Strategic decisions on how to approach the maintenance effort.\u003c/h2\u003e\u003ch3 id=\"focus-on-publications\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#focus-on-publications\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFocus on publications\u003c/h3\u003e\u003cp\u003eIf you are an academic, focusing on academic publications that are about the package or that use the package. Here, the objective is that you focus on the package issues that are relevant to your own research. The strengths of this approach is that it generates evidence for the value of specific aspects of your package or specific use cases.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eMy experience:\u003c/strong\u003e R package \u003ca href=\"https://wadpac.github.io/GGIR/\"\u003eGGIR\u003c/a\u003e started based on my own published PhD thesis work and benefited from additional publications in later years. Over time I learnt that a strong focus on publications makes it harder to also improve my coding skills and have time for the bigger coding challenges. So, I shifted my focus to encouraging academic package users to do the necessary research publications.\u003c/p\u003e\u003ch3 id=\"follow-community-guides-for-package-development\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#follow-community-guides-for-package-development\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFollow community guides for package development\u003c/h3\u003e\u003cp\u003eFollowing the \u003ca href=\"https://devguide.ropensci.org/\"\u003erOpenSci package development guide\u003c/a\u003e will reduce the effort needed to maintain the package, and will make it easier for outsiders to contribute. Needless to say that community guidelines do not generate time (salary) for people to actually do the maintenance. Therefore, following community guidelines is best combined with other options mentioned in this blog post.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eMy experience:\u003c/strong\u003e I started my package in 2013 when I did not have peers to coach me. Submitting the package to CRAN helped me to become aware and comply with the community standards at the time. Further, I learned about unit-testing and the concepts of clean code in the job I had between 2015 and 2019, which also helped to boost package quality. I know the package is still not perfect, but I see it as a gradual process where every year I try to make the package a bit more compliant with standards.\u003c/p\u003e\u003ch3 id=\"reduce-cost\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#reduce-cost\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReduce cost\u003c/h3\u003e\u003cp\u003eTry to minimize the amount of package components you develop and maintain yourself by aiming to rely as much as possible on off the shelf solutions developed and maintained by others, either commercially or open-source.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eMy experience:\u003c/strong\u003e I had a few bad experiences with dependencies being deprecated, by which I have become more careful in adding dependencies. Also, I sometimes find it difficult to find off the shelf solutions for what I need. That said, if I find a well maintained R package that offers a functionality I need in a few lines of code that I cannot write myself easily in base R code then I will consider it as a dependency in line with the guidance by \u003ca href=\"https://r-pkgs.org/dependencies-mindset-background.html\"\u003ehttps://r-pkgs.org/dependencies-mindset-background.html\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"do-what-nobody-expects-stop-maintenance\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#do-what-nobody-expects-stop-maintenance\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDo what nobody expects: Stop maintenance\u003c/h3\u003e\u003cp\u003eYour relentless efforts to maintain the package may be the exact reason why other stakeholders do not step in. Announcing to stop the maintenance of the package might trigger stakeholders to help find a solution. Stopping maintenance can come in different flavors:\u003c/p\u003e\u003col\u003e\u003cli\u003eFull permanent retirement: Not available for any work except for hand-over to a new maintainer.\u003c/li\u003e\u003cli\u003ePartial permanent retirement: Only available for essential maintenance.\u003c/li\u003e\u003cli\u003eFull temporary break: Not available for any work for X months but return afterward.\u003c/li\u003e\u003cli\u003ePartial temporary break: Only available for essential maintenance for X months and return afterward.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eNote that this approach may actually be better than being a maintainer in name only without spending time on the package. By clearly communicating the maintenance status to users and potential contributors, you avoid false expectations.\u003c/p\u003e\u003cp\u003eOn a side note - If there is another R package with similar functionality as yours then it may actually be worth considering stopping maintenance and deprecating your package as it may help to channel scarce maintenance efforts towards this other package.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eMy experience:\u003c/strong\u003e At the moment, doing any of these would conflict with my business interests as maintenance requests are a potential source of income for me. However, if I stopped my business then stopping the maintenance (fully, temporarily or partially) could be a strategy.\u003c/p\u003e\u003ch2 id=\"wrapping-up\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#wrapping-up\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWrapping up\u003c/h2\u003e\u003cp\u003eI hope you found this list of sustainability strategies useful, either for your own package or to learn how you can support someone else\u0026rsquo;s package. If you think I have missed an option or disagree with the ones I have mentioned: Please leave your thoughts in the comments!\u003c/p\u003e\u003ch2 id=\"acknowledgements\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#acknowledgements\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAcknowledgements\u003c/h2\u003e\u003cp\u003eThis blog post is based on a \u003ca href=\"https://blog.esciencecenter.nl/10-ways-to-keep-your-successful-scientific-software-alive-61ac81f36a87\"\u003eblog post\u003c/a\u003e I wrote in 2017, but updated with my experiences from the past 7 years and now tailored to the rOpenSci community.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003e\u003ca href=\"https://www.r-consortium.org/all-projects/call-for-proposals\"\u003ehttps://www.r-consortium.org/all-projects/call-for-proposals\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003e\u003ca href=\"https://summerofcode.withgoogle.com/\"\u003ehttps://summerofcode.withgoogle.com/\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref1:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003e\u003ca href=\"https://developers.google.com/season-of-docs\"\u003ehttps://developers.google.com/season-of-docs\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref1:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:4\"\u003e\u003cp\u003e\u003ca href=\"https://www.researchsoft.org/funding-opportunities/\"\u003ehttps://www.researchsoft.org/funding-opportunities/\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:4\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2024/08/20/my-experience-with-long-term-maintenance-of-an-r-package/","date_published":"2024-08-20T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/8exd0-b3y53","title":"Git Tricks for Working with Large Repositories","language":"en","authors":[{"name":"Mauro Lepore","url":"https://orcid.org/0000-0002-1986-7988","avatar":"https://ropensci.org/img/team/mauro-lepore.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["tech-notes","git","github","how-to"],"content_html":"\u003cp\u003eRecently \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e reminded usto update our Slack profile:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eFriendly reminder: Let\u0026rsquo;s increase the value of our rOpenSci Slack community.Please add details to your profile, e.g., your photo, your favorite social mediahandle, what you do, your pronouns, and how to pronounce your name.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eAfter doing that I went on to updating my profile photos on the rOpenSciwebsite, which ended up teaching me a few git tricks I would like to share here.Thanks \u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e for the encouragement, and\u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e for reviewing this post.\u003c/p\u003e\u003ch2 id=\"cloning-as-usual\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#cloning-as-usual\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCloning as usual\u003c/h2\u003e\u003cp\u003eWhen I tried to clone the source code of rOpenSci\u0026rsquo;s website I realized the repowas large and it would take me several minutes.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone https://github.com/ropensci/roweb3.git\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eI decided to stop the process and researched how to just pull the latest versionof the specific files I needed.\u003c/p\u003e\u003ch2 id=\"pulling-the-latest-version-of-specific-files\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pulling-the-latest-version-of-specific-files\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePulling the latest version of specific files\u003c/h2\u003e\u003cp\u003eFirst I forked the rOpenSci website repository (\u003ccode\u003eroweb3\u003c/code\u003e). I used the\u003ca href=\"https://cli.github.com/\"\u003e\u003ccode\u003egh\u003c/code\u003e\u003c/a\u003e CLI from the terminal, but also I could haveforked it manually from Github.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# if not using `gh`, fork ropensci/roweb3 from GitHub\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh repo fork ropensci/roweb3\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThen I created a local empty \u003ccode\u003eroweb3\u003c/code\u003e directory and linked it to the fork.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit init roweb3\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e roweb3\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit remote add origin git@github.com:maurolepore/roweb3.git\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNow for the tricks! I avoided having to download the whole repository by firstfinding the specific files I needed on GitHub\u0026rsquo;s \u0026ldquo;Go to file\u0026rdquo; box, then:\u003c/p\u003e\u003cul\u003e\u003cli\u003eTrick 1: Configured a\u003ca href=\"https://git-scm.com/docs/git-sparse-checkout\"\u003esparse checkout\u003c/a\u003e matching justthose files.\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config core.sparseCheckout \u003cspan class=\"nb\"\u003etrue\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;themes/ropensci/static/img/team/mauro*\u0026#34;\u003c/span\u003e \u0026gt;\u0026gt; .git/info/sparse-checkout\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003eTrick 2: Pulled with\u003ca href=\"https://git-scm.com/docs/git-pull#Documentation/git-pull.txt---depthltdepthgt\"\u003e\u003ccode\u003e--depth 1\u003c/code\u003e\u003c/a\u003eto get only the latest version of those files.\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit pull --depth\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e origin main\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eI explored the result with\u003ca href=\"https://manpages.ubuntu.com/manpages/bionic/man1/tree.1.html\"\u003e\u003ccode\u003etree\u003c/code\u003e\u003c/a\u003e and itwas just what I needed to modify:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etree\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e└── themes\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    └── ropensci\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        └── static\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            └── img\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                └── team\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    ├── mauro-lepore.jpg\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    └── mauro-lepore-mentor.jpg\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"but-how-large-is-it\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#but-how-large-is-it\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBut how large is it?\u003c/h2\u003e\u003cp\u003eWhile those tricks were useful, I was still curious about the size of the repo,so I did clone it all and explored disk usage with\u003ca href=\"https://manpages.ubuntu.com/manpages/bionic/man1/du.1.html\"\u003e\u003ccode\u003edu\u003c/code\u003e\u003c/a\u003e:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edu --human-readable --max-depth\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e .\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e219M    ./themes\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e164K    ./.Rproj.user\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e56K     ./archetypes\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e628K    ./resources\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e168K    ./data\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e376M    ./.git\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e20K     ./static\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e12K     ./.github\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e40K     ./scripts\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e161M    ./content\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e24K     ./layouts\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e475M    ./public\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e1.3G    .\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eIndeed this is much larger than the source code I typically handle. But now Iknow a few more Git tricks (and even more about blogging on rOpenSci :-) ).\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cblockquote\u003e\u003cp\u003eIf all you have is a hammer, everything looks like a nail. — Abraham Maslow\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eSometimes \u003ccode\u003egit clone\u003c/code\u003e is not the right tool for the job. A sparse checkout and ashallow pull can help you get just what you need.\u003c/p\u003e\u003cp\u003eIf you enjoy learning from videos you may \u003ca href=\"https://www.youtube.com/leporemauro/search?query=git\"\u003esearch \u0026ldquo;git\u0026rdquo; on my YouTubechannel\u003c/a\u003e or explore theplaylists\u003ca href=\"https://www.youtube.com/playlist?list=PLvgdJdJDL-AOHkwiaMvYhPKVjiD9vzZIo\"\u003egit\u003c/a\u003e,\u003ca href=\"https://www.youtube.com/playlist?list=PLvgdJdJDL-AMyv06bsXoXkGmxmaV9U6Ts\"\u003egit-from-the-terminal\u003c/a\u003e,and\u003ca href=\"https://www.youtube.com/playlist?list=PLvgdJdJDL-APwLSt89PJgI72UGVNUjOKl\"\u003egit-con-la-terminal\u003c/a\u003e(in Spanish).\u003c/p\u003e\u003cp\u003eWhat are your favorite Git tricks? How about blogging about them?\u003c/p\u003e","url":"https://ropensci.org/blog/2024/08/06/git-tricks/","date_published":"2024-08-06T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/q0fkc-01034","title":"rOpenSci News Digest, July 2024","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2024/07/19/news-july-2024\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"announcing-new-software-peer-review-editors-beatriz-milz-and-margaret-siple\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#announcing-new-software-peer-review-editors-beatriz-milz-and-margaret-siple\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAnnouncing New Software Peer Review Editors: Beatriz Milz and Margaret Siple\u003c/h3\u003e\u003cp\u003eWe are excited to welcome \u003ca href=\"/author/beatriz-milz/\"\u003eBeatriz Milz\u003c/a\u003e and \u003ca href=\"/author/margaret-siple/\"\u003eMargaret Siple\u003c/a\u003e to our team of \u003ca href=\"/software-review/#editors\"\u003eAssociate Editors\u003c/a\u003e for rOpenSci \u003ca href=\"/software-review/\"\u003eSoftware Peer Review\u003c/a\u003e. They join Laura DeCicco, Julia Gustavsen, Anna Krystalli, Mauro Lepore, Noam Ross, Maëlle Salmon, Emily Riederer, Adam Sparks, and Jeff Hollister.\u003c/p\u003e\u003cp\u003eMeet Beatriz and Margaret in their \u003ca href=\"/blog/2024/07/03/editors2024/\"\u003eintroduction blog post\u003c/a\u003e.Welcome on board to you both, thank you for your service!\u003c/p\u003e\u003ch3 id=\"a-fresh-new-look-for-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-fresh-new-look-for-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA fresh new look for R-universe!\u003c/h3\u003e\u003cp\u003eYou might have noticed that R-universe got a big \u003ca href=\"https://ropensci.r-universe.dev/packages\"\u003erefresh\u003c/a\u003e. \u0026#x1f366;Read all about this \u003ca href=\"/blog/2024/06/12/runiverse-frontend/\"\u003ebig overhaul of the interface\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"resources-from-the-ropensci-community-at-user-2024\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#resources-from-the-ropensci-community-at-user-2024\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eResources from the rOpenSci community at useR! 2024\u003c/h3\u003e\u003cp\u003eWhile some video recordings have not yet been posted on the \u003ca href=\"https://www.youtube.com/@useRConference_global\"\u003euseR! YouTube channel\u003c/a\u003e, some slidedecks and materials are already available.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e\u0026rsquo;s keynote talk \u003ca href=\"https://sched.co/1c9Jy\"\u003e\u0026ldquo;How your code might get rusty\u0026rdquo;\u003c/a\u003e (\u003ca href=\"https://user-maelle.netlify.app/\"\u003eSlides\u003c/a\u003e | \u003ca href=\"https://www.youtube.com/watch?v=ldko1TPC1aA\"\u003eRecording\u003c/a\u003e)\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/jeroen-ooms/\"\u003eJeroen Ooms\u003c/a\u003e\u0026rsquo; talk  \u003ca href=\"https://sched.co/1c90h\"\u003e\u0026ldquo;Navigating the R Ecosystem Using R-Universe\u0026rdquo;\u003c/a\u003e (\u003ca href=\"https://jeroen.github.io/user2024/#/title-slide\"\u003eSlides\u003c/a\u003e)\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/jon-harmon/\"\u003eJon Harmon\u003c/a\u003e\u0026rsquo;s virtual talk \u003ca href=\"https://www.youtube.com/watch?v=8jH5wfuDx-g\"\u003e\u0026ldquo;Learning Together at the Data Science Learning Community\u0026rdquo;\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/pao-corrales/\"\u003ePaola Corrales\u003c/a\u003e and \u003ca href=\"/author/elio-campitelli/\"\u003eElio Campitelli\u003c/a\u003e\u0026rsquo;s tutorial \u003ca href=\"https://sched.co/1c8yF\"\u003e\u0026ldquo;Efficient Data Analysis with data.table\u0026rdquo;\u003c/a\u003e (\u003ca href=\"https://paocorrales.github.io/intro-datatable/\"\u003eWebsite\u003c/a\u003e)\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/elio-campitelli\"\u003eElio Campitelli\u003c/a\u003e\u0026rsquo;s talk \u003ca href=\"https://sched.co/1c8yj\"\u003e\u0026ldquo;Building Bilingual Bridges with Multilingual Manuals\u0026rdquo;\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/3d/UseR2024-1.pdf\"\u003eSlides\u003c/a\u003e)\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/hugo-gruson\"\u003eHugo Gruson\u003c/a\u003e\u0026rsquo;s\u003cul\u003e\u003cli\u003eTalk \u003ca href=\"https://sched.co/1c8z3\"\u003e\u0026ldquo;Building Interoperability in Existing Software Ecosystems with S3 Classes\u0026rdquo;\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/ff/2024-07-09_Gruson%20-%20Building%20Interoperability%20with%20S3%20Classes.pdf\"\u003eSlides\u003c/a\u003e).\u003c/li\u003e\u003cli\u003ePoster \u003ca href=\"https://static.sched.com/hosted_files/userconf2024/ef/HugoGruson_useR_poster.pdf\"\u003e\u0026ldquo;A reproducible analysis of CRAN Task Views to understand the state of an R package ecosystem\u0026rdquo;\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/llu%C3%ADs-revilla-sancho/\"\u003eLluís Revilla\u003c/a\u003e and Henrik Bengtsson\u0026rsquo;s \u003ca href=\"https://sched.co/1cDsG\"\u003eposter\u003c/a\u003e about CRAN packages archived and the \u003ca href=\"http://cranhaven.org/\"\u003ecranhaven.org\u003c/a\u003e R-universe created to reduce the impact of that on users\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/will-landau\"\u003eWill Landau\u003c/a\u003e and Charlie Gao\u0026rsquo;s talk \u003ca href=\"https://sched.co/1c8ya\"\u003e\u0026ldquo;Moju-Kapu: How {Mirai} and {Crew} Are Powering the Next Generation of Parallel Computing in R\u0026rdquo;\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/8a/moju-kapu.html\"\u003eSlides\u003c/a\u003e)\u003c/li\u003e\u003cli\u003e\u003ca href=\"/blog/2024/02/15/champions-program-champions-2024/#binod-jung-bogati\"\u003eBinod Jung Bogati\u003c/a\u003e\u0026rsquo;s talks\u003cul\u003e\u003cli\u003e\u003ca href=\"https://sched.co/1c8w7\"\u003e\u0026ldquo;Generate Raw Synthetic Dataset for Clinical Trial - Binod Jung Bogati, Numeric Mind\u0026rdquo;\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/ff/Generate%20Raw%20Synthetic%20Data%20for%20Clinical%20Trial%20-%20Binod%20Jung%20Bogati%20-%20useR2024.pdf\"\u003eSlides\u003c/a\u003e)\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://sched.co/1c90Y\"\u003e\u0026ldquo;Translate R for Global Reach\u0026rdquo;\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-08\"\u003eTuesday, August 6th, 9:00 America Pacific (16:00 UTC)\u003c/a\u003e, Building your first R package with cohost \u003ca href=\"/author/carolina-pradier/\"\u003eCarolina Pradier\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore how to make R packages\u003c/li\u003e\u003cli\u003ePlan out that package you’ve always wanted to create\u003c/li\u003e\u003cli\u003eChat with our cohost about tips and tricks for making your first R package\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTuesday, September 3rd, 9:00 Australia Western (01:00 UTC), Theme TBA with cohost TBA and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following  package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/osmapiR\"\u003eosmapiR\u003c/a\u003e, developed by Joan Maspons: Interface to OpenStreetMap API for fetching and saving data from/to the OpenStreetMap database (\u003ca href=\"https://wiki.openstreetmap.org/wiki/API_v0.6\"\u003ehttps://wiki.openstreetmap.org/wiki/API_v0.6\u003c/a\u003e).  It is available on \u003ca href=\"https://CRAN.R-project.org/package=osmapiR\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/633\"\u003ereviewed\u003c/a\u003e by Jon Harmon and Carlos Cámara.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following nine packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/rotemplate\" title=\"pkgdown template and utilities for rOpenSci docs\"\u003erotemplate\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-org/rotemplate/releases/tag/pkgdown-2.0.9\"\u003e\u003ccode\u003epkgdown-2.0.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gitignore\" title=\"Create Useful .gitignore Files for your Project\"\u003egitignore\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gitignore/releases/tag/v0.1.7\"\u003e\u003ccode\u003ev0.1.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.10.5\"\u003e\u003ccode\u003ev0.10.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nuts\" title=\"Convert European Regional Data\"\u003enuts\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nuts/releases/tag/v1.1.0\"\u003e\u003ccode\u003ev1.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/occCite\" title=\"Querying and Managing Large Biodiversity Occurrence Datasets\"\u003eoccCite\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/occCite/releases/tag/v0.5.7\"\u003e\u003ccode\u003ev0.5.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmapiR\" title=\"OpenStreetMap API\"\u003eosmapiR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmapiR/releases/tag/v0.1.0\"\u003e\u003ccode\u003ev0.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/phonfieldwork\" title=\"Linguistic Phonetic Fieldwork Tools\"\u003ephonfieldwork\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/phonfieldwork/releases/tag/v0.0.16\"\u003e\u003ccode\u003ev0.0.16\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/taxlist\" title=\"Handling Taxonomic Lists\"\u003etaxlist\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/taxlist/releases/tag/v0.3.0\"\u003e\u003ccode\u003ev0.3.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/waywiser\" title=\"Ergonomic Methods for Assessing Spatial Models\"\u003ewaywiser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/waywiser/releases/tag/v0.6.0\"\u003e\u003ccode\u003ev0.6.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are eleven recently closed and active submissions and 6 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/633\"\u003eosmapiR\u003c/a\u003e, OpenStreetMap API. Submitted by \u003ca href=\"https://github.com/jmaspons\"\u003eJoan Maspons\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/638\"\u003echopin\u003c/a\u003e, CHOPIN: Computation for Climate and Health research On Parallelized INfrastructure. Submitted by \u003ca href=\"https://www.issong.net\"\u003eInsang Song\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/637\"\u003ecancerprof\u003c/a\u003e, API Client for State Cancer Profiles. Submitted by \u003ca href=\"https://github.com/realbp\"\u003eBrian Park\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/625\"\u003erix\u003c/a\u003e, Rix: Reproducible Environments with Nix. Submitted by \u003ca href=\"https://brodrigues.co\"\u003eBruno Rodrigues\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"https://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/642\"\u003eeDNAjoint\u003c/a\u003e, Joint Modeling of Traditional and Environmental DNA Survey Data. Submitted by \u003ca href=\"https://github.com/abigailkeller\"\u003eAbigail Keller\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/636\"\u003ersi\u003c/a\u003e, Efficiently Retrieve and Process Satellite Imagery. Submitted by \u003ca href=\"https://mm218.dev/\"\u003eMichael Mahoney\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/632\"\u003eQuadratiK\u003c/a\u003e, A Collection of Methods Using Kernel-Based Quadratic Distances for. Submitted by \u003ca href=\"https://github.com/giovsaraceno\"\u003eGiovanni Saraceno\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/626\"\u003egigs\u003c/a\u003e, Assess Fetal, Newborn, and Child Growth with International Standards. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2024/07/03/editors2024\"\u003eAnnouncing New Software Peer Review Editors: Beatriz Milz and Margaret Siple\u003c/a\u003e by Mark Padgham, Beatriz Milz, and Margaret Siple. Introducing two new editors for rOpenSci software review.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"other-topics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-topics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOther topics\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/07/09/multilingual-documentation-wg\"\u003eMultilingual Documentation in R Packages\u003c/a\u003e by Elio Campitelli. Multilingual documentation coming to an R package near you. Other languages: \u003ca href='/es/blog/2024/07/09/multilingual-documentation-wg' lang='es'\u003eDocumentación multilingüe en paquetes de R (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/07/11/collaboration-networks\"\u003erOpenSci Community Collaboration Insight Using Social Networks Analysis\u003c/a\u003e by Yanina Bellini Saibene and Sandro Camargo. In this blog post we present how we have used Social Network Analysis with R, to better understand and manage the rOpenSci community.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/07/16/impact-community-management\"\u003eMetrics, Impact and Community Management\u003c/a\u003e by Yanina Bellini Saibene. Our community manager Yani, shares experiences using multi-level metrics and participation models through a community management lens to measure rOpenSci impact.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eThree use cases of our packages and resources have been reported recently.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/using-weatheroz-to-plot-perths-may-high-temperatures/3920\"\u003eUsing {weatherOz} to Plot Perth\u0026rsquo;s May High Temperatures\u003c/a\u003e. Reported by Adam Sparks.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/oai-interface-request-response-and-data-download-with-r/3923\"\u003eOAI interface request, response, and data download with R\u003c/a\u003e. Reported by Jörg Lehmann.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/translating-carpentries-workbench-lessons-with-babeldown/3960\"\u003eTranslating Carpentries workbench lessons with babeldown\u003c/a\u003e. Reported by Hugo Gruson.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/01/qualtrics-call-help/\"\u003eHelp make qualtRics better! Code contributions wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/27/assertr-call-help/\"\u003eHelp make assertr better! Come close issues\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/29/targets-call-help/\"\u003eHelp users and developers of targets by answering questions!\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/19/waywiser-call-help/\"\u003eHelp make waywiser better! User requests wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAlso refer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"last-call-your-opinion-on-the-cran-submission-process\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-call-your-opinion-on-the-cran-submission-process\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast call: your opinion on the CRAN submission process!\u003c/h3\u003e\u003cp\u003eShared by Lluís Revilla and Heather Turner in our Slack workspace, a crucial survey ending today!\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u0026ldquo;If you have R package development experience and would like to share your thoughts on the CRAN submission process, please fill this short survey from the CRAN Cookbook project!\u0026rdquo;\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003ePlease find the \u003ca href=\"https://forms.gle/umdew9KHWeQSehq8A\"\u003eGoogle form\u003c/a\u003e and read more about the exciting cookbook project in this \u003ca href=\"https://www.linkedin.com/pulse/improving-skills-r-package-maintainers-support-from-consortium-daly-tlt4e\"\u003epost by Jasmine Daly\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"robust-type-checking-with-r-lib\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#robust-type-checking-with-r-lib\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRobust type-checking with r-lib\u003c/h3\u003e\u003cp\u003eDon\u0026rsquo;t miss this insightful short post by Josiah Parry, \u003ca href=\"https://josiahparry.com/posts/2024-06-30-type-safety/\"\u003e\u0026ldquo;Type safe(r) R code\u0026rdquo;\u003c/a\u003e.A related older blog post is \u003ca href=\"https://blog.r-hub.io/2022/03/10/input-checking/\"\u003e\u0026ldquo;Checking the inputs of your R functions\u0026rdquo;\u003c/a\u003e by Hugo Gruson, Sam Abbott, Carl Pearson.\u003c/p\u003e\u003ch3 id=\"the-one-with-all-the-user-links\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-one-with-all-the-user-links\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe one with all the useR! links\u003c/h3\u003e\u003cp\u003eThe useR! 2024 conference featured quite a few talks relevant to package development, beside the talks we mentioned in the \u003ca href=\"#resources-from-the-ropensci-community-at-user-2024\"\u003eHQ section\u003c/a\u003e.Not all recordings are available yet, but make sure to check out the \u003ca href=\"https://www.youtube.com/@useRConference_global\"\u003euseR! YouTube channel\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf we missed any relevant content, please \u003ca href=\"https://github.com/ropensci-org/monthly/issues\"\u003eget in touch\u003c/a\u003e so we might add missing pieces to our next newsletter!\u003c/p\u003e\u003ch4 id=\"retrospectives\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#retrospectives\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRetrospectives\u003c/h4\u003e\u003cp\u003eKurt Hornik and Torsten Hothorn gave keynote talks \u003ca href=\"https://userconf2024.sched.com/event/1c9Jm/keynote-more-than-25-years-of-cran-kurt-hornik-wirtschaftsuniversitat-wien?iframe=no\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003e\u0026ldquo;More than 25 years of CRAN\u0026rdquo;\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/41/user2024_CRAN.pdf\"\u003eSlides\u003c/a\u003e) and \u003ca href=\"https://userconf2024.sched.com/event/1c9JC/keynote-some-things-you-cant-read-from-a-news-file-torsten-hothorn-university-of-zurich?iframe=yes\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003e\u0026ldquo;Some things you can’t read froma NEWS file\u0026rdquo;\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/8c/useR_2024_TH%20%283%29.pdf\"\u003eSlides\u003c/a\u003e | \u003ca href=\"https://www.youtube.com/watch?v=JWg3jUJvsUg\"\u003eRecording\u003c/a\u003e) about maintaining a package for decades.\u003c/p\u003e\u003cp\u003eEdzer Pebesma and Roger Bivand reported on \u003ca href=\"https://userconf2024.sched.com/event/1c90V/r-evolution-the-retirement-of-r-packages-with-many-reverse-dependencies-edzer-pebesma-university-of-muenster-roger-bivand-norwegian-school-of-economics?iframe=no\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003e\u0026ldquo;The Retirement of R Packages with Many Reverse Dependencies\u0026rdquo;\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/2a/UseR2024.pdf\"\u003eSlides\u003c/a\u003e).\u003c/p\u003e\u003ch4 id=\"on-validation-of-r-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-validation-of-r-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn validation of R packages\u003c/h4\u003e\u003cp\u003eColine Zeballos and Yann Féhat from the R Validation Hub discussed \u003ca href=\"https://userconf2024.sched.com/event/1dyXW/supporting-companies-with-validation-of-r-packages-yann-feat-mainanalytics-gmbh-coline-zeballos-r-validation-hub?iframe=no\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003ehow to support (pharma) companies with validation of R Packages\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/4a/Supporting%20Companies%20With%20Validation%20of%20R%20Packages_%20A%20Regulatory%20Repository.pdf\"\u003eSlides\u003c/a\u003e). They use a toolset based on \u003ca href=\"https://github.com/r-hub/repos\"\u003er-hub/repos\u003c/a\u003e and the \u003ca href=\"https://pharmar.github.io/riskmetric/\"\u003eriskmetric\u003c/a\u003e package.\u003c/p\u003e\u003cp\u003eSzymon Maksymiuk and Lorenzo Braschi presented a \u003ca href=\"https://userconf2024.sched.com/event/1c8z7/deep-dive-into-industry-r-package-quality-assessment-szymon-maksymiuk-lorenzo-braschi-roche?iframe=no\"\u003eDeep Dive Into Industry RPackage Quality Assessment\u003c/a\u003e. Beside introducing the concepts, they mentioned three open-source R packages that they created: \u003ca href=\"https://github.com/Genentech/checked\"\u003echecked\u003c/a\u003e for running reverse dependencies checks; \u003ca href=\"https://genentech.github.io/covtracer/\"\u003ecovtracer\u003c/a\u003e for contextualizing tests using covr test traces; \u003ca href=\"https://github.com/Genentech/rd2markdown\"\u003erd2markdown\u003c/a\u003e for converting .Rd files into Markdown.\u003c/p\u003e\u003cp\u003eAlso on reverse dependencies checks, Pawel Rucki and André Veríssimo presented\u003ca href=\"https://userconf2024.sched.com/event/1cC1c/verdepcheck-a-tool-for-dependencies-check-pawel-rucki-andre-verissimo-roche?iframe=no\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003e{verdepcheck} - A Tool for Dependencies Check\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/2d/%7Bverdepcheck%7D%20-%20A%20Tool%20for%20Dependencies%20Check.pdf\"\u003eSlides\u003c/a\u003e | \u003ca href=\"https://insightsengineering.github.io/verdepcheck/main/\"\u003ePackage Docs\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eFranciszek Walkowiak discussed \u003ca href=\"https://userconf2024.sched.com/event/1c8yp/systems-integration-tests-for-r-package-cohorts-franciszek-walkowiak-roche?iframe=no\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003eSystems Integration Tests for R Package Cohorts\u003c/a\u003e, including the introductions to two open-source utilities, \u003ca href=\"https://github.com/insightsengineering/scribe\"\u003escribe\u003c/a\u003e that creates complete build, check and install reports for a collection of R projects and \u003ca href=\"https://github.com/insightsengineering/locksmith\"\u003elocksmith\u003c/a\u003e that helps with \u003ccode\u003erenv.lock\u003c/code\u003e creation (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/1c/systems-integration-tests-for-r-package-cohorts.pdf\"\u003eSlides\u003c/a\u003e).\u003c/p\u003e\u003ch4 id=\"on-good-practice\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-good-practice\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn good practice\u003c/h4\u003e\u003cp\u003eDaniel Sabanés Bové introduced openstatsware\u0026rsquo;s work on \u003ca href=\"https://virtualuser2024.sched.com/event/1eBda/openstatsguide-minimum-viable-good-practices-for-high-quality-statistical-software-packages-daniel-sabanes-bove-rconis?iframe=no\u0026amp;w=\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003e\u003cem\u003eminimal viable\u003c/em\u003e good practice standards for R packages\u003c/a\u003e.\u003c/p\u003e\u003cp\u003ePedro Silva listed \u003ca href=\"https://userconf2024.sched.com/event/1c8zm/seven-deadly-sins-holding-you-back-as-a-software-developer-pedro-silva?iframe=no\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003eSeven Deadly Sins Holding YouBack as a Software Developer\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/86/Seven%20Deadly%20Sins%20Holding%20You%20Back%20as%20a%20Software%20Developer.pdf\"\u003eSlides\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eHugo Gruson had a poster on \u003ca href=\"https://userconf2024.sched.com/event/1cDry/poster-session-guided-tours-a-reproducible-analysis-of-cran-task-views-to-understand-the-state-of-an-r-package-ecosystem-hugo-gruson-dataorg?iframe=no\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003eA reproducible analysis of CRAN Task Views to understand the state of an R package ecosystem\u003c/a\u003e. See the \u003ca href=\"https://epiverse-connect.github.io/ctv-analysis/\"\u003elive analysis\u003c/a\u003e.\u003c/p\u003e\u003ch4 id=\"on-learning-with-silly-projects\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-learning-with-silly-projects\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn learning with silly projects\u003c/h4\u003e\u003cp\u003eFonti Kar \u003ca href=\"https://userconf2024.sched.com/event/1c8zy/why-build-silly-things-in-r-fonti-kar-university-of-new-south-wales?iframe=no\"\u003eshared her experience\u003c/a\u003e in creating {ohwhaley} - a ‘toy’ R package which serves as a tool for learning package development and upskilling new learners (\u003ca href=\"https://github.com/fontikar/useR2024-lightningtalk/blob/master/why-build-silly-things.pdf\"\u003eSlides\u003c/a\u003e).\u003c/p\u003e\u003ch4 id=\"on-package-design\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-package-design\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn package design\u003c/h4\u003e\u003cp\u003eHugo Gruson highlighted the benefits of using S3 classes for \u003ca href=\"https://userconf2024.sched.com/event/1c8z3/building-interoperability-in-existing-software-ecosystems-with-s3-classes-hugo-gruson-dataorg?iframe=no\"\u003einteroperability in Existing Software Ecosystems\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/ff/2024-07-09_Gruson%20-%20Building%20Interoperability%20with%20S3%20Classes.pdf\"\u003eSlides\u003c/a\u003e).See also his recent \u003ca href=\"https://epiverse-trace.github.io/blog.html#category=S3\"\u003eblog posts on the topic\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eLigia Adamska used an onion analogy to explain \u003ca href=\"https://userconf2024.sched.com/event/1c8z0/layered-design-for-r-package-development-meeting-the-needs-of-pharmaceutical-rd-stakeholders-ligia-adamska-msd-switzerland?iframe=no\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003eLayered Design for R PackageDevelopment: Meeting the Needs ofPharmaceutical R\u0026amp;D Stakeholders\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/7a/UseR_presentation_Final.pdf\"\u003eSlides\u003c/a\u003e).\u003c/p\u003e\u003ch4 id=\"on-tools\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-tools\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn tools\u003c/h4\u003e\u003cp\u003eDaphne Grasselly, Franciszek Walkowiak and Pawel Rucki lead a tutorial on \u003ca href=\"https://userconf2024.sched.com/event/1c8yI/tutorial-streamlining-r-package-development-with-github-actions-workflows-daphne-grasselly-pawel-rucki-roche-dinakar-kulkarni-genentech-pre-registration-required?iframe=no\"\u003eStreamlining R packagedevelopment with GitHub ActionsWorkflows\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/19/streamlining-r-package-development-with-github-actions-workflows.pdf\"\u003eSlides\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eEmil Hvitfeldt explained how to \u003ca href=\"https://virtualuser2024.sched.com/event/1eBdO/making-better-error-messages-with-rlang-and-cli-emil-hvitfeldt-posit-pbc?iframe=no\u0026amp;w=\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003emake better error messages with rlang and cli\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eElla Kaye shared her insights on \u003ca href=\"https://userconf2024.sched.com/event/1c8zS/c-for-r-users-ella-kaye-university-of-warwick?iframe=no\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003eC for R users\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/84/c-for-r-users.pdf\"\u003eSlides\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eDavis Vaughan introduced \u003ca href=\"https://userconf2024.sched.com/event/1c90k/improving-development-tooling-with-an-r-grammar-for-tree-sitter-davis-vaughan-posit?iframe=no\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003etree-sitter, an efficient incremental parsing library\u003c/a\u003e and the R package \u003ca href=\"https://davisvaughan.github.io/r-tree-sitter/\"\u003etreesitter, which provides bindings to tree-sitter\u003c/a\u003e whose README states \u0026ldquo;tree-sitter is useful for a number of things, including syntax highlighting, go-to definition, code reshaping, and more.\u0026rdquo;\u003c/p\u003e\u003ch4 id=\"on-multilingualism\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-multilingualism\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn multilingualism\u003c/h4\u003e\u003cp\u003eElio Campitelli spoke about \u003ca href=\"https://userconf2024.sched.com/event/1c8yj/building-bilingual-bridges-with-multilingual-manuals-elio-campitelli-universidad-de-buenos-aires?iframe=no\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003eBuilding Bilingual Bridgeswith Multilingual Manuals\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/3d/UseR2024-1.pdf\"\u003eSlides\u003c/a\u003e). See also their \u003ca href=\"/blog/2024/07/09/multilingual-documentation-wg/\"\u003epost on our blog\u003c/a\u003e!\u003c/p\u003e\u003ch4 id=\"on-debugging\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-debugging\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn debugging\u003c/h4\u003e\u003cp\u003eShannon Pileggi delivered a tutorial on \u003ca href=\"https://events.linuxfoundation.org/user/program/schedule/\"\u003edebugging in R\u003c/a\u003e (\u003ca href=\"https://github.com/rstats-wtf/wtf-debugging\"\u003eMaterials\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eAntoine Fabri gave an \u003ca href=\"https://userconf2024.sched.com/event/1c8ym/constructive-a-nicer-dput-using-idiomatic-constructors-antoine-fabri-cynkra?iframe=no\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003eoverview of the motivations behind, and features of, his constructive package\u003c/a\u003e, which, among other things, can be useful for troubleshooting (\u003ca href=\"https://cynkra.github.io/constructive/\"\u003ePackage docs\u003c/a\u003e).\u003c/p\u003e\u003ch4 id=\"on-wrapping-apis\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-wrapping-apis\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn wrapping APIs\u003c/h4\u003e\u003cp\u003eHadley Wickham introduced and demo-ed his \u003ca href=\"https://userconf2024.sched.com/event/1c8zP/web-apis-with-httr2-hadley-wickham-posit?iframe=no\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003ehttr2 package\u003c/a\u003e (\u003ca href=\"https://httr2.r-lib.org/\"\u003ePackage docs\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eSimon Haller explained the \u003ca href=\"https://userconf2024.sched.com/event/1c8ys/automated-generation-of-r-client-libraries-for-restful-apis-using-openapi-specification-and-the-open-simon-haller-raiffeisen?iframe=no\u0026amp;w=100%25\u0026amp;sidebar=yes\u0026amp;bg=no\"\u003eAutomated Generationof R Client Packages for RESTful APIs\u003c/a\u003e (\u003ca href=\"https://static.sched.com/hosted_files/userconf2024/87/User_R_openapi_generator_simonhaller.pdf\"\u003eSlides\u003c/a\u003e). See also Jon Harmon\u0026rsquo;s \u003ca href=\"https://beekeeper.api2r.org/\"\u003ework on the same topic\u003c/a\u003e.\u003c/p\u003e\u003ch4 id=\"on-a-last-resort-for-archived-cran-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-a-last-resort-for-archived-cran-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn a last resort for archived CRAN packages\u003c/h4\u003e\u003cp\u003eHenrik Bengtsson and Lluís Revilla had a poster about their \u003ca href=\"https://www.cranhaven.org/\"\u003eCRANhaven project\u003c/a\u003e, a backup solution for end-users when a package falls of CRAN (and which is built using R-universe!).\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/07/19/news-july-2024/","date_published":"2024-07-19T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/33v0w-1va15","title":"Metrics, Impact and Community Management","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["Champions program","Community Manager Tools","Community"],"content_html":"\u003cp\u003eOn June 14 I was invited to present at the \u003ca href=\"https://chanzuckerberg.com/science/programs-resources/open-science/\"\u003eCZI Open Science 2024\u003c/a\u003e event. I was asked to participate in \u0026ldquo;Case Study Session 3: Demonstrating Impact of Open Science\u0026rdquo; and to explore the challenges of using traditional academic metrics for measuring project impact with an emphasis on alternative approaches.\u003c/p\u003e\u003cp\u003eI was very excited to share our experiences and to learn from others projects. Here I present a summary of this talk.\u003c/p\u003e\u003ch2 id=\"metrics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#metrics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMetrics\u003c/h2\u003e\u003cp\u003erOpenSci is a non-profit organization and a community of practice that leads a set of interrelated activities around \u003cem\u003ecapacity building, community development, and research software development practices\u003c/em\u003e to \u003cem\u003etransform science through open data, software \u0026amp; reproducibility.\u003c/em\u003e\u003c/p\u003e\u003cp\u003eSimilar to many other organizations, we have a set of \u003cem\u003etraditional\u003c/em\u003e metrics that we use to measure the impact of our work. We use dashboards, we have automatic processes to calculate metrics and we also use software which provide other metrics. We calculate these metrics for individual projects or activities as well as for the organization overall.\u003c/p\u003e\u003cp\u003eFor example, our \u003ca href=\"/software-review/\"\u003eSoftware Peer Review\u003c/a\u003e is a transparent, open, non-adversarial R package peer review process with the goal of improving software built to do science. Since we started this program, we have had\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e200+\u003c/strong\u003e scientific software packages go through review\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e700\u003c/strong\u003e unique contributors to these packages\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e577\u003c/strong\u003e reviewers participate in the process\u003c/li\u003e\u003cli\u003e\u003cstrong\u003e17,205,280\u003c/strong\u003e downloads of these reviewed packages\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWhile those numbers are very useful, we know that they are not enough to fully measure the impact of our work. \u003cstrong\u003eA community is not just about numbers, but about people, because communities are built on connections\u003c/strong\u003e.\u003c/p\u003e\u003ch2 id=\"frameworks-to-measure-impact\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#frameworks-to-measure-impact\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFrameworks to measure impact\u003c/h2\u003e\u003cp\u003eWe use two frameworks with a community management lens to capture metrics and try to measure our impact. The first one is a \u003cem\u003eImpact Level framework\u003c/em\u003e with four levels: the individual level, the host institution/local level, the rOpenSci community level, and the Open Science or Open Source Community in general level. The second framework we use is based on a community of practice participation model.\u003c/p\u003e\u003ch3 id=\"impact-level-framework\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#impact-level-framework\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eImpact Level Framework\u003c/h3\u003e\u003cp\u003eTo exemplify this framework, lets talk about the Champions Program where I will introduce you to one of our Champions, \u003ca href=\"/author/marcos-prunello/\"\u003eMarcos Miguel Prunello\u003c/a\u003e, a professor of statistics at the Universidad Nacional de Rosario in Argentina.\u003c/p\u003e\u003ch4 id=\"individual-level\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#individual-level\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIndividual level\u003c/h4\u003e\u003cp\u003eBeing part of the Champions Program, Marcos receives training on package development and community outreach. He has individual mentoring, a cohort of colleagues with whom to share experiences and knowledge during the program, and paid time to develop a project in 12 months. He has also access to a network of experts in R and data science through the rOpenSci community.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eThe program allowed people who aren\u0026rsquo;t typically represented to have opportunities. \u003cbr\u003e\u003cspan style=\"float:right\"\u003e \u0026ndash; \u003cem\u003eMarcos Prunello\u003c/em\u003e\u003c/span\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003ch4 id=\"host-institutionlocal-level\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#host-institutionlocal-level\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHost institution/local level\u003c/h4\u003e\u003cp\u003eAs part of his activities in the Champions Program, Marcos organized a \u003ca href=\"/events/r-en-rosario-champions/\"\u003eworkshop in Spanish on how to develop multilingual R packages\u003c/a\u003e.  He also delivered a talk about rOpenSci and how to participate, sharing his knowledge with his colleagues and students, and the local community.\u003c/p\u003e\u003cp\u003eThe workshop and talk were organized jointly with the RenRosario R User Group and the Universidad Nacional de Rosario, who provided the venue for the event.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eThe revival of our R user group in our city was motivating to me. I organized a workshop. After that, we had another meeting, and another one planned. \u003cbr\u003e\u003cspan style=\"float:right\"\u003e \u0026ndash; \u003cem\u003eMarcos Prunello\u003c/em\u003e\u003c/span\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/07/16/impact-community-management/individual-local.png\"\t\t\talt=\"Three panels: A photo of Marcos Prunello with the RenRosario meetup attendees,  a screenshoot of Marcos\u0026#39;s workshop material, and flyer of the workshop and talk about rOpenSci\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eMarcos with the workshop and RenRosario\u0026rsquo;s meetup attendees and material from the event\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch4 id=\"community-level\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-level\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity level\u003c/h4\u003e\u003cp\u003eMarco\u0026rsquo;s project in the Champions Program was to get his \u003ca href=\"https://mpru.github.io/karel/\"\u003ekarel R package\u003c/a\u003e in shape and submit it for rOpenSci software peer review.\u003c/p\u003e\u003cp\u003eThe package implements \u003cem\u003eKarel the robot\u003c/em\u003e to teach introductory programming concepts in both Spanish and English. Marcos\u0026rsquo; students speak in Spanish so he want the package in their native language, at the same time he also wants karel to be used by other educators, so for that he provided additional documentation and lessons in English.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eAs the package is multilingual the editorial team considers that it is best to have one reviewer in English and one in Spanish.  \u003cbr\u003e\u003cspan style=\"float:right\"\u003e \u0026ndash; \u003cem\u003e\u003ca href=\"author/mauro-lepore/\"\u003eMauro Lepore\u003c/a\u003e, rOpenSci Editor\u003c/em\u003e\u003c/span\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThis package become the \u003ca href=\"https://github.com/ropensci/software-review/issues/620\"\u003e\u003cstrong\u003efirst rOpenSci bilingual software peer-review\u003c/strong\u003e\u003c/a\u003e. This experience helped to improve one of the most important projects at rOpenSci.\u003c/p\u003e\u003ch4 id=\"open-science-community-level\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#open-science-community-level\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOpen Science Community level\u003c/h4\u003e\u003cp\u003eThe \u003ca href=\"https://mpru.github.io/karel/\"\u003emultilingual aspect of the package\u003c/a\u003e goes beyond the documentation and lessons.  Marcos design an architecture to have function names and messages in different languages, allowing students to learn to program also using their native language.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eThis package is pushing the limits of what R can do in term of multilingual functionality. \u003cbr\u003e\u003cspan style=\"float:right\"\u003e \u0026ndash; \u003cem\u003e\u003ca href=\"author/joel-nitta/\"\u003eJoel Nitta\u003c/a\u003e, rOpenSci Reviewer\u003c/em\u003e\u003c/span\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThe designed solution allows other educators to translate functions and messages, so they can also teach in their native languages, contributing to removing language barriers to coding.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/07/16/impact-community-management/community-global.png\"\t\t\talt=\"Screenshots of peer-review process messages suggesting having reviewers in English and Spanish, the karel package documentation webpage, and function examples in English and Spanish\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003ekarel package peer-review messages, bilingual documentation and bilingual functions\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch4 id=\"tools\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tools\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTools\u003c/h4\u003e\u003cp\u003eThe tools we used to measure the impact of the Champions Program at these different levels were:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eContinuous anonymous surveys:\u003c/strong\u003e  after every activity we asked our Champions and mentors to fill out a form with one aspect we need to improve and one aspect that worked very well.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eExit focus group:\u003c/strong\u003e in the last cohort meeting we had an activity to reflect on the program as group.  We also had an specific focus group with mentors.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eExit individual interview:\u003c/strong\u003e we have 30-45 minutes individual interviews with each Champion with a semi-structured set of questions to capture the impact of the program at different levels, things to improve and things that worked well.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eExit anonymous survey:\u003c/strong\u003e after the program we ask Champions and mentors different questions about the program overall.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eFollow up with participants:\u003c/strong\u003e we plan to contact participants 12 months and 24 months after they have finished the program to ask how the program impacted their work and their career and their involvement in the community.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"community-participation-model-framework\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-participation-model-framework\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity Participation Model Framework\u003c/h3\u003e\u003cp\u003eThe second framework we use is the \u003cem\u003eCommunity Participation Model Framework\u003c/em\u003e that is based on \u003ca href=\"https://www.cscce.org/resources/cpm/\"\u003ethe CSCCE Participation Model\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThis model describes four modes of community member participation:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eConvey/Consume:\u003c/strong\u003e the community \u003cem\u003econveys\u003c/em\u003e content for members to \u003cem\u003econsume\u003c/em\u003e independently of one another.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eContribute:\u003c/strong\u003e members are empowered to contribute in some way to the community activities.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eCollaborate:\u003c/strong\u003e members of a community collaborate with one another in the community activities, often with the community providing scaffolding for success.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eCo-create:\u003c/strong\u003e members work together within the community to co-create something that they couldn’t do before and that can involve others communities.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch4 id=\"example-of-the-community-participation-model-framework\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#example-of-the-community-participation-model-framework\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExample of the Community Participation Model Framework\u003c/h4\u003e\u003cp\u003eTo exemplify this framework, let me introduce you to \u003ca href=\"/author/joel-nitta/\"\u003eJoel Nitta\u003c/a\u003e from Japan and \u003ca href=\"/author/athanasia-mo-mowinckel/\"\u003eAthanasia Mowinckel\u003c/a\u003e from Norway.\u003c/p\u003e\u003cp\u003eIn \u003ca href=\"/blog/2023/07/20/teaching-targets-with-penguins/\"\u003etheir own words\u003c/a\u003e:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eJoel was planning to visit Oslo, Norway to teach a workshop.\u003c/p\u003e\u003cp\u003eHe reached out to Mo, \u003cem\u003eanother active member of rOpenSci\u003c/em\u003e, to ask about getting together for a coffee,\u003c/p\u003e\u003cp\u003eMo asked if Joel would be up for \u003cem\u003eteaching another workshop\u003c/em\u003e.\u003c/p\u003e\u003cp\u003eMo had \u003cem\u003eseen\u003c/em\u003e Joel on an \u003cem\u003erOpenSci community call about targets\u003c/em\u003e, and really wanted to \u003cem\u003etake advantage of his experience\u003c/em\u003e to start digging into \u003ca href=\"https://docs.ropensci.org/targets/\"\u003e\u003cem\u003etargets\u003c/em\u003e\u003c/a\u003e (a rOpenSci\u0026rsquo;s package developed by \u003ca href=\"/author/will-landau/\"\u003eWill Landau\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eJoel realized this was the \u003cem\u003emotivation\u003c/em\u003e he needed to fully \u003cem\u003eflesh out the workshop materials\u003c/em\u003e, so he happily agreed.  \u003cbr\u003e\u003cspan style=\"float:right\"\u003e \u0026ndash; \u003cem\u003e\u003ca href=\"/blog/2023/07/20/teaching-targets-with-penguins/\"\u003eTeaching targets with Penguins\u003c/a\u003e, rOpenSci Blog, July 20 2023\u003c/em\u003e\u003c/span\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/07/16/impact-community-management/mo-joel.png\"\t\t\talt=\"A photo of Mo and Joel during the workshop and a screenshot of the targets community call webpage\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eMo and Joel during the workshop and the targets community call webpage\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThe \u003ca href=\"/commcalls/jan2023-targets/\"\u003etargets community call\u003c/a\u003e event was a \u003cem\u003econtribute\u003c/em\u003e mode for Joel and a \u003cem\u003econsume\u003c/em\u003e mode for Mo.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe creation and delivery of the workshop was a \u003cem\u003eco-creation\u003c/em\u003e mode for both of them. Joel and Mo are both Carpentries instructors and they used their lesson development process and \u003ca href=\"https://carpentries.github.io/workbench/\"\u003einfrastructure\u003c/a\u003e to create the workshop materials.  The workshop is published with an open licence in \u003ca href=\"https://carpentries-incubator.github.io/targets-workshop/\"\u003eThe Carpentries Incubator\u003c/a\u003e. The Digital Scholarship Center at the University of Oslo, The Carpentries, and rOpenSci all benefit from this work. Also, anyone that wants to learn or teach about targets can use the open materials.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFinally, when Mo and Joel wrote a blog post about this experience and the workshop, they were in a \u003cem\u003ecollaboration\u003c/em\u003e mode.  Which also created a collaboration mode for rOpenSci and The Carpentries because we cross posted the blog post on both sites.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/07/16/impact-community-management/workshop.png\"\t\t\talt=\"Screenshot of the blog post about the workshop, screenshot of the workshop material in The Carpentries Incubator, and a photo of Joel teaching\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eBlog post about the workshop, workshop material and Joel teaching\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch4 id=\"tools-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tools-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTools\u003c/h4\u003e\u003cp\u003eThe tools we use to capture our members stories and the impact on the community via this Community Participation Model are:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eAnnual maintainers surveys\u003c/strong\u003e: we ask our maintainers to fill out a survey with to asset how we can support their role and their experience as member of our community. This information is used to look for new maintainers, develop new content, update our developers guide, and organize community calls.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eInterviews\u003c/strong\u003e: for example the \u003ca href=\"/blog/2023/11/06/r-universe-stars-finale/\"\u003eThe Stars of R-Universe\u003c/a\u003e series. We interview members of our community to learn about their work, their experience with rOpenSci, and how they use our technical and social infrastructure.\u003c/li\u003e\u003cli\u003e\u003ca href=\"/usecases/\"\u003e\u003cstrong\u003eUse cases\u003c/strong\u003e\u003c/a\u003e: collected in a public forum, users report on how they use rOpenSci reviewed packages and those are shared on our webpage. They serve as examples for other users and as feedback for the package authors.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eSocial network analysis\u003c/strong\u003e: we use network analysis to map the connections among our members and the interactions among them. We use this information to improve our programs and activities.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"social-network-analysis-sna\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#social-network-analysis-sna\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSocial network analysis (SNA)\u003c/h3\u003e\u003cp\u003eAs the goal of this talk was to explore the challenges of using traditional academic metrics for measuring project impact with an \u003cem\u003eemphasis on alternative approaches\u003c/em\u003e, I want to share with you some details of \u003ca href=\"/blog/2024/07/11/collaboration-networks/\"\u003ehow we use social network analysis to measure the impact of our work\u003c/a\u003e. We wanted to highlight this particular tool, because although SNA it is well developed, we have not seen many examples of its use in the context of communities of practice in the field of open initiatives with the objective of understanding the community management interventions that are carried out.\u003c/p\u003e\u003cp\u003eIn 2022, we mapped the rOpenSci collaboration network across years.  If we filter the network to collaborations on writing blog posts, we can compare the network of 2014 to 2022. We can see that the network has grown in both contributions, collaborators and interaction between the authors. The colors identify clusters (also called communities) of authors that wrote blog post together. For example, in 2022, the green cluster is the rOpenSci software peer-review participants and the pink one are community management related topics, like Code of Conducts updates and rOpenSci members interviews. We can identify important players in the network by their number of contributions and collaborations; for example, we can see that there are more community members contributing blog posts in 2022 than in 2014.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/07/16/impact-community-management/network-2014-2022.png\"\t\t\talt=\"Network map for 2014 blog post showing 14 nodes and few collaboration among most of them and network map for 2022 blog post with more than 30 nodes and a more dense interaction links with several nodes having more than one collaboration.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eBlog post collaboration network 2014 and 2022\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eIf we filter the network in a different way to look at collaborations on writing blog posts in Spanish, we can compare how our network looked before 2022, the year we introduced our Multilingual Publishing project, to how it looks now, in 2024. The network has grown, not only in contributors, but also the connections among them. We can see three clear clusters, the Champions Program participants, the interviewees in the Stars of R-Universe series and translations of important posts for the peer-review process.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/07/16/impact-community-management/network-2024-es.png\"\t\t\talt=\"The collaboration network before 2022 shows 2 nodes without any interactions.  The collaboration network in 2024 shows 20 nodes with edges between them.  There are 3 clear clusters, Champions Program participants, interviewees from the Stars of R-Universe series and translations of important post for the peer-review process\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eBlog posts in Spanish collaboration network mapping in two different moments in time.\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eCreating the multilingual infrastructure on our website and developing tools for translations has positively impacted the amount of content we can have in other languages, not only by multilingual people but also by localizing our existing content. It also has increased the number of new contributors and opens new paths for contributions: writing and translating content.Using the SNA tool we can see and understand the impact of our work in the community.\u003c/p\u003e\u003ch2 id=\"suggestions-for-using-metrics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#suggestions-for-using-metrics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSuggestions for using metrics\u003c/h2\u003e\u003cp\u003eUse and develop metrics\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eBased on your goals:\u003c/strong\u003e every metric requires effort to be recorded, analyzed and maintained over time.  It is important to select those that give us information about our objectives. For example, with the Champions Program we mapped the countries of our applicants to see if we were reaching the geographic regions we wanted to reach. In response, we changed our communication strategy in the second call to the program to reach more countries in Africa, Asia and Oceania.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eWhich give you valuable feedback to improve your activities and programs:\u003c/strong\u003e metrics should be used to make decisions about programs and content.  For example, using the answers to our maintainers survey we created a series of blog posts calling for different type of \u003ca href=\"/blog/2024/03/01/qualtrics-call-help/\"\u003esupport\u003c/a\u003e for several packages, such as \u003ca href=\"/blog/2024/02/29/targets-call-help/\"\u003eanswering questions\u003c/a\u003e and \u003ca href=\"/blog/2024/02/27/assertr-call-help/\"\u003ehelping to close issues\u003c/a\u003e. We also wrote a series of posts with recommendations for \u003ca href=\"/blog/2024/05/17/communication-tips-oss-project/\"\u003ecommunication\u003c/a\u003e and \u003ca href=\"/blog/2024/03/07/package-marketing/\"\u003emarketing\u003c/a\u003e for open source projects.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eWhich inform about your impact:\u003c/strong\u003e if you can understand how, at what level, and what kind of impact you have, you can look for ways to replicate it or make the necessary changes to get closer to your objectives. For example, from the data and stories we gather, we can say that our Slack and our Community Calls are an important space for rOpenSci people to meet and collaborate. It is not only a place to learn or to improve our knowledge, but also to generate connections that go beyond the activities of rOpenSci.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eThe main recommendation is to use metrics that combine quantitative and qualitative tools to be able to make decisions about your programs and content.  It is important to \u003cem\u003erecord the numbers but also the stories\u003c/em\u003e.  There are many tools which can give us valuable information if we use. Although we will always have an incomplete picture, it can still be a useful guide.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/07/16/impact-community-management/","date_published":"2024-07-16T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/h0yp5-2z531","title":"rOpenSci Community Collaboration Insight Using Social Networks Analysis","language":"en","authors":[{"name":"Sandro Camargo","url":"https://ropensci.org/author/sandro-camargo/","avatar":"https://ropensci.org/img/community/sandro-camargo.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["Community","networks","social network analysis","community-manager-tools"],"content_html":"\u003cp\u003eIn June 2022 I (Yani) become the rOpenSci Community Manager. To do a good job in this kind of role it is essential to know your community, so as soon I started I dug in: reading our documentation, learning our processes and their metrics, and conducting interviews with team-mates and community members.\u003c/p\u003e\u003cp\u003eIn my previous experience working with scientific and technological communities of practice, in collaboration with Sandro, I had used a tool called Social Network Analysis to understand the interaction of the members and plan strategies around the activities. This served me well and I was looking forward to applying it to the rOpenSci community\u003c/p\u003e\u003cp\u003eIn this blog post we present how we have used this tool with R, to better understand and manage the rOpenSci community.\u003c/p\u003e\u003ch2 id=\"community-of-practice-and-community-manager\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-of-practice-and-community-manager\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity of practice and community manager\u003c/h2\u003e\u003cp\u003eIn the context of a STEM community of practice, a community manager is someone who facilitates community activities and interactions among members. A community manager has responsibilities for tasks with technical, interpersonal, communication, program management and program development aspects.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eA community of practice is a group of people who \u003cstrong\u003eshare apassion\u003c/strong\u003e for something that they \u003cstrong\u003eknowhow to do\u003c/strong\u003e, and who \u003cstrong\u003einteract regularly\u003c/strong\u003ein order to \u003cstrong\u003elearn how to do it better\u003c/strong\u003e \u003cbr\u003e\u003cspan style=\"float:right\"\u003e \u0026ndash; \u003cem\u003eEtienne Wenger\u003c/em\u003e\u003c/span\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003cblockquote\u003e\u003cp\u003eA Community Manager \u003cstrong\u003efacilitates\u003c/strong\u003e the \u003cstrong\u003eactivities\u003c/strong\u003e of a community and the \u003cstrong\u003einteractions\u003c/strong\u003e between \u003cstrong\u003ecommunity members.\u003c/strong\u003eCommunity management may be considered as \u003cem\u003e“in-reach”\u003c/em\u003e rather than \u003cem\u003e“outreach”\u003c/em\u003e or public engagement.  \u003cbr\u003e\u003cspan style=\"float:right\"\u003e \u0026ndash; \u003cem\u003eCSCCE\u003c/em\u003e\u003c/span\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003erOpenSci is a community of practice and our passion is to build tools, resources, and social and technical infrastructure to enable open and reproducible research using R. We interact regularly in different activities and spaces in order to learn how to do it better.\u003c/p\u003e\u003ch2 id=\"community-interactions-and-connectivity\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-interactions-and-connectivity\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity interactions and connectivity\u003c/h2\u003e\u003cp\u003erOpenSci keeps track of many metrics relating to the health and enthusiasm of our community. For example, how many packages we reviewed, how many blog posts we wrote, how many community calls we organized and how many people came. This are very useful and show us an overal idea of our community and our activities.\u003c/p\u003e\u003cp\u003eHowever, communities are built on connections, and those summaries and number don\u0026rsquo;t give us much information about the growth and strength of professional and interpersonal connections in our community.\u003c/p\u003e\u003cp\u003eIf we understand the connectivity in our community we can \u003cstrong\u003eplan targeted\u003c/strong\u003e and \u003cstrong\u003eeffective interventions\u003c/strong\u003e to:\u003c/p\u003e\u003cul\u003e\u003cli\u003eimprove collaborations\u003c/li\u003e\u003cli\u003eimprove information flow\u003c/li\u003e\u003cli\u003eimprove knowledge reuse\u003c/li\u003e\u003cli\u003eenhance knowledge (co)creation\u003c/li\u003e\u003cli\u003eenhance knowledge transfer\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"social-network-analysis\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#social-network-analysis\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSocial Network Analysis\u003c/h2\u003e\u003cp\u003eHere is where Social Networks Analysis comes into play. I\u0026rsquo;m not talking about Instagram or Mastodon here, I\u0026rsquo;m talking about networks of relationships among individuals or organization.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eA network is a group of individuals who relate to others for a specific purpose, characterized by the existence of information flows.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eBy exploring these networks, we can try to answer questions for a given moment in time, for example:\u003c/p\u003e\u003cul\u003e\u003cli\u003eWho is connected to whom? Who is not connected?\u003c/li\u003e\u003cli\u003eWhere, and who, are the \u003cstrong\u003ehubs\u003c/strong\u003e?\u003c/li\u003e\u003cli\u003eWhere and about what are the \u003cstrong\u003eclusters\u003c/strong\u003e? Are there \u003cstrong\u003esilos\u003c/strong\u003e?\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe can also look at how thing change over time:\u003c/p\u003e\u003cul\u003e\u003cli\u003eAre new \u003cstrong\u003econnections\u003c/strong\u003e forming?\u003c/li\u003e\u003cli\u003eAre new \u003cstrong\u003epatterns\u003c/strong\u003e of connectivity forming?\u003c/li\u003e\u003cli\u003eHow did our network \u003cstrong\u003echange\u003c/strong\u003e with the introduction of an activity?\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"basic-elements-and-metrics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#basic-elements-and-metrics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBasic elements and metrics\u003c/h3\u003e\u003cp\u003eTo answer these questions, we can map and explore the \u003cem\u003enodes\u003c/em\u003e and \u003cem\u003eedges\u003c/em\u003e of our community network. Nodes are points or vertices and are connected to each other by edges. Together the pattern of connections makes up a network.\u003c/p\u003e\u003cp\u003eIn our community, nodes and edges could represent individual community members and their collaborations, for example, co-writing a blog post together, or being authors on the same R package. The connection between the nodes can have a direction, for example, when a person follow another on social media.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/07/11/collaboration-networks/red-elements.png\"\t\t\talt=\"Two cartoon persons speaking with a can phone. Each person is a node, the thread is the edge.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eA basic network, with two nodes (community members) and an edge between them (an interaction). \u003ca href=\"https://www.freepik.com/free-vector/hand-drawn-style-stickman-set_20884532.htm\"\u003eImage by freepik\u003c/a\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThere are several metrics that can be calculated to understand the structure of a network, for example:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThe \u003cem\u003edegree\u003c/em\u003e of a node is how many connections it has. The higher the degree, the more connected the node. For example, a community member who interacts with many different community members.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cem\u003eBetweenness\u003c/em\u003e measures the number of times a node lies on the shortest path between other nodes. This indicates which nodes are \u0026lsquo;bridges\u0026rsquo; between nodes in a network. For example community members who often interact with different groups of members.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cem\u003eCloseness\u003c/em\u003e scores each node based on how close it is to all other nodes in the network. The distance is the lengths of pairwise shortest paths from a node to another node.For example, this can be useful for finding community members who are best placed to influence the entire network most quickly.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cem\u003eClusters or communities\u003c/em\u003e are groups of nodes with a high number of connections among that. For example, community members who often work together. A \u003cem\u003eclique\u003c/em\u003e is when all members are interconnected and a \u003cem\u003esilo\u003c/em\u003e is when members have no connections with other clusters on the network.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"data-for-a-network\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#data-for-a-network\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eData for a network\u003c/h3\u003e\u003cp\u003eFor this type of analysis we need data that reveal connections among actors in a network.\u003c/p\u003e\u003cp\u003eThe most common data collection methods used in social network analysis are surveys and interviews with members in the network. As you can imagine, this can be costly in time and money.\u003c/p\u003e\u003cp\u003eData can also come from secondary sources, like social media connections, or from your own knowledge of the relationships that exist in the network.\u003c/p\u003e\u003cp\u003eSo we considered, is it possible that we already have the data we need to analyze the connectivity of our community? Is it possible that we could collect this data in an automated or semi-automated way to repeat the analysis, allowing us to explore how our network changes over time?\u003c/p\u003e\u003ch4 id=\"pathways-to-contributing-at-ropensci\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pathways-to-contributing-at-ropensci\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePathways to contributing at rOpenSci\u003c/h4\u003e\u003cp\u003eFortunately at rOpenSci we have a \u003ca href=\"https://contributing.ropensci.org/\"\u003eContributing Guide\u003c/a\u003e, there is a whole book describing the different ways you can contribute to the community (check our \u003ca href=\"/blog/2022/09/13/contributing-ropensci/\"\u003eTip Sheet for a summary\u003c/a\u003e). For example, you can, Write a blog post, Review a package, Maintain a package, Speak at a Community Call, Become a champion or Host a coworking session.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/07/11/collaboration-networks/contributions.png\"\t\t\talt=\"Cartoons people doing differents contribution to rOpenSci: Write a blog post, Review a package, Speak at a community call, Maintain a package, Become a champion, Host a coworking session\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eContribution examples. \u003ca href=\"https://www.freepik.com/free-vector/hand-drawn-style-stickman-collection_20884533.htm\"\u003eImage by freepik\u003c/a\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMany of these forms of contribution can be made with other people and there we have our nodes and a connection between them.  In our examples:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eBlog posts\u003c/strong\u003e: Nodes are the authors and the edge is coauthorship, by writing a post together. We can get that data from our website.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003ePackage maintenance\u003c/strong\u003e: Nodes are the authors, maintainers and contributors of a package, and the edge is the work conducted on a package in common. This information is on GitHub.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eChampions\u003c/strong\u003e: Nodes are mentors and mentees, and the edge is the mentorship relationship. The data is in our mentorship program database and on our webpage.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003ePackage review\u003c/strong\u003e: Nodes are the authors, editors and reviewers, and the edge is the peer-review conducted together. The data source is our peer-review database and the GitHub repository and issues where the peer-review takes place.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eCommunity Calls\u003c/strong\u003e: Nodes are the speakers, host and moderators, and the edge is participation in the same call. The data is in our community calls database and on our webpage.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eCoworking\u003c/strong\u003e: Nodes are the attendees and the hosts, and the edge is participation in the same session. The data is on our our webpage.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAs we can see, there are many ways to represent interactions and collaborations in our community, and all identifying information is open and public as well as most of the details.\u003c/p\u003e\u003cp\u003eWhen we put all this information together, we can build a network of interactions and collaborations within our community.  This is how our network looked like in 2022. You can see clusters of nodes of the same colour indicating groups of collaborators within our community, as well as some larger nodes, indicating people with a large number of interactions.\u003c/p\u003e\u003cp\u003eWhen we zoom or filter the network we can see the details of the collaborations.  These analyses give us information about which activities generate interactions and what kind of interactions they are.For example, the pink cluster includes people who were part of the rOpenSci staff and the red cluster includes people who participated in the Australian unconference.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/07/11/collaboration-networks/full_network.png\"\t\t\talt=\"A network of nodes and edges, the nodes are the people and the edges are the collaborations. There are several groups of nodes with the same color that identify clusters\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003erOpenSci full collaboration network maped in 2022.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThis network is built from interactions gathered from public data about rOpenSci blogs posts, guides, events, packages, reviews, translations and Champions Program. It is not complete, because do not include other spaces like our Slack or our Forum, but is a good approximation.\u003c/p\u003e\u003ch2 id=\"using-r-to-build-the-network\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#using-r-to-build-the-network\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUsing R to build the network\u003c/h2\u003e\u003cp\u003eThe best part is that we were able to create these networks with R! In this workflow we used several packages to help manipulate the data and perform the analysis. We used \u003ca href=\"https://fs.r-lib.org/\"\u003efs\u003c/a\u003e, \u003ca href=\"https://dplyr.tidyverse.org/\"\u003edplyr\u003c/a\u003e, \u003ca href=\"https://tibble.tidyverse.org/\"\u003etibble\u003c/a\u003e, \u003ca href=\"https://readr.tidyverse.org/\"\u003ereadr\u003c/a\u003e, and \u003ca href=\"https://rmarkdown.rstudio.com/\"\u003ermarkdown\u003c/a\u003e to extract, summarize and save the data, and we used \u003ca href=\"https://r.igraph.org/\"\u003eigraph\u003c/a\u003e to perform and visualize the network analysis.\u003c/p\u003e\u003cp\u003eLet\u0026rsquo;s take a look at how we built this network looking at blog posts as an example. With the blog posts we can extract the data (title, list of authors, and date) we need from the webpage YAML for each post.\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e---title: Agrandando nuestra comunidad con publicaciones multi-idiomaauthor:  - Yanina Bellini Saibene  - Pao Corrales  - Elio Campitelli  - Maëlle Salmondate: \u0026#39;2023-01-12\u0026#39;[...]---\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe following code performs this task and saves the data in a csv file:\u003c/p\u003e\u003col\u003e\u003cli\u003eRead all the files in the \u003ccode\u003econtent/blog/\u003c/code\u003e folder with the \u003ccode\u003e.md\u003c/code\u003e extension\u003c/li\u003e\u003cli\u003eCreate a tibble with the variables to store: \u003ccode\u003edate\u003c/code\u003e, \u003ccode\u003etitle\u003c/code\u003e, \u003ccode\u003eauthor\u003c/code\u003e, \u003ccode\u003eyear\u003c/code\u003e and \u003ccode\u003econtribution_type\u003c/code\u003e.\u003c/li\u003e\u003cli\u003eFor each markdown document\u003cul\u003e\u003cli\u003eRead the YAML header, extract the value of each variable\u003c/li\u003e\u003cli\u003eAdd a row in the dataset with the information\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eAfter processing all the documents, we save the dataset to a CSV file\u003c/li\u003e\u003c/ol\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efile_list\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003efs\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003edir_ls\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;content/blog/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"n\"\u003erecurse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;file\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"n\"\u003eglob\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;*.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edatos\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003etibble\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003etibble\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edate\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003echaracter\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003echaracter\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003echaracter\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"n\"\u003eyear\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003echaracter\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"n\"\u003econtribution_type\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003echaracter\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003efor\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edocumento\u003c/span\u003e \u003cspan class=\"kr\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003efile_list\u003c/span\u003e\u003cspan class=\"p\"\u003e){\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003edoc\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ermarkdown\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eyaml_front_matter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003einput\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edocumento\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003edatos\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003etibble\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eadd_row\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edatos\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                           \u003cspan class=\"n\"\u003edate\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edoc\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                           \u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edoc\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                           \u003cspan class=\"n\"\u003eauthor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edoc\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                           \u003cspan class=\"n\"\u003eyear\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eas.character\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eyear\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edoc\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edate\u003c/span\u003e\u003cspan class=\"p\"\u003e))),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                           \u003cspan class=\"n\"\u003econtribution_type\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;blog post\u0026#39;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                           \u003cspan class=\"p\"\u003e)\u003c/span\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ereadr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ewrite_csv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edatos\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;blog_post_authors.csv\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e                 \u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe next step is to transform the list of authors into a network format: a table where each row represents an interaction (edge) between two nodes with accompanying meta data.\u003c/p\u003e\u003cp\u003eFirst we\u0026rsquo;ll create the nodes: authors and how many blog post each author wrote.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eauthors\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003edatos\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003edistinct\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNext, we\u0026rsquo;ll create the edges or relations between the nodes.\u003c/p\u003e\u003cp\u003eThis code takes the blog data, grouped by title and year, and keeps only posts with two or more authors.Then, for each group, the \u003ccode\u003ecombn()\u003c/code\u003e function creates a matrix representing all the unique combinations of a pair of authors. This data is then transposed (\u003ccode\u003et()\u003c/code\u003e) resulting in two columns that become \u003ccode\u003efrom\u003c/code\u003e and \u003ccode\u003eto\u003c/code\u003e, representing the nodes.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erelations\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003edatos\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eyear\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003esummarise\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eas.data.frame\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003et\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ecombn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eauthor\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e))))\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efrom\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eV1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eto\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eV2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eyear\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNow, we can use the igraph package to create and plot the rOpenSci collaboration network of blog post authors from 2014 to June 2024!\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eigraph\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eg_blog\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003egraph_from_data_frame\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ed\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erelations\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                \u003cspan class=\"n\"\u003evertices\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eauthors\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                \u003cspan class=\"n\"\u003edirected\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eg_blog\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"n\"\u003evertex.size\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"n\"\u003evertex.label.cex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"n\"\u003eedge.arrow.size\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"n\"\u003eedge.curved\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"n\"\u003eedge.width\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.5\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/07/11/collaboration-networks/blog_network.png\"\t\t\talt=\"Blog post authors network from 2014 to 2024. The network have 253 nodes and 1147 edges. Have two very differentiate parts, one with their members with high connection between them and the other with small cluster of two to six nodes, but not connected to the more dense network. It also have severals nodes without connection to any other node of the network.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003erOpenSci\u0026rsquo;s blog post authors collaboration network from 2014 to 2024.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eWe can see that many authors wrote blog posts without collaborators. However, we can also see that there are clusters of coauthors who have written posts together, sometimes only with a specific set of collaborators (the \u0026lsquo;silos\u0026rsquo;, clusters without a connection to the main network), and sometimes with multiple groups (acting as \u0026lsquo;hubs\u0026rsquo; in the network).By analyzing the cluster, we can learn about the topics a series of authors are interested in, or the activities they are involved in. For example, the two clusters marked on the network map are the rOpenSci\u0026rsquo;s second cohort Champions and Mentors.\u003c/p\u003e\u003cp\u003eIn addition to this visual assessment, we can also calculate the \u003cem\u003enumber of nodes\u003c/em\u003e, the \u003cem\u003edegree\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e\u003c/em\u003e of each node, the \u003cem\u003ebetweenness\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e\u003c/em\u003e and the \u003cem\u003ecloseness\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e\u003c/em\u003e to analyze some of the characteristics of the nodes and the network.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003evcount\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eg_blog\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003edegree\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eg_blog\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ebetweenness\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eg_blog\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ecloseness\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eg_blog\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eLooking at these metrics, we see that the network has 253 nodes, which means that 253 unique people have written for the rOpenSci blog. We can also see that our current Executive Director, Noam Ross, has the highest degree\u003csup id=\"fnref1:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e and the highest betweenness, likely reflecting his role as Software Review Lead over the years (Noam\u0026rsquo;s node is in the middle of the dense clump of nodes in the center of the network). Similarly, Yani (\u0026ldquo;Yanina Bellini Saibene\u0026rdquo;, in the network diagram) shows many connections to different clusters and individual nodes, again, likely reflecting her role as Community Manager.\u003c/p\u003e\u003ch2 id=\"using-social-network-analysis-in-your-community\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#using-social-network-analysis-in-your-community\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUsing Social Network Analysis in your community\u003c/h2\u003e\u003cp\u003eSocial Network Analysis is a powerful tool for understanding interactions and collaborations in a community and there are powerful R packages to help with the analysis. So, what if you wanted to do the same for your community? Here are our tips.\u003c/p\u003e\u003cul\u003e\u003cli\u003eThink about what the nodes in your community are (people, countries, organizations, \u0026hellip;?)\u003c/li\u003e\u003cli\u003eThink about the type(s) of connection you have in your community.\u003cul\u003e\u003cli\u003eStart with your paths for contributions.\u003c/li\u003e\u003cli\u003eIdentify which contributions can be done in teams.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eConsider that you might already have information about these connections.\u003c/li\u003e\u003cli\u003eTake into account open/closed data and any privacy considerations.\u003c/li\u003e\u003cli\u003eAutomate what you can in the data collection.\u003cul\u003e\u003cli\u003eFormalize the workflow (code ;-)) so you can repeat \u0026amp; reproduce.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eRemember that it is hard to capture all type of interactions.\u003c/li\u003e\u003cli\u003eYou can take snapshot of the network model \u0026hellip;\u003cul\u003e\u003cli\u003e\u0026hellip; so you can compare it at different times.\u003c/li\u003e\u003cli\u003e\u0026hellip; so you can use it for measure the impact of interventions and programs.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eShare what you find with your community\u003cul\u003e\u003cli\u003e\u0026hellip; and other community managers!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eSocial Network Analysis is a valuable tool for better understanding and guiding your community.Here, we demonstrated a small example how you might use Social Network Analysis to explore Communities of Practice.\u003c/p\u003e\u003cp\u003eOther explorations might include creating a network for each year and examining how the model changes over time. Or perhaps looking at how part of the network changes, for example only looking at blog posts in Spanish. We could map the network to geographic area and explore which countries are most represented and which have more or few collaborations among them.\u003c/p\u003e\u003cp\u003eThere are many different aspects of a community that can be explored with Social Network Analysis and we hope that you find this tool useful in your communities.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eThe number of connections to other nodes\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref1:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eThe number of times a node lies on the shortest path between other nodes\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eThe average of the shortest path length from the node to every other node in the network.\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2024/07/11/collaboration-networks/","date_published":"2024-07-11T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/6mmnx-5m866","title":"Multilingual Documentation in R Packages","language":"en","authors":[{"name":"Elio Campitelli","url":"https://ropensci.org/author/elio-campitelli/","avatar":"https://ropensci.org/img/team/elio-campitelli.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["R","packages","multilingual","documentation","community"],"content_html":"\u003cp\u003eWe are happy to announce the brand-new \u003ca href=\"https://github.com/RConsortium/multilingual-documentation-wg\"\u003eR Consortium Multilingual Working Group\u003c/a\u003e.This Working Group came about after discussions during the \u003ca href=\"https://contributor.r-project.org/r-project-sprint-2023/\"\u003eR Project Sprint 2023\u003c/a\u003e and will oversee the implementation of multilingual documentation support in R and organise community translation efforts.Our first project is the (experimental) \u003ca href=\"https://github.com/eliocamp/rhelpi18n\"\u003e\u003cstrong\u003erhelpi18n\u003c/strong\u003e\u003c/a\u003e package, which adds multilingual documentation support!\u003c/p\u003e\u003cp\u003eDo you want to read the documentation for \u003ccode\u003ebase::mean()\u003c/code\u003e (partially) in Spanish?Install the experimental \u003ca href=\"https://github.com/eliocamp/rhelpi18n\"\u003erhelpi18n\u003c/a\u003e package and the sample translation module base.es:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# install.packages(\u0026#34;pak\u0026#34;)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epak\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epak\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;eliocamp/rhelpi18n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;eliocamp/base.es\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAnd then run this code:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erhelpi18n\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eSys.setenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eLANGUAGE\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;es\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ehelp\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eMedia AritméticaDescription:     Función genérica para la media aritmética (recortada)Usage:     mean(x, ...)          ## Default S3 method:     mean(x, trim = 0, na.rm = FALSE, ...)     Arguments:       x: an R object.  Currently there are methods for numeric/logical          vectors and date, date-time and time interval objects.          Complex vectors are allowed for \u0026#39;trim = 0\u0026#39;, only.    trim: la fracción (0 a 0.5) de observaciones para ser recordatas          del final de \\codex antes de computar la media. Valores de          trim pro fuera de ese rango se consideran al punto más          cercano.   na.rm: un valor lógico que evalua a \u0026#39;TRUE\u0026#39; o \u0026#39;FALSE\u0026#39; indicando si          valores \u0026#39;NA\u0026#39; deben ser removidos antes de realizar el          cómputo.     ...: further arguments passed to or from other methods.... (27 more lines)\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNice!This should work on any R console or IDE.\u003c/p\u003e\u003ch2 id=\"why-would-you-do-this\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-would-you-do-this\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy would you do this?\u003c/h2\u003e\u003cp\u003eAlthough English is the de facto international language, there are \u003ca href=\"https://ropensci.org/multilingual-publishing/\"\u003ebenefits\u003c/a\u003e to including resources in different languages.By reducing language barriers we end up with a larger, stronger, more creative community with more ideas and resources.The English hegemony is reflected in R by the use of English in its documentation, such as manual pages, function names, and argument names (why use \u003ccode\u003emean()\u003c/code\u003e instead of \u003ccode\u003eMittelwert()\u003c/code\u003e?).\u003c/p\u003e\u003cp\u003ePackage documentation \u003cem\u003ecan\u003c/em\u003e be written in any language, and CRAN supports non-English documentation by using the \u0026ldquo;Language\u0026rdquo; field\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e.But still, the vast majority of packages are documented in English and there is only \u003ca href=\"https://cderv.rbind.io/2018/03/11/non-english-pkg-in-cran/\"\u003ea small number of packages documented in other languages\u003c/a\u003e are seemingly tailored to their target audience.For example, the \u003ca href=\"https://cran.r-project.org/web/packages/labstatR/index.html\"\u003elabstatR\u003c/a\u003e package serves as a companion to the Italian book \u0026ldquo;Laboratorio Di Statistica Con R\u0026rdquo; and is partially documented in Italian (it uses English function names and arguments).Similarly, \u003ca href=\"https://cran.r-project.org/web/packages/chilemapas/chilemapas.pdf\"\u003echilemapas\u003c/a\u003e provides simplified maps for Chile, with full Spanish documentation, including function names.rOpenSci\u0026rsquo;s own \u003ca href=\"https://docs.ropensci.org/censo2017/\"\u003ecenso2017\u003c/a\u003e by \u003ca href=\"/author/pach%C3%A1-aka-mauricio-vargas-sep%C3%BAlveda/\"\u003eMauricio Vargas\u003c/a\u003e is also fully documented in Spanish.\u003c/p\u003e\u003cp\u003eAlthough these packages are more accessible to their primary audience, they are much less accessible to the wider community.Users who do not speak the language may find it difficult to discover and use the functions that these packages provide.Package authors face the dilemma of either making their package inaccessible to their target demographic or isolating it from the wider R ecosystem.\u003c/p\u003e\u003cp\u003eThis is a difficult problem without easy solutions.It comes up periodically in the rOpenSci Slack as well as in other R spaces, such as Stack Overflow.The developer of the \u003ca href=\"https://cran.r-project.org/web/packages/utilsIPEA/index.html\"\u003eutilsIPEA\u003c/a\u003e package expressed \u003ca href=\"https://stackoverflow.com/questions/37288823/bilingual-english-and-portuguese-documentation-in-an-r-package\"\u003ethe need for bilingual documentation\u003c/a\u003e, recognising that his package would be used both by people in Brazil, who might prefer documentation in Portuguese, and the broader international community.At least two package developers have tried to solve this dilemma by documenting their package in English and publishing a second version documented in another language: \u003ca href=\"https://cran.r-project.org/web/packages/ExpDes/index.html\"\u003eExpDes\u003c/a\u003e and \u003ca href=\"https://cran.r-project.org/web/packages/ExpDes.pt/index.html\"\u003eExpDes.pt\u003c/a\u003e, as well as \u003ca href=\"https://cran.r-project.org/web/packages/orloca/index.html\"\u003eorloca\u003c/a\u003e and \u003ca href=\"https://cran.r-project.org/web/packages/orloca.es/index.html\"\u003eorloca.es\u003c/a\u003e.The \u003ca href=\"https://cloud.r-project.org/web/packages/karel/index.html\"\u003ekarel\u003c/a\u003e package, on the other hand, has two sets of functions, one with English names and documentation, and another in Spanish.\u003c/p\u003e\u003cp\u003eBoth are workarounds that push the limits of what the R programming language can do in terms of multilingual functionality.Further, because these solutions are not native, they can become hard to maintain and don\u0026rsquo;t scale well.\u003c/p\u003e\u003cp\u003eThat is why we are presenting the experimental \u003cstrong\u003erhelpi18n\u003c/strong\u003e\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e package.This package is a test-bed for implementing seamless support for multilingual documentation with the aim of integrating it into R itself once it matures.A user can load rhelpi18n, install translation modules created by the community, and read R documentation in their language of choice.\u003c/p\u003e\u003ch2 id=\"ok-but-how\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ok-but-how\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOK, but how?\u003c/h2\u003e\u003cp\u003eIn our example above, translated strings are hosted in base.es, a translation module.This is a regular package with special fields in the DESCRIPTION specifying which package and version is being translated and to which language.Currently, translated strings are implemented as a list with the original string and the translation of each section in the documentation, but we are also looking at implementing this with traditional .po files, which is the mechanism used by R to translate messages and errors.\u003c/p\u003e\u003cp\u003eThe rhelpi18n package modifies \u003ccode\u003eutils:::.getHelpFile()\u003c/code\u003e, which all help functions use to fetch documentation strings.It adds a few lines of code which check for relevant translation modules (such as base.es) and replaces the original strings with the translated strings on the fly.\u003c/p\u003e\u003cp\u003eIn addition to presenting translated documentation, rhelpi18n also provides tools for developers to create new translation modules.\u003c/p\u003e\u003cp\u003eFor example, the following code creates a basic translation module for the glue package, including all the functionality and strings that need translating.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edir\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003efile.path\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etempdir\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;glue.es\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erhelpi18n\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ei18n_module_create\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emodule_name\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;glue.es\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                              \u003cspan class=\"n\"\u003epackage_path\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eglue_dir\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e  \u003cspan class=\"c1\"\u003e# Path to local copy of glue source code\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                              \u003cspan class=\"n\"\u003elanguage\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;es\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                              \u003cspan class=\"n\"\u003emodule_path\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edir\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNow the heavy work is to go to the \u0026ldquo;translations\u0026rdquo; subdirectory and translate all the strings saved (currently) as YAML files.For example, the translation file for \u003ccode\u003eglue::as_glue()\u003c/code\u003e is:\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003etitle:  original: Coerce object to glue  translation: ~arguments:  x:    original: object to be coerced.    translation: ~  \u0026#39;...\u0026#39;:    original: further arguments passed to methods.    translation: ~value:  original: |    A character vector with S3 class \\code{\u0026#34;glue\u0026#34;}.  translation: ~description:  original: |    A glue object is a character vector with S3 class \\code{\u0026#34;glue\u0026#34;}. The \\code{\u0026#34;glue\u0026#34;}    class implements a print method that shows the literal contents (rather than    the string implementation) and a \\code{+} method, so that you can concatenate with    the addition operator.... (16 more lines)\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eA possible (and superficial) translation would be\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003etitle:  original: Coerce object to glue  translation: Convertir un objeto a gluearguments:  x:    original: object to be coerced.    translation: objeto a convertir.  \u0026#39;...\u0026#39;:    original: further arguments passed to methods.    translation: otros argumentos que se pasan a los métodos.value:  original: |    A character vector with S3 class \\code{\u0026#34;glue\u0026#34;}.  translation: |    Vector de caracter con la clase S3 \\code{\u0026#34;glue\u0026#34;}.description:  original: |    A glue object is a character vector with S3 class \\code{\u0026#34;glue\u0026#34;}. The \\code{\u0026#34;glue\u0026#34;}    class implements a print method that shows the literal contents (rather than    the string implementation) and a \\code{+} method, so that you can concatenate with    the addition operator.  translation: |    Un objeto glue es un vector de caracteres con la clase S3 \\code{\u0026#34;glue\u0026#34;}.     La clase \\code{\u0026#34;glue\u0026#34;} implementa un método de impresión que muestra los contenidos    literales (en vez de la implementación como cadena de caracteres) y un método \\code{+}     para que puedas concatenar usando el operador de sumatoria.examples:  original: |    x \u0026lt;- as_glue(c(\u0026#34;abc\u0026#34;, \u0026#34;\\\u0026#34;\\\\\\\\\u0026#34;, \u0026#34;\\n\u0026#34;))    x... (11 more lines)\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAfter modifying \u0026ldquo;as_glue.yaml\u0026rdquo; and installing the package, now the documentation is in Spanish 🎉.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eglue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ehelp\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eas_glue\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eConvertir un objeto a glueDescription:     Un objeto glue es un vector de caracteres con la clase S3     \u0026#39;\u0026#34;glue\u0026#34;\u0026#39;.  La clase \u0026#39;\u0026#34;glue\u0026#34;\u0026#39; implementa un método de impresión que     muestra los contenidos literales (en vez de la implementación como     cadena de caracteres) y un método \u0026#39;+\u0026#39; para que puedas concatenar     usando el operador de sumatoria.Usage:     as_glue(x, ...)     Arguments:       x: objeto a convertir.     ...: otros argumentos que se pasan a los métodos.... (13 more lines)\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAmazing!\u003c/p\u003e\u003ch2 id=\"next-steps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#next-steps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNext steps\u003c/h2\u003e\u003cp\u003eThis is all in the early stages but things are moving fast.We are still experimenting with various ways to store translations and implement string replacements.It also has several limitations, such as not translating section headings yet.We also want to add a clear indication that the text is a translation and a convenient way of quickly accessing the original version.Part of the translations workflow often involves automated translations which are later reviewed by a human.So we are also considering adding metadata to strings to flag cases of automatic translations that haven\u0026rsquo;t been reviewed by a human or translations that might be slightly outdated (it would be a shame to not show a translation because someone fixed a small typo in the original text and it had yet to be reviewed!).\u003c/p\u003e\u003cp\u003eIf you want to test the package and report any problems, or you have ideas on how to improve it, you can join the discussion by checking the \u003ca href=\"https://github.com/eliocamp/rhelpi18n/issues\"\u003eopen issues\u003c/a\u003e of the package and by joining the \u003ca href=\"https://github.com/RConsortium/multilingual-documentation-wg\"\u003eMultilingual Documentation Working Group\u003c/a\u003e.Come help us!\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eThe actual quote is \u0026ldquo;A ‘Language’ field can be used to indicate if the package documentation is not in English\u0026rdquo;, which indicates that English is still the assumed default.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eThe name comes from the \u003ca href=\"https://en.wikipedia.org/wiki/Numeronym\"\u003enumeronym\u003c/a\u003e for \u0026ldquo;internationalisation\u0026rdquo;.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2024/07/09/multilingual-documentation-wg/","date_published":"2024-07-09T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/hgmc2-h9084","title":"Announcing New Software Peer Review Editors: Beatriz Milz and Margaret Siple","language":"en","authors":[{"name":"Beatriz Milz","url":"https://orcid.org/0000-0002-3064-4486","avatar":"https://github.com/beatrizmilz.png","_role":["author"]},{"name":"Margaret Siple","url":"https://ropensci.org/author/margaret-siple/","avatar":"https://github.com/mcsiple.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]}],"tags":["Software Peer Review","editors","rOpenSci team"],"content_html":"\u003cp\u003eWe are excited to welcome Beatriz Milz and Margaret Siple to our team of \u003ca href=\"/software-review/#editors\"\u003eAssociate Editors\u003c/a\u003e for rOpenSci \u003ca href=\"/software-review/\"\u003eSoftware Peer Review\u003c/a\u003e.They join Laura DeCicco, Julia Gustavsen, Anna Krystalli, Mauro Lepore, Noam Ross, Maëlle Salmon, Emily Riederer, Adam Sparks, and Jeff Hollister.rOpenSci has been running a rigorous and collegial software peer review system since 2015.Editors \u003ca href=\"https://devguide.ropensci.org/editorguide.html\"\u003emanage the review process\u003c/a\u003e, performing initial package checks, identifying reviewers, and moderating the process until the package is accepted by reviewers as part of rOpenSci\u0026rsquo;s \u003ca href=\"https://ropensci.org/packages/\"\u003esoftware suite\u003c/a\u003e.To address the scope and volume of packages submitted for review, it\u0026rsquo;s critical that we have a team of editors with complementary expertise.Beatriz brings her experiences in environmental science and active community engagement.Margaret improves open data science and software development practices at the US Government\u0026rsquo;s National Oceanic and Atmospheric Administration (NOAA).\u003c/p\u003e\u003cp\u003eMeet our new editors!\u003c/p\u003e\u003ch2 id=\"beatriz-milz\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#beatriz-milz\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBeatriz Milz\u003c/h2\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"/img/team/beatriz-milz.jpeg\"         alt=\"headshot of Beatriz Milz\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  Beatriz Milz received her PhD in Environmental Science from the University of São Paulo (USP) in Brazil. Her research is related to water resources management, transparency, and open data. She is an \u003ca href=\"https://rladies-sp.org/\"\u003eR-Ladies co-organizer of the São Paulo chapter in Brazil\u003c/a\u003e. She is organizing the \u003ca href=\"https://cienciadedatos.github.io/pt-r4ds/\"\u003etranslation to Portuguese of the second edition of the book \u0026ldquo;R for Data Science\u0026rdquo;\u003c/a\u003e (this translation is being done voluntarily by people from the community).Beatriz has contributed to packages available on CRAN, including \u003ca href=\"https://cienciadedatos.github.io/dados/\"\u003edados\u003c/a\u003e, \u003ca href=\"https://hsvab.github.io/odbr/\"\u003eodbr\u003c/a\u003e, and \u003ca href=\"https://ipeagit.github.io/geobr/index.html\"\u003egeobr\u003c/a\u003e. She reviewed the \u003ca href=\"https://docs.ropensci.org/qualR/\"\u003equalR\u003c/a\u003e and \u003ca href=\"https://docs.ropensci.org/frictionless/\"\u003efrictionless\u003c/a\u003e packages for rOpenSci. She was a mentor in the first cohort of the \u003ca href=\"https://ropensci.org/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e.                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003cp\u003eBeatriz on \u003ca href=\"https://github.com/beatrizmilz\"\u003eGitHub\u003c/a\u003e, \u003ca href=\"https://beamilz.com/\"\u003eWebsite\u003c/a\u003e, \u003ca href=\"/author/beatriz-milz/\"\u003erOpenSci\u003c/a\u003e.\u003c/p\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eI first heard of rOpenSci in 2019, at Latin-R, during a community panel. I got interested because rOpenSci was aligned with things that are important to me, and started to follow its activities on social media and explore some of the packages. In 2022 I was first invited to review a package, and I was really excited: that was the first time that I had the opportunity to contribute to this community!  rOpenSci represents to me not only a great community but also a way to contribute to the R ecosystem, encouraging best practices of code and Open Science. Now I am very happy to have the opportunity to contribute as an editor!\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eBeatriz Milz \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"margaret-siple\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#margaret-siple\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMargaret Siple\u003c/h2\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"/img/team/margaret-siple.jpg\"         alt=\"headshot of Margaret Siple\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  Margaret is a Research Fish Biologist at the National Oceanic and Atmospheric Administration (NOAA)\u0026rsquo;s \u003ca href=\"https://www.fisheries.noaa.gov/about/alaska-fisheries-science-center\"\u003eAlaska Fisheries Science Center\u003c/a\u003e. She has a PhD in Aquatic and Fishery Sciences from the University of Washington. Her research focuses on advancing ecosystem-based fisheries management by improving the statistical models used to assess marine fish stocks and identify important habitat. She also works on advancing open data science practices within NOAA and improving the accessibility, documentation, and review of NOAA\u0026rsquo;s internally-developed software packages through the \u003ca href=\"https://noaa-fisheries-integrated-toolbox.github.io/\"\u003eFisheries Integrated Toolbox\u003c/a\u003e. She developed the R package \u003ca href=\"https://joss.theoj.org/papers/10.21105/joss.03888\"\u003emmrefpoints\u003c/a\u003e.                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003cp\u003eMargaret on \u003ca href=\"https://twitter.com/margaretsiple\"\u003eTwitter\u003c/a\u003e, \u003ca href=\"https://github.com/MargaretSiple-NOAA\"\u003eGitHub\u003c/a\u003e, \u003ca href=\"https://margaretsiple-noaa.github.io/siple-quarto/\"\u003ewebsite\u003c/a\u003e, \u003ca href=\"/author/margaret-siple/\"\u003erOpenSci\u003c/a\u003e.\u003c/p\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eI found my way to rOpenSci during graduate school and since reviewing my first R package for them, I have seen rOpenSci\u0026rsquo;s approach as a \u0026ldquo;north star\u0026rdquo; of R package development and documentation. rOpenSci\u0026rsquo;s rigorous (and well-communicated!) standards and open-source format set an example that we follow in my groups at NOAA, and the supportive and active rOpenSci community has been an inspiration to me throughout my career. I am honored to be able to contribute as a member of the editorial board.\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eMargaret Siple \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"submit-your-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#submit-your-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSubmit your package!\u003c/h2\u003e\u003cp\u003eAre you considering submitting your package for review? These resources will help.\u003c/p\u003e\u003cul\u003e\u003cli\u003eAbout \u003ca href=\"/software-review/\"\u003erOpenSci Software Peer Review\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eBrowse the online book \u003ca href=\"https://devguide.ropensci.org/\"\u003erOpenSci Packages: Development, Maintenance, and Peer Review\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eRead public \u003ca href=\"https://github.com/ropensci/software-review/issues\"\u003esoftware review threads on GitHub\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e","url":"https://ropensci.org/blog/2024/07/03/editors2024/","date_published":"2024-07-03T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/g5b2q-4wy23","title":"rOpenSci News Digest, June 2024","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2024/06/21/ropensci-news-june-2024\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"ropensci-takes-over-maintenance-of-the-goodpractice-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-takes-over-maintenance-of-the-goodpractice-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci takes over maintenance of the {goodpractice} package\u003c/h3\u003e\u003cp\u003eThe {goodpractice} package was started by Gábor Csárdi in 2016 to auto-magically provide advice on good practices for your own R package.\u003ca href=\"https://devguide.ropensci.org\"\u003erOpenSci\u0026rsquo;s \u003cem\u003eDev Guide\u003c/em\u003e\u003c/a\u003e has recommended using it from \u003ca href=\"https://github.com/ropensci/dev_guide/commits/main/?since=2018-03-26\u0026amp;until=2018-03-26\"\u003ethe first day we started writing it in 2018\u003c/a\u003e.The package is now a central part of our own internal \u003ca href=\"https://https://docs.ropensci.org/pkgcheck/\"\u003e{pkgcheck} system\u003c/a\u003e, which is run automatically on all new submissions, and we recommend that all authors use \u003ca href=\"https://github.com/ropensci-review-tools/pkgcheck-action\"\u003eour \u0026lsquo;pkgcheck-action\u0026rsquo; GitHub action\u003c/a\u003e, which also runs {goodpractice}.\u003c/p\u003e\u003cp\u003eWe are pleased to announce that rOpenSci has now taken over maintenance of the {goodpractice} package, thanks to the approval both of the original author Gábor, and the previous maintainers at ascent.io.The package has now been moved to \u003ca href=\"https://github.com/ropensci-review-tools\"\u003eour ropensci-review-tools GitHub organization\u003c/a\u003e, which holds all software used in our automated checking system.This also means that documentation for the package is now built by our own documentation system, and will live from here on at \u003ca href=\"https://docs.ropensci.org/goodpractice/\"\u003edocs.ropensci.org/goodpractice/\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"ropensci-at-czi-open-science-2024\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-at-czi-open-science-2024\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci at CZI Open Science 2024\u003c/h3\u003e\u003cp\u003eFrom June 10 to June 14 \u003ca href=\"/author/noam-ross/\"\u003eNoam Ross\u003c/a\u003e, \u003ca href=\"/author/mauro-lepore/\"\u003eMauro Lepore\u003c/a\u003e and \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e participated on the \u003ca href=\"https://chanzuckerberg.com/science/programs-resources/open-science/\"\u003eCZI Open Science 2024\u003c/a\u003e event.\u003c/p\u003e\u003cp\u003eOn Wednesday, we showcased the \u003ca href=\"https://ropensci.org/champions/\"\u003eChampions Program\u003c/a\u003e, sharing Champions\u0026rsquo; projects, training materials, and the results of the two-year pilot.  We had the chance to chat and learn about many other projects during these sessions.\u003c/p\u003e\u003cp\u003eYanina participated in the closing panel on \u003cem\u003eCase Study Session 3: Demonstrating Impact of Open Science\u003c/em\u003e to explore the challenges of using traditional academic metrics to measure project impact and emphasize alternative approaches. In \u003ca href=\"/events/czi-2024/\"\u003eher talk\u003c/a\u003e, Yani introduced the work done by different rOpenSci members, the tools and metrics we use to capture their stories, and the impact we achieve together.\u003c/p\u003e\u003ch3 id=\"the-ropensci-community-at-upcoming-events\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-ropensci-community-at-upcoming-events\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe rOpenSci community at upcoming events\u003c/h3\u003e\u003cp\u003eMeet rOpenSci team and community members at events in the near future!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo talks by rOpenSci team members, and more contributions by rOpenSci community members, to look forward to at useR! 2024 in Salzburg, Austria.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e\u0026rsquo;s keynote talk \u003ca href=\"https://sched.co/1c9Jy\"\u003e\u0026ldquo;How your code might get rusty\u0026rdquo;\u003c/a\u003e on Wednesday, July 10 at 09:20 CEST;\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/jeroen-ooms/\"\u003eJeroen Ooms\u003c/a\u003e\u0026rsquo; talk  \u003ca href=\"https://sched.co/1c90h\"\u003e\u0026ldquo;Navigating the R Ecosystem Using R-Universe\u0026rdquo;\u003c/a\u003e on Thursday, July 11, 11:30 - 11:50 CEST.\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/jon-harmon/\"\u003eJon Harmon\u003c/a\u003e\u0026rsquo;s virtual talk \u0026ldquo;Learning Together at the Data Science Learning Community\u0026rdquo; will go live on the \u003ca href=\"https://youtube.com/playlist?list=PL77T87Q0eoJhsC203plZ1H4p21AGrM9rl\u0026amp;si=usuV_NlAJ_nR0QA8\"\u003euseR!2024 YouTube playlist\u003c/a\u003e at 10:30am CDT on July 2;\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/pao-corrales/\"\u003ePaola Corrales\u003c/a\u003e\u0026rsquo; and \u003ca href=\"/author/elio-campitelli/\"\u003eElio Campitelli\u003c/a\u003e\u0026rsquo;s tutorial \u003ca href=\"https://sched.co/1c8yF\"\u003e\u0026ldquo;Efficient Data Analysis with data.table\u0026rdquo;\u003c/a\u003e on Monday, July 3 (pre-registration required);\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/elio-campitelli\"\u003eElio Campitelli\u003c/a\u003e\u0026rsquo;s talk \u003ca href=\"https://sched.co/1c8yj\"\u003e\u0026ldquo;Building Bilingual Bridges with Multilingual Manuals\u0026rdquo;\u003c/a\u003e on Tuesday, July 4 at 11:40 CEST.\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/hugo-gruson\"\u003eHugo Gruson\u003c/a\u003e\u0026rsquo;s talk \u003ca href=\"https://sched.co/1c8z3\"\u003e\u0026quot;Building Interoperability in Existing Software Ecosystems with S3 Classes\u0026quot;\u003c/a\u003e on Tuesday, July 9 at 14:50, and his poster \u003ca href=\"https://sched.co/1cDry\"\u003e\u0026ldquo;A reproducible analysis of CRAN Task Views to understand the state of an R package ecosystem\u0026rdquo;\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/llu%C3%ADs-revilla-sancho/\"\u003eLluís Revilla\u003c/a\u003e\u0026rsquo;s and Henrik Bengtsson\u0026rsquo;s \u003ca href=\"https://sched.co/1cDsG\"\u003eposter\u003c/a\u003e about CRAN packages archived and a the \u003ca href=\"http://cranhaven.org/\"\u003ecranhaven.org\u003c/a\u003e R-universe created to reduce the impact of that on users.\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/will-landau\"\u003eWill Landau\u003c/a\u003e\u0026rsquo;s and Charlie Gao\u0026rsquo;s talk \u003ca href=\"https://sched.co/1c8ya\"\u003e\u0026ldquo;Moju-Kapu: How {Mirai} and {Crew} Are Powering the Next Generation of Parallel Computing in R\u0026rdquo;\u003c/a\u003e on Tuesday, July 9 at 11:00 CEST.\u003c/li\u003e\u003cli\u003e\u003ca href=\"/blog/2024/02/15/champions-program-champions-2024/#binod-jung-bogati\"\u003eBinod Jung Bogati\u003c/a\u003e\u0026rsquo;s talks \u003ca href=\"https://sched.co/1c8w7\"\u003e\u0026ldquo;Generate Raw Synthetic Dataset for Clinical Trial - Binod Jung Bogati, Numeric Mind\u0026rdquo;\u003c/a\u003e on Tuesday, July 9 at 13:30 CEST; and \u003ca href=\"https://sched.co/1c90Y\"\u003e\u0026ldquo;Translate R for Global Reach\u0026rdquo;\u003c/a\u003e on Thursday, July 11 at 12:10 CEST.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eAt \u003ca href=\"/events/posit-2024/\"\u003eposit::conf(2024)\u003c/a\u003e in Seattle, US, you\u0026rsquo;ll get to meet some champions and mentors!\u003c/p\u003e\u003cul\u003e\u003cli\u003eLook for: Andrea Gomez Vargas; Yi-Chin Sunny Tseng; Luis D. Verde Arregoitia; Francisco Cardozo; Jonathan Keane.\u003c/li\u003e\u003cli\u003eDon’t miss Luis’ lightning talk \u0026ldquo;Why’d you load that package for?\u0026rdquo; on Tuesday, Aug 13 at 1:00 PM PDT\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eWe\u0026rsquo;re excited to share that rOpenSci community manager Yanina Bellini Saibene will deliver a keynote talk at \u003ca href=\"/events/carpentryconnect-2024/\"\u003eBioNT Community Event \u0026amp; CarpentryConnect-Heidelberg 2024\u003c/a\u003e, on November 14th in Heidelberg, Germany.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-07\"\u003eTuesday, July 2nd, 14:00 Europe Central (12:00 UTC)\u003c/a\u003e, Git and GitHub with cohost \u003ca href=\"/author/zhian-n.-kamvar/\"\u003eZhian Kamvar\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eRead up on Git and GitHub and how they might serve you\u003c/li\u003e\u003cli\u003eStart your first Git/GitHub project\u003c/li\u003e\u003cli\u003eChat with our cohost about the pros and cons of Git \u0026amp; GitHub, resources for getting started and tips and tricks.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-08\"\u003eTuesday, August 6th, 9:00 America Pacific (16:00 UTC)\u003c/a\u003e, Building your first R package with cohost \u003ca href=\"/author/carolina-pradier/\"\u003eCarolina Pradier\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore how to make R packages\u003c/li\u003e\u003cli\u003ePlan out that package you’ve always wanted to create\u003c/li\u003e\u003cli\u003eChat with our cohost about tips and tricks for making your first R package\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following three packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/goodpractice\"\u003egoodpractice\u003c/a\u003e, developed by Mark Padgham together with Karina Marks, Daniel de Bortoli, Gabor Csardi, Hannah Frick, Owen Jones, and Hannah Alexander: Give advice about good practices when building R packages. Advice includes functions and syntax to avoid, package structure, code complexity, code formatting, etc.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=goodpractice\"\u003eCRAN\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/mregions2\"\u003emregions2\u003c/a\u003e, developed by Salvador Fernandez-Bejarano together with Lotte Pohl: Explore and retrieve marine geo-spatial data from the Marine Regions Gazetteer and the Marine Regions Data Products, including the Maritime Boundaries. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003ereviewed\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/rOPTRAM\"\u003erOPTRAM\u003c/a\u003e, developed by Micha Silver: The OPtical TRapezoid Model (OPTRAM) derives soil moisture based on the linear relation between a vegetation index and Land Surface Temperature (LST). The Short Wave Infra-red (SWIR) band is used as a proxy for LST. See: Sadeghi, M. et al., 2017. \u003ca href=\"https://doi.org/10.1016/j.rse.2017.05.041\"\u003ehttps://doi.org/10.1016/j.rse.2017.05.041\u003c/a\u003e .\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following nine packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/goodpractice\" title=\"Advice on R Package Building\"\u003egoodpractice\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/goodpractice/releases/tag/v1.0.5\"\u003e\u003ccode\u003ev1.0.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/beastier\" title=\"Call BEAST2\"\u003ebeastier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beastier/releases/tag/v2.5.1\"\u003e\u003ccode\u003ev2.5.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/c14bazAAR\" title=\"Download and Prepare C14 Dates from Different Source Databases\"\u003ec14bazAAR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/c14bazAAR/releases/tag/5.0.0\"\u003e\u003ccode\u003e5.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/comtradr\" title=\"Interface with the United Nations Comtrade API\"\u003ecomtradr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/comtradr/releases/tag/v1.0.1\"\u003e\u003ccode\u003ev1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/DataPackageR\" title=\"Construct Reproducible Analytic Data Sets as R Packages\"\u003eDataPackageR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/DataPackageR/releases/tag/v0.16.0\"\u003e\u003ccode\u003ev0.16.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dynamite\" title=\"Bayesian Modeling and Causal Inference for MultivariateLongitudinal Data\"\u003edynamite\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dynamite/releases/tag/1.5.2\"\u003e\u003ccode\u003e1.5.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/readODS\" title=\"Read and Write ODS Files\"\u003ereadODS\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/readODS/releases/tag/v2.3.0\"\u003e\u003ccode\u003ev2.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgbif\" title=\"Interface to the Global Biodiversity Information Facility API\"\u003ergbif\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgbif/releases/tag/v3.8.0\"\u003e\u003ccode\u003ev3.8.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.7.1\"\u003e\u003ccode\u003e1.7.1\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are fourteen recently closed and active submissions and 6 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/620\"\u003ekarel\u003c/a\u003e, Learning programming with Karel the robot. Submitted by \u003ca href=\"https://unr.edu.ar/\"\u003eMarcos Prunello\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/612\"\u003erOPTRAM\u003c/a\u003e, Derive soil moisture using the OPTRAM algorithm. Submitted by \u003ca href=\"https://github.com/micha-silver\"\u003eMicha Silver\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003emregions2\u003c/a\u003e, Access Data from Marineregions.org: The Marine Regions Gazetteer and the Marine Regions Data Products. Submitted by \u003ca href=\"https://salvafern.github.io/\"\u003esalvafern\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/637\"\u003ecancerprof\u003c/a\u003e, API Client for State Cancer Profiles. Submitted by \u003ca href=\"https://github.com/realbp\"\u003eBrian Park\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/633\"\u003eosmapiR\u003c/a\u003e, OpenStreetMap API. Submitted by \u003ca href=\"https://github.com/jmaspons\"\u003eJoan Maspons\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/625\"\u003erix\u003c/a\u003e, Rix: Reproducible Environments with Nix. Submitted by \u003ca href=\"https://brodrigues.co\"\u003eBruno Rodrigues\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"https://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/642\"\u003eeDNAjoint\u003c/a\u003e, Joint Modeling of Traditional and Environmental DNA Survey Data. Submitted by \u003ca href=\"https://github.com/abigailkeller\"\u003eAbigail Keller\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/638\"\u003echopin\u003c/a\u003e, CHOPIN: Computation for Climate and Health research On Parallelized INfrastructure. Submitted by \u003ca href=\"https://www.issong.net\"\u003eInsang Song\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/636\"\u003ersi\u003c/a\u003e, Efficiently Retrieve and Process Satellite Imagery. Submitted by \u003ca href=\"https://mm218.dev/\"\u003eMichael Mahoney\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/632\"\u003eQuadratiK\u003c/a\u003e, A Collection of Methods Using Kernel-Based Quadratic Distances for. Submitted by \u003ca href=\"https://github.com/giovsaraceno\"\u003eGiovanni Saraceno\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/626\"\u003egigs\u003c/a\u003e, Assess Fetal, Newborn, and Child Growth with International Standards. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2024/06/06/from-scripts-to-package\"\u003eFrom scripts to package. Developing dendroNetwork and learning with rOpenSci\u003c/a\u003e by Ronald Visser. How scripts were transformed into a package and what I learned in the process.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2024/06/12/runiverse-frontend\"\u003eA fresh new look for R-universe!\u003c/a\u003e by Jeroen Ooms. We have given the WebUI for R-universe a big refresh. This is the biggest UX overhaul in since the beginning of the project.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/01/qualtrics-call-help/\"\u003eHelp make qualtRics better! Code contributions wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/27/assertr-call-help/\"\u003eHelp make assertr better! Come close issues\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/29/targets-call-help/\"\u003eHelp users and developers of targets by answering questions!\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/19/waywiser-call-help/\"\u003eHelp make waywiser better! User requests wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAlso refer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"make-your-functions-compa-tibble\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#make-your-functions-compa-tibble\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMake your functions compa-tibble\u003c/h3\u003e\u003cp\u003eDo the functions of your package use \u003ccode\u003edata.frame\u003c/code\u003e as input?Do not miss Hugo Gruson\u0026rsquo;s post \u003ca href=\"https://hugogruson.fr/posts/compa-tibble/\"\u003eMake your functions compa-tibble\u003c/a\u003e as users of your package might well try and pass a \u003ccode\u003etibble\u003c/code\u003e, which you probably don\u0026rsquo;t want to be a showstopper!\u003c/p\u003e\u003ch3 id=\"use-lintr-to-enforce-your-packages-function-preferences\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-lintr-to-enforce-your-packages-function-preferences\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse lintr to enforce your package\u0026rsquo;s function preferences\u003c/h3\u003e\u003cp\u003eDo you want to commit to using the \u003ca href=\"https://blog.r-hub.io/2023/11/30/cliff-notes-about-cli/\"\u003ecli package\u003c/a\u003e instead of base R messaging?You can configure the lintr settings for your codebase to pick up usage of certain functions, to inform you along with the preferred replacement.See, as an example, \u003ca href=\"https://github.com/r-lib/pkgdown/blob/819cede3fbbb2410912f4d49365177c9159b809f/.lintr.R#L1\"\u003epkgdown\u0026rsquo;s lintr configuration file\u003c/a\u003e and the corresponding \u003ca href=\"https://github.com/r-lib/pkgdown/blob/main/.github/workflows/lint.yaml\"\u003eGitHub Actions workflow\u003c/a\u003e (from \u003ca href=\"https://usethis.r-lib.org/reference/use_github_action.html\"\u003er-lib/actions\u003c/a\u003e).This neat safeguard makes use of the \u003ca href=\"https://lintr.r-lib.org/reference/undesirable_function_linter.html\"\u003eUndesirable function linter\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"more-metadata-on-cran\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#more-metadata-on-cran\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMore metadata on CRAN\u003c/h3\u003e\u003cp\u003eCRAN pages of packages now show\u0026hellip;\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eIssues which need fixing! \u003ca href=\"https://mastodon.social/@henrikbengtsson/112591630316235677\"\u003eShared by Henrik Bengtsson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eDOIs! Have you seen Achim Zeileis\u0026rsquo; announcement that \u003ca href=\"https://fosstodon.org/@zeileis/112597049943483012\"\u003eAll R packages on CRAN will get an official DOI\u003c/a\u003e?In contrast to Zenodo DOIs, it\u0026rsquo;s the same DOI across all versions.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"a-pure-github-preview-workflow-for-pkgdown-websites\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-pure-github-preview-workflow-for-pkgdown-websites\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA pure GitHub preview workflow for pkgdown websites\u003c/h3\u003e\u003cp\u003eIf you use a gh-pages branch on GitHub to store the source of your pkgdown website, and use GitHub Pages to deploy it, you could extend that workflow to create (and then clean) subdirectories in that branch to host \u003cem\u003epreviews of pull requests\u003c/em\u003e.Check out this \u003ca href=\"https://github.com/rstudio/education-workflows/blob/a1b06838921c381918ba8142e52fa06afad95c97/examples/pkgdown.yaml#L66\"\u003eGitHub Actions workflow file by Garrick Aden-Buie\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"tips-for-refactoring-test-files\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tips-for-refactoring-test-files\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTips for refactoring test files\u003c/h3\u003e\u003cp\u003eDo you put the object as close as possible to the related expectation(s)?Read about this, and other, \u003ca href=\"https://masalmon.eu/2024/05/23/refactoring-tests/\"\u003etips for refactoring test files\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"one-more-tool-for-checking-inputs-of-your-r-functions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#one-more-tool-for-checking-inputs-of-your-r-functions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOne more tool for checking inputs of your R functions\u003c/h3\u003e\u003cp\u003eDo you check \u003ca href=\"https://blog.r-hub.io/2022/03/10/input-checking/\"\u003einputs of your R functions\u003c/a\u003e?Beside the aforelinked R-hub blog post by Hugo Gruson, Sam Abbott, Carl Pearson, you might be interested in the experimental \u003ca href=\"https://jonthegeek.github.io/stbl/\"\u003estbl package\u003c/a\u003e by Jon Harmon.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/06/21/ropensci-news-june-2024/","date_published":"2024-06-21T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/5pvny-7m308","title":"A fresh new look for R-universe!","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","tech notes","registry","search","packages","dashboard"],"content_html":"\u003ch2 id=\"a-whole-new-frontend\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-whole-new-frontend\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA whole new frontend!\u003c/h2\u003e\u003cp\u003eAs you may have noticed, we have given the \u003ca href=\"https://ropensci.r-universe.dev/packages\"\u003eWebUI for R-universe\u003c/a\u003e a big refresh. This is the biggest UX overhaul since the beginning of the project.\u003c/p\u003e\u003cp\u003eThe old \u0026ldquo;dashboard\u0026rdquo; had become a bit convoluted over the years as features and ideas were added and removed while the project was taking shape. The new front-end keeps the same minimal design, but has been fully rewritten to improve performance, SEO, and incorporate feedback from users.\u003c/p\u003e\u003cp\u003eAlso the \u003ca href=\"https://github.com/r-universe-org/frontend\"\u003enew implementation\u003c/a\u003e should be easier to maintain and contribute to: if you want to suggest some tweaks, just follow instructions from the \u003ca href=\"https://github.com/r-universe-org/frontend#readme\"\u003ereadme\u003c/a\u003e to run it locally and test your changes using live data.\u003c/p\u003e\u003ch2 id=\"a-quick-overview-of-changes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-quick-overview-of-changes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA quick overview of changes\u003c/h2\u003e\u003cp\u003eYou can explore the new WebUI by searching for your favorite package on \u003ca href=\"https://r-universe.dev/search\"\u003er-universe search\u003c/a\u003e or navigating directly to \u003ccode\u003ehttps://{owner}.r-universe.dev/{pkg}\u003c/code\u003e. Some high-level changes to notice:\u003c/p\u003e\u003cul\u003e\u003cli\u003ePages are responsive with a max-width of 1440px to look nice on small and large screens.\u003c/li\u003e\u003cli\u003eMain contents are rendered server-side which improves performance and SEO.\u003c/li\u003e\u003cli\u003eCleaner top navbar which links to other universe content and has a search box.\u003c/li\u003e\u003cli\u003eUniverse (owner) information sidebar has moved to the left.\u003c/li\u003e\u003cli\u003eEvery package gets a section with citation info (also available via the API in html, txt or cff)\u003c/li\u003e\u003cli\u003eDevelopment and contributors chart shows proper dates on x axis and max 12 contriburors.\u003c/li\u003e\u003cli\u003eNeat table with overview of package help pages link directly to beautiful \u003ca href=\"https://ropensci.org/blog/2022/11/29/postdoc-docs/\"\u003epostdoc html manuals\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2024/06/12/runiverse-frontend/package1.png\" alt=\"Screenshot of a package homepage on r-universe\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2024/06/12/runiverse-frontend/package1.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition\" itemscope itemtype=\"http://schema.org/ImageGallery\"\u003e\t  \u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2024/06/12/runiverse-frontend/package2.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2024/06/12/runiverse-frontend/package2.png\" alt=\"Screenshot of citation section of package homepage\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2024/06/12/runiverse-frontend/package2.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2024/06/12/runiverse-frontend/package3.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2024/06/12/runiverse-frontend/package3.png\" alt=\"Screenshot of development and contributor chart\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2024/06/12/runiverse-frontend/package3.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2024/06/12/runiverse-frontend/package4.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2024/06/12/runiverse-frontend/package4.png\" alt=\"Screenshot of help pages table\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2024/06/12/runiverse-frontend/package4.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003c/p\u003e\u003cp\u003eMoreover the rendering of articles (vignettes) has improved to be a bit more readable. We hope this makes it easier to explore all the amazing written content available in R packages.\u003c/p\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2024/06/12/runiverse-frontend/article1.png\" alt=\"Screenshot viewing an article on r-universe\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2024/06/12/runiverse-frontend/article1.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003ch2 id=\"browsing-all-content-from-a-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#browsing-all-content-from-a-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBrowsing all content from a universe\u003c/h2\u003e\u003cp\u003eThe examples above display information and content from a single package. The top navbar links to the overview pages that show other content that is available in a universe (for details see our previous post: \u003ca href=\"https://ropensci.org/blog/2023/02/27/runiverse-discovering/\"\u003e\u003cem\u003eDiscovering and learning everything there is to know about R packages using r-universe\u003c/em\u003e\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eAll r-universe subdomains still use the following url scheme:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/builds\"\u003e\u003ccode\u003ehttps://{owner}.r-universe.dev/builds\u003c/code\u003e\u003c/a\u003e - repository index\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/packages\"\u003e\u003ccode\u003ehttps://{owner}.r-universe.dev/packages\u003c/code\u003e\u003c/a\u003e - package cards\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/articles\"\u003e\u003ccode\u003ehttps://{owner}.r-universe.dev/articles\u003c/code\u003e\u003c/a\u003e - vignettes with titels, dates, and authors\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/contributors\"\u003e\u003ccode\u003ehttps://{owner}.r-universe.dev/contributors\u003c/code\u003e\u003c/a\u003e - contributions from/by this owner\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/badges\"\u003e\u003ccode\u003ehttps://{owner}.r-universe.dev/badges\u003c/code\u003e\u003c/a\u003e - all available badges\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/apis\"\u003e\u003ccode\u003ehttps://{owner}.r-universe.dev/apis\u003c/code\u003e\u003c/a\u003e - interactive tool to explore r-universe APIs\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eEach of these pages has been rewritten in the same frontend system with lots of style and performance tweaks. Below some more screenshots.\u003c/p\u003e\u003cdiv class=\"gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition\" itemscope itemtype=\"http://schema.org/ImageGallery\"\u003e\t  \u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2024/06/12/runiverse-frontend/builds.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2024/06/12/runiverse-frontend/builds.png\" alt=\"Screenshot of builds tab of a repository.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2024/06/12/runiverse-frontend/builds.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2024/06/12/runiverse-frontend/packages.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2024/06/12/runiverse-frontend/packages.png\" alt=\"Screenshot of packages tab of a repository.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2024/06/12/runiverse-frontend/packages.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2024/06/12/runiverse-frontend/articles.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2024/06/12/runiverse-frontend/articles.png\" alt=\"Screenshot of articles tab of a repository.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2024/06/12/runiverse-frontend/articles.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2024/06/12/runiverse-frontend/contribution.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2024/06/12/runiverse-frontend/contribution.png\" alt=\"Screenshot of contribution tab of a repository.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2024/06/12/runiverse-frontend/contribution.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2024/06/12/runiverse-frontend/badges.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2024/06/12/runiverse-frontend/badges.png\" alt=\"Screenshot of badges tab of a repository.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2024/06/12/runiverse-frontend/badges.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2024/06/12/runiverse-frontend/api.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2024/06/12/runiverse-frontend/api.png\" alt=\"Screenshot of api tab of a repository.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2024/06/12/runiverse-frontend/api.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2024/06/12/runiverse-frontend/","date_published":"2024-06-12T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/81z6a-rbg80","title":"From scripts to package. Developing dendroNetwork and learning with rOpenSci","language":"en","authors":[{"name":"Ronald M. Visser","url":"https://orcid.org/0000-0001-6966-1729","avatar":"https://github.com/RonaldVisser.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["Software Peer Review","packages","R","dendroNetwork"],"content_html":"\u003cp\u003eDeveloping \u003ca href=\"https://docs.ropensci.org/dendroNetwork/\"\u003edendroNetwork\u003c/a\u003e as a package was not a goal from the beginning, but looking back, I think that it should have been. I wish someone had suggested making a package to me much earlier. Why? Because of many things, but mostly: reproducibility and transparency. This enables others to also use the method and software. In addition, I really enjoyed the open peer-review process after submitting to rOpenSci, because the reviewers showed me various improvements and how people from outside my discipline viewed the software and documentation. Meeting new people is always nice and a great bonus of the process.\u003c/p\u003e\u003cp\u003eA few years ago I published a method developed to explore patterns in the similarity between tree-ring series using network analysis.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e In dendrochronology the pair-wise comparison of tree-ring series is an often used method to look for patterns in, for example, the provenance of the wood, especially for archaeological wood, since we often know where the wooden objects came from, but not where the trees were felled. This type of study often results in a complex set of relations and I think that network analysis is a great method for visualising and analysing these relations without losing the complexity. I developed this method and shared the code with my publication.\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e Part of the code had been written by others and adapted for the analyses. The fact that Angelo Salatino (The Open University) shared his \u003ca href=\"https://github.com/angelosalatino/CliquePercolationMethod-R\"\u003ecode\u003c/a\u003e openly and Andy Bunn (Western Washington University) did the \u003ca href=\"https://github.com/AndyBunn/dplR/blob/master/R/rwi.stats.running.R\"\u003esame\u003c/a\u003e, shows how beneficial openly sharing code is to others and for the progress of research. Further research was performed, refining the method and exploring other avenues, such as looking at wood use within a Roman ship and the provenance of wood used in these ships.\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e Later, I read a blog post about packaging and how easy it could be. Unfortunately, I do not remember which blog it was, but it inspired me to convert my code into a package, for the benefit of others, but also because I wanted to learn how to do this.\u003c/p\u003e\u003cp\u003eFor me, creating a package from my existing scripts started with these three excellent resources (in random order):\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://devguide.ropensci.org/\"\u003ehttps://devguide.ropensci.org/\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://r-pkgs.org/\"\u003ehttps://r-pkgs.org/\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://carpentries-incubator.github.io/lesson-R-packaging/\"\u003ehttps://carpentries-incubator.github.io/lesson-R-packaging/\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe easy bit was converting scripts into functions, since this is pretty straight forward programming. However, I never realized how much work writing (good) documentation is. This took me much longer than I expected, also because I was (and am) doing this in my spare time. However, it was also worthwhile to do this and explain what the functions and variables are for. I also learned a lot about the potential for continuous integration, automated testing and checking, especially from the \u003ca href=\"https://devguide.ropensci.org/\"\u003erOpenSci-documentation\u003c/a\u003e. A lot of information can be found there, which is really helpful. It takes an effort to read everything, but in the end it can save you a lot of time if you read it \u003cem\u003ebefore\u003c/em\u003e you start developing a package!\u003c/p\u003e\u003cp\u003eI really enjoyed the \u003ca href=\"https://github.com/ropensci/software-review/issues/627\"\u003eopen peer-review\u003c/a\u003e process. After reading all the documentation and making sure that dendroNetwork complied to the standards of rOpenSci, the process of submission was very easy. I enjoyed the feedback I got from the reviewers \u003ca href=\"https://kaijagahm.netlify.app/\"\u003eKaija Gahm\u003c/a\u003e and \u003ca href=\"https://github.com/gzach93\"\u003eZachary Gajewski\u003c/a\u003e and their comments really improved the software in a whole.\u003c/p\u003e\u003cp\u003eI would recommend any research who develops a new method with code to do the following things:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eBe nice, and share and document your code!\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eDevelop functions not scripts.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eDevelop a package from the start, especially when devising a new method(ology).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eRead the documentation (or: RTFM)\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSubmit to rOpenSci and enjoy!\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eVisser, R. M. (2021). Dendrochronological Provenance Patterns. Network Analysis of Tree-Ring Material Reveals Spatial and Economic Relations of Roman Timber in the Continental North-Western Provinces. Journal of Computer Applications in Archaeology, 4(1), 230. \u003ca href=\"https://doi.org/10.5334/jcaa.79\"\u003ehttps://doi.org/10.5334/jcaa.79\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eVisser, R. M. (2022). \u003cem\u003eDendrochronological Provenance Patterns. Code and Data of Network Analysis of Tree-Ring Material\u003c/em\u003e [dataset]. \u003ca href=\"https://doi.org/10.5281/zenodo.10200361\"\u003ehttps://doi.org/10.5281/zenodo.10200361\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eVisser, R. M., \u0026amp; Vorst, Y. (2022). Connecting Ships: Using Dendrochronological Network Analysis to Determine the Wood Provenance of Roman-Period River Barges Found in the Lower Rhine Region and Visualise Wood Use Patterns. \u003cem\u003eInternational Journal of Wood Culture\u003c/em\u003e, \u003cem\u003e3\u003c/em\u003e(1-3), 123-151. \u003ca href=\"https://doi.org/10.1163/27723194-bja10014\"\u003ehttps://doi.org/10.1163/27723194-bja10014\u003c/a\u003e\u003c/p\u003e\u003cp\u003eVisser, R., \u0026amp; Vorst, Y. (2022). \u003cem\u003eAnalyses, data and figures related to: \u0026lsquo;Connecting ships: using dendrochronological network analysis to determine the wood provenance of Roman-period river barges found in the Lower Rhine region and to visualise patterns of wood use\u0026rsquo;\u003c/em\u003e [dataset]. \u003ca href=\"https://doi.org/10.5281/zenodo.7243539\"\u003ehttps://doi.org/10.5281/zenodo.7243539\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2024/06/06/from-scripts-to-package/","date_published":"2024-06-06T00:00:00+00:00","date_modified":"2025-10-24T11:40:09+02:00"},{"id":"https://doi.org/10.59350/w2w0j-pg740","title":"rOpenSci News Digest, May 2024","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2024/05/24/ropensci-news-may-2024\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"ropensci-in-the-research-organization-registry\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-in-the-research-organization-registry\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci in the Research Organization Registry\u003c/h3\u003e\u003cp\u003erOpenSci was added to the \u003ca href=\"https://ror.org/\"\u003eResearch Organization Registry\u003c/a\u003e (ROR) in its latest \u003ca href=\"https://github.com/ror-community/ror-updates/releases/tag/v1.46\"\u003erelease\u003c/a\u003e. The ROR is  a global, community-led registry of open persistent identifiers for research organizations. ROR IDs help link and disambiguate metadata about organizations in the scholarly record, much like DOIs and ORCiDs do for manuscripts and researchers. \u003ca href=\"/blog/2018/03/16/thanking-reviewers-in-metadata/\"\u003eLinked metadata is rOpenSci\u0026rsquo;s love language ❤️ !\u003c/a\u003e Find us at \u003ca href=\"https://ror.org/019jywm96\"\u003ehttps://ror.org/019jywm96\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"what-are-the-ropensci-champions-up-to-now\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-are-the-ropensci-champions-up-to-now\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat are the rOpenSci Champions up to now?\u003c/h3\u003e\u003cp\u003eOur Champions and mentors have been carrying out various programmed activities.The first stage of the program has a very important training component. This year, we divided the training into technical and community tracks, with several one to two-hour sessions each. Here, you can find the openly available material for each session.\u003c/p\u003e\u003cp\u003eThe Technical Track is focused on good software and package development practices:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://stylish-code.netlify.app/#/\"\u003eBeautiful Code, Because We’re Worth It!\u003c/a\u003e: a 1-hour session on \u003ca href=\"/blog/2024/02/22/beautiful-code/\"\u003egood practices for  writing code\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://rpkgdev-mechanics-2024.netlify.app/\"\u003ePackage Development: The Mechanics\u003c/a\u003e: three 2-hour sessions for beginners to demystify the creation of an R package.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://rpkgdev-rocket-2024.netlify.app/\"\u003ePackage Development: Not Rocket Science\u003c/a\u003e: a 2-hour hands-on workshop for advanced R package development with tips and tricks.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/maurolepore/ropensci-review\"\u003eHow rOpenSci Performs Peer Review\u003c/a\u003e: a 2-hour workshop to showcase and discuss how rOpenSci communicates, builds, and reviews software.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe Community Track is focused on community-building skills:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://osschampionsprogram.netlify.app/\"\u003eHow To Contribute to Open Projects and Communities\u003c/a\u003e: a 2-hour session presenting community participation frameworks, examples, and recommendations for your package.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/07/package-marketing/\"\u003eMarketing Ideas For Your Package\u003c/a\u003e: A blog post presenting a series of activities and tools for advertising your package.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eNext month, we will complete the training with a workshop on Git and GitHub and another on Event Organization.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-06\"\u003eTuesday, June 4th, 09:00 Australia Western (01:00 UTC)\u003c/a\u003e, R in the Wild with cohosts \u003ca href=\"/author/ernest-guevarra/\"\u003eErnest Guevarra\u003c/a\u003e, \u003ca href=\"/author/tom%C3%A1s-zaba/\"\u003eTomás Zaba\u003c/a\u003e, \u003ca href=\"/author/nicholus-tint-zaw/\"\u003eNicholus Tint Zaw\u003c/a\u003e, \u003ca href=\"/author/zython-paul-lachica/\"\u003eZython Paul Lachica\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eWork on some of your own wild workflows\u003c/li\u003e\u003cli\u003eLearn how others use R in the Wild (at work, with or without teams)\u003c/li\u003e\u003cli\u003eChat with our cohosts, discuss the challenges they face, and wins they have through their work\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-07\"\u003eTuesday, July 2nd, 14:00 Europe Central (12:00 UTC)\u003c/a\u003e, Git and GitHub with cohost \u003ca href=\"/author/zhian-n.-kamvar/\"\u003eZhian Kamvar\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eRead up on Git and GitHub and how they might serve you\u003c/li\u003e\u003cli\u003eStart your first Git/GitHub project\u003c/li\u003e\u003cli\u003eChat with our cohost about the pros and cons of Git \u0026amp; GitHub, resources for getting started and tips and tricks.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following  package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/dendroNetwork\"\u003edendroNetwork\u003c/a\u003e, developed by Ronald Visser: Creating dendrochronological networks based on the similarity between tree-ring series or chronologies. The package includes various functions to compare tree-ring curves building upon the dplR package. The networks can be used to visualise and understand the relations between tree-ring curves. These networks are also very useful to estimate the provenance of wood as described in Visser (2021) \u003ca href=\"DOI:10.5334/jcaa.79\"\u003eDOI:10.5334/jcaa.79\u003c/a\u003e or wood-use within a structure/context/site as described in Visser and Vorst (2022) \u003ca href=\"DOI:10.1163/27723194-bja10014\"\u003eDOI:10.1163/27723194-bja10014\u003c/a\u003e.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=dendroNetwork\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/627\"\u003ereviewed\u003c/a\u003e by Kaija Gahm and Zachary Gajewski.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following nine packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/comtradr\" title=\"Interface with the United Nations Comtrade API\"\u003ecomtradr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/comtradr/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dendroNetwork\" title=\"Create Networks of Dendrochronological Series using Pairwise Similarity\"\u003edendroNetwork\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dendroNetwork/releases/tag/0.5.4\"\u003e\u003ccode\u003e0.5.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/drake\" title=\"A Pipeline Toolkit for Reproducible Computation at Scale\"\u003edrake\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/drake/releases/tag/7.13.10\"\u003e\u003ccode\u003e7.13.10\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/fellingdater\" title=\"Estimate, report and combine felling dates of historical tree-ring series\"\u003efellingdater\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/fellingdater/releases/tag/v1.0.2\"\u003e\u003ccode\u003ev1.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/melt\" title=\"Multiple Empirical Likelihood Tests\"\u003emelt\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/melt/releases/tag/v1.11.4\"\u003e\u003ccode\u003ev1.11.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nasapower\" title=\"NASA POWER API Client\"\u003enasapower\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nasapower/releases/tag/v4.2.1\"\u003e\u003ccode\u003ev4.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmextract\" title=\"Download and Import Open Street Map Data Extracts\"\u003eosmextract\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmextract/releases/tag/v0.5.1\"\u003e\u003ccode\u003ev0.5.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stplanr\" title=\"Sustainable Transport Planning\"\u003estplanr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stplanr/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/traits\" title=\"Species Trait Data from Around the Web\"\u003etraits\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/traits/releases/tag/v0.5.1\"\u003e\u003ccode\u003ev0.5.1\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are thirteen recently closed and active submissions and 7 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/627\"\u003edendroNetwork\u003c/a\u003e, Create networks of dendrochronological series using pairwise similarity. Submitted by \u003ca href=\"https://akademienl.social/@RonaldVisser\"\u003eRonaldVisser\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/620\"\u003ekarel\u003c/a\u003e, Learning programming with Karel the robot. Submitted by \u003ca href=\"https://unr.edu.ar/\"\u003eMarcos Prunello\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/612\"\u003erOPTRAM\u003c/a\u003e, Derive soil moisture using the OPTRAM algorithm. Submitted by \u003ca href=\"https://github.com/micha-silver\"\u003eMicha Silver\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003emregions2\u003c/a\u003e, Access Data from Marineregions.org: The Marine Regions Gazetteer and the Marine Regions Data Products. Submitted by \u003ca href=\"https://salvafern.github.io/\"\u003esalvafern\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/625\"\u003erix\u003c/a\u003e, Rix: Reproducible Environments with Nix. Submitted by \u003ca href=\"https://brodrigues.co\"\u003eBruno Rodrigues\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"https://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/637\"\u003ecancerprof\u003c/a\u003e, API Client for State Cancer Profiles. Submitted by \u003ca href=\"https://github.com/realbp\"\u003eBrian Park\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/633\"\u003eosmapiR\u003c/a\u003e, OpenStreetMap API. Submitted by \u003ca href=\"https://github.com/jmaspons\"\u003eJoan Maspons\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/638\"\u003echopin\u003c/a\u003e, CHOPIN: Computation for Climate and Health research On Parallelized INfrastructure. Submitted by \u003ca href=\"https://www.issong.net\"\u003eInsang Song\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/636\"\u003ersi\u003c/a\u003e, Efficiently Retrieve and Process Satellite Imagery. Submitted by \u003ca href=\"https://mm218.dev/\"\u003eMichael Mahoney\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/596\"\u003esits\u003c/a\u003e, Satellite Image Time Series Analysis for Earth Observation Data Cubes. Submitted by \u003ca href=\"https://www.gilbertocamara.org\"\u003eGilberto Camara\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/626\"\u003egigs\u003c/a\u003e, Assess Fetal, Newborn, and Child Growth with International Standards. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2024/05/17/communication-tips-oss-project\"\u003eCommunication Tips for your Open-Source Project\u003c/a\u003e by Maëlle Salmon.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/01/qualtrics-call-help/\"\u003eHelp make qualtRics better! Code contributions wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/27/assertr-call-help/\"\u003eHelp make assertr better! Come close issues\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/29/targets-call-help/\"\u003eHelp users and developers of targets by answering questions!\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/19/waywiser-call-help/\"\u003eHelp make waywiser better! User requests wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAlso refer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"token-now-needed-for-code-coverage-via-codecov-and-covr-on-github-actions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#token-now-needed-for-code-coverage-via-codecov-and-covr-on-github-actions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eToken now needed for code coverage via codecov and {covr} on GitHub Actions\u003c/h3\u003e\u003cp\u003e\u003ca href=\"https://r-pkgs.org/testing-design.html#sec-testing-design-coverage\"\u003eTest coverage\u003c/a\u003e reports are useful when assessing and improving tests of an R package.One can run the covr package locally, or send results to an interface like codecov.io that provides interactive exploration of the output.It is possible to compute test coverage and send the results to codecov.io on GitHub Actions, using the r-lib/actions actions.\u003c/p\u003e\u003cp\u003eNow, recently, workflows have started to fail if one did not set a codecov.io token as an environment variable.How to solve this\u003c/p\u003e\u003cul\u003e\u003cli\u003eFor an individual repo, add \u003ca href=\"https://docs.codecov.com/docs/adding-the-codecov-token\"\u003eyour codecov.io token as \u003ccode\u003eCODECOV_TOKEN\u003c/code\u003e to the repository secrets\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eFor an organization, ask the organization owner to create an organization wide codecov.io token and to store it as an organization secret. Make sure to update your \u003ca href=\"https://github.com/r-lib/actions/issues/834#issuecomment-2102337428\"\u003eGitHub Actions workflow file\u003c/a\u003e, for instance by running \u003ca href=\"https://usethis.r-lib.org/reference/use_github_action.html\"\u003e\u003ccode\u003eusethis::use_github_action(\u0026quot;test-coverage\u0026quot;)\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"notes-on-package-repositories\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#notes-on-package-repositories\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNotes on package repositories\u003c/h3\u003e\u003cp\u003eLluís Revilla Sancho wrote about \u003ca href=\"https://llrs.dev/post/2024/05/05/packaging-r-getting-in/\"\u003ePackaging R: getting in repositories\u003c/a\u003e.We particularly note his two definitions of package repositories: the first one consists in making \u003ccode\u003einstall.packages()\u003c/code\u003e work, the second in adding a layer of checks to packages in the repository.He then added \u0026ldquo;\u003ca href=\"/r-universe/\"\u003eR-universe\u003c/a\u003e is using the first definition but could be used to generate repositories with checks that comply with the second definition.\u0026rdquo;\u003c/p\u003e\u003ch3 id=\"standardize-a-description-file-in-one-function-call\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#standardize-a-description-file-in-one-function-call\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStandardize a DESCRIPTION file in one function call\u003c/h3\u003e\u003cp\u003eDo you know about the \u003ca href=\"https://desc.r-lib.org/reference/desc_normalize.html\"\u003e\u003ccode\u003edesc::desc_normalize()\u003c/code\u003e\u003c/a\u003e function that orders and formats DESCRIPTION fields in a standard way?Once you start using it, there\u0026rsquo;s no way back.\u003c/p\u003e\u003cp\u003eYou can also call it indirectly via \u003ca href=\"https://usethis.r-lib.org/reference/tidyverse.html\"\u003e\u003ccode\u003eusethis::use_tidy_description()\u003c/code\u003e\u003c/a\u003e that also sets the Encoding field to UTF-8.\u003c/p\u003e\u003ch3 id=\"automated-refactoring-with-xmlparsedata\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#automated-refactoring-with-xmlparsedata\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAutomated refactoring with xmlparsedata\u003c/h3\u003e\u003cp\u003eRefactoring code can be tedious manual work, but it can also be tedious automated work. \u0026#x1f609;Read a post about how to \u003ca href=\"https://masalmon.eu/2024/05/15/refactoring-xml/\"\u003ereplace all occurrences of a given function call with another one\u003c/a\u003e using an XML representation of the code.\u003c/p\u003e\u003ch3 id=\"whats-your-favorite-ide\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#whats-your-favorite-ide\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat\u0026rsquo;s your favorite IDE?\u003c/h3\u003e\u003cp\u003eAthanasia Monica Mowinckel wrote an informative post about the \u003ca href=\"https://drmowinckels.io/blog/2024/ide/\"\u003eIDEs she uses\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"code-review-resources\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#code-review-resources\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCode review resources\u003c/h3\u003e\u003cp\u003eBeside the \u003ca href=\"https://code-review.tidyverse.org/\"\u003etidyverse code review guidance\u003c/a\u003e, we can now recommend you check out the \u003ca href=\"https://developer-success-lab.gitbook.io/code-review-anxiety-workbook-1\"\u003ecode review anxiety workbook\u003c/a\u003e by Carol Lee and Kristen Foster-Marks, that explains what code review anxiety is, and describes efficient methods to deal with it.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/05/24/ropensci-news-may-2024/","date_published":"2024-05-24T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/8sqxt-7zp92","title":"Communication Tips for your Open-Source Project","language":"en","authors":[{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["editor"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]}],"tags":["community"],"content_html":"\u003cp\u003eDo you maintain an open-source project like an R package or a collection thereof, and wonder how to best use various communication channels to inform and engage with your community of users?We\u0026rsquo;ve consolidated this list of tips.Some of them are required in our opinion, others are simply nice to have.\u003c/p\u003e\u003ch2 id=\"required-having-good-release-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#required-having-good-release-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRequired: Having good release notes\u003c/h2\u003e\u003cp\u003eSince you\u0026rsquo;re developing a product, the first act of communication is to write informative release notes.Release notes generally describe updates and changes, commonly in a file called \u003ccode\u003eNEWS.md\u003c/code\u003e. These files generally have one header per release, with sub-headers used to group changes in meaningful categories.\u003c/p\u003e\u003cp\u003eResources to get started with release notes include:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://usethis.r-lib.org/reference/use_news_md.html\"\u003e\u003ccode\u003eusethis::use_news_md()\u003c/code\u003e\u003c/a\u003e to create the \u003ccode\u003eNEWS.md\u003c/code\u003e file.\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://style.tidyverse.org/news.html\"\u003ethe chapter about NEWS files in the tidyverse style guide\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eYou can partially automate release notes from commit messages using for instance the \u003ca href=\"https://fledge.cynkra.com/dev/\"\u003efledge package\u003c/a\u003e (quite powerful if paired with the \u003ca href=\"https://www.conventionalcommits.org/en/v1.0.0/\"\u003eConventional commits convention\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eRelease notes can directly inform users, who can read them\u003c/p\u003e\u003cul\u003e\u003cli\u003efrom GitHub through \u003ca href=\"https://docs.github.com/en/account-and-profile/managing-subscriptions-and-notifications-on-github/setting-up-notifications/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository\"\u003ewatching release events\u003c/a\u003e for the repository;\u003c/li\u003e\u003cli\u003efrom the documentation website, on which pkgdown transforms \u003ccode\u003eNEWS.md\u003c/code\u003e files into a page called changelog.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThey will also be useful as raw material for further communication efforts like blog posts about releases.\u003c/p\u003e\u003ch2 id=\"required-issue-trackers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#required-issue-trackers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRequired: Issue trackers\u003c/h2\u003e\u003cp\u003eNot only should your repositories have issue/ticket trackers but you should also make sure enough team members watch them or will go through new tickets or comments at least once in a while.Maintaining and responding to issues is an important part of maintaining a community of users.\u003c/p\u003e\u003cp\u003eYour project\u0026rsquo;s use of issues might be advertised through a pinned issue; you could even \u003ca href=\"https://docs.github.com/en/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository\"\u003etemporarily limit interactions\u003c/a\u003e.These terms and links are for GitHub, but similar ideas and features exist for other code hosting platforms.\u003c/p\u003e\u003ch2 id=\"required-polish-project-profiles\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#required-polish-project-profiles\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRequired: Polish project profiles\u003c/h2\u003e\u003cp\u003eAll open-source software has a profile, potentially spread across many places such as GitHub organizations or Mastodon accounts. A logo can be a key identifier of your profile, and should appear consistently throughout your profile(s). It is also important to include informative descriptions, and to verify all URLs (\u003ca href=\"https://docs.github.com/en/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization\"\u003edocs for GitHub\u003c/a\u003e, \u003ca href=\"https://joinmastodon.org/verification\"\u003edocs for Mastodon\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eFor a GitHub organization you can ask your members whether they\u0026rsquo;d like to make their \u003ca href=\"https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-membership-in-organizations/publicizing-or-hiding-organization-membership\"\u003eGitHub organization membership public\u003c/a\u003e, which might give a more collaborative image even before anyone dives into commit activity.\u003c/p\u003e\u003cp\u003eProfile polishing need not take a lot of time, and can only improve your project\u0026rsquo;s image.\u003c/p\u003e\u003ch2 id=\"required-make-sure-you-handle-access-smartly\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#required-make-sure-you-handle-access-smartly\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRequired: Make sure you handle access smartly\u003c/h2\u003e\u003cp\u003eFor any platform requiring log-ins or some sort of access rights, make sure everyone who needs access has it, and that access is removed from anybody who no longer needs it.\u003c/p\u003e\u003cp\u003eYou might want to look into password management systems such as \u003ca href=\"https://1password.com/\"\u003e1Password\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eAs the makeup of a development team changes over time, it might be wise to review access regularly, and to make that review part of some sort of onboarding/offboarding checklist.\u003c/p\u003e\u003ch2 id=\"required-have-a-space-for-private-discussions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#required-have-a-space-for-private-discussions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRequired: have a space for private discussions\u003c/h2\u003e\u003cp\u003eAlthough open-source development demands that a lot happens \u003ca href=\"https://producingoss.com/en/producingoss.html#avoid-private-discussions\"\u003ein the open\u003c/a\u003e, it is also important to cultivate a safe space where team members can let off steam, discuss sensitive matters, or share pets\u0026rsquo; pictures.This could take such forms as a Slack workspace, Discord, Matrix, or Element server, or cutting edge options like \u003ca href=\"https://try.flat.app\"\u003eflat\u003c/a\u003e or \u003ca href=\"https://cq2.co/\"\u003eCQ2\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIdeally, you should own the space, unless you can rely on an external partner (a funder? a larger cohalition of projects?) to keep providing it to you.\u003c/p\u003e\u003ch2 id=\"having-a-forum\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#having-a-forum\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHaving a forum\u003c/h2\u003e\u003cp\u003eFor a small project, issue trackers might be all you need to handle bug reports, feature requests, and general Q\u0026amp;A.Bigger projects might nevertheless benefit from the creation and curation of a dedicated discussion forum.\u003c/p\u003e\u003cp\u003eYou could use \u003ca href=\"https://www.discourse.org/\"\u003eDiscourse\u003c/a\u003e, or \u003ca href=\"https://docs.github.com/fr/discussions\"\u003eGitHub Discussions\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"having-a-blog-with-an-rss-feed\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#having-a-blog-with-an-rss-feed\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHaving a blog with an RSS feed\u003c/h2\u003e\u003cp\u003eCompared to release notes, blog posts about new versions provide more of a narrative so can be easier to read.They can still point users to the release notes for more information.\u003c/p\u003e\u003cp\u003eThe blog of an open-source project could also contain other types of posts such as a deep-dive on a feature, announcement of funding or call for contributions, or monetary support.\u003c/p\u003e\u003cp\u003eWhen choosing a website builder, try to choose one that is free and either familiar for your project\u0026rsquo;s team or easy enough to get acquainted with.Blog posts that are Markdown based are easier to write from release notes.Also make sure publishing a new blog post is not a complicated 100-step process or no one will want to write one.You could choose to use \u003ca href=\"https://blogguide.ropensci.org/\"\u003eGitHub for a review and preview process of blog posts\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you do create a blog, make sure to also create an RSS feed for it.With most static website generators this is either the default or available by turning on an option (\u003ca href=\"https://quarto.org/docs/websites/website-blog.html#rss-feed\"\u003edocs for Quarto\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eOnce your blog has an RSS feed, register it in relevant aggregators such as \u003ca href=\"https://github.com/rweekly/rweekly.org?tab=readme-ov-file#regular-r-posts-submit-your-rss-feed\"\u003eR Weekly\u003c/a\u003e in the R world.\u003c/p\u003e\u003ch2 id=\"having-comments-on-blog-posts\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#having-comments-on-blog-posts\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHaving comments on blog posts\u003c/h2\u003e\u003cp\u003eIf you choose to open comments on your blog posts, make sure to integrate comments within your project\u0026rsquo;s forum.\u003c/p\u003e\u003cp\u003eThis is very easy with \u003ca href=\"https://meta.discourse.org/t/embed-discourse-comments-on-another-website-via-javascript/31963\"\u003eDiscourse\u003c/a\u003e (which we use on this very blog), and \u003ca href=\"https://giscus.app/fr\"\u003eGitHub Discussions via Giscus\u003c/a\u003e (which are also easy to integrate with \u003ca href=\"https://quarto.org/docs/output-formats/html-basics.html#commenting\"\u003eQuarto\u003c/a\u003e among others).\u003c/p\u003e\u003cp\u003eIntegrating comments with your forum means you only need to watch one space, and also help connect readers of your blog posts to the forum.\u003c/p\u003e\u003ch2 id=\"having-social-media-profiles\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#having-social-media-profiles\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHaving social media profiles\u003c/h2\u003e\u003cp\u003eSocial media can be useful to spread the word about your project and its updates, and to engage with users.You might choose to make your social media \u0026ldquo;read-only\u0026rdquo; by stating clearly you do not have the resources to answer questions there.\u003c/p\u003e\u003cp\u003eIdeally, concentrate your social media usage on \u003ca href=\"/blog/2023/06/22/ropensci-news-digest-june-2023/#ropenscis-communication-channels-for-safe-and-friendly-exchange\"\u003enice platforms\u003c/a\u003e, and platforms where your projects\u0026rsquo; users and community are likely to congregate.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post, we shared some tips for communication for your open-source project.Use communication channels in accordance with your project\u0026rsquo;s goals and resources.You might also be interested in our past community call \u003ca href=\"/blog/2021/04/28/commcall-pkg-community/\"\u003eSet Up Your Package to Foster a Community\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/05/17/communication-tips-oss-project/","date_published":"2024-05-17T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/0njz2-yze81","title":"rOpenSci News Digest, April 2024","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2024/04/22/ropensci-news-april-2024\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-05\"\u003eTuesday, May 7th, 09:00 Americas Pacific (16:00 UTC)\u003c/a\u003e, Meet rOpenSci\u0026rsquo;s new Executive Director! With cohost \u003ca href=\"/author/noam-ross\"\u003eNoam Ross\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eLearn more about rOpenSci!\u003c/li\u003e\u003cli\u003eExplore rOpenSci \u003ca href=\"/packages\"\u003epackages\u003c/a\u003e and \u003ca href=\"https://contributing.ropensci.org/\"\u003econtributing guide\u003c/a\u003e\u003c/li\u003e\u003cli\u003eAsk questions or chat about rOpensci with Noam and other attendees.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTuesday, June 4th, 09:00 Australia Western (01:00 UTC), Theme TBD with cohost TBD and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.And remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"r-universe-documentation-gets-a-boost-from-google-season-of-docs\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-documentation-gets-a-boost-from-google-season-of-docs\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-Universe documentation gets a boost from Google Season of Docs\u003c/h3\u003e\u003cp\u003eWe are excited and grateful to \u003ca href=\"/blog/2024/04/12/gsod-announcement/\"\u003eannounce\u003c/a\u003e that \u003ca href=\"https://r-universe.dev/\"\u003eR-Universe\u003c/a\u003e has been awarded a \u003ca href=\"https://developers.google.com/season-of-docs\"\u003eGoogle Season of Docs\u003c/a\u003e grant. R-Universe is rOpenSci’s platform for testing, building, distributing, and discovering R packages, led by \u003ca href=\"/author/jeroen-ooms/\"\u003eJeroen Ooms\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWith the support of Google, we aim to update and centralize our documentation, showcasing how users and developers can get the most out of R-Universe. We will update the documentation to catch up with the rapid feature development of the past two years, including consolidating our many tech notes and READMEs into an easily discoverable site. We will build the site with Quarto to make it straightforward for R community members to contribute.\u003c/p\u003e\u003cp\u003eThe work will be led by \u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"learn-about-a-different-package-every-day-by-following-our-social-media-campaigns\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#learn-about-a-different-package-every-day-by-following-our-social-media-campaigns\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLearn about a different package every day by following our social media campaigns\u003c/h3\u003e\u003cp\u003eThe goal of a community is to collaborate, share knowledge and build learnings.  That\u0026rsquo;s why we want to show you the more than 300 packages in our federated community of open-source software developers.\u003c/p\u003e\u003cp\u003eSince December 2023, we have run the social media campaigns \u003ca href=\"https://hachyderm.io/@rOpenSci/tagged/APackageADay\"\u003e“A Package a Day\u003c/a\u003e on \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon\u003c/a\u003e, in which we feature one package each day. On \u003ca href=\"https://www.linkedin.com/company/ropensci/\"\u003eLinkedIn\u003c/a\u003e, we publish our \u003ca href=\"https://www.linkedin.com/feed/hashtag/?keywords=packageweeklydigest\u0026amp;highlightedUpdateUrns=urn%3Ali%3Aactivity%3A7170464303186108416\"\u003ePackage Weekly Digest\u003c/a\u003e every Monday with a list of five packages that belong to the same category.\u003c/p\u003e\u003cp\u003eYou can follow us and the hashtags #APackageADay and #PackageWeeklyDigest to stay informed about rOpenSci R packages and learn about them.\u003c/p\u003e\u003ch3 id=\"help-us-put-together-the-ropensci-community-call-calendar-for-the-year\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#help-us-put-together-the-ropensci-community-call-calendar-for-the-year\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHelp us put together the rOpenSci Community Call calendar for the year!\u003c/h3\u003e\u003cp\u003eWe are organizing the Community Calls for this year. Could you help us decide which topics we should cover?\u003c/p\u003e\u003cp\u003eWe hold \u003ca href=\"/commcalls/\"\u003eCommunity Calls\u003c/a\u003e to share knowledge that is relevant to our community and consistent with \u003ca href=\"/about/\"\u003eour vision and mission\u003c/a\u003e. These are free and open for anyone to attend and provide opportunities for us to connect with rOpenSci community members around the world.We’ve \u003ca href=\"https://github.com/ropensci-org/community-calls/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc\"\u003eopened an issue in this repository for each topic we’re considering\u003c/a\u003e. We’d like your input and “votes” on these, and your suggestions for other topics we haven’t thought of.\u003c/p\u003e\u003cp\u003eWe would love to hear your ideas. 🙏\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following two packages recently became a part of our software suite, or were recently reviewed again:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/baRulho\"\u003ebaRulho\u003c/a\u003e, developed by Marcelo Araya-Salas: Intended to facilitate acoustic analysis of (animal) sound transmission experiments, which typically aim to quantify changes in signal structure when transmitted in a given habitat by broadcasting and re-recording animal sounds at increasing distances. The package offers a workflow with functions to prepare the data set for analysis as well as to calculate and visualize several degradation metrics, including blur ratio, signal-to-noise ratio, excess attenuation and envelope correlation among others (Dabelsteen et al 1993 \u003ca href=\"https://doi.org/10.1121/1.406682\"\u003ehttps://doi.org/10.1121/1.406682\u003c/a\u003e).  It is available on \u003ca href=\"https://CRAN.R-project.org/package=baRulho\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/609\"\u003ereviewed\u003c/a\u003e by Mike Mahoney and Dena J. Clink.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/fellingdater\"\u003efellingdater\u003c/a\u003e, developed by Kristof Haneca: fellingdater is an R package that aims to facilitate the analysis and interpretation of tree-ring data from wooden cultural heritage objects and structures. The package standardizes the process of computing and combining felling date estimates, both for individual and groups of related tree-ring series. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/618\"\u003ereviewed\u003c/a\u003e by Antonio Jesus Pérez-Luque and Nicholas John Tierney.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following seventeen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/frictionless\" title=\"Read and Write Frictionless Data Packages\"\u003efrictionless\u003c/a\u003e (\u003ca href=\"https://github.com/frictionlessdata/frictionless-r/releases/tag/v1.1.0\"\u003e\u003ccode\u003ev1.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/beautier\" title=\"BEAUti from R\"\u003ebeautier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beautier/releases/tag/v2.6.12\"\u003e\u003ccode\u003ev2.6.12\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/bib2df\" title=\"Parse a BibTeX File to a Data Frame\"\u003ebib2df\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/bib2df/releases/tag/v1.1.2.0\"\u003e\u003ccode\u003ev1.1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (cff) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v1.0.1\"\u003e\u003ccode\u003ev1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/crul\" title=\"HTTP Client\"\u003ecrul\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/crul/releases/tag/v1.4.2\"\u003e\u003ccode\u003ev1.4.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/DataPackageR\" title=\"Construct Reproducible Analytic Data Sets as R Packages\"\u003eDataPackageR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/DataPackageR/releases/tag/v0.15.9\"\u003e\u003ccode\u003ev0.15.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dbparser\" title=\"Drugs Databases Parser\"\u003edbparser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dbparser/releases/tag/v2.0.3\"\u003e\u003ccode\u003ev2.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dittodb\" title=\"A Test Environment for Database Requests\"\u003edittodb\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dittodb/releases/tag/v0.1.8\"\u003e\u003ccode\u003ev0.1.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/eia\" title=\"API Wrapper for U.S. Energy Information Administration (EIA) Open Data\"\u003eeia\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/eia/releases/tag/v0.4.2\"\u003e\u003ccode\u003ev0.4.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/fellingdater\" title=\"Estimate, report and combine felling dates of historical tree-ring series\"\u003efellingdater\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/fellingdater/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/jagstargets\" title=\"Targets for JAGS Pipelines\"\u003ejagstargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/jagstargets/releases/tag/1.2.0\"\u003e\u003ccode\u003e1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/melt\" title=\"Multiple Empirical Likelihood Tests\"\u003emelt\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/melt/releases/tag/v1.11.3\"\u003e\u003ccode\u003ev1.11.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/riem\" title=\"Accesses Weather Data from the Iowa Environment Mesonet\"\u003eriem\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/riem/releases/tag/v0.3.1\"\u003e\u003ccode\u003ev0.3.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spatsoc\" title=\"Group Animal Relocation Data by Spatial and Temporal Relationship\"\u003espatsoc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spatsoc/releases/tag/v0.2.3\"\u003e\u003ccode\u003ev0.2.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stantargets\" title=\"Targets for Stan Workflows\"\u003estantargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stantargets/releases/tag/0.1.1\"\u003e\u003ccode\u003e0.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.9.0\"\u003e\u003ccode\u003e0.9.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.7.0\"\u003e\u003ccode\u003e1.7.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are thirteen recently closed and active submissions and 6 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/618\"\u003efellingdateR\u003c/a\u003e, Estimate, report and combine felling dates of historical tree-ring. Submitted by \u003ca href=\"https://www.researchgate.net/profile/Kristof_Haneca\"\u003eKriHa\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/627\"\u003edendroNetwork\u003c/a\u003e, Create networks of dendrochronological series using pairwise similarity. Submitted by \u003ca href=\"https://akademienl.social/@RonaldVisser\"\u003eRonaldVisser\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003emregions2\u003c/a\u003e, Access Data from Marineregions.org: The Marine Regions Gazetteer and the Marine Regions Data Products. Submitted by \u003ca href=\"https://salvafern.github.io/\"\u003esalvafern\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/625\"\u003erix\u003c/a\u003e, Rix: Reproducible Environments with Nix. Submitted by \u003ca href=\"https://brodrigues.co\"\u003eBruno Rodrigues\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/620\"\u003ekarel\u003c/a\u003e, Learning programming with Karel the robot. Submitted by \u003ca href=\"https://unr.edu.ar/\"\u003eMarcos Prunello\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/608\"\u003ergeeExtra\u003c/a\u003e, Extensions for rgee. Submitted by \u003ca href=\"https://csaybar.github.io\"\u003eCesar Aybar\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"https://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/612\"\u003erOPTRAM\u003c/a\u003e, Derive soil moisture using the OPTRAM algorithm. Submitted by \u003ca href=\"https://github.com/micha-silver\"\u003eMicha Silver\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/637\"\u003ecancerprof\u003c/a\u003e, API Client for State Cancer Profiles. Submitted by \u003ca href=\"https://github.com/realbp\"\u003eBrian Park\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/636\"\u003ersi\u003c/a\u003e, Efficiently Retrieve and Process Satellite Imagery. Submitted by \u003ca href=\"https://mm218.dev/\"\u003eMichael Mahoney\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/633\"\u003eosmapiR\u003c/a\u003e, OpenStreetMap API. Submitted by \u003ca href=\"https://orcid.org/0000-0003-2286-8727\"\u003eJoan Maspons\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/626\"\u003egigs\u003c/a\u003e, Assess Fetal, Newborn, and Child Growth with International Standards. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/29/from-the-founding-director-my-farewell-to-ropensci\"\u003eFrom the Founding Director: My Farewell to rOpenSci\u003c/a\u003e by Karthik Ram. Karthik Ram steps down as Executive Director after 13 years. Other languages: \u003ca href='/es/blog/2024/03/29/from-the-founding-director-my-farewell-to-ropensci' lang='es'\u003eDel Director Fundador: Mi despedida de rOpenSci (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/29/hello-from-our-new-executive-director\"\u003eHello from our New Executive Director!\u003c/a\u003e by Noam Ross. Noam Ross takes the helm as rOpenSci\u0026rsquo;s new Executive Director. Other languages: \u003ca href='/es/blog/2024/03/29/hello-from-our-new-executive-director' lang='es'\u003eHola de nuestro nuevo Director Ejecutivo (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/04/12/gsod-announcement\"\u003eR-Universe Documentation Gets a Boost from Google Season of Docs\u003c/a\u003e by Noam Ross. We are excited to announce that R-Universe has been awarded a Google Season of Docs.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/04/18/champions-program-2024\"\u003eFostering Equity and Leadership: the rOpenSci Champions Program Selection Process\u003c/a\u003e by Francisco Cardozo, Yanina Bellini Saibene, Camille Santistevan, and Lou Woodley. The rOpenSci Champions Program fosters inclusivity and diversity in R and open science, emphasizing community engagement and project innovation through a detailed selection process.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/internetarchive/\"\u003einternetarchive\u003c/a\u003e, an API Client for the Internet Archive. \u003ca href=\"https://github.com/ropensci/internetarchive/issues/17\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/textreuse/\"\u003etextreuse\u003c/a\u003e, detect text reuse and document similarity. \u003ca href=\"https://github.com/ropensci/textreuse/issues/97\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/01/qualtrics-call-help/\"\u003eHelp make qualtRics better! Code contributions wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/27/assertr-call-help/\"\u003eHelp make assertr better! Come close issues\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/29/targets-call-help/\"\u003eHelp users and developers of targets by answering questions!\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/19/waywiser-call-help/\"\u003eHelp make waywiser better! User requests wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAlso refer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"r-hub-version-2\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-hub-version-2\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-hub version 2!\u003c/h3\u003e\u003cp\u003eGábor Csárdi announced the \u003ca href=\"https://blog.r-hub.io/2024/04/11/rhub2/\"\u003esecond version of R-hub\u003c/a\u003e, for checking your R package, either on GitHub Actions or in an ad-hoc basis, using the rhub2 package.\u003c/p\u003e\u003ch3 id=\"patterns-and-anti-patterns-of-data-analysis-reuse\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#patterns-and-anti-patterns-of-data-analysis-reuse\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePatterns and anti-patterns of data analysis reuse\u003c/h3\u003e\u003cp\u003eMiles McBain wrote an \u003ca href=\"https://www.milesmcbain.com/posts/data-analysis-reuse/\"\u003einsightful blog\u003c/a\u003e post advocating for creating a universe of related packages to support data analyses at your organization, contrasting this approach with other approaches such as copy-pasting or having a single gigantic package.\u003c/p\u003e\u003ch3 id=\"install-several-r-versions-at-once-with-rig\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#install-several-r-versions-at-once-with-rig\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eInstall several R versions at once with rig\u003c/h3\u003e\u003cp\u003eAs reminded by \u003ca href=\"https://mastodon.social/@jennybryan@fosstodon.org/112176595542760673\"\u003eJenny Bryan on Mastodon\u003c/a\u003e, rig, the \u003ca href=\"https://github.com/r-lib/rig#readme\"\u003eR Installation Manager\u003c/a\u003e maintained by Gábor Csárdi, is a fantastic tool for being able to experiment locally with different R versions, especially when developing or debugging your R packages.\u003c/p\u003e\u003ch3 id=\"update-on-mocking-for-testing-r-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#update-on-mocking-for-testing-r-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdate on mocking for testing R packages\u003c/h3\u003e\u003cp\u003eMocking is the \u0026ldquo;art of replacing a function with whatever fake we need for testing\u0026rdquo;, a nice tool to add to your toolbox.Read the \u003ca href=\"https://blog.r-hub.io/2024/03/21/mocking-new-take/\"\u003eR-hub blog post\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"be-careful-when-using-git-clean\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#be-careful-when-using-git-clean\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBe careful when using git clean\u003c/h3\u003e\u003cp\u003eAthanasia Mo Mowinckel shared her recent \u003ca href=\"https://drmowinckels.io/blog/2024/2024/git-clean-woes/\"\u003eGit mishap\u003c/a\u003e in a helpful post that also includes tips and resources.\u003c/p\u003e\u003ch3 id=\"notes-on-refactoring-an-api-client\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#notes-on-refactoring-an-api-client\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNotes on refactoring an API client\u003c/h3\u003e\u003cp\u003e\u003ca href=\"/author/scott-chamberlain/\"\u003eScott Chamberlain\u003c/a\u003e published some \u003ca href=\"https://recology.info/2024/03/refactoring-notes/\"\u003enotes about refactoring an API client\u003c/a\u003e, including some arguments in favor of \u0026ldquo;separation of concerns and code\u0026rdquo;.\u003c/p\u003e\u003ch3 id=\"slides-on-good-functions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#slides-on-good-functions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSlides on good functions\u003c/h3\u003e\u003cp\u003eNick Tierney posted his useful \u003ca href=\"https://github.com/njtierney/funfun\"\u003eslidedeck \u0026ldquo;Practical Functions: Practically Magic\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/04/22/ropensci-news-april-2024/","date_published":"2024-04-22T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/472nh-gen67","title":"Fostering Equity and Leadership: the rOpenSci Champions Program Selection Process","language":"en","authors":[{"name":"Camille Santistevan","url":"https://ropensci.org/author/camille-santistevan/","avatar":"https://ropensci.org/img/community/camille-santistevan.jpeg","_role":["author"]},{"name":"Francisco Cardozo","url":"https://orcid.org/0000-0002-1925-4954","avatar":"https://github.com/focardozom.png","_role":["author"]},{"name":"Lou Woodley","url":"https://ropensci.org/author/lou-woodley/","avatar":"https://github.com/LouWoodley.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["Champions program","Mentors","R","Community"],"content_html":"\u003cp\u003eThe goal of the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e is to enable more members of historically excluded groups to participate in, benefit from, and become leaders in the R, research software engineering, and open source and open science communities. This program includes 1-on-1 mentoring for the Champions as they complete a project and perform outreach activities in their local communities.\u003c/p\u003e\u003cp\u003eEvery year, rOpenSci opens a call for applications for the roles of Champions and Mentors which are selected following a rigorous process that we describe in this blog post.\u003c/p\u003e\u003ch2 id=\"review-process\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#review-process\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReview process\u003c/h2\u003e\u003cp\u003eThe Champions selection process is designed to promote equity and diversity among participants. It involves five steps:\u003c/p\u003e\u003col\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eInitial Application Review\u003c/strong\u003e: The journey begins with rOpenSci staff examining all submissions to verify the eligibility and technical specifics of each application. This ensures that every candidate meets the basic criteria for consideration.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eCommunity Revision:\u003c/strong\u003e Each application undergoes a detailed assessment by \u003cem\u003etwo\u003c/em\u003e members of the rOpenSci community, including the current mentors of the Champions Program. In this step, reviewers use a \u003ca href=\"https://docs.google.com/spreadsheets/d/1ZySOzrMSYq6OlMgWpYOBZedO9FVkOsPe_e-lqcUYQyQ/edit#gid=914293396\"\u003erubric\u003c/a\u003e to guarantee objective and thorough revisions based on commonly established criteria\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eConsistency Analysis:\u003c/strong\u003e A quantitative analysis is conducted to examine the consensus among reviewers. This step ensures that revisions are aligned, promoting fairness and minimizing bias in the selection process.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eDiversity Review:\u003c/strong\u003e With a focus on diversity, the list of candidates with higher scores is then carefully reviewed to ensure it reflects a broad spectrum of backgrounds and regions. This may involve adding promising candidates to the pool to achieve a truly representative group of potential Champions.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eFinal Selection by Mentors:\u003c/strong\u003e The culmination of the process consists of mentors reviewing the top candidates to select their mentees.\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eThis process is central to our desire to select a diverse group of Champions who are deeply committed to our community values.\u003c/p\u003e\u003cblockquote class=\"blockquote text-right\"\u003e\u003cp\u003eWe believe that involving mentors in the selection process significantly enhances the mentor-mentee relationship. Mentors\u0026rsquo; insights into the selection process ensure a more effective and synergistic pairing. This involvement is crucial for identifying the projects that resonate most with mentors, thereby facilitating a more informed and meaningful final match.\u003c/p\u003e\u003c/blockquote\u003e\u003ch3 id=\"selection-criteria-cultivating-a-diverse-community\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#selection-criteria-cultivating-a-diverse-community\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSelection criteria: Cultivating a diverse community\u003c/h3\u003e\u003cp\u003eThe second step in the review process is the core of the selection of Champions. Each application is revised and scored based on the following categories:\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eCore Values:\u003c/strong\u003e A strong adherence to values like respect, inclusiveness, and collaboration.\u003cbr\u003e\u003cstrong\u003eCommunity Involvement:\u003c/strong\u003e Active participation in communities of practice, understood as a group of people exchanging knowledge. They can be communities in institutions and organizations (such as institutes, foundations or universities); non-profit organizations (such as R-Ladies or The Carpentries) or companies. We look for communities related to STEM, Open Science, Research Software Engineer, and the R community.\u003cbr\u003e\u003cstrong\u003eProject Proposal:\u003c/strong\u003e Clarity, feasibility, and innovation of the project proposal.\u003cbr\u003e\u003cstrong\u003eKnowledge Sharing:\u003c/strong\u003e A concrete plan to disseminate acquired skills and knowledge within and beyond rOpenSci.\u003cbr\u003e\u003cstrong\u003eTechnical Skill:\u003c/strong\u003e Proficiency in necessary technical areas. The program is not for beginner or expert R developers.\u003cbr\u003e\u003cstrong\u003eMotivation:\u003c/strong\u003e Enthusiasm for joining and contributing to the rOpenSci community and willingness to dedicate adequate time to the program, considering existing professional obligations.\u003c/p\u003e\u003cp\u003eGiven that we collect two scores for each application, to minimize bias inherent to individual reviewers, we perform an agreement analysis based on the scores we receive. This analysis involves calculating \u003ca href=\"https://en.wikipedia.org/wiki/Cohen%27s_kappa\"\u003eCohen\u0026rsquo;s Kappa\u003c/a\u003e, a score that assesses the level of agreement beyond chance\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e. Based on this score, we may adjust the scoring options of the rubric to enhance clarity and agreement. For instance, if a specific category consistently shows low agreement with a 1-5 scale, we might simplify the scale to 1-3. This iterative process continues until we achieve satisfactory agreement levels or determine that further revisions to the evaluations are necessary.\u003c/p\u003e\u003ch2 id=\"general-results-of-the-2024-champions-applications\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#general-results-of-the-2024-champions-applications\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGeneral results of the 2024 Champions applications\u003c/h2\u003e\u003cp\u003eWe received a total of 97 applications.  Out of these, 66 meet the basic criteria of the call. These applications originated from 34 different countries and represent a diverse array of backgrounds, encompassing academia, industry, and government sectors.\u003c/p\u003e\u003ch3 id=\"general-characteristics-of-the-applicants\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#general-characteristics-of-the-applicants\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGeneral characteristics of the applicants\u003c/h3\u003e\u003cp\u003eMost of the applicants were from the United States, followed by Brazil, Mexico and Argentina. It suggests a strong presence of the program in North and South America. However, we also received applications from countries in Africa, Asia, Europe and Oceania, indicating that we are approaching our goal of having a global reach in the Champions Program.\u003c/p\u003e\u003cp\u003eOf the participants who reported pronouns, 56.7% mentioned \u003cem\u003eshe/her\u003c/em\u003e and 43.3% mentioned \u003cem\u003ehe/him\u003c/em\u003e. A number of participants did not report pronouns (38.1%).\u003c/p\u003e\u003cp\u003eApplicants also reported a range of preferred languages (9 different languages were mentioned). The most common language was English (77), followed by Spanish (48) and Portuguese (14). Other languages included French, Arabic, Catalan, German, Hindi and Korean.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/04/18/champions-program-2024/country.png\"\t\t\talt=\"A bar graph of number of applicants by country, with incremental values showing a trend of increasing number of applicants from left to right, culminating in a notable high point at the rightmost edge with ending with Argentina, Mexico, Brazil and the United States.\"\u003e\u003c/figure\u003e\u003ch3 id=\"scores\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#scores\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eScores\u003c/h3\u003e\u003cp\u003eThe majority of proposals received high marks in Knowledge Sharing (83%), Motivation (67%), and Alignment with Core Values (65%). These findings underscore a unique characteristic of our program: the applicants\u0026rsquo; commitment to resource sharing for communal benefit and their eagerness to engage with our initiatives.\u003c/p\u003e\u003cp\u003eIt is noteworthy that our program does not mandate advanced technical expertise or specialization in their fields from the applicants, a fact that is mirrored in the rubric scores where the majority of proposals scored less than 50% on Technical Skills.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2024/04/18/champions-program-2024/proportion_of_high_score.png\"\t\t\talt=\"A horizontal dot plot chart displaying the distribution of scores in the different categories as discussed in the text.\" width=\"600\"\u003e\u003c/figure\u003e\u003ch2 id=\"key-insights\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#key-insights\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eKey insights\u003c/h2\u003e\u003cp\u003eIn 2024, the Champions Program attracted a global cohort of applicants, underscoring its expanding influence and the increasing recognition of its value across different sectors and continents.\u003c/p\u003e\u003cp\u003eThe rOpenSci Champions Program has made an intentional effort to foster inclusivity and diversity within the R Community. Through a multi-step selection process, we strive for fairness and representation from diverse demographics and geographic regions.\u003c/p\u003e\u003cp\u003eUtilizing the rubric and conducting thorough data analysis enable a balanced selection of participants, effectively bridging the gap between experts and beginners. This approach is instrumental in identifying and cultivating the talents we aim to nurture within the program.\u003c/p\u003e\u003cp\u003eTransparency throughout the evaluation process is paramount in upholding the principles of fairness and equity. By openly communicating the criteria and methodology of our selection process, we aim to foster trust and accountability, reinforcing our commitment to inclusivity and diversity.\u003c/p\u003e\u003cp\u003eAs we move forward, we understand that diversifying our community and increasing inclusivity is a process. Thus, the rOpenSci Champions Program remains committed to adapting and refining its processes to meet the evolving needs of its community and to address the challenges and opportunities in open science and research software development. We are inspired by the enthusiasm and caliber of the applications received and are excited about the potential of our new Champions to lead and innovate.\u003c/p\u003e\u003ch2 id=\"acknowledgements\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#acknowledgements\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAcknowledgements\u003c/h2\u003e\u003cp\u003eThe inaugural cohort of the rOpenSci Champions Program was funded by the Chan Zuckerberg Initiative and led by \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYani Bellini Saibene\u003c/a\u003e. It was co-designed with input from \u003ca href=\"/author/camille-santistevan/\"\u003eCamille Santistevan\u003c/a\u003e and \u003ca href=\"/author/lou-woodley/\"\u003eLou Woodley\u003c/a\u003e at the Center for Scientific Collaboration and Community Engagement \u003ca href=\"https://www.cscce.org/\"\u003eCSCCE\u003c/a\u003e, who contributed to the rubric discussed in this blog post. \u003ca href=\"/author/francisco-cardozo/\"\u003eFrancisco Cardozo\u003c/a\u003e led the analysis of the robustness of the application review process.\u003c/p\u003e\u003ch2 id=\"further-reading\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#further-reading\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFurther reading\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/tags/champions-program/\"\u003eGeneral Blog Posts related to the Champions Program\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/champions/\"\u003eChampions Program\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/blog/2024/03/20/champions-program-projects-cohort1/\"\u003erOpenSci Champions Pilot Year: Projects Wrap-Up\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/blog/2023/12/19/champions-program-2023-experience/\"\u003e2023 rOpensci Champions Program: My Experience\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://zenodo.org/records/5275270\"\u003eCSCCE guidebook describing the role of community champions\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eThe rubric is designed to be flexible and adaptable to the specific needs of the program. We may adjust the scoring options based on the agreement analysis to enhance clarity and agreement.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eCohen\u0026rsquo;s Kappa is a tool used to measure how much two raters agree on categorizing items. Unlike simply looking at how often they agree, Kappa also considers the chance that they might agree just by guessing. Initially, we found the agreement rate to be 0.48. However, after making adjustments to how we score, the agreement rate improved to 0.53. This suggests that the raters are more in sync than before. Kappa values can range from 0, meaning there\u0026rsquo;s no real agreement other than what might happen by random chance, to 1, indicating perfect agreement. In our case, a Kappa of 0.53 shows that our raters agree to a satisfactory extent.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2024/04/18/champions-program-2024/","date_published":"2024-04-18T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/ze2fs-pmq27","title":"R-Universe Documentation Gets a Boost from Google Season of Docs","language":"en","authors":[{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["r-universe","documentation","funding"],"content_html":"\u003cp\u003eWe are excited to announce that \u003ca href=\"https://r-universe.dev/\"\u003eR-Universe\u003c/a\u003e has been awarded a \u003ca href=\"https://developers.google.com/season-of-docs\"\u003eGoogle Season of Docs\u003c/a\u003e grant. R-Universe is rOpenSci\u0026rsquo;s platform for testing, building, distributing, and discovering R packages, led by \u003ca href=\"/author/jeroen-ooms\"\u003eJeroen Ooms\u003c/a\u003e. It provides no-setup continuous integration, compilation for all platforms (including WebR!), accessible HTML R package manuals, a comprehensive API, and the ability for users or organizations to create their own \u0026ldquo;universes\u0026rdquo; - package repositories with their standards, participation and publishing criteria. R-Universe seamlessly incorporates packages from CRAN and Bioconductor: tracks, builds, and tests over 24,000 packages by 12,000 maintainers and 21,000 contributors, with over 600 custom package registries so far.\u003c/p\u003e\u003cp\u003eWith the support of Google, we aim to update and centralize our documentation, showcasing how users and developers can get the most out of R-Universe. We will update the documentation to catch up with the rapid feature development of the past two years, including consolidating our many tech notes and READMEs into an easily discoverable site. We will build the site with Quarto to make it straightforward for R community members to contribute.\u003c/p\u003e\u003cp\u003eThe work will be led by \u003ca href=\"/author/ma%C3%ABlle-salmon\"\u003eMaëlle Salmon\u003c/a\u003e, who also maintains \u003ca href=\"https://devguide.ropensci.org/\"\u003erOpenSci\u0026rsquo;s Developer Guide\u003c/a\u003e, and is the author of many other resources such as the \u003ca href=\"https://docs.r-hub.io/\"\u003eR-hub documentation website and blog\u003c/a\u003e and the \u003ca href=\"https://guide.rladies.org/\"\u003eR-Ladies Organizational Guide\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eYou can read more about the project in our \u003ca href=\"https://github.com/r-universe-org/gsod-2024/wiki/GSOD-2024-proposal:-Documenting-R-software-publication-with-R%E2%80%90universe\"\u003eproposal\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe are grateful to Google for supporting this project and the opportunity to make R-Universe more useful and accessible to the community of R developers and users.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/04/12/gsod-announcement/","date_published":"2024-04-12T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/vwqyn-bex04","title":"From the Founding Director: My Farewell to rOpenSci","language":"en","authors":[{"name":"Karthik Ram","url":"https://ropensci.org/author/karthik-ram/","avatar":"https://ropensci.org/img/team/karthik-ram.png","_role":["author"]}],"tags":["transitions","leadership"],"content_html":"\u003cp\u003eDear rOpenSci community,\u003c/p\u003e\u003cp\u003eThis is a bit of a bittersweet announcement\u0026hellip; After nearly 13 years, it\u0026rsquo;s time for me to step down as the Executive Director of rOpenSci.\u003c/p\u003e\u003cp\u003eIn the summer of 2011 I co-founded rOpenSci alongside a group of dedicated colleagues. What began as a casual collaboration among open science enthusiasts quickly evolved into something far more meaningful. We never imagined it would become the global initiative it is today, with a team spanning the world and impacting countless researchers.\u003c/p\u003e\u003cp\u003erOpenSci has become a major player in the open science and research software communities. We\u0026rsquo;ve built an ecosystem of tools that make research easier and bridge the gap between research and technology. We\u0026rsquo;ve been lucky to help many researchers not only with their research but also find fulfilling careers as software engineers. We initially focused our efforts on solving high-priority research needs, but this approach wasn\u0026rsquo;t sustainable in the long run. Around 2014, we shifted to a collaborative model, working directly with researchers to combine their domain expertise with our software development skills. This shift led to the creation of our flagship software peer-review service.  It also inspired other successful initiatives like the \u003ca href=\"https://www.theoj.org/\"\u003eOpen Journals\u003c/a\u003e, \u003ca href=\"https://www.pyopensci.org/\"\u003ePyOpenSci\u003c/a\u003e, and even influenced practices across various government agencies.\u003c/p\u003e\u003cp\u003eOur focus has grown over the years. We now offer a comprehensive software peer-review service, develop standards for statistical software packages, \u003ca href=\"https://r-lib.r-universe.dev/\"\u003emaintain community infrastructure\u003c/a\u003e, and work to amplify underrepresented voices in the developer community. Our \u003ca href=\"/tags/unconf/\"\u003eunconferences\u003c/a\u003e have sparked innovation, nurtured new organizations, and cultivated leadership within our field.\u003c/p\u003e\u003cp\u003eThe strength and resilience of our community are what truly make rOpenSci successful.  I\u0026rsquo;m confident knowing that Dr. Noam Ross, a valued member of our leadership team and lead of our software peer review, will be guiding the project as the acting director. His commitment and vision give me every confidence in a smooth transition and a vibrant future for rOpenSci.\u003c/p\u003e\u003cp\u003eI\u0026rsquo;m incredibly excited to see what the future holds for rOpenSci. There\u0026rsquo;s so much potential for groundbreaking advancements and partnerships. I can\u0026rsquo;t wait to see the continued impact of our collective efforts. I’ll continue to serve in an advisory capacity, supporting Noam and the team as they build new partnerships and guide rOpenSci’s future into its next chapter.\u003c/p\u003e\u003cp\u003eThank you for your support, collaboration, and inspiration throughout these years. Here\u0026rsquo;s to the next chapter of innovation and discovery in the rOpenSci community!\u003c/p\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/29/hello-from-our-new-executive-director/\"\u003e\u003cem\u003eRead a post from our incoming director, Noam Ross\u003c/em\u003e\u003c/a\u003e\u003c/p\u003e","url":"https://ropensci.org/blog/2024/03/29/from-the-founding-director-my-farewell-to-ropensci/","date_published":"2024-03-29T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/kb0wh-b1v31","title":"Hello from our New Executive Director!","language":"en","authors":[{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["author"]}],"tags":["transitions","leadership"],"content_html":"\u003cp\u003eI am pleased, excited, and humbled to announce that I am stepping into the role of Executive Director of rOpenSci starting April 1.\u003c/p\u003e\u003cp\u003eFirst, let me give my gratitude to our outgoing Executive Director and friend Karthik Ram for his leadership and mentorship running rOpenSci the past decade.  He’s been a steady hand and visionary that helped our community accomplish so much together in this time.  Thanks to him and the rest of \u003ca href=\"/about/#team\"\u003ethe team\u003c/a\u003e for entrusting me with this role.\u003c/p\u003e\u003cp\u003eI’ve had the pleasure of being an rOpenSci member for many years - as a volunteer, an editor for rOpenSci’s software peer-review since 2015, and director of the peer review program since 2019.  I’m \u003ca href=\"https://www.ecohealthalliance.org/personnel/dr-noam-ross\"\u003ea disease ecologist at an NGO\u003c/a\u003e, where I work every day with the tools for reproducible analysis the rOpenSci community creates.\u003c/p\u003e\u003cp\u003eI am deeply committed to rOpenSci’s values of open and reproducible research using shared data, of creating infrastructure and a welcoming, inclusive community that enables researchers and developers to support each other in doing impactful research and work for public good.\u003c/p\u003e\u003cp\u003eAs director I’m looking forward to working with our tremendous community of researchers, developers, reviewers, editors, mentors, Champions, and staff.  My goal is to strengthen the pillars of our work and expand them through new partnerships: bringing diverse new voices and talent into the open-source ecosystem, improving research software through peer review, building networks of mutual support among research software developers, and creating new infrastructure and tools at the frontier of reproducible practice.\u003c/p\u003e\u003cp\u003eI know this community will continue to do great things together, and I’m glad I get to be part of it!\u003c/p\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/29/from-the-founding-director-my-farewell-to-ropensci/\"\u003eRead founding director Karthik Ram’s goodbye message\u003c/a\u003e\u003c/p\u003e","url":"https://ropensci.org/blog/2024/03/29/hello-from-our-new-executive-director/","date_published":"2024-03-29T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/9ng7h-kke80","title":"rOpenSci News Digest, March 2024","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2024/03/29/ropensci-news-march-2024\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"leadership-changes-at-ropensci\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#leadership-changes-at-ropensci\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLeadership changes at rOpenSci\u003c/h3\u003e\u003cp\u003eAfter 13 years at the helm of rOpenSci, our founding executive director Karthik Ram is stepping down.Noam Ross, rOpenSci\u0026rsquo;s current lead for peer review, will be our new Executive Director.\u003cbr\u003eKarthik will remain a key advisor to rOpenSci.We thank him for his years of leadership and service to the community!\u003c/p\u003e\u003cp\u003eRead \u003ca href=\"/blog/2024/03/29/from-the-founding-director-my-farewell-to-ropensci/\"\u003eKarthik\u0026rsquo;s farewell post\u003c/a\u003e, and \u003ca href=\"/blog/2024/03/29/hello-from-our-new-executive-director/\"\u003eNoam\u0026rsquo;s post about his new role\u003c/a\u003e  on our blog\u003c/p\u003e\u003ch3 id=\"ropensci-dev-guide-090-multilingual-now-and-better\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-dev-guide-090-multilingual-now-and-better\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci Dev Guide 0.9.0: Multilingual Now! And Better\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;re delighted to announce we\u0026rsquo;ve released a new version of our guide,\u003ca href=\"https://devguide.ropensci.org/\"\u003e\u0026ldquo;rOpenSci Packages: Development, Maintenance, and Peer Review\u0026rdquo;\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eA highlight is that our guide is now bilingual (English and \u003ca href=\"https://devguide.ropensci.org/es/index.es.html\"\u003eSpanish\u003c/a\u003e), thanks to work by \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e, \u003ca href=\"/author/elio-campitelli/\"\u003eElio Campitelli\u003c/a\u003e and \u003ca href=\"/author/pao-corrales/\"\u003ePao Corrales\u003c/a\u003e, and thanks to \u003ca href=\"/blog/2023/01/12/multilingual-publishing-en/\"\u003esupport of the Chan Zuckerberg Initiative, NumFOCUS, and the R Consortium\u003c/a\u003e.\u003ca href=\"https://devguide.ropensci.org/es/index.es.html\"\u003eRead the guide in Spanish\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eOur guide is now also getting translated to \u003ca href=\"/blog/2023/10/20/news-october-2023/#help-us-translate-our-dev-guide-to-portuguese\"\u003ePortuguese\u003c/a\u003e thanks to volunteers.We are very grateful for their work!\u003c/p\u003e\u003cp\u003eRead more in the \u003ca href=\"/blog/2024/03/11/devguide-0.9.0/\"\u003eblog post about the release\u003c/a\u003e.Thanks to all contributors who made this release possible.\u003c/p\u003e\u003ch3 id=\"interview-with-code-for-thought-podcast\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#interview-with-code-for-thought-podcast\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eInterview with Code for Thought podcast\u003c/h3\u003e\u003cp\u003eOur community manager, Yanina Bellini Saibene, talked with Peter Schmidt of the \u003ca href=\"https://codeforthought.buzzsprout.com/1326658/14660478-en-crossing-the-language-barrier-yanina-saibene\"\u003eCode for Thought podcast\u003c/a\u003e, about the importance of making computing materials accessible to non-English speaking learners.Listen to the \u003ca href=\"https://codeforthought.buzzsprout.com/1326658/14660478-en-crossing-the-language-barrier-yanina-saibene\"\u003eepisode\u003c/a\u003e.Find our more about \u003ca href=\"/multilingual-publishing/\"\u003erOpenSci multilingual publishing project\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-04\"\u003eTuesday, April 2nd, 14:00 Europe Central (13:00 UTC)\u003c/a\u003e, Sharing your work with Quarto. With cohost \u003ca href=\"/author/pao-corrales\"\u003ePao Corrales\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore the Quarto documentation and examples\u003c/li\u003e\u003cli\u003eUse Quarto to share some of your code\u003c/li\u003e\u003cli\u003eAsk questions or troubleshoot your Quarto problems with the cohost and other attendees.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-05\"\u003eTuesday, May 7th, 09:00 Americas Pacific (16:00 UTC)\u003c/a\u003e, Meet rOpenSci\u0026rsquo;s new Executive Director! With cohost \u003ca href=\"/author/noam-ross\"\u003eNoam Ross\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eLearn more about rOpenSci!\u003c/li\u003e\u003cli\u003eExplore rOpenSci \u003ca href=\"/packages\"\u003epackages\u003c/a\u003e and \u003ca href=\"https://contributing.ropensci.org/\"\u003econtributing guide\u003c/a\u003e\u003c/li\u003e\u003cli\u003eAsk questions or chat about rOpensci with Noam and other attendees.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following three packages recently became a part of our software suite, or were recently reviewed again:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/nuts\"\u003enuts\u003c/a\u003e, developed by Moritz Hennicke together with Werner Krause: Motivated by changing administrative boundaries over time, the nuts package can convert European regional data with NUTS codes between versions (2006, 2010, 2013, 2016 and 2021) and levels (NUTS 1, NUTS 2 and NUTS 3). The package uses spatial interpolation as in Lam (1983) \u003ca href=\"doi:10.1559/152304083783914958\"\u003edoi:10.1559/152304083783914958\u003c/a\u003e based on granular (100m x 100m) area, population and land use data provided by the European Commission\u0026rsquo;s Joint Research Center.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=nuts\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/623\"\u003ereviewed\u003c/a\u003e by Pueyo-Ros Josep and Le Meur Nolwenn.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/quadkeyr\"\u003equadkeyr\u003c/a\u003e, developed by Florencia D\u0026rsquo;Andrea together with Pilar Fernandez: Quadkeyr functions generate raster images based on QuadKey-identified data, facilitating efficient integration of Tile Maps data into R workflows. In particular, Quadkeyr provides support to process and analyze Facebook mobility datasets within the R environment. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/619\"\u003ereviewed\u003c/a\u003e by Maria Paula Caldas and Vincent van Hees.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/weatherOz\"\u003eweatherOz\u003c/a\u003e, developed by Rodrigo Pires together with Anna Hepworth, Rebecca O\u0026rsquo;Leary, Jonathan Carroll, James Goldie, Dean Marchiori, Paul Melloy, Mark Padgham, Hugh Parsonage, Keith Pembleton, and Adam H. Sparks: Provides automated downloading, parsing and formatting of weather data for Australia through API endpoints provided by the Department of Primary Industries and Regional Development (DPIRD) of Western Australia and by the Science and Technology Division of the Queensland Governments Department of Environment and Science (DES). As well as the Bureau of Meteorology (BOM) of the Australian government precis and coastal forecasts, agriculture bulletin data, and downloading and importing radar and satellite imagery files. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/598\"\u003ereviewed\u003c/a\u003e by Laurens Geffert and Sam Rogers.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following nineteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/frictionless\" title=\"Read and Write Frictionless Data Packages\"\u003efrictionless\u003c/a\u003e (\u003ca href=\"https://github.com/frictionlessdata/frictionless-r/releases/tag/v1.0.3\"\u003e\u003ccode\u003ev1.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/aRxiv\" title=\"Interface to the arXiv API\"\u003eaRxiv\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/aRxiv/releases/tag/0.10\"\u003e\u003ccode\u003e0.10\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (cff) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/chromer\" title=\"Interface to Chromosome Counts Database API\"\u003echromer\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/chromer/releases/tag/v0.8\"\u003e\u003ccode\u003ev0.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/drake\" title=\"A Pipeline Toolkit for Reproducible Computation at Scale\"\u003edrake\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/drake/releases/tag/7.13.9\"\u003e\u003ccode\u003e7.13.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/GSODR\" title=\"Global Surface Summary of the Day (GSOD) Weather Data Client\"\u003eGSODR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/GSODR/releases/tag/v4.0.0\"\u003e\u003ccode\u003ev4.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lightr\" title=\"Read Spectrometric Data and Metadata\"\u003elightr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lightr/releases/tag/v1.7.1\"\u003e\u003ccode\u003ev1.7.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lingtypology\" title=\"Linguistic Typology and Mapping\"\u003elingtypology\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lingtypology/releases/tag/v1.1.17\"\u003e\u003ccode\u003ev1.1.17\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/magick\" title=\"Advanced Graphics and Image-Processing in R\"\u003emagick\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/magick/releases/tag/2.8.3\"\u003e\u003ccode\u003e2.8.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/melt\" title=\"Multiple Empirical Likelihood Tests\"\u003emelt\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/melt/releases/tag/v1.11.2\"\u003e\u003ccode\u003ev1.11.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.10.4\"\u003e\u003ccode\u003ev0.10.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nuts\" title=\"Convert European Regional Data\"\u003enuts\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nuts/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/paleobioDB\" title=\"Download and Process Data from the Paleobiology Database\"\u003epaleobioDB\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/paleobioDB/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/quadkeyr\" title=\"Tools for converting QuadKey-identified datasets (Microsoft's Bing Maps Tile System) into raster images and analyzing Meta (Facebook) Mobility Data.\"\u003equadkeyr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/quadkeyr/releases/tag/v0.1.0\"\u003e\u003ccode\u003ev0.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rtweet\" title=\"Collecting Twitter Data\"\u003ertweet\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rtweet/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ruODK\" title=\"An R Client for the ODK Central API\"\u003eruODK\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ruODK/releases/tag/v1.4.2\"\u003e\u003ccode\u003ev1.4.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spocc\" title=\"Interface to Species Occurrence Data Sources\"\u003espocc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spocc/releases/tag/v1.2.3\"\u003e\u003ccode\u003ev1.2.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.8.0\"\u003e\u003ccode\u003e0.8.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.6.0\"\u003e\u003ccode\u003e1.6.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are thirteen recently closed and active submissions and 6 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/623\"\u003enuts\u003c/a\u003e, nuts: Convert European Regional Data. Submitted by \u003ca href=\"https://hennicke.science/\"\u003eMoritz Hennicke\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/619\"\u003equadkeyr\u003c/a\u003e, Tools for converting QuadKeys used in Microsoft\u0026rsquo;s Bing Maps Tile System into raster images. Submitted by \u003ca href=\"https://github.com/flor14\"\u003eFlorencia D\u0026rsquo;Andrea\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/609\"\u003ebaRulho\u003c/a\u003e, Quantifying (Animal) Sound Degradation. Submitted by \u003ca href=\"https://marce10.github.io/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003emregions2\u003c/a\u003e, Access Data from Marineregions.org: The Marine Regions Gazetteer and the Marine Regions Data Products. Submitted by \u003ca href=\"https://salvafern.github.io/\"\u003esalvafern\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/625\"\u003erix\u003c/a\u003e, Rix: Reproducible Environments with Nix. Submitted by \u003ca href=\"https://brodrigues.co\"\u003eBruno Rodrigues\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/618\"\u003efellingdateR\u003c/a\u003e, Estimate, report and combine felling dates of historical tree-ring. Submitted by \u003ca href=\"https://www.researchgate.net/profile/Kristof_Haneca\"\u003eKriHa\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/608\"\u003ergeeExtra\u003c/a\u003e, Extensions for rgee. Submitted by \u003ca href=\"https://csaybar.github.io\"\u003eCesar Aybar\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"https://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/627\"\u003edendroNetwork\u003c/a\u003e, Create networks of dendrochronological series using pairwise similarity. Submitted by \u003ca href=\"https://akademienl.social/@RonaldVisser\"\u003eRonaldVisser\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/620\"\u003ekarel\u003c/a\u003e, Learning programming with Karel the robot. Submitted by \u003ca href=\"https://unr.edu.ar/\"\u003eMarcos Prunello\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/612\"\u003erOPTRAM\u003c/a\u003e, Derive soil moisture using the OPTRAM algorithm. Submitted by \u003ca href=\"https://github.com/micha-silver\"\u003eMicha Silver\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/626\"\u003egigs\u003c/a\u003e, Assess Fetal, Newborn, and Child Growth with International Standards. Submitted by \u003ca href=\"https://github.com/simpar1471\"\u003eSimon Parker\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/11/devguide-0.9.0\"\u003erOpenSci Dev Guide 0.9.0: Multilingual Now! And Better\u003c/a\u003e by Maëlle Salmon, Mark Padgham, and Noam Ross. Updates in version 0.9.0 of the online book \u0026lsquo;rOpenSci Packages: Development, Maintenance, and Peer Review\u0026rsquo;. Other languages: \u003ca href='/es/blog/2024/03/11/r_open_sci_dev_guide_0_9_0_ahora_multilingüe_y_mejor' lang='es'\u003erOpenSci Dev Guide 0.9.0: ¡Ahora multilingüe! Y mejor (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/04/conduct2023\"\u003erOpenSci Code of Conduct Annual Review\u003c/a\u003e by Yanina Bellini Saibene, Mark Padgham, Kara Woo, and Natalia Morandeira. Updates for version 2.5 of rOpenSci\u0026rsquo;s Code of Conduct.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/07/package-marketing\"\u003eMarketing Ideas For Your Package\u003c/a\u003e by Yanina Bellini Saibene and Maëlle Salmon. Now that you have created your package, presenting it to the world is a crucial step to gain visibility and attract users. In this blog post we suggest a series of activities and tools for advertizing your package. This post was discussed on the \u003ca href=\"https://rweekly.fireside.fm/156\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/20/champions-program-projects-cohort1\"\u003erOpenSci Champions Pilot Year: Projects Wrap-Up\u003c/a\u003e by Yanina Bellini Saibene. Our first cohort of Champions complete the program. In this blog post, we share each champions projects, their achievements and outreach activities.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/29/from-the-founding-director-my-farewell-to-ropensci\"\u003eFrom the Founding Director: My Farewell to rOpenSci\u003c/a\u003e by Karthik Ram. Karthik Ram steps down as Executive Director after 13 years. Other languages: \u003ca href='/es/blog/2024/03/29/from-the-founding-director-my-farewell-to-ropensci' lang='es'\u003eDel Director Fundador: Mi despedida de rOpenSci (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/29/hello-from-our-new-executive-director\"\u003eHello from our New Executive Director!\u003c/a\u003e by Noam Ross. Noam Ross takes the helm as rOpenSci\u0026rsquo;s new Executive Director. Other languages: \u003ca href='/es/blog/2024/03/29/hello-from-our-new-executive-director' lang='es'\u003eHola de nuestro nuevo Director Ejecutivo (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/22/beautiful-code\"\u003eBeautiful Code, Because We’re Worth It!\u003c/a\u003e by Maëlle Salmon and Yanina Bellini Saibene. This post was featured in the \u003ca href=\"https://rweekly.fireside.fm/154?t=1338\"\u003eR Weekly Highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/27/assertr-call-help\"\u003eHelp make assertr better! Come close issues\u003c/a\u003e by Tony Fischetti and Maëlle Salmon.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/29/targets-call-help\"\u003eHelp users and developers of targets by answering questions!\u003c/a\u003e by Will Landau and Maëlle Salmon.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/01/qualtrics-call-help\"\u003eHelp make qualtRics better! Code contributions wanted\u003c/a\u003e by Julia Silge, Joseph O\u0026rsquo;Brien, and Maëlle Salmon.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/18/dry-damp\"\u003eAn Example of the DRY/DAMP Principles for Package Tests\u003c/a\u003e by Maëlle Salmon.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/internetarchive/\"\u003einternetarchive\u003c/a\u003e, an API Client for the Internet Archive. \u003ca href=\"https://github.com/ropensci/internetarchive/issues/17\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/textreuse/\"\u003etextreuse\u003c/a\u003e, detect text reuse and document similarity. \u003ca href=\"https://github.com/ropensci/textreuse/issues/97\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/03/01/qualtrics-call-help/\"\u003eHelp make qualtRics better! Code contributions wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/27/assertr-call-help/\"\u003eHelp make assertr better! Come close issues\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/29/targets-call-help/\"\u003eHelp users and developers of targets by answering questions!\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/19/waywiser-call-help/\"\u003eHelp make waywiser better! User requests wanted\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAlso refer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"reminder-r-consortium-infrastructure-steering-committee-isc-grant-program-accepting-proposals-until-april-1st\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#reminder-r-consortium-infrastructure-steering-committee-isc-grant-program-accepting-proposals-until-april-1st\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReminder: R Consortium Infrastructure Steering Committee (ISC) Grant Program Accepting Proposals until April 1st!\u003c/h3\u003e\u003cp\u003eThe R Consortium Call for Proposal might be a relevant funding opportunity for your package!Find out more in their \u003ca href=\"https://www.r-consortium.org/blog/2024/02/08/r-consortium-infrastructure-steering-committee-isc-grant-program-accepting-proposals-starting-march-1st\"\u003epost\u003c/a\u003e.If you can\u0026rsquo;t prepare your proposal in time, the next call will start \u003ca href=\"https://www.r-consortium.org/all-projects/call-for-proposals\"\u003eSeptember 1st\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"examplesif-for-conditional-examples-in-package-manuals\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#examplesif-for-conditional-examples-in-package-manuals\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ccode\u003e@examplesIf\u003c/code\u003e for conditional examples in package manuals\u003c/h3\u003e\u003cp\u003eDo you know you can make some examples of your package manual conditional on, say, the session being interactive?The \u003ca href=\"https://roxygen2.r-lib.org/articles/rd.html?q=examplesIf#examples\"\u003e\u003ccode\u003e@examplesIf\u003c/code\u003e roxygen2 tag\u003c/a\u003e is really handy.What\u0026rsquo;s more, inside the examples of a single manual page, you can seamlessly mix and match \u003ccode\u003e@examples\u003c/code\u003e and \u003ccode\u003e@examplesIf\u003c/code\u003e pieces.\u003c/p\u003e\u003ch3 id=\"argument-2-is-missing-with-no-default\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#argument-2-is-missing-with-no-default\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u0026lsquo;argument \u0026ldquo;..2\u0026rdquo; is missing, with no default\u0026rsquo;\u003c/h3\u003e\u003cp\u003eMike Mahoney \u003ca href=\"https://fosstodon.org/@MikeMahoney218/112044613555056993\"\u003eposted an important PSA on Mastodon\u003c/a\u003e:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eif you\u0026rsquo;re getting a new error message \u0026lsquo;argument \u0026ldquo;..2\u0026rdquo; is missing, with no default\u0026rsquo; on #rstats 4.3.3, it\u0026rsquo;s likely because you have a trailing comma in a call to \u003ccode\u003eglue::glue()\u003c/code\u003eseeing this pop up in a few Slacks so figured I\u0026rsquo;d share\u003ca href=\"https://github.com/tidyverse/glue/issues/320\"\u003ehttps://github.com/tidyverse/glue/issues/320\u003c/a\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThanks, Mike!\u003c/p\u003e\u003ch3 id=\"useful-hack-a-cran-specific-rbuildignore\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#useful-hack-a-cran-specific-rbuildignore\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUseful hack: a CRAN-specific .Rbuildignore\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://blog.r-hub.io/2020/05/20/rbuildignore/\"\u003e\u003ccode\u003e.Rbuildignore\u003c/code\u003e file\u003c/a\u003e lists the files to not be included when building your package, such as your pkgdown configuration file.Trevor L. Davis posted a neat idea on \u003ca href=\"https://mastodon.social/deck/@trevorld@fosstodon.org/112012986709303927\"\u003eMastodon\u003c/a\u003e: using a CRAN-specific \u003ccode\u003e.Rbuildignore\u003c/code\u003e, so that CRAN submissions omit some tests and vignettes to keep the package under the size limit.\u003c/p\u003e\u003cp\u003eRegarding tests themselves, remember you can \u003ca href=\"https://books.ropensci.org/http-testing/cran-preparedness.html#skipping-a-few-tests-on-cran\"\u003eskip some or all\u003c/a\u003e on CRAN (but make sure you\u0026rsquo;re running them on \u003ca href=\"https://devguide.ropensci.org/pkg_ci.html\"\u003econtinuous integration\u003c/a\u003e!).\u003c/p\u003e\u003ch3 id=\"key-advantages-of-using-the-keyring-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#key-advantages-of-using-the-keyring-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eKey advantages of using the keyring package\u003c/h3\u003e\u003cp\u003eIf your package needs the user to provide secrets, like API tokens, to work, you might be interested in wrapping or recommending the keyring package (maintained by Gábor Csárdi), that accesses the system credential store from R.See this recent \u003ca href=\"https://blog.r-hub.io/2024/02/28/key-advantages-of-using-keyring/\"\u003eR-hub blog post\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"a-package-for-linting-roxygen2-documentation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-package-for-linting-roxygen2-documentation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA package for linting roxygen2 documentation\u003c/h3\u003e\u003cp\u003eThe compelling \u003ca href=\"https://openpharma.github.io/roxylint/\"\u003eroxylint package\u003c/a\u003e by Doug Kelkhoff allows you to check some aspects of your roxygen2 docs, such as the use of full stops and sentence case.See the \u003ca href=\"https://openpharma.github.io/roxylint/reference/linters.html#functions\"\u003elist of current rules\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/03/29/ropensci-news-march-2024/","date_published":"2024-03-29T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/268cb-p0021","title":"rOpenSci Champions Pilot Year: Projects Wrap-Up","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","champions program"],"content_html":"\u003cp\u003eOur first cohort of the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e has now completed the second phase of the program by developing their project and carrying out outreach activities. In this article, we share each Champion\u0026rsquo;s project, their achievements and their outreach activities.\u003c/p\u003e\u003ch2 id=\"champions-projects\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#champions-projects\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChampions\u0026rsquo; Projects\u003c/h2\u003e\u003cp\u003eIn their applications Champions choose to develop a new package or to participate in the review process as authors or reviewers.\u003c/p\u003e\u003ch3 id=\"projects-related-to-ropensci-software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#projects-related-to-ropensci-software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eProjects related to rOpenSci Software Peer Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eCarolina Pradier\u003c/strong\u003e from Argentina worked on the \u003ca href=\"https://docs.ropensci.org/eph/\"\u003eeph\u003c/a\u003e package, which facilitated working with data from the Permanent Household Survey - INDEC, Argentina. Carolina added functionality to the package, reduced the number of dependencies, improved error messages and increased test coverage before submitting the package for review. After peer review in Spanish, her package is now part of the rOpenSci suite and was published on CRAN. Her mentor was \u003ca href=\"/author/athanasia-mo-mowinckel/\"\u003eAthanasia Mo Mowinckel\u003c/a\u003e from Norway.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eVictor Ordu,\u003c/strong\u003e from Nigeria, worked on the \u003ca href=\"https://docs.ropensci.org/naijR/\"\u003enaijR\u003c/a\u003e package, which contains a suite of functions which make it easier to deal with data and datasets related to Nigeria and its constituent parts. Victor worked on improving error messaging and replacing dependencies for spatial packages. After peer review, his package became part of the rOpenSci suite and was published on CRAN. His mentor was \u003ca href=\"/author/laura-decicco/\"\u003eLaura DeCicco\u003c/a\u003e from the US.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eAlican Cagri Gokcek\u003c/strong\u003e from Turkey \u003ca href=\"https://github.com/ropensci/software-review/issues/600\"\u003ereviewed Victor’s package\u003c/a\u003e. As a blind developer, in his review Cagri focused on the accessibility of the visualizations the package created. His mentor was \u003ca href=\"/author/elio-campitelli/\"\u003eElio Campitelli\u003c/a\u003e from Argentina.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eCesar Aybar\u003c/strong\u003e from Peru, developed the \u003ca href=\"https://github.com/r-earthengine/rgeeExtra\"\u003ergeeExtra\u003c/a\u003e package that extends the functionality of rgee, a package for accessing the Google Earth Engine API. rgeeExtra was designed to modify rgee\u0026rsquo;s accessing and processing of remote sensing spatial data to have a more friendly syntax for R users. Cesar worked on adding functionality, changing the syntax of the package, improving test coverage and error messages, and replaced spatial dependencies. His package is \u003ca href=\"https://github.com/ropensci/software-review/issues/608\"\u003eunder review\u003c/a\u003e. His mentor was \u003ca href=\"/author/marc-choisy/\"\u003eMarc Choisy\u003c/a\u003e from Vietnam.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003ePaola Corrales\u003c/strong\u003e from Argentina, developed the \u003ca href=\"https://github.com/AgRoMeteorologiaINTA/agroclimatico\"\u003eagroclimatico package\u003c/a\u003e which calculates climatic and hydrological indices and statistics from sorted data, including a function to plot geo-referenced results and cartographic information. Paola replaced dependencies, improved error messages, and increased test coverage. She had to make difficult decisions, such as changing the package’s name and some of the functions to avoid confusion with other existing packages. agroclimatico is \u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eunder review in Spanish\u003c/a\u003e. Her mentor was \u003ca href=\"/author/adam-sparks/\"\u003eAdam Sparks\u003c/a\u003e from Australia.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eMarcos Prunello\u003c/strong\u003e from Argentina, worked on his package \u003ca href=\"https://mpru.github.io/karel/\"\u003ekarel\u003c/a\u003e, which implements Karel the robot in R. By writing programs to help Karel complete tasks, users learn introductory concepts about programming in an interactive and fun way. Marcos worked on improving error messages and developed infrastructure that allow the package to provides functions, arguments, messages, and documentation in both English and Spanish. The multilingual solution enables additional languages to be added. The package \u003ca href=\"https://github.com/ropensci/software-review/issues/620\"\u003eis under review\u003c/a\u003e, being the first to have a \u003cstrong\u003ebilingual review\u003c/strong\u003e! His mentor was \u003ca href=\"/author/lukas-wallrich/\"\u003eLukas Wallrich\u003c/a\u003e from the UK.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"projects-developing-new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#projects-developing-new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eProjects developing new packages\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eHaydée Svab\u003c/strong\u003e, from Brazil, developed a new package called \u003ca href=\"https://cran.r-project.org/web/packages/odbr/index.html\"\u003eodbr\u003c/a\u003e that helps with accessing and processing data from the Brazilian origin and destination (od) surveys and implements many of the algorithms that Haydée developed for her master\u0026rsquo;s thesis. She had the goal to publish the package on CRAN, and after several attempts, and with the support of her mentor, \u003ca href=\"/author/beatriz-milz/\"\u003eBeatriz Milz\u003c/a\u003e from Brazil, the package was \u003ca href=\"https://cran.r-project.org/web/packages/odbr/index.html\"\u003epublished\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eBilikisu Wunmi Olatunji\u003c/strong\u003e from Nigeria, developed the new package \u003ca href=\"https://github.com/BWOlatunji/chartkickR\"\u003echartkickR\u003c/a\u003e. The package is an htmlwidget that seamlessly integrates with the Chartkick JavaScript library. It provides R users with a straightforward interface to generate beautiful and interactive charts using R code. The package provides ten types of plots that you can produce with very few lines of code. \u003ca href=\"/blog/2023/12/19/champions-program-2023-experience/\"\u003eYou can read more in Bilikisu\u0026rsquo;s blog post\u003c/a\u003e. Her mentor was \u003ca href=\"/author/christina-maimone/\"\u003eChristina Maimone\u003c/a\u003e from the US.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eGhozayel Elotteebi\u003c/strong\u003e from Saudi Arabia, worked on a new package called \u003ca href=\"https://ghozayel.github.io/Lextale/\"\u003eLextale\u003c/a\u003e. To Ghozayel\u0026rsquo;s knowledge, this is the first R package in the field of linguistics developed in Saudi Arabia and would be the first local contribution to rOpenSci. She is working on polishing the package functionality in order to send it through the review process. Her mentor was \u003ca href=\"/author/zebulun-arendsee/\"\u003eZebulun Arendsee\u003c/a\u003e from the US.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"outreach-activities\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#outreach-activities\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOutreach Activities\u003c/h2\u003e\u003cp\u003eOur Champions carried out a wide range of outreach activities like talks, conference papers, workshops, blog articles, community calls and meetups. The objective of these activities was to share what they did and learned during the program with their communities beyond rOpenSci.\u003c/p\u003e\u003cp\u003eOutreach activities were carried out from May 2023 to December 2023 involving local communities (universities, RUGs, R-Ladies Chapters, conferences, and organizations) and delivered in Champions’ native language (English, Spanish, and Portuguese).\u003c/p\u003e\u003ch3 id=\"workshops\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#workshops\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWorkshops\u003c/h3\u003e\u003cp\u003ePaola Corrales developed and delivered an online workshop for non-selected applicants on \u003ca href=\"https://paocorrales.github.io/git-developing-software-together/\"\u003eGit and GitHub\u003c/a\u003e already giving back to the program. She will also teach this workshop for the second cohort.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/03/20/champions-program-projects-cohort1/pao-git-github.png\"\t\t\talt=\"Paola Corrales sharing a slide about the git workshop\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003ePaola Corrales teaching Git for the Champions Program\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMarcos Prunello developed a workshop on \u003ca href=\"https://mpru.github.io/charla_renrosario_2023/crear_paq_multiling.html\"\u003ehow to create R packages and make them multilingual\u003c/a\u003e in Spanish for an in-person meetup hosted with the National University of Rosario (Argentina) and RenRosario R User Group, reactivating the activities of this local community after a hiatus during the pandemic.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/03/20/champions-program-projects-cohort1/RenRosario.jpeg\"\t\t\talt=\"Marcos Prunello and the attendees to his workshop on multilingual packages\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eAttendees to Marcos Prunello\u0026rsquo;s workshop on Multilingual Packages\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eBilikisu Wunmi Olatunji delivered a workshop on \u003cem\u003eWorking with JavaScript in R\u003c/em\u003e for the R-Ladies Abuja chapter. She learned about this topic for the development of her package for the Champions Program.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2024/03/20/champions-program-projects-cohort1/r-ladies-abuja-meetup.jpeg\"\t\t\talt=\"Workshop flyer for the Abuja R-Ladies Chapter featuring Bilikisu\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eR-Ladies Abuja flyer for the Workshop Working with JavaScript in R\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch3 id=\"community-calls-and-coworking-sessions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-calls-and-coworking-sessions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity Calls and Coworking sessions\u003c/h3\u003e\u003cp\u003eCarolina Pradier, Victor Ordu, Paola Corrales, Haydée Svab (Champions), Beatriz Milz, Elio Campitelli, and Adam Spark (mentors) participated in \u003ca href=\"/commcalls/july2023-championprogram/\"\u003eCommunity Calls\u003c/a\u003e and \u003ca href=\"/coworking/\"\u003eCoworking sessions \u003c/a\u003e for the Champions Program. They shared their experience, their work, and tips for applying to the program. They also spoke with and joined the community manager in talks with local groups about the program to encourage other people to participate.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2024/03/20/champions-program-projects-cohort1/comm_call.png\"\t\t\talt=\"Community Call Speaker details. A head shoot of Beatriz, Carolina and Victor and a short bio about each of them.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eCarolina, Victor and Beatriz as speaker of the community call about the champions program.\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eCarolina Pradier also organized \u003ca href=\"https://vimeo.com/899372049\"\u003ean online event in Spanish\u003c/a\u003e for the community of users and developers of her package eph. In this event Carolina updated the community about all the improvements she made to the package through the Champions Program and three panelists explained how they use the package.\u003c/p\u003e\u003ch3 id=\"talks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#talks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTalks\u003c/h3\u003e\u003cp\u003eOur Champions are part of other communities like R-Ladies, LatinR and local R User Groups, and organized several activities with these groups.\u003c/p\u003e\u003cp\u003eCesar Aybar delivered the talk \u003ca href=\"https://docs.google.com/presentation/d/1Ws2o5WwcRMcYd9YjKcfyLv5X4lOAwJztEU1sMRADTVk/edit#slide=id.p\"\u003e\u0026ldquo;Preparing remote sensing data for deep learning using r-spatial\u0026rdquo;\u003c/a\u003e for the Environmental Data Science Book.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/03/20/champions-program-projects-cohort1/cesar-talk.png\"\t\t\talt=\"Event flyer. Featuring Cesar\u0026#39;s headshot picture and his talk title Preparing remote sensing data for deep learning using r-spatial. May 8. 9:00-10:00 UTC\u0026#43;1 - Register on Eventbrite.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eCesar\u0026rsquo;s talk event flyer\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eAt a meetup with RenRosario RUG and the Universidad Nacional de Rosario, Marcos Prunello talked about \u003ca href=\"https://mpru.github.io/charla_renrosario_2023/presentacion_ropensci.html\"\u003erOpenSci\u003c/a\u003e and Carolina Pradier delivered a talk about her project \u003ca href=\"https://caropradier.github.io/slides_eph_ropensci/#1\"\u003ePaquete {eph}: Novedades e ideas para su uso\u003c/a\u003e.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/03/20/champions-program-projects-cohort1/flyers.png\"\t\t\talt=\"Events flyers in Spanish. First flyer shows a short bio about Marcos and information on the event venue in the Universidad Nacional de Rosario. Marcos\u0026#39; talk title Que es rOpenSci y como ser parte. Second flyer for the eph event featuring talks by Valentin, Vladimiro and Guido. \"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eRenRosario and eph event flyers in Spanish\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHaydée Svab and Beatriz Milz organized an in person event with R-Ladies Sao Paulo in portuguese \u003ca href=\"https://r-ladies-sao-paulo.github.io/2023-11-pacotes-br/\"\u003ePacotes em R de dados brasileiros\u003c/a\u003e where Haydée delivered a talk about the rOpenSci Champions Program and the odbr package she developed as her project in the program. The event also highlighted others women developers from Brazil. This blog post (in \u003ca href=\"https://rladies-sp.org/posts/2023-12-evento-pacotes/\"\u003ePortuguese\u003c/a\u003e and \u003ca href=\"https://rladies-sp.org/posts/2023-12-evento-pacotes/english.html\"\u003eEnglish\u003c/a\u003e) summarizes the event and shares the slides of all the talks.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2024/03/20/champions-program-projects-cohort1/R-Ladies-SaoPaulo.jpg\"\t\t\talt=\"R-Ladies Sao Paulo attendees\u0026#39; group photo. The group is around 30 people smiling. Haydée is wearing an R-Ladies T-shirt\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eR-Ladies Sao Paulo event group photo\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eAll the Latin American participants of the program \u003ca href=\"/es/blog/2024/01/09/champions-program-latinr/\"\u003ewrote a summary of their experiences in the program\u003c/a\u003e which was accepted at LatinR (2023 at the Universidad de La Republica, Uruguay) and \u003ca href=\"https://hsvab.github.io/latinr2023-championsprogram/#/\"\u003epresented in Portugese by Haydée Svab\u003c/a\u003e representing all the authors.\u003c/p\u003e\u003cp\u003eAll our champions and mentors wrote blog posts for the rOpenSci webpage (\u003ca href=\"/tags/champions-program/\"\u003eEnglish\u003c/a\u003e, \u003ca href=\"/es/tags/champions-program/\"\u003eSpanish\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"champions-accomplishments-and-next-steps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#champions-accomplishments-and-next-steps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChampions\u0026rsquo; accomplishments and next steps\u003c/h2\u003e\u003cp\u003eOur Champions have been very successful in the delivery of their projects, building high quality software with a focus on their countries and discipline. The impact of their work also spread to their home institutions and related local communities. Not only through their outreach activities sharing information and knowledge contextualized for their audience, but also through their researching and developing solutions to common barriers to participation such as language.\u003c/p\u003e\u003cp\u003eMany of our Champions will continue engage with rOpenSci, and even have already planned activities for 2024. Stay tuned to learn about them!\u003c/p\u003e\u003ch2 id=\"acknowledgements\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#acknowledgements\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAcknowledgements\u003c/h2\u003e\u003cp\u003eWe want to thank the \u003ca href=\"https://www.cscce.org/\"\u003eCSCCE\u003c/a\u003e team, especially \u003cem\u003eLou Woodley\u003c/em\u003e, \u003cem\u003eCamille Santistevan\u003c/em\u003e, and \u003cem\u003eMaya Sanghvi\u003c/em\u003e, for their support in designing the overall program.\u003c/p\u003e\u003cp\u003eThe rOpenSci Champions Program is funded by \u003ca href=\"https://chanzuckerberg.com/\"\u003eThe Chan Zuckerberg Initiative\u003c/a\u003e. This phase of the Champions Program was made possible by the work and feedback of many people.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/03/20/champions-program-projects-cohort1/","date_published":"2024-03-20T00:00:00+00:00","date_modified":"2025-04-08T11:17:46+02:00"},{"id":"https://doi.org/10.59350/yt047-xf054","title":"An Example of the DRY/DAMP Principles for Package Tests","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]}],"tags":["tech notes","package development","champions program","how-to","testing"],"content_html":"\u003cp\u003erOpenSci\u0026rsquo;s \u003ca href=\"/blog/2024/02/15/champions-program-champions-2024/\"\u003esecond cohort of Champions has been onboarded\u003c/a\u003e!Their training first started with a \u003ca href=\"/blog/2024/02/22/beautiful-code/\"\u003esession on code style\u003c/a\u003e, was followed by three sessions on the basics of R package development, and ended with a session on \u003ca href=\"https://rpkgdev-rocket-2024.netlify.app/\"\u003eadvanced R package development\u003c/a\u003e, which consisted of a potpourri of tips with discussion, followed by time for applying these principles to the participants\u0026rsquo; packages.Here, I want to share one of the topics covered: Package testing, and in particular, the DRY (\u0026ldquo;don\u0026rsquo;t repeat yourself\u0026rdquo;) and DAMP (\u0026ldquo;descriptive and meaningful phrases\u0026rdquo;) principles.For this topic, we used a \u003ca href=\"https://github.com/maelle/swamp\"\u003eGitHub repository\u003c/a\u003e, containing an R package whose different commits illustrate the two principles. In each step we\u0026rsquo;ll share a commit or diff illustrating the changes made.\u003c/p\u003e\u003ch2 id=\"stage-1-muddy\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#stage-1-muddy\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStage 1: muddy!\u003c/h2\u003e\u003cp\u003eFirst commit: Set up our test files, \u003ca href=\"https://github.com/maelle/swamp/blob/c67cc053cafb2cc5f5125cbc745b2f392a84e3df/tests/testthat/test-works.R\"\u003etest-works.R\u003c/a\u003e and \u003ca href=\"https://github.com/maelle/swamp/blob/c67cc053cafb2cc5f5125cbc745b2f392a84e3df/tests/testthat/test-ok.R\"\u003etest-ok.R\u003c/a\u003e\u003c/p\u003e\u003cp\u003eThese initial test files both define an object called \u003ccode\u003etest_object\u003c/code\u003e at the top level, which is used in two tests in each file.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003etest-works.R\u003c/strong\u003e\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etest_object\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etest_that\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;multiplication works\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eexpect_equal\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etest_object[[\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;b\u0026#34;\u003c/span\u003e\u003cspan class=\"n\"\u003e]]\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etest_that\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;addition works\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eexpect_equal\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etest_object[[\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;a\u0026#34;\u003c/span\u003e\u003cspan class=\"n\"\u003e]]\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eand\u003c/p\u003e\u003cp\u003e\u003cstrong\u003etest-ok.R\u003c/strong\u003e\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etest_object\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etest_that\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;division works\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eexpect_equal\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etest_object[[\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;b\u0026#34;\u003c/span\u003e\u003cspan class=\"n\"\u003e]]\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etest_that\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;substraction works\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eexpect_equal\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etest_object[[\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;a\u0026#34;\u003c/span\u003e\u003cspan class=\"n\"\u003e]]\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eIt is not an optimal pattern because you can\u0026rsquo;t look at each \u003ccode\u003etest_that()\u003c/code\u003e test in isolation and quickly understand what is going on.In a very long test file you would even have to scroll up and down! \u0026#x1f631;Furthermore we are being repetitive by defining the same test object in two test files.\u003c/p\u003e\u003ch2 id=\"stage-2-dry\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#stage-2-dry\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStage 2: DRY!\u003c/h2\u003e\u003cp\u003eNext commit: \u003ca href=\"https://github.com/maelle/swamp/commit/381f244f56f1837207f2150a7e76c70bd59c0422\"\u003eDRY out these files\u003c/a\u003e\u003c/p\u003e\u003cp\u003eAt this stage we diligently remember about DRY, Don\u0026rsquo;t Repeat Yourself, and about the mechanics of \u003ca href=\"https://blog.r-hub.io/2020/11/18/testthat-utility-belt/\"\u003etestthat helper files\u003c/a\u003e:files whose names start with \u003ccode\u003ehelper-\u003c/code\u003e are loaded before all tests.\u003c/p\u003e\u003cp\u003eSo we create a helper file (\u003ccode\u003ehelper-swamp.R\u003c/code\u003e) within which \u003ccode\u003etest_object\u003c/code\u003e is defined and therefore available for tests!\u003c/p\u003e\u003cp\u003eIn \u003ccode\u003etests/testthat/helper-swamp.R\u003c/code\u003e,\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etest_object\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eIn the test files, we removed the first line that defined \u003ccode\u003etest_object\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eNow things aren\u0026rsquo;t perfect yet.When we look at any of the test files, we can\u0026rsquo;t really know what \u003ccode\u003etest_object\u003c/code\u003e is as its name is not \u0026ldquo;descriptive and meaningful\u0026rdquo;.\u003c/p\u003e\u003cp\u003eFurthermore we now have \u003ccode\u003etest_object\u003c/code\u003e which is \u003cem\u003ealways\u003c/em\u003e defined even if it isn\u0026rsquo;t used in a test.At best this is unnecessary and useless; at worst it could have unintended side-effects, particularly with more complex code! \u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e\u003c/p\u003e\u003ch2 id=\"stage-3-focus-on-damp\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#stage-3-focus-on-damp\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStage 3: Focus on DAMP\u003c/h2\u003e\u003cp\u003eThird commit: \u003ca href=\"https://github.com/maelle/swamp/commit/9cc08937e1cabf112955004212e1d0bccf2ccda4\"\u003eApply DAMP principals\u003c/a\u003e\u003c/p\u003e\u003cp\u003eIn the helper file, \u003ccode\u003etests/testthat/helper-swamp.R\u003c/code\u003e, we re-factor the code into a \u003cem\u003efunction\u003c/em\u003e with a more meaningful name (at least let\u0026rsquo;s pretend it is!).\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebasic_list\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ea\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eb\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNext, we call this function to define the object in all tests where it\u0026rsquo;s needed.Thus the test files become\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etest_that\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;division works\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etest_object\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ebasic_list\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eexpect_equal\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etest_object[[\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;b\u0026#34;\u003c/span\u003e\u003cspan class=\"n\"\u003e]]\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eand\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etest_that\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;substraction works\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etest_object\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ebasic_list\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eexpect_equal\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etest_object[[\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;a\u0026#34;\u003c/span\u003e\u003cspan class=\"n\"\u003e]]\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNow, while the actual definition of the basic list is not in all tests, we have a better idea of what\u0026rsquo;s going on when reading the test.\u003c/p\u003e\u003cp\u003eFurther, if the test were to fail, in the console we could run \u003ccode\u003edevtools::load_all()\u003c/code\u003e and run the code of the test, as \u003ccode\u003edevtools::load_all()\u003c/code\u003e loads testthat helper files so \u003ccode\u003ebasic_list()\u003c/code\u003e would be available.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eThe balance between DRY (\u0026ldquo;Don\u0026rsquo;t repeat yourself\u0026rdquo;) and DAMP (\u0026ldquo;Descriptive and meaningful phrases\u0026rdquo;) is a trade-off.To keep the water analogy, we also need to ensure that our code doesn\u0026rsquo;t have effects which may \u0026rsquo;leak\u0026rsquo; unexpectedly.What we should strive for are self-contained tests that we can understand and run without too much context.\u003c/p\u003e\u003cp\u003eAnother consideration we haven\u0026rsquo;t covered here, are tests that require specific elements, such as environment variables or options. In those cases try using \u003ca href=\"https://withr.r-lib.org/\"\u003ewithr\u003c/a\u003e functions such as \u003ca href=\"https://withr.r-lib.org/reference/with_envvar.html\"\u003e\u003ccode\u003ewithr::local_envvar()\u003c/code\u003e\u003c/a\u003e in each test that requires it.\u003c/p\u003e\u003cp\u003eOne powerful idea from the book \u003ca href=\"https://www.oreilly.com/library/view/software-engineering-at/9781492082781/\"\u003e\u0026ldquo;Software Engineering at Google\u0026rdquo;\u003c/a\u003e by Titus Winters, Tom Manshreck, and Hyrum Wright, is that code can afford to be a bit less obvious because it has tests covering it, but test code, which isn\u0026rsquo;t covered by tests, does not have this luxury.\u003c/p\u003e\u003ch2 id=\"further-resources\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#further-resources\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFurther resources\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThe three chapters on package testing of the R packages book by Hadley Wickham and Jenny Bryan are a highly recommended read: \u003ca href=\"https://r-pkgs.org/testing-basics.html\"\u003eTesting basics\u003c/a\u003e, \u003ca href=\"https://r-pkgs.org/testing-design.html\"\u003eDesigning your test suite\u003c/a\u003e, \u003ca href=\"https://r-pkgs.org/testing-advanced.html\"\u003eAdvanced testing techniques\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eBlog post \u003ca href=\"https://mtlynch.io/good-developers-bad-tests/\"\u003eWhy Good Developers Write Bad Unit Tests\u003c/a\u003e by Michael Lynch.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eThis is a leak. In another test, one could wonder why some object exists, why a specific option has been set, etc. and it\u0026rsquo;s a bit of a nightmare to debug.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2024/03/18/dry-damp/","date_published":"2024-03-18T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/fmkfz-0rv74","title":"rOpenSci Dev Guide 0.9.0: Multilingual Now! And Better","language":"en","authors":[{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["author"]}],"tags":["Software Peer Review","dev guide","multilingual"],"content_html":"\u003cp\u003erOpenSci Software Peer Review\u0026rsquo;s guidance is gathered in an \u003ca href=\"https://devguide.ropensci.org/booknews\"\u003eonline book\u003c/a\u003e that keeps improving!This blog post summarises what\u0026rsquo;s new in our Dev Guide 0.9.0, with all changes listed in the \u003ca href=\"https://devguide.ropensci.org/booknews.html\"\u003echangelog\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"now-available-in-spanish\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#now-available-in-spanish\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNow available in Spanish!\u003c/h2\u003e\u003cp\u003eOur guide is now bilingual (English and \u003ca href=\"https://devguide.ropensci.org/es/index.es.html\"\u003eSpanish\u003c/a\u003e), thanks to work by \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e, \u003ca href=\"/author/elio-campitelli/\"\u003eElio Campitelli\u003c/a\u003e and \u003ca href=\"/author/pao-corrales/\"\u003ePao Corrales\u003c/a\u003e, and thanks to \u003ca href=\"/blog/2023/01/12/multilingual-publishing-en/\"\u003esupport of the Chan Zuckerberg Initiative, NumFOCUS, and the R Consortium\u003c/a\u003e.\u003ca href=\"https://devguide.ropensci.org/es/index.es.html\"\u003eRead the guide in Spanish\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eYou can find out more about our multilingual publishing project in the materials and recording from a recent \u003ca href=\"/commcalls/nov2023-multilingual/\"\u003ecommunity call\u003c/a\u003e.Useful tools produced by the project include our \u003ca href=\"https://translationguide.ropensci.org/\"\u003etranslation guide\u003c/a\u003e, the \u003ca href=\"https://docs.ropensci.org/babelquarto/\"\u003ebabelquarto package\u003c/a\u003e to render multilingual Quarto books or websites, and the \u003ca href=\"https://docs.ropensci.org/babeldown/\"\u003ebabeldown package\u003c/a\u003e to create and update translations using the DeepL API.\u003c/p\u003e\u003cp\u003eOur guide is now also getting translated to \u003ca href=\"https://ropensci.org/blog/2023/10/20/news-october-2023/#help-us-translate-our-dev-guide-to-portuguese\"\u003ePortuguese\u003c/a\u003e thanks to volunteers.We are very grateful for their work!\u003c/p\u003e\u003ch2 id=\"policy-updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#policy-updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePolicy updates\u003c/h2\u003e\u003cp\u003eWe have updated \u003ca href=\"https://devguide.ropensci.org/softwarereview_policies#package-categories\"\u003eAims and Scope\u003c/a\u003e to include translation packages, remove experimental text-processing categories, and provide clarifications around API wrappers.\u003c/p\u003e\u003cp\u003eIn our \u003ca href=\"https://devguide.ropensci.org/softwarereview_author\"\u003eguide for authors\u003c/a\u003e, we now correctly refer to the lifecycle stage \u0026ldquo;Stable\u0026rdquo; as the one at which a package can be submitted, thanks to a contribution by GitHub user \u003ca href=\"https://github.com/bart1\"\u003ebart1\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"ropensci-package-maintainer-cheatsheet\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-package-maintainer-cheatsheet\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci Package maintainer cheatsheet\u003c/h2\u003e\u003cp\u003eWe have created a \u003ca href=\"https://devguide.ropensci.org/maintenance_cheatsheet\"\u003echeatsheet for maintainers of rOpenSci packages\u003c/a\u003e about how to ask for help on different topics.\u003c/p\u003e\u003ch2 id=\"improvements-to-the-packaging-guide\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#improvements-to-the-packaging-guide\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eImprovements to the packaging guide\u003c/h2\u003e\u003cp\u003eThe package guide chapter received several improvements.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;ve updated our \u003ca href=\"https://devguide.ropensci.org/pkg_building#roxygen-2-use\"\u003eadvice around roxygen2\u003c/a\u003e, mainly linking to the \u003ca href=\"https://roxygen2.r-lib.org/\"\u003eroxygen2 website\u003c/a\u003e.The advice also includes an explanation of how to document an argument\u0026rsquo;s default, thanks to \u003ca href=\"https://github.com/bisaloo\"\u003eHugo Gruson\u003c/a\u003e.We have also improved our wording to emphasise that using roxygen2 still means manual efforts (thanks to \u003ca href=\"https://github.com/vincentvanhees\"\u003eVincent van Hees\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eWe have added \u003ca href=\"https://devguide.ropensci.org/pkg_building#packages-wrapping-web-resources-api-clients\"\u003etips for packages wrapping web APIs\u003c/a\u003e, based on the blog post \u003ca href=\"/blog/2022/06/16/publicize-api-client-yes-no/\"\u003e\u0026ldquo;Why You Should (or Shouldn’t) Build an API Client\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eOur instructions around \u003ca href=\"https://devguide.ropensci.org/pkg_building#citation-file\"\u003eCITATION files\u003c/a\u003e now reflect the newest CRAN policies.\u003c/p\u003e\u003cp\u003eOur \u003ca href=\"https://devguide.ropensci.org/pkg_building#testing\"\u003elist of packages helping with testing\u003c/a\u003e now includes shinytest2, which we anticipate will ultimately supersede shinytest.\u003c/p\u003e\u003ch2 id=\"improvements-to-github-and-ci-guidance\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#improvements-to-github-and-ci-guidance\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eImprovements to GitHub and CI guidance\u003c/h2\u003e\u003cp\u003eOur collaboration chapter features more links to \u003ca href=\"https://devguide.ropensci.org/maintenance_collaboration#git-workflow\"\u003eresources about for instance PR reviews, and Git workflows\u003c/a\u003e, thanks to \u003ca href=\"https://github.com/maurolepore\"\u003eMauro Lepore\u003c/a\u003e.That same chapter now mentions \u003ca href=\"https://devguide.ropensci.org/maintenance_collaboration#communication-with-users\"\u003eGitHub Discussions\u003c/a\u003e as a way to communicate with users, and more details on \u003ca href=\"https://devguide.ropensci.org/maintenance_collaboration#issue-templates\"\u003eissue templates\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://github.com/ewallace\"\u003eEdward Wallace\u003c/a\u003e added an explanation of \u003ca href=\"https://devguide.ropensci.org/pkg_ci#what-is-continuous-integration-ci\"\u003econtinuous integration (CI) in general\u003c/a\u003e and of \u003ca href=\"https://devguide.ropensci.org/pkg_ci#coverage\"\u003ecodecov in particular\u003c/a\u003e, to our CI guide.\u003c/p\u003e\u003ch2 id=\"better-documentation-of-the-process\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#better-documentation-of-the-process\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBetter documentation of the process\u003c/h2\u003e\u003cp\u003eWe now highlight the values of our system and the tone we strive to achieve in more places: at the top of the reviewer guide, in the template for review requests, and in the message our bot posts after editors \u003ca href=\"https://github.com/ropensci-org/buffy/pull/77/files\"\u003eassign a reviewer\u003c/a\u003e.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u003cstrong\u003erOpenSci’s community is our best asset.We aim for reviews to be open, non-adversarial, and focused on improving software quality.Be respectful and kind!See our reviewers guide and \u003ca href=\"https://ropensci.org/code-of-conduct/\"\u003ecode of conduct\u003c/a\u003e for more.\u003c/strong\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003e\u003ca href=\"https://github.com/s3alfisc/\"\u003eAlexander Fischer\u003c/a\u003e added an explanation of package submission via non-default branches to the \u003ca href=\"https://devguide.ropensci.org/softwarereview_author\"\u003eguide for authors\u003c/a\u003e and to the  \u003ca href=\"https://devguide.ropensci.org/softwarereview_reviewer#general-guidelines\"\u003eguide for reviewers\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eOur guide reviewers now clearly explains how to \u003ca href=\"https://devguide.ropensci.org/softwarereview_reviewer#volunteering-as-a-reviewer\"\u003evolunteer as a reviewer, in general or for a particular submission\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we summarized the changes incorporated into our book \u003ca href=\"https://devguide.ropensci.org\"\u003e“rOpenSci Packages: Development, Maintenance, and Peer Review”\u003c/a\u003e over the last months.We are thankful for all contributions that shaped this release.We are already working on the next version, including a translation to Portuguese thanks to community contributors!\u003c/p\u003e","url":"https://ropensci.org/blog/2024/03/11/devguide-0.9.0/","date_published":"2024-03-11T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/04b0t-fv224","title":"Marketing Ideas For Your Package","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","maintenance","package-development"],"content_html":"\u003cp\u003eNow that you have created your package, presenting it to the world is a crucial step to \u003cstrong\u003egain visibility and attract users\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eMarketing your package effectively contributes to reaching the people your package can support, finding users to assist you in maintaining and improving your package and allowing you to learn about how people use it.\u003c/p\u003e\u003cp\u003eIn this blog post we suggest a series of activities and tools for advertising your package.\u003c/p\u003e\u003ch2 id=\"publish\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#publish\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePublish\u003c/h2\u003e\u003cp\u003eCreate a comprehensive \u003ca href=\"https://blog.r-hub.io/2019/12/03/readmes/\"\u003eREADME\u003c/a\u003e which clearly explains what your package does, how to install it, and how users can start using it. Include examples or use cases and (links to) any relevant information which might help users understand how your package can help them.\u003c/p\u003e\u003cp\u003eIf you use GitHub, you can \u003ca href=\"https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/pinning-items-to-your-profile\"\u003epin your package repository to your profile\u003c/a\u003e so other people can find it quickly.\u003c/p\u003e\u003cp\u003e\u003ca href=\"/blog/2021/06/22/setup-runiverse/\"\u003eCreate a universe on R-universe\u003c/a\u003e, which will help users by simplifying the installation of your package, and which will provide useful stats and information about it. R-Universe is also a way to showcase your packages collection. You can also \u003ca href=\"https://cran.r-project.org\"\u003epublish it on CRAN\u003c/a\u003e which is another way of simplifying the installation for your potential users.\u003c/p\u003e\u003cp\u003eFinally, consider submitting your package to our \u003ca href=\"/software-review/\"\u003epeer review process\u003c/a\u003e if in scope. All these steps will support you with discoverability and also to comply with quality standards. If this is of interest to you, we generally recommend \u003ca href=\"https://devguide.ropensci.org/policies.html#publishing-in-other-venues\"\u003esubmitting for review before submitting to CRAN\u003c/a\u003e as the review comments can often help with CRAN submissions.\u003c/p\u003e\u003ch2 id=\"promote\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#promote\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePromote\u003c/h2\u003e\u003cp\u003eNow that your package is published and ready to be used, here are some suggestions for things you can do to help promote your package and build it\u0026rsquo;s user base.\u003c/p\u003e\u003cp\u003eLeverage platforms like Mastodon, LinkedIn, and R-specific forums such as \u003ca href=\"https://www.r-bloggers.com\"\u003eR-bloggers\u003c/a\u003e and \u003ca href=\"https://rweekly.org\"\u003eR Weekly\u003c/a\u003e to announce the release of your package. You can also use your own social media or blog to share updates, tutorials, use cases, talks, and upcoming events where you will be available to engage with users.\u003c/p\u003e\u003cp\u003eIf your package is part of the rOpenSci Suite you can \u003ca href=\"https://blogguide.ropensci.org/\"\u003ewrite a blog post or a tech note\u003c/a\u003e for our blog and we will share in our \u003ca href=\"/news/\"\u003emonthly newsletter\u003c/a\u003e and our social media.\u003c/p\u003e\u003cp\u003eFor rOpenSci packages, we collect the \u003ca href=\"/usecases\"\u003euse cases\u003c/a\u003e and feature them on the website as well as \u003ca href=\"/packages/\"\u003ethe package\u003c/a\u003e. We also have social media campaigns, for example \u003ca href=\"https://hachyderm.io/@rOpenSci/tagged/APackageADay\"\u003e\u0026ldquo;A Package a Day\u0026rdquo;\u003c/a\u003e on Mastodon were we feature one package of our suite each day. On LinkedIn we publish every Monday our \u003ca href=\"https://www.linkedin.com/feed/update/urn:li:activity:7170464303186108416\"\u003e\u0026ldquo;Package Weekly Digest\u0026rdquo;\u003c/a\u003e with a list of five package that belong to the same category.\u003c/p\u003e\u003cp\u003eIf you like to give talks, you can speak at an R User Group or \u003ca href=\"https://www.meetup.com/pro/rladies/\"\u003eR-Ladies Chapter\u003c/a\u003e. Organizers invite speakers but most groups are open to offers to give a talk or teach a workshop. Presenting your package at a domain-specific conference is another way to reach users and gain greater exposure. There are also R-specific conferences like \u003ca href=\"https://events.linuxfoundation.org/user/\"\u003euseR!\u003c/a\u003e, \u003ca href=\"https://latin-r.com/\"\u003eLatinR\u003c/a\u003e, \u003ca href=\"https://satrdays.org/\"\u003esatRdays\u003c/a\u003e and \u003ca href=\"https://posit.co/conference/\"\u003ePosit::Conf\u003c/a\u003e.\u003c/p\u003e\u003cp\u003erOpenSci has two-hour \u003ca href=\"/coworking/\"\u003eco-working sessions each month\u003c/a\u003e, feel free to contact us if you\u0026rsquo;re interested in hosting a co-working session on a topic related to your package.\u003c/p\u003e\u003cp\u003eIf your package has a broad scope, you can also propose an \u003ca href=\"/commcalls/\"\u003erOpenSci Community Call\u003c/a\u003e on your package. For example, a community call about \u003ca href=\"/commcalls/jan2023-targets/\"\u003etargets\u003c/a\u003e included a panel with two users showing how they use the package and the principal author sharing new insights about the package. Alternatively, consider getting together with other package authors and proposing a domain-related Community Call, covering the use of several, more specific packages (for instance, \u003ca href=\"/commcalls/2019-03-27/\"\u003eResearch Applications of rOpenSci Taxonomy and Biodiversity Tools\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eYou can check if your package fits in a \u003ca href=\"https://cran.r-project.org/web/views/\"\u003eCRAN Task View\u003c/a\u003e and propose the addition of your package.\u003c/p\u003e\u003cp\u003eIf your goal is to find help to maintain your package, label your issues as \u0026ldquo;Help Wanted\u0026rdquo;\u0026quot; or \u0026ldquo;Good First Issue\u0026rdquo; to guide your contributors where their support is needed. \u003ca href=\"/help-wanted/\"\u003eHelp Wanted issues of the packages in the rOpenSci suite are featured on our webpage\u003c/a\u003e, shared on social media and our newsletter.  We also assist maintainers in writing a technical note for our blog post with more details on the type of contribution they need with their packages, whether it is \u003ca href=\"/blog/2024/03/01/qualtrics-call-help/\"\u003ecode contributions\u003c/a\u003e, \u003ca href=\"/blog/2024/02/27/assertr-call-help/\"\u003eclose issues\u003c/a\u003e or \u003ca href=\"/blog/2024/02/29/targets-call-help/\"\u003eanswering questions\u003c/a\u003e.\u003c/p\u003e\u003cp\u003ePublishing a paper about your package is an important aspect for academics developers. General R journals for publishing R packages are \u003ca href=\"https://journal.r-project.org\"\u003eThe R Journal\u003c/a\u003e and the \u003ca href=\"https://www.jstatsoft.org/index\"\u003eJournal of Statistical Software\u003c/a\u003e, but remember that domain-specific journals may also publish R packages as tools for the field (for instance, \u003ca href=\"https://besjournals.onlinelibrary.wiley.com/journal/2041210x\"\u003eMethods in Ecology and Evolution\u003c/a\u003e)\u003c/p\u003e\u003cp\u003eThe package that are peer-reviewed by rOpenSci have a fast track for publication on the \u003ca href=\"https://joss.theoj.org\"\u003eJournal Open Source Software\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eAs a package maintainer there are several activities you can implement to advertise your package. If you package is part of rOpenSci\u0026rsquo;s suite, there are also ways we can support you. By implementing some of these options we hope you can effectively reach users who can benefit from your package\u0026rsquo;s functionality.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/03/07/package-marketing/","date_published":"2024-03-07T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/k0q1e-gzb74","title":"rOpenSci Code of Conduct Annual Review","language":"en","authors":[{"name":"Kara Woo","url":"https://ropensci.org/author/kara-woo/","avatar":"https://github.com/karawoo.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Natalia Morandeira","url":"https://ropensci.org/author/natalia-morandeira/","avatar":"https://github.com/nmorandeira.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["code of conduct","governance","community"],"content_html":"\u003cp\u003eOur community is our best asset. It’s so important to us, it’s in our \u003ca href=\"https://ropensci.org/about/\"\u003emission statement\u003c/a\u003e. We recognize that communities are not inclusive by default; they require deliberate attention, including an enforceable \u003ca href=\"/code-of-conduct\"\u003eCode of Conduct\u003c/a\u003e.\u003c/p\u003e\u003cp\u003erOpenSci is committed to providing a safe, inclusive, welcoming, and harassment-free experience for everyone. We welcome people of all backgrounds and identities, including but not limited to gender, gender identity and expression, age, sexual orientation, disability, physical appearance, body size, race, ethnicity, religion (or lack thereof), or technology choices. We are anti-racist. We welcome anyone, no matter their technical expertise, career stage, or work sector.\u003c/p\u003e\u003cp\u003eWe are supported by rOpenSci’s Code of Conduct that applies to all people participating in the rOpenSci community, including rOpenSci staff and leadership. It applies to all modes of interaction online including GitHub project repositories, the rOpenSci discussion forum, Slack, Community Calls, Co-working and social sessions, in person at rOpenSci-hosted events, including social gatherings affiliated with the event. It is developed and enforced by a committee including rOpenSci staff and an independent community member.\u003c/p\u003e\u003cp\u003eHere we report on our annual review of rOpenSci\u0026rsquo;s Code of Conduct, reporting process, and internal guidelines for handling reports and enforcement.\u003c/p\u003e\u003ch2 id=\"updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdates\u003c/h2\u003e\u003col\u003e\u003cli\u003e\u003cp\u003eA change to the committee. \u003ca href=\"https://karawoo.com/\"\u003eKara Woo\u003c/a\u003e (independent community member) has stepped down from the committee after five years of service. We welcome \u003ca href=\"https://nmorandeira.netlify.app\"\u003eNatalia Morandeira\u003c/a\u003e to serve on this role. Committee members for 2024 are Natalia Morandeira (independent member), \u003ca href=\"/author/mark-padgham\"\u003eMark Padgham\u003c/a\u003e (rOpenSci Software Research Scientist) and \u003ca href=\"/author/yanina-bellini-saibene\"\u003eYanina Bellini Saibene\u003c/a\u003e (rOpenSci Community Manager). We are responsible for receiving, investigating, deciding, enforcing, and reporting on all reports of potential violations of our Code.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eNo changes have been made to the text of the Code in English.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe Spanish text of the code of conduct was review and updated with changes in the use of gender-mark words.\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eWith this change of committee members, this will be version 2.5, dated January 30, 2024.\u003c/p\u003e\u003cp\u003eWe welcome your feedback by email to conduct at ropensci.org, and we thank you for continuing to work with us to make rOpenSci a safe, enjoyable, friendly and enriching experience for everyone who participates.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/03/04/conduct2023/","date_published":"2024-03-04T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/dtkg3-48502","title":"Help make qualtRics better! Code contributions wanted","language":"en","authors":[{"name":"Joseph O&#39;Brien","url":"https://ropensci.org/author/joseph-obrien/","avatar":"https://github.com/jmobrien.png","_role":["author"]},{"name":"Julia Silge","url":"https://ropensci.org/author/julia-silge/","avatar":"https://github.com/juliasilge.png","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]}],"tags":["package development","tech notes"],"content_html":"\u003cp\u003eThe package \u003ca href=\"https://docs.ropensci.org/qualtRics\"\u003equaltRics\u003c/a\u003e maintained by \u003ca href=\"/author/julia-silge\"\u003eJulia Silge\u003c/a\u003e together with \u003ca href=\"/author/joseph-obrien\"\u003eJoseph O’Brien\u003c/a\u003e provides functions to access survey results directly into R using the Qualtrics API. \u003ca href=\"https://www.qualtrics.com/about/\"\u003eQualtrics\u003c/a\u003e is an online survey and data collection software platform.\u003c/p\u003e\u003ch2 id=\"help-test-or-improve-qualtrics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#help-test-or-improve-qualtrics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHelp test or improve qualtRics!\u003c/h2\u003e\u003cp\u003eAre you a heavy user of the Qualtrics survey tooling in general, and of the qualtRics R package in particular? Then you can help build and test the package.\u003c/p\u003e\u003ch2 id=\"how-to-help\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-help\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to help?\u003c/h2\u003e\u003cp\u003eThere are a few specific needs that the qualtRics package has today.\u003c/p\u003e\u003cul\u003e\u003cli\u003eAre you interested in \u003ca href=\"https://github.com/ropensci/qualtRics/issues/294\"\u003eR package testing\u003c/a\u003e? Right now, tests in the qualtRics package mock the API calls, but it is difficult for any given maintainer or contributor to regenerate the test fixtures. Instead, we want to move to using the \u0026ldquo;mock servers\u0026rdquo; that Qualtrics provides. This would be a great fit for any Qualtrics user who wants to learn more about package testing and API calls.\u003c/li\u003e\u003cli\u003eDo you use \u003ca href=\"https://github.com/ropensci/qualtRics/issues/271\"\u003eQualtrics mailing lists\u003c/a\u003e? We need help maintaining and fixing code around this Qualtrics feature.\u003c/li\u003e\u003cli\u003eAre you interesting in \u003ca href=\"https://github.com/ropensci/qualtRics/issues/334\"\u003eauthentication and credentials\u003c/a\u003e? We need help with an overhaul of how the R package authenticates to Qualtrics. This would be a great fit for any Qualtrics user who wants to learn more about system credential stores and/or OAuth.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIf you have something else in mind, please open an issue in the \u003ca href=\"https://github.com/ropensci/qualtRics/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc\"\u003equaltRics Github repository\u003c/a\u003e, or comment on a relevant open issue.\u003c/p\u003e\u003ch2 id=\"thank-you\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#thank-you\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThank you!\u003c/h2\u003e\u003cp\u003eThank you!Interested in contributing in other ways to rOpenSci?Do not miss our \u003ca href=\"https://contributing.ropensci.org\"\u003econtributing guide\u003c/a\u003e.Also stay tuned for more similar posts about maintainers’ specific call for contributions.Last but not least, if you maintain an rOpenSci package and would like to put out such a call, get in touch with us.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/03/01/qualtrics-call-help/","date_published":"2024-03-01T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/pbm5y-w5540","title":"Help users and developers of targets by answering questions!","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Will Landau","url":"https://orcid.org/0000-0003-1878-3253","avatar":"https://github.com/wlandau.png","_role":["author"]}],"tags":["package development","tech notes"],"content_html":"\u003cp\u003eThe package \u003ca href=\"https://docs.ropensci.org/targets\"\u003etargets\u003c/a\u003e maintained by \u003ca href=\"/author/will-landau\"\u003eWill Landau\u003c/a\u003e, and its companion packages, are pipeline tools, that coordinate the pieces of computationally demanding analysis projects.\u003c/p\u003e\u003ch2 id=\"help-sustain-targets-discussion-forums\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#help-sustain-targets-discussion-forums\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHelp sustain targets discussion forums!\u003c/h2\u003e\u003cp\u003eAre you a routined user of the targets package and of more \u003ca href=\"https://wlandau.github.io/targetopia/\"\u003etargetopia\u003c/a\u003e packages?How about helping answer users questions on the GitHub discussion and issue forums for these packages?This would help lighten the maintenance load of those packages, and you’d get to help other users directly.\u003c/p\u003e\u003ctable\u003e\t\u003cthead\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003cth\u003ePackage\u003c/th\u003e\t\t\t\t\t\u003cth\u003eIssue tracker\u003c/th\u003e\t\t\t\t\t\u003cth\u003eDiscussion forum\u003c/th\u003e\t\t\t\u003c/tr\u003e\t\u003c/thead\u003e\t\u003ctbody\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://docs.ropensci.org/targets\"\u003e\u003ccode\u003etargets\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://github.com/ropensci/targets/issues\"\u003etargets/issues\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://github.com/ropensci/targets/discussions\"\u003etargets/discussions\u003c/a\u003e\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://docs.ropensci.org/tarchetypes\"\u003e\u003ccode\u003etarchetypes\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://github.com/ropensci/tarchetypes/issues\"\u003etarchetypes/issues\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://github.com/ropensci/tarchetypes/discussions\"\u003etarchetypes/discussions\u003c/a\u003e\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://docs.ropensci.org/gittargets\"\u003e\u003ccode\u003egittargets\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://github.com/ropensci/gittargets/issues\"\u003egittargets/issues\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://github.com/ropensci/gittargets/discussions\"\u003egittargets/discussions\u003c/a\u003e\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://docs.ropensci.org/stantargets\"\u003e\u003ccode\u003estantargets\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://github.com/ropensci/stantargets/issues\"\u003estantargets/issues\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://github.com/ropensci/stantargets/discussions\"\u003estantargets/discussions\u003c/a\u003e\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://docs.ropensci.org/jagstargets\"\u003e\u003ccode\u003ejagstargets\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://github.com/ropensci/jagstargets/issues\"\u003ejagstargets/issues\u003c/a\u003e\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://github.com/ropensci/jagstargets/discussions\"\u003ejagstargets/discussions\u003c/a\u003e\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\u003c/tbody\u003e\u003c/table\u003e\u003ch2 id=\"how-to-help\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-help\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to help?\u003c/h2\u003e\u003cp\u003e\u003ca href=\"https://docs.github.com/en/account-and-profile/managing-subscriptions-and-notifications-on-github/setting-up-notifications/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository\"\u003eSubscribe\u003c/a\u003e to the relevant trackers and contribute whenever you have time: please add your thoughts and comments on issues and discussions!\u003c/p\u003e\u003ch2 id=\"thank-you\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#thank-you\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThank you!\u003c/h2\u003e\u003cp\u003eThank you!Interested in contributing in other ways to rOpenSci?Do not miss our \u003ca href=\"https://contributing.ropensci.org\"\u003econtributing guide\u003c/a\u003e.Also stay tuned for more similar posts about maintainers’ specific call for contributions.Last but not least, if you maintain an rOpenSci package and would like to put out such a call, get in touch with us.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/02/29/targets-call-help/","date_published":"2024-02-29T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/gjjjr-1ka42","title":"Help make assertr better! Come close issues","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Tony Fischetti","url":"https://ropensci.org/author/tony-fischetti/","avatar":"https://github.com/tonyfischetti.png","_role":["author"]}],"tags":["package development","tech notes"],"content_html":"\u003cp\u003eThe package \u003ca href=\"https://docs.ropensci.org/assertr\"\u003eassertr\u003c/a\u003e maintained by \u003ca href=\"/author/tony-fischetti/\"\u003eTony Fischetti\u003c/a\u003e, provides functionality to assert conditions that have to be met so that errors in data used in analysis pipelines can fail quickly.The provided functionality is similar to \u003ccode\u003estopifnot()\u003c/code\u003e but more powerful, friendly, and easier for use in pipelines.\u003c/p\u003e\u003ch2 id=\"contributed-to-assertr\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#contributed-to-assertr\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eContributed to assertr!\u003c/h2\u003e\u003cp\u003eThe assertr \u003ca href=\"https://github.com/tonyfischetti/assertr/issues\"\u003eissue tracker\u003c/a\u003e has a few tickets that you could help with, please have a \u003ca href=\"https://github.com/tonyfischetti/assertr/issues\"\u003elook\u003c/a\u003e.You can also \u003ca href=\"https://docs.github.com/en/account-and-profile/managing-subscriptions-and-notifications-on-github/setting-up-notifications/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository\"\u003esubscribe\u003c/a\u003e to be notified of new issues opened in this repository.\u003c/p\u003e\u003ch2 id=\"how-to-help\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-help\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to help?\u003c/h2\u003e\u003cp\u003eVolunteer in an open issue, then once you get a green light, go ahead and start a PR!This workflow will avoid duplicate work which could happen if several people start solving the same issue at the same time.\u003c/p\u003e\u003ch2 id=\"thank-you\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#thank-you\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThank you!\u003c/h2\u003e\u003cp\u003eThank you!Interested in contributing in other ways to rOpenSci?Do not miss our \u003ca href=\"https://contributing.ropensci.org\"\u003econtributing guide\u003c/a\u003e.Also stay tuned for more similar posts about maintainers’ specific call for contributions.Last but not least, if you maintain an rOpenSci package and would like to put out such a call, get in touch with us.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/02/27/assertr-call-help/","date_published":"2024-02-27T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/3qdf9-xrq67","title":"rOpenSci News Digest, February 2024","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2024/02/23/news-february-2024\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"ropensci-2023-code-of-conduct-transparency-report\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-2023-code-of-conduct-transparency-report\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci 2023 Code of Conduct Transparency Report\u003c/h3\u003e\u003cp\u003eTransparency reports are intended to help the community understand what kind of Code of Conduct incidents we receive reports about annually and how the Code of Conduct team responds, always preserving the privacy of the people who experience or report incidents.\u003c/p\u003e\u003cp\u003eRead the \u003ca href=\"/blog/2024/01/12/transparency2023/\"\u003ereport\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"ropensci-champions-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-champions-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci Champions Program\u003c/h3\u003e\u003cp\u003eWe are proud to welcome our second cohort of Champions!  Learn about them and the projects they will develop while participating in the rOpenSci Champions Program.\u003c/p\u003e\u003cp\u003eRead the \u003ca href=\"/blog/2024/02/15/champions-program-champions-2024/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"r-universe-updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-universe updates\u003c/h3\u003e\u003cp\u003eThanks to \u003ca href=\"https://github.com/r-wasm/webr/pull/358#issuecomment-1954019290\"\u003econtributions from Hiroaki Yutani\u003c/a\u003e the R-universe WebAssembly toolchain now includes the Rust compiler. So have experimental support for compiling packages with rust code for use in WebR!\u003c/p\u003e\u003cp\u003eR-universe now supports \u003ca href=\"https://quarto-dev.r-universe.dev/articles/quarto/hello.html\"\u003evignettes written in Quarto\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eIn preparation for the next major R release in April, we have started building MacOS binaries for 4.4, and will soon drop the 4.2 binaries.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-03/\"\u003eTuesday, March 5th, 9:00 Australia Western (1:00 UTC)\u003c/a\u003e, Dates, Times and Timezones in R. With cohost \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and \u003ca href=\"/author/alex-koiter/\"\u003eAlex Koiter\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore resources for working with dates, times, and timezones in R\u003c/li\u003e\u003cli\u003eWork on a project dealing with dates and times\u003c/li\u003e\u003cli\u003eAsk questions or troubleshoot your timezone problems with the cohost and other attendees.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTuesday, April 2nd, 14:00 Europe Central (13:00 UTC) Theme and Cohost TBA\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following  package recently became a part of our software suite, or were recently reviewed again:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/fluidsynth\"\u003efluidsynth\u003c/a\u003e, developed by Jeroen Ooms: Bindings to libfluidsynth to parse and synthesize MIDI files. It can read MIDI into a data frame, play it on the local audio device, or convert into an audio file.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=fluidsynth\"\u003eCRAN\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following nineteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/commonmark\" title=\"High Performance CommonMark and Github Markdown Rendering in R\"\u003ecommonmark\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/commonmark/releases/tag/v1.9.1\"\u003e\u003ccode\u003ev1.9.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/baRcodeR\" title=\"Label Creation for Tracking and Collecting Data fromBiological Samples\"\u003ebaRcodeR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/baRcodeR/releases/tag/v0.1.8\"\u003e\u003ccode\u003ev0.1.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/comtradr\" title=\"Interface with the United Nations Comtrade API\"\u003ecomtradr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/comtradr/releases/tag/v0.4.0.0\"\u003e\u003ccode\u003ev0.4.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dbparser\" title=\"Drugs Databases Parser\"\u003edbparser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dbparser/releases/tag/v2.0.2\"\u003e\u003ccode\u003ev2.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/fluidsynth\" title=\"Read and Play Digital Music (MIDI)\"\u003efluidsynth\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/fluidsynth/releases/tag/generaluser-gs-v1.471\"\u003e\u003ccode\u003egeneraluser-gs-v1.471\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/GSODR\" title=\"Global Surface Summary of the Day (GSOD) Weather Data Client\"\u003eGSODR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/GSODR/releases/tag/v3.1.10\"\u003e\u003ccode\u003ev3.1.10\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lingtypology\" title=\"Linguistic Typology and Mapping\"\u003elingtypology\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lingtypology/releases/tag/v1.1.16\"\u003e\u003ccode\u003ev1.1.16\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/melt\" title=\"Multiple Empirical Likelihood Tests\"\u003emelt\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/melt/releases/tag/v1.11.0\"\u003e\u003ccode\u003ev1.11.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nasapower\" title=\"NASA POWER API Client\"\u003enasapower\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nasapower/releases/tag/v4.2.0\"\u003e\u003ccode\u003ev4.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.10.1\"\u003e\u003ccode\u003ev0.10.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rangr\" title=\"Mechanistic Simulation of Species Range Dynamics\"\u003erangr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rangr/releases/tag/v1.0.3\"\u003e\u003ccode\u003ev1.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/readODS\" title=\"Read and Write ODS Files\"\u003ereadODS\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/readODS/releases/tag/v2.2.0\"\u003e\u003ccode\u003ev2.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rnaturalearthdata\" title=\"World Vector Map Data from Natural Earth Used in rnaturalearth\"\u003ernaturalearthdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rnaturalearthdata/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rnaturalearthhires\" title=\"High Resolution World Vector Map Data from Natural Earth used inrnaturalearth\"\u003ernaturalearthhires\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rnaturalearthhires/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rvertnet\" title=\"Search Vertnet, a Database of Vertebrate Specimen Records\"\u003ervertnet\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rvertnet/releases/tag/v0.8.4\"\u003e\u003ccode\u003ev0.8.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stats19\" title=\"Work with Open Road Traffic Casualty Data from Great Britain\"\u003estats19\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stats19/releases/tag/v3.0.3\"\u003e\u003ccode\u003ev3.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.7.12\"\u003e\u003ccode\u003e0.7.12\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.5.1\"\u003e\u003ccode\u003e1.5.1\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/unifir\" title=\"A Unifying API for Calling the Unity 3D Video Game Engine\"\u003eunifir\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/unifir/releases/tag/v0.2.4\"\u003e\u003ccode\u003ev0.2.4\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are fifteen recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/598\"\u003eweatherOz\u003c/a\u003e, An API Client for Australian Weather and Climate Data Resources. Submitted by \u003ca href=\"https://github.com/bozaah\"\u003eRodrigo Pires\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/619\"\u003equadkeyr\u003c/a\u003e, Tools for converting QuadKeys used in Microsoft\u0026rsquo;s Bing Maps Tile System into raster images. Submitted by \u003ca href=\"https://github.com/flor14\"\u003eFlorencia D\u0026rsquo;Andrea\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/609\"\u003ebaRulho\u003c/a\u003e, Quantifying (Animal) Sound Degradation. Submitted by \u003ca href=\"https://marce10.github.io/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003emregions2\u003c/a\u003e, Access Data from Marineregions.org: The Marine Regions Gazetteer and the Marine Regions Data Products. Submitted by \u003ca href=\"https://salvafern.github.io/\"\u003esalvafern\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/618\"\u003efellingdateR\u003c/a\u003e, Estimate, report and combine felling dates of historical tree-ring. Submitted by \u003ca href=\"https://www.researchgate.net/profile/Kristof_Haneca\"\u003eKriHa\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/608\"\u003ergeeExtra\u003c/a\u003e, Extensions for rgee. Submitted by \u003ca href=\"https://csaybar.github.io\"\u003eCesar Aybar\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"https://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/625\"\u003erix\u003c/a\u003e, Rix: Reproducible Environments with Nix. Submitted by \u003ca href=\"https://brodrigues.co\"\u003eBruno Rodrigues\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/623\"\u003enuts\u003c/a\u003e, nuts: Convert European Regional Data. Submitted by \u003ca href=\"https://hennicke.science/\"\u003eMoritz Hennicke\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003epangoling\u003c/a\u003e, Access to Large Language Model Predictions. Submitted by \u003ca href=\"https://bnicenboim.github.io/\"\u003eBruno Nicenboim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/627\"\u003edendroNetwork\u003c/a\u003e, Create networks of dendrochronological series using pairwise similarity. Submitted by \u003ca href=\"https://akademienl.social/@RonaldVisser\"\u003eRonaldVisser\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/620\"\u003ekarel\u003c/a\u003e, Learning programming with Karel the robot. Submitted by \u003ca href=\"https://unr.edu.ar/\"\u003eMarcos Prunello\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"https://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/06/verbosity-control-packages\"\u003ePlease Shut Up! Verbosity Control in Packages\u003c/a\u003e by Mark Padgham and Maëlle Salmon. This post was discussed on the \u003ca href=\"https://rweekly.fireside.fm/152?t=80\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/15/champions-program-champions-2024\"\u003eIntroducing rOpenSci Champions - Cohort 2023-2024\u003c/a\u003e by Ezekiel Adebayo Ogundepo, Sehrish Kanwal, Andrea Gomez Vargas, Liz Hare, Francesca Belem Lopes Palmeira, Binod Jung Bogati, Yi-Chin Sunny Tseng, Mirna Vazquez Rosas Landa, Erika Siregar, Jacqui Levy, and Yanina Bellini Saibene. The rOpenSci Champions Program starts this 2024 with a new cohort of Champions. We are pleased to introduce you to our Champions and their projects.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/19/waywiser-call-help\"\u003eHelp make waywiser better! User requests wanted\u003c/a\u003e by Mike Mahoney and Maëlle Salmon.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/20/fluidsynth\"\u003eRead and Play Digital Music (MIDI) in R using the \u003cem\u003efluidsynth\u003c/em\u003e package\u003c/a\u003e by Jeroen Ooms. A new package with bindings to libfluidsynth to read and synthesize midi files in R.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/22/beautiful-code\"\u003eBeautiful Code, Because We’re Worth It!\u003c/a\u003e by Maëlle Salmon and Yanina Bellini Saibene.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"calls-for-contributions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/internetarchive/\"\u003einternetarchive\u003c/a\u003e, an API Client for the Internet Archive. \u003ca href=\"https://github.com/ropensci/internetarchive/issues/17\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/historydata/\"\u003ehistorydata\u003c/a\u003e, datasets for historians. \u003ca href=\"https://github.com/ropensci/historydata/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/textreuse/\"\u003etextreuse\u003c/a\u003e, detect text reuse and document similarity. \u003ca href=\"https://github.com/ropensci/textreuse/issues/97\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/tokenizers/\"\u003etokenizers\u003c/a\u003e, fast, consistent tokenization of natural language text. \u003ca href=\"https://github.com/ropensci/tokenizers/issues/86\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/USAboundaries/\"\u003eUSAboundaries\u003c/a\u003e (and USAboundariesdata), historical and contemporary boundaries of the United States of America . \u003ca href=\"https://github.com/ropensci/USAboundaries/issues/50\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"calls-for-contributions-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-contributions-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for contributions\u003c/h3\u003e\u003cp\u003e\u003ca href=\"/blog/2024/02/19/waywiser-call-help/\"\u003eHelp make waywiser better! User requests wanted\u003c/a\u003e\u003c/p\u003e\u003cp\u003eAlso refer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"r-consortium-infrastructure-steering-committee-isc-grant-program-accepting-proposals-starting-march-1st\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-consortium-infrastructure-steering-committee-isc-grant-program-accepting-proposals-starting-march-1st\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR Consortium Infrastructure Steering Committee (ISC) Grant Program Accepting Proposals starting March 1st!\u003c/h3\u003e\u003cp\u003eThe R Consortium Call for Proposal might be a relevant funding opportunity for your package!Find out more in their \u003ca href=\"https://www.r-consortium.org/blog/2024/02/08/r-consortium-infrastructure-steering-committee-isc-grant-program-accepting-proposals-starting-march-1st\"\u003epost\u003c/a\u003e.Don\u0026rsquo;t forget to browse past funded projects for inspiration.\u003c/p\u003e\u003ch3 id=\"verbosity-control-in-r-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#verbosity-control-in-r-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eVerbosity control in R packages\u003c/h3\u003e\u003cp\u003eDon\u0026rsquo;t miss Mark Padgham\u0026rsquo;s and Maëlle Salmon\u0026rsquo;s tech note on \u003ca href=\"/blog/2024/02/06/verbosity-control-packages/\"\u003everbosity control in R packages\u003c/a\u003e, that explains our new requirement around verbosity control: use a package-level option to control it rather than an argument in every function.Your feedback on the new requirement is welcome!\u003c/p\u003e\u003ch3 id=\"a-creative-way-to-have-users-update-your-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-creative-way-to-have-users-update-your-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA creative way to have users update your package\u003c/h3\u003e\u003cp\u003eMiles McBain \u003ca href=\"https://mastodon.social/deck/@milesmcbain@fosstodon.org/111895762949362247\"\u003eshared a creative strategy\u003c/a\u003e for having users update (internal) R packages regularly: printing the installed version in a different colour at package loading, depending on whether it is the latest version.\u003c/p\u003e\u003ch3 id=\"progress-on-multilingual-help-support\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#progress-on-multilingual-help-support\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eProgress on multilingual help support\u003c/h3\u003e\u003cp\u003eElio Campitelli \u003ca href=\"https://mastodon.social/deck/@eliocamp/111881088800842535\"\u003eshared some news\u003c/a\u003e of their project for multilingual help support.There\u0026rsquo;s a first working prototype!Find out more in the \u003ca href=\"https://github.com/eliocamp/rhelpi18n\"\u003erepository\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"load-different-r-package-versions-at-once-with-git-worktree\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#load-different-r-package-versions-at-once-with-git-worktree\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLoad different R package versions at once with git worktree\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;ve ever wanted to have two folders corresponding each to a different version of an R package, say the development version and a former release, to open each of them in a different R session, you might enjoy this \u003ca href=\"https://masalmon.eu/2024/01/23/git-worktree/\"\u003eblog post by Maëlle Salmon\u003c/a\u003e presenting how to use git worktree for this purpose.\u003c/p\u003e\u003ch3 id=\"a-package-live-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-package-live-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA package live review\u003c/h3\u003e\u003cp\u003eNick Tierney recently live reviewed the soils package by Jadey Ryan, together with Miles McBain and Adam Sparks.Jadey Ryan published a \u003ca href=\"https://jadeyryan.com/blog/2024-01-22_package-review/\"\u003ethorough blog post about the review\u003c/a\u003e.The \u003ca href=\"https://www.youtube.com/watch?v=OttYnXwM4dU\"\u003erecording\u003c/a\u003e is available.You can suggest your package for a future live review by Nick in his \u003ca href=\"https://github.com/njtierney/streaming-ideas\"\u003erepository\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"github-actions-now-supports-free-arm64-macos-runners-for-open-source-projects\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#github-actions-now-supports-free-arm64-macos-runners-for-open-source-projects\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGitHub Actions now supports free arm64 macOS runners for open source projects\u003c/h3\u003e\u003cp\u003eThis piece of news was \u003ca href=\"https://mastodon.social/deck/@gaborcsardi@fosstodon.org/111850319401048086\"\u003eshared\u003c/a\u003e by Gábor Csárdi who\u0026rsquo;s updated \u003ca href=\"https://github.com/r-lib/actions\"\u003er-lib/actions\u003c/a\u003e to include the new \u0026ldquo;macos-14\u0026rdquo; runner that you can include in your build matrix.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/02/23/news-february-2024/","date_published":"2024-02-23T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/tbdps-5xc82","title":"Beautiful Code, Because We’re Worth It!","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["champions program","tech notes","beginner","package development","clean code"],"content_html":"\u003cp\u003erOpenSci\u0026rsquo;s \u003ca href=\"/blog/2024/02/15/champions-program-champions-2024/\"\u003esecond cohort of champions was onboarded\u003c/a\u003e!Their training started with a session on code style, which we will summarize here in this post.Knowing more about code quality is relevant to all Champion projects, be it creating a new package, submitting a package to software review, or reviewing a package.This training session consisted of a talk and discussion, whereas the next package development training sessions will be more hands-on.\u003c/p\u003e\u003ch2 id=\"why-write-beautiful-code\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-write-beautiful-code\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy write beautiful code?\u003c/h2\u003e\u003cp\u003eAlthough your code will be executed by machines, it will be read by humans.Those humans, whether they are future you, collaborators you know or collaborators you don\u0026rsquo;t know, will need to understand your code to check that it has no mistake, to fix potential bugs, and to build upon it by adding new features.Making it easier to understand your code is therefore crucial.\u003c/p\u003e\u003ch2 id=\"well-proportioned-code\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#well-proportioned-code\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWell-proportioned code\u003c/h2\u003e\u003cp\u003eIn the first part, we shared tips that made the code more \u0026ldquo;well-proportioned\u0026rdquo;.It is not only a matter of aesthetics.Well-proportioned code is easier to parse by humans.\u003c/p\u003e\u003ch3 id=\"regular-spacing-between-elements\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#regular-spacing-between-elements\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRegular spacing between elements\u003c/h3\u003e\u003cp\u003eCompare\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003estarwars\u003c/span\u003e\u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003eheight\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emass\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003ehomeworld\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emass\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNULL\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eheight\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003eheight\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"m\"\u003e0.0328084\u003c/span\u003e \u003cspan class=\"c1\"\u003e# convert to feet\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eto\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003estarwars\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eheight\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emass\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ehomeworld\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emass\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNULL\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eheight\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eheight\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"m\"\u003e0.0328084\u003c/span\u003e \u003cspan class=\"c1\"\u003e# convert to feet\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eIn the first chunk, spacing between elements is irregular.For instance, there is no space before \u003ccode\u003eheight\u003c/code\u003e, no space around the equal sign that comes after \u003ccode\u003emass\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eWe instead recommend to follow spacing (and line-breaking!) rules consistently.Unless you have a \u003ca href=\"https://github.com/ropensci-review-tools/spaceout\"\u003estrongly differing opinion\u003c/a\u003e, the easiest strategy is to follow your collaborators\u0026rsquo; style guide, or a popular style guide like the \u003ca href=\"https://style.tidyverse.org/\"\u003etidyverse style guide\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eSo how do you implement these rules in practice?First you\u0026rsquo;ll need to be accustomed to using a particular style.Automatic tools like the \u003ca href=\"https://styler.r-lib.org/\"\u003estyler package\u003c/a\u003e or your IDE can help you.For example, in the RStudio IDE, the keyboard shortcut \u003ccode\u003eCtrl+I\u003c/code\u003e fixes indentation.\u003c/p\u003e\u003ch3 id=\"not-too-wide\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#not-too-wide\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNot too wide\u003c/h3\u003e\u003cp\u003eA traditional rule is to not have more than 80 characters per line.The exact number isn\u0026rsquo;t important, what\u0026rsquo;s important is to prevent too much horizontal scrolling!\u003c/p\u003e\u003cp\u003eThe \u003ca href=\"https://lintr.r-lib.org/\"\u003elintr package\u003c/a\u003e can warn you about too wide lines, among many other things.Compared to styler, lintr does not fix things itself.\u003c/p\u003e\u003cp\u003eThere is a also a setting in RStudio IDE to show a margin at 80 characters (Code \u0026gt; Display \u0026gt; Show Margin).\u003c/p\u003e\u003ch3 id=\"not-too-long-paragraphs-existing-and-home-made-functions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#not-too-long-paragraphs-existing-and-home-made-functions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNot too long: paragraphs, existing and home-made functions\u003c/h3\u003e\u003cp\u003eVertical space is limited in code both by the screen and by what the reader can see at a glance (never mind limits to how much they can hold in their head).\u003c/p\u003e\u003cp\u003eOne way to make your code shorter, but still easy to parse is to use \u003cem\u003ecode paragraphs\u003c/em\u003e.Line breaks are not free since they take up vertical space.Use line breaks to separate blocks of code that do a related thing.As in prose, one paragraph should roughly correspond to one idea.For instance, in the example code below, the first block does something related to a website page head, while the second block handles the body of the website page.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ehead\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ecollect_metadata\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ewebsite\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ehead_string\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003estringify\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebody\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ecreate_content\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ewebsite\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebody_string\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003estringify\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ebody\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eA second way to make your code less long is to break down your code into functions.In a main function, you can outsource tasks to other functions.This way, a reader can see at a glance what the main function does, and then head to the other functions to read more details, as in the example below where \u003ccode\u003ecreate_content()\u003c/code\u003e calls other functions to create a title, a page, and then create its output that combines the two.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecreate_content\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ewebsite\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ecreate_title\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ewebsite\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003epage\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ecreate_page\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ewebsite\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecombine_elements\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003etitle\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epage\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epage\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eIn their book \u003ca href=\"https://www.manning.com/books/learn-ai-assisted-python-programming\"\u003eLearn AI-Assisted Python Programming\u003c/a\u003e, Leo Porter and Daniel Zingaro share the attributes of good functions: One clear task to perform, clearly defined behavior, short in number of lines of code, clear input and output, general value over specific use.\u003c/p\u003e\u003cp\u003eIt is also helpful to know how to quickly navigate between functions in your IDE!In RStudio IDE, you can use \u003ccode\u003eCtrl+click\u003c/code\u003e on the function name, or type its name in the search bar accessed with \u003ccode\u003eCtrl+.\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eA third way to shorten your code is to use existing functions from base R or add-on packages.For instance, to combine a list of default values with a list of custom values, you can use the \u003ca href=\"https://masalmon.eu/2023/06/06/basic-patterns/#combine-a-list-of-default-values-with-a-list-of-custom-values\"\u003e\u003ccode\u003emodifyList()\u003c/code\u003e function\u003c/a\u003e.As with human languages, we learn more R words \u003ca href=\"https://masalmon.eu/tags/useful-functions/\"\u003eover time\u003c/a\u003e, by reading other people\u0026rsquo;s code and having them read our code..\u003c/p\u003e\u003ch3 id=\"not-too-wordy-just-the-right-amount-of-comments\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#not-too-wordy-just-the-right-amount-of-comments\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNot too wordy: just the right amount of comments\u003c/h3\u003e\u003cp\u003eThis part of the training was a shorter version of the R-hub blog post \u003ca href=\"https://blog.r-hub.io/2023/01/26/code-comments-self-explaining-code/\"\u003eWhy comment your code as little (and as well) as possible\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eCode comments are not a narrator\u0026rsquo;s voice-over of the code, they should be little alerts.The more comments there are, the more likely it is that the reader will skip them.\u003c/p\u003e\u003cp\u003eCode comments should not be a band-aid for bad naming or overly complex code: instead of adding a comment, can you rename a variable or refactor a piece of code?\u003c/p\u003e\u003cp\u003eA useful idea is to use \u003ca href=\"https://blog.r-hub.io/2023/01/26/code-comments-self-explaining-code/#use-helper-functions-or-explaining-variables\"\u003eself-explanatory functions or variables\u003c/a\u003e, where code like\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"nf\"\u003eis.na\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nf\"\u003enzchar\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003euse_string\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ebecomes\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ex_is_not_empty_string\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"o\"\u003e!\u003c/span\u003e\u003cspan class=\"nf\"\u003eis.na\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nf\"\u003enzchar\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex_is_not_empty_string\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003euse_string\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eOf course code comments remain important when needed!Examples of good comments include:\u003c/p\u003e\u003cul\u003e\u003cli\u003efunction documentation with roxygen2,\u003c/li\u003e\u003cli\u003easpects you’d like to point out to a code reviewer, such as \u003ccode\u003e# This query can not be done via GraphQL, so have to use v3 REST API\u003c/code\u003e,\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://blog.r-hub.io/2023/01/26/code-comments-self-explaining-code/#use-comments-for-the-scripts-outline\"\u003ecomments that provide a table of contents\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"clear-code\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#clear-code\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eClear code\u003c/h2\u003e\u003cp\u003eIn the second part of the training, we shared tips that improve code clarity.\u003c/p\u003e\u003ch3 id=\"self-explanatory-names\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#self-explanatory-names\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSelf-explanatory names\u003c/h3\u003e\u003cp\u003eNaming things is notoriously hard.We shared these ideas:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eFollow fashion, meaning, use the same words as others in your field or programming language.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFelienne Hermans, in her book \u003ca href=\"https://www.manning.com/books/the-programmers-brain\"\u003eThe Programmer\u0026rsquo;s Brain\u003c/a\u003e, advises choosing the concepts that go into the name, the words to say it, then putting them together. This approach in three steps is a good way to get unstuck.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFollowing the previous advice, names should be consistent across code base and \u003cem\u003ename molds\u003c/em\u003e are a very good tool for that. Name molds are patterns in which the elements of a name are combined, for example if you calculate the maximum value of crop yield, you need to agree if \u003ccode\u003emaximum\u003c/code\u003e will be \u003ccode\u003emax\u003c/code\u003e or \u003ccode\u003emaximum\u003c/code\u003e and if the word will be at the beginning or at the end of the variable name: should be \u003ccode\u003emaxYield\u003c/code\u003e or \u003ccode\u003eyieldMax\u003c/code\u003e?  By normalizing how to name things, our code will be easier to read.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e“The greater the distance between a name’s declaration and its uses, the longer the name should be” (Andrew Gerrand). However, no matter how close to defining a variable you use it, don\u0026rsquo;t use a smart very short abbreviation.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThere are several ways to write variable names. camelCase style leads to higher accuracy when reading code (Dave Binkley, 2009) and is better for reading the code with screen readers.  We know it is difficult to change the style of an existing project, but if you are in a situation where you can decide from scratch, then consider using Camel Case? If you\u0026rsquo;re not sure about case names, refer to Allison Horst\u0026rsquo;s \u003ca href=\"https://allisonhorst.com/everything-else\"\u003ecartoon of cases\u003c/a\u003e (scroll down to \u0026ldquo;Cartoon representations of common cases in coding\u0026rdquo;).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA name is clear if the person reviewing your code agrees. 😉\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eA further tip is that it\u0026rsquo;s absolutely ok to create functions that wrap existing functions just to change their name.This strategy is common to change the argument order, but fine for naming too.Say you prefer your function names to be actions (verbs) rather than passive descriptions, you can have:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# In utils.R\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eremove_extension\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etools\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003efile_path_sans_ext\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# In other scripts\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eremove_extension\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"logic-tips-early-return-switch\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#logic-tips-early-return-switch\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLogic tips: early \u003ccode\u003ereturn()\u003c/code\u003e, \u003ccode\u003eswitch()\u003c/code\u003e\u003c/h3\u003e\u003cp\u003eIn a function,\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edo_thing\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eis.na\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kc\"\u003eNA\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"kr\"\u003eelse\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eis equivalent to\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edo_thing\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eis.na\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003ereturn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kc\"\u003eNA\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ebut the latter, with the early \u003ccode\u003ereturn()\u003c/code\u003e has less nesting and emphasizes the \u003ca href=\"https://github.com/jennybc/code-smells-and-feels\"\u003e\u0026ldquo;happy path\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe \u003ca href=\"https://rdrr.io/r/base/switch.html\"\u003e\u003ccode\u003eswitch()\u003c/code\u003e\u003c/a\u003e function can also help you remove nested if-else.With it,\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;mean\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"kr\"\u003eelse\u003c/span\u003e \u003cspan class=\"kr\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;median\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emedian\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e \u003cspan class=\"kr\"\u003eelse\u003c/span\u003e \u003cspan class=\"kr\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;trimmed\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etrim\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e.1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ebecomes\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003eswitch\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003emean\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003emedian\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003emedian\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etrimmed\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etrim\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e.1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"less-code\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#less-code\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLess code\u003c/h3\u003e\u003cp\u003eThe code you \u003cem\u003edon\u0026rsquo;t\u003c/em\u003e write has no bug (that you are responsible for) and does not need to be read. \u0026#x1f389;\u003c/p\u003e\u003cp\u003eFirst of all, be strict about the scope of what you are trying to accomplish.\u003c/p\u003e\u003cp\u003eSecond, use trusted dependencies to outsource part of the work.The \u003ca href=\"https://r-pkgs.org/dependencies-mindset-background.html\"\u003e\u0026ldquo;Dependencies: Mindset and Background\u0026ldquo;\u003c/a\u003e chapter of the R packages book by Hadley Wickham and Jenny Bryan is a great read on the topic.\u003c/p\u003e\u003ch2 id=\"how-can-you-improve-your-code\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-can-you-improve-your-code\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow can you improve your code?\u003c/h2\u003e\u003cp\u003eIn practice, how do you apply your code style learnings?And how do you update your legacy codebases created before you knew about some of these aspects?\u003c/p\u003e\u003ch3 id=\"spring-cleaning\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#spring-cleaning\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSpring cleaning\u003c/h3\u003e\u003cp\u003eMaybe you can work on code styling and refactoring regularly\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOnce a year? Andy Teucher wrote an interesting blog post about the \u003ca href=\"https://www.tidyverse.org/blog/2023/06/spring-cleaning-2023/\"\u003etidyverse spring cleaning\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eMore often?\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA good strategy is also to work a bit on refactoring every time you enter a codebase to fix a bug or add a feature. The refactoring does not need to go into the same commit / branch, keep your code changes nuclear and easy to review.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"lintr\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#lintr\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003elintr\u003c/h3\u003e\u003cp\u003eThe lintr package is a fantastic package.Its linters, or rules, will remind you or teach you of elements to fix that you didn\u0026rsquo;t know about or couldn\u0026rsquo;t keep in your head.You can run it every once in a while or have it run on continuous integration.\u003c/p\u003e\u003cp\u003eEven simply reading through its \u003ca href=\"https://lintr.r-lib.org/reference/index.html\"\u003ereference\u003c/a\u003e might show you functions or patterns you were not aware of.A true gem of the R ecosystem!\u003c/p\u003e\u003ch3 id=\"human-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#human-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHuman review\u003c/h3\u003e\u003cp\u003eOther humans will have a good external perspective on your code and probably good tips for you!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eRead your colleagues’ code and vice versa! The tidyverse team has a \u003ca href=\"https://code-review.tidyverse.org/\"\u003ecode review guide\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eAt rOpenSci, we run a \u003ca href=\"/software-review/\"\u003esoftware peer-review system of packages\u003c/a\u003e \u0026#x1f601;\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"further-resources\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#further-resources\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFurther resources\u003c/h2\u003e\u003cp\u003eThese are the references for most of the training content. \u0026#x1f638;\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eJenny Bryan\u0026rsquo;s talk \u003ca href=\"https://github.com/jennybc/code-smells-and-feels\"\u003eCode Smells and Feels\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eBook \u003ca href=\"https://www.oreilly.com/library/view/the-art-of/9781449318482/\"\u003eThe Art of Readable Code\u003c/a\u003e by Dustin Boswell and Trevor Foucher\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eBook \u003ca href=\"https://design.tidyverse.org/\"\u003eTidy Design by Hadley Wickham, in progress\u003c/a\u003e, with \u003ca href=\"https://tidydesign.substack.com/\"\u003eassociated newsletter\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eBook \u003ca href=\"https://masalmon.eu/2023/10/19/reading-notes-philosophy-software-design/\"\u003eA Philosophy of Software Design by John Ousterhout\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e","url":"https://ropensci.org/blog/2024/02/22/beautiful-code/","date_published":"2024-02-22T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/x436c-7vr38","title":"Read and Play Digital Music (MIDI) in R using the *fluidsynth* package","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["tech notes","music","sound"],"content_html":"\u003cp\u003eA few weeks ago, prof \u003ca href=\"https://www.crumplab.com/people/matt_crump.html\"\u003eMatt Crump\u003c/a\u003e wrote a \u003ca href=\"https://homophony.quest/blog/32_1_30_24_R_synth/\"\u003eblog post\u003c/a\u003e in which he explores tools to handle MIDI data in R, in preparation for a cognition experiment that involves creating musical stimuli. In the article he ends up using a mix of external command line tools \u003ccode\u003effmpeg\u003c/code\u003e and \u003ccode\u003efluidsynth\u003c/code\u003e and a python module.\u003c/p\u003e\u003cp\u003eThis solution of course hurts my R soul: Invoking shell commands from R \u003ca href=\"/blog/2021/09/13/system-calls-r-package/#downsides-of-system-commands\"\u003eis unreliable\u003c/a\u003e and users are often unable (or unwilling) to install all kinds of extra software on their machine. Some tools may not even be available for all platforms, or create conflicts, or the user might not have permission to install software in the first place. So let\u0026rsquo;s see what we can do to improve the situation.\u003c/p\u003e\u003ch2 id=\"the-fluidsynth-r-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-fluidsynth-r-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe \u0026lsquo;fluidsynth\u0026rsquo; R package\u003c/h2\u003e\u003cp\u003e\u003ca href=\"https://www.fluidsynth.org/\"\u003eFluidSynth\u003c/a\u003e is a widely used software synthesizer, and includes a neat C interface \u003ca href=\"https://www.fluidsynth.org/api/\"\u003elibfluidsynth\u003c/a\u003e. We created a new package with R bindings that allows for parsing, playing and converting midi in R without the need for external programs. You can install the \u003ccode\u003efluidsynth\u003c/code\u003e package directly from \u003ca href=\"https://ropensci.r-universe.dev/fluidsynth\"\u003er-universe\u003c/a\u003e:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003einstall.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;fluidsynth\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;https://ropensci.r-universe.dev\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eOn Windows and MacOS \u003ccode\u003elibfluidsynth\u003c/code\u003e is statically linked, which basically means it is already included with the binary R package. On Linux you may need to install \u003ccode\u003elibfluidsynth\u003c/code\u003e from your distribution; the package will automatically show you when to do so.\u003c/p\u003e\u003ch2 id=\"example-parse-midi-data\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#example-parse-midi-data\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExample: parse MIDI data\u003c/h2\u003e\u003cp\u003eLet\u0026rsquo;s start with reading a midi file to see what it contains. The \u003ccode\u003emidi_read\u003c/code\u003e function takes a path to a midi file as argument and returns a data frame with so called midi events:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efluidsynth\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emy_midi\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003edemo_midi\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emidi_df\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003emidi_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emy_midi\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e    tick channel event          param1 param2   \u0026lt;int\u0026gt;   \u0026lt;int\u0026gt; \u0026lt;fct\u0026gt;           \u0026lt;int\u0026gt;  \u0026lt;int\u0026gt; 1     0       0 MIDI_SYSEX          9      1 2     0       0 NA             555556      0 3    80       0 CONTROL_CHANGE    121      0 4    81       1 CONTROL_CHANGE    121      0 5    82       2 CONTROL_CHANGE    121      0 6    83       3 CONTROL_CHANGE    121      0 7    84       4 CONTROL_CHANGE    121      0 8    85       5 CONTROL_CHANGE    121      0 9    86       6 CONTROL_CHANGE    121      010    87       7 CONTROL_CHANGE    121      0# ℹ 23,001 more rows\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eEach row in the data frame represents an event, such as an instrument being configured or a note being played. The \u003ccode\u003emidi_df\u003c/code\u003e data frame has 5 columns:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003etick\u003c/code\u003e - a relative timestamp\u003c/li\u003e\u003cli\u003e\u003ccode\u003echannel\u003c/code\u003e - on which channel (e.g for which instrument) does the event occur\u003c/li\u003e\u003cli\u003e\u003ccode\u003eevent\u003c/code\u003e - the type of event: usually a musical note being played or \u003ca href=\"https://cmtext.indiana.edu/MIDI/chapter3_controller_change.php\"\u003econtroller change\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ccode\u003eparam1\u003c/code\u003e and \u003ccode\u003eparam2\u003c/code\u003e: each midi event can take 2 numeric parameters. The meaning of these parameters depends on the type of event. For the common \u0026ldquo;note on\u0026rdquo; event, these represent the note and velocity.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eActually \u003ccode\u003emidi_read()\u003c/code\u003e is similar to \u003ccode\u003etuneR::readMidi\u003c/code\u003e except for that it does not include midi metadata in the output (and is much faster). But now on to the fun stuff.\u003c/p\u003e\u003ch2 id=\"synthesizing-and-soundfonts\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#synthesizing-and-soundfonts\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSynthesizing and soundfonts\u003c/h2\u003e\u003cp\u003eLet\u0026rsquo;s play the midi! The \u003ccode\u003emidi_play()\u003c/code\u003e function tries to detect your local audio hardware and you should hear music playing:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efluidsynth\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003emidi_play\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003edemo_midi\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003esoundfont\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003esoundfont_path\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNow \u003ccode\u003emidi_play\u003c/code\u003e has a few arguments that are important to understand. The most important one is the \u003ccode\u003esoundfont\u003c/code\u003e. What is a soundfont?\u003c/p\u003e\u003ch2 id=\"what-is-a-soundfont\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-a-soundfont\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is a soundfont\u003c/h2\u003e\u003cp\u003eBesides the midi file, a soundfont provides the other essential ingredient for synthesizing digital music.\u003c/p\u003e\u003cp\u003eAs explained above, a midi file is mostly a table of timestamps and note values. It does not contain any audio. This is where soundfonts come in: a soundfont contains a soundbank of audio fragments of all the notes being played by different instruments; analogous to the glyphs in a typeface font. The software synthesizer uses these audio fragments as the basis for generating music from the midi data.\u003c/p\u003e\u003cp\u003eThe sound and quality of the output is very much determined by which soundfont you are using. On Linux distributions a soundfont is often included with libfluidsynth; on Windows and MacOS the R package defaults to a nice free soundfont called \u003ca href=\"https://schristiancollins.com/generaluser\"\u003eGeneralUser GS\u003c/a\u003e by Pianist and composer S. Christian Collins. You can easily try other soundfonts as well, just download the \u003ccode\u003e.sf2\u003c/code\u003e file and set the path in \u003ccode\u003emidi_play()\u003c/code\u003e.\u003c/p\u003e\u003ch2 id=\"rendering-audio-to-a-file\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#rendering-audio-to-a-file\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRendering audio to a file\u003c/h2\u003e\u003cp\u003eWhereas \u003ccode\u003emidi_play()\u003c/code\u003e synthesizes the music in real-time to your soundcard, it can also save the output into an audio file. This is what \u003ccode\u003emidi_convert()\u003c/code\u003e does:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003emidi_convert\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003emidi\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003edemo_midi\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eoutput\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;output.mp3\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eInternally this performs two steps: first the midi is synthesized by fluidsynth into a raw/wav file. This file can be very large and may not work in all players. Therefore it is automatically converted it into a proper compressed audio format such as mp3, using the \u003ca href=\"https://docs.ropensci.org/av/\"\u003eav\u003c/a\u003e package \u003ccode\u003eav::av_audio_convert()\u003c/code\u003e. The output format is determined by the file extension, see \u003ccode\u003eav::av_muxers()\u003c/code\u003e for supported formats on your system.\u003c/p\u003e\u003cp\u003eNote that similar to \u003ccode\u003efluidsynth\u003c/code\u003e, the \u003ccode\u003eav\u003c/code\u003e package replaces the need for the \u003ccode\u003effmpeg\u003c/code\u003e command line utility, by binding directly to the ffmpeg C interface. So we can safely depend on it, as users on e.g. Windows and MacOS will not need to install any 3rd party software.\u003c/p\u003e\u003ch2 id=\"additional-settings\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#additional-settings\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAdditional settings\u003c/h2\u003e\u003cp\u003eBesides the choice of soundfont, fluidsynth provides many more options to influence the synthesizing process which you can set in the \u003ccode\u003esettings\u003c/code\u003e  argument in \u003ccode\u003emidi_play\u003c/code\u003e or \u003ccode\u003emidi_convert\u003c/code\u003e:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003emidi_convert\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003edemo_midi\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eoutput\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;low-quality.mp3\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003esettings\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;synth.sample-rate\u0026#39;\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e22050\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eUse \u003ccode\u003efluidsynth_setting_list()\u003c/code\u003e and \u003ccode\u003efluidsynth_setting_options()\u003c/code\u003e to see all supported options and their types and options. To get the default for a given option use \u003ccode\u003efluidsynth_setting_default()\u003c/code\u003e:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# List all available settings\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003efluidsynth_setting_list\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# List possible values for a given options\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003efluidsynth_setting_options\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;audio.driver\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Get the default for a given option:\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003efluidsynth_setting_default\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;synth.sample-rate\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2024/02/20/fluidsynth/","date_published":"2024-02-20T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/n29ak-pmk26","title":"Help make waywiser better! User requests wanted","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Mike Mahoney","url":"https://orcid.org/0000-0003-2402-304X","avatar":"https://github.com/mikemahoney218.png","_role":["author"]}],"tags":["package development","tech notes"],"content_html":"\u003cp\u003eThe package \u003ca href=\"https://docs.ropensci.org/waywiser\"\u003ewaywiser\u003c/a\u003e maintained by \u003ca href=\"/author/mike-mahoney\"\u003eMike Mahoney\u003c/a\u003e provides ergonomic methods for assessing spatial models.Assessing predictive models of spatial data can be challenging,both because these models are typically built for extrapolating outside the original region represented by training data and due to potential spatially structured errors,with \u0026ldquo;hot spots\u0026rdquo; of higher than expected error clustered geographically due to spatial structure in the underlying data.The waywiser package tries to make it easier,providing methods for assessing models fit to spatial data,including approaches for measuring the spatial structure of model errors, assessing model predictions at multiple spatial scales,and evaluating where predictions can be made safely.Functions in waywiser are designed to be useful on their own,and additionally integrate naturally with  the tidymodels framework.\u003c/p\u003e\u003ch2 id=\"help-wanted-what-is-missing-in-waywiser\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#help-wanted-what-is-missing-in-waywiser\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHelp wanted: what is missing in waywiser?\u003c/h2\u003e\u003cp\u003eThe ambition for waywiser is for it to become a more expansive set of tools for evaluating models. As a user or potential user, what gaps do you see between waywiser and your dream workflow? What challenges do you have assessing your models, what protocols are out there that don’t have good implementations in R? We want to hear from you!\u003c/p\u003e\u003ch2 id=\"how-to-help\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-help\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to help?\u003c/h2\u003e\u003cp\u003ePlease open an issue in waywiser’s GitHub repository: \u003ca href=\"https://github.com/ropensci/waywiser/issues\"\u003ehttps://github.com/ropensci/waywiser/issues\u003c/a\u003e (or comment on an open issue if one of them is relevant to you!)\u003c/p\u003e\u003ch2 id=\"thank-you\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#thank-you\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThank you!\u003c/h2\u003e\u003cp\u003eThank you!Interested in contributing in other ways to rOpenSci?Do not miss our \u003ca href=\"https://contributing.ropensci.org\"\u003econtributing guide\u003c/a\u003e.Also stay tuned for more similar posts about maintainers’ specific call for contributions.Last but not least, if you maintain an rOpenSci package and would like to put out such a call, get in touch with us.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/02/19/waywiser-call-help/","date_published":"2024-02-19T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/s8tfx-mfh53","title":"Introducing rOpenSci Champions - Cohort 2023-2024","language":"en","authors":[{"name":"Andrea Gomez Vargas","url":"https://orcid.org/0009-0007-8745-3967","avatar":"https://github.com/SoyAndrea.png","_role":["author"]},{"name":"Erika Siregar","url":"https://ropensci.org/author/erika-siregar/","avatar":"https://github.com/erikaris.png","_role":["author"]},{"name":"Ezekiel Adebayo Ogundepo","url":"https://ropensci.org/author/ezekiel-adebayo-ogundepo/","avatar":"https://github.com/gbganalyst.png","_role":["author"]},{"name":"Francesca Belem Lopes Palmeira","url":"https://orcid.org/0000-0002-7597-1157","avatar":"https://github.com/fblpalmeira.png","_role":["author"]},{"name":"Jacqui Levy","url":"https://ropensci.org/author/jacqui-levy/","avatar":"https://github.com/Jacqui-123.png","_role":["author"]},{"name":"Liz Hare","url":"https://ropensci.org/author/liz-hare/","avatar":"https://ropensci.org/img/team/liz-hare.jpg","_role":["author"]},{"name":"Mirna Vazquez Rosas Landa","url":"https://ropensci.org/author/mirna-vazquez-rosas-landa/","avatar":"https://github.com/mirnavazquez.png","_role":["author"]},{"name":"Sehrish Kanwal","url":"https://ropensci.org/author/sehrish-kanwal/","avatar":"https://github.com/skanwal.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]},{"name":"Yi-Chin Sunny Tseng","url":"https://ropensci.org/author/yi-chin-sunny-tseng/","avatar":"https://github.com/SunnyTseng.png","_role":["author"]}],"tags":["community","champions program"],"content_html":"\u003cp\u003eThe rOpenSci Champions Program starts this 2024 with a new cohort of Champions.  We are pleased to introduce you to our Champions and their projects!\u003c/p\u003e\u003ch2 id=\"ezekiel-adebayo-ogundepo\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ezekiel-adebayo-ogundepo\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEzekiel Adebayo Ogundepo\u003c/h2\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/ezekiel-ogundepo.png\"\t\t\talt=\"Profile photo of Ezekiel Adebayo Ogundepo.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eEzekiel Adebayo Ogundepo - GBG Analytics Limited\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHello, I\u0026rsquo;m Ezekiel, a data science professional deeply fascinated by the intersection of mathematics, statistics, and real-world challenges. My journey in data science has been marked by several achievements, including being a Certified RStudio Tidyverse Instructor, a Mastercard Scholar, a Federal Government of Nigeria (FSB) Scholar, an UNLEASH Talent, a Heidelberg Laureate Forum (HLF) Fellow and a Global Partnership for Sustainable Development Data Fellow.\u003c/p\u003e\u003cp\u003eI hold a B.Sc. in Statistics (First Class) and an M.Sc. in Mathematical Sciences. My passion for research software development is evident in my contributions to CRAN, where I have developed packages like \u0026lsquo;forstringr\u0026rsquo; and \u0026lsquo;bulkreadr\u0026rsquo;.\u003c/p\u003e\u003cp\u003eMy aspiration to further my impact in the field has led me to apply for the rOpenSci Championship program as a participant and reviewer. This program will enhance my skills and empower me to build and sustain a vibrant research software engineering community in Nigeria. My goal is to leverage the knowledge and experiences from the rOpenSci Champion program to grow personally and professionally, contributing significantly to the field of data science.\u003c/p\u003e\u003ch2 id=\"dr-sehrish-kanwal\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#dr-sehrish-kanwal\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDr. Sehrish Kanwal\u003c/h2\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/sehrish-kanwal.jpg\"\t\t\talt=\"Profile photo of Sehrish Kanwal.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eSehrish Kanwal - The University of Melbourne\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am a bioinformatics scientist at the University of Melbourne Centre for Cancer Research (UMCCR). I graduated with a BS-honours degree in Bioinformatics from Pakistan and continued my career in Bioinformatics with a PhD from the School of Computing and Information Systems, University of Melbourne, Australia. I am a highly experienced bioinformatician, and specialise in the development of pipelines for the processing, mining, and integration of Next Generation Sequencing (NGS) data, with a particular focus on precision oncology.\u003c/p\u003e\u003cp\u003eAs a Champion, my goal is to submit a WIP R package to the rOpenSci Peer Review committee. This offers me a valuable chance to gather insights into optimal practices for R package development. Navigating the review process with the rOpenSci Peer Review committee not only streamlines the eventual submission to CRAN but also enriches my understanding of the review process.\u003c/p\u003e\u003cp\u003eThrough proactive engagement as an rOpenSci Champion, I aim to enable collaboration and robust knowledge exchange, and cultivate cross-institutional partnerships, whereby I can play a pivotal role in facilitating the exchange of expertise and resources, fostering mutual growth and advancement.\u003c/p\u003e\u003ch2 id=\"andrea-gomez-vargas\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#andrea-gomez-vargas\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAndrea Gomez Vargas\u003c/h2\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/andrea-vargas.png\"\t\t\talt=\"Profile photo of Andrea Gomez Vargas.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eAndrea Gomez Vargas - INDEC Argentina, R-Ladies Global, Latin-R\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI’m Andrea Gomez Vargas, I have a degree in Sociology. I\u0026rsquo;m from Colombia, but I’ve lived in Buenos Aires, Argentina since 2012. I am currently working as a population statistics analyst at the National Institute of Statistics and Census - INDEC Argentina, I am also a university professor of social sciences and data science where I teach R.\u003c/p\u003e\u003cp\u003eI am an active member of the R community in Argentina and Latin America. I have been part of RLadies Buenos Aires and am currently part of the RLadies global team and the LatinR organizing committee.\u003c/p\u003e\u003cp\u003eAs a Champion, my project is to generate a package that makes census data available, homogenized and ready to use. It would include the census data from 1970 to 2022. Having a package of census information will allow the public and private sectors, citizens and other actors in society to access current and historical information on Argentina\u0026rsquo;s population, households and housing in a more accessible way.\u003c/p\u003e\u003cp\u003eBeing part of the program is an opportunity to have the guidance of an expert community on the topic. I feel that learning about package development is the next step in my career using R and as part of its community.\u003c/p\u003e\u003cp\u003eI’m also looking forward to sharing experiences among the Champions and learning from everyone during this process.\u003c/p\u003e\u003ch2 id=\"liz-hare\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#liz-hare\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLiz Hare\u003c/h2\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/liz-hare.jpg\"\t\t\talt=\"Profile photo of Liz Hare.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eLiz Hare - Dog Genetics LLC, ManyDogs Project, The Turing Way\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI’m Liz Hare, PhD from New York, USA. I work on quantitative genetics and statistics for the working dog field, including research and evaluations for selective breeding. I serve as the Assistant Director for Data Management and Open Science at the ManyDogs Project, a consortium of researchers that aims to improve cognitive research by using larger data sets and open science practices. My project with the rOpenSci Champions Program is to improve my R code reviewing skills and apply them to ManyDogs and other open science projects.\u003c/p\u003e\u003cp\u003eI also work on inclusion and accessibility in the R and open science communities with The Turing Way, UseR!, and Forwards with the perspective of a screen reader user.\u003c/p\u003e\u003cp\u003eAs an rOpenSci Champion, I hope to learn and contribute to a new group of open science collaborators and to take the skills and knowledge back to all the teams I work with. I’m looking forward to both rOpenSci’s general open science education and to learning specific practices for code review (which might improve my code, too!). Many thanks to everyone who organizes this program! I’m looking forward to getting started.\u003c/p\u003e\u003ch2 id=\"francesca-belem-lopes-palmeira\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#francesca-belem-lopes-palmeira\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFrancesca Belem Lopes Palmeira\u003c/h2\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/francesca-palmeira.jpg\"\t\t\talt=\"Profile photo of Francesca Belem Lopes Palmeira.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eFrancesca Belem Lopes Palmeira - RLadies Ribeirão Preto\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is Francesca Belem Lopes Palmeira. I am a Brazilian Biologist, Doctor in Sciences - major in Forest Resources, and am interested in conservation conflicts, ecological modeling and data visualization. I plan to develop a package called \u0026lsquo;Potential for Conflict Index - PCI\u0026rsquo;, which is a descriptive statistical method used to enhance the understanding of outcomes in human dimensions research. The package will equip users with the tools required for calculating, comparing, and graphing the potential for conflict. The concepts of consensus and disagreement/conflict hold relevance across various fields, including economics, political science, psychology, sociology, and natural resources. It is worth noting that although PCI can currently be computed using software such as Excel, SPSS, and SAS, there is no dedicated R package available for conducting this specific analysis. I wish to participate in the Program with the goal of enhancing my technical skills in software development and acquiring best practices for package development. I am eager to collaborate on projects with fellow community members, recognizing that this will not only contribute to my growth as a practitioner but also strengthen the community as a whole.\u003c/p\u003e\u003ch2 id=\"binod-jung-bogati\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#binod-jung-bogati\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBinod Jung Bogati\u003c/h2\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/binod-bogati.jpeg\"\t\t\talt=\"Profile photo of Binod Jung Bogati.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eBinod Jung Bogati - R User Group Nepal, Numeric Mind\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI\u0026rsquo;m a Data Science - Associate Manager at Numeric Mind, with over 3 years experience in Clinical Trial Programming. I\u0026rsquo;m from Nepal and have an undergraduate degree in Computer Science and IT. I\u0026rsquo;m passionate about solving real-world problems using data science and I\u0026rsquo;m proficient in Python, R, and SAS programming languages.\u003c/p\u003e\u003cp\u003eI\u0026rsquo;m working on the nepalcensus package for R, which provides a comprehensive and up-to-date tool for accessing and exploring demographic, socio-economic, and geographic data collected during the most recent census conducted in Nepal. This package is designed to assist researchers, policymakers, and data analysts in understanding and utilizing census data effectively for various applications and insights. During this tenure, I will be working on improving the nepalcensus package with the help of rOpenSci mentors.\u003c/p\u003e\u003cp\u003eAs someone involved in various R-related projects and initiatives, I\u0026rsquo;m excited about the rOpenSci Champions Program and the potential impact it can have on my institution, community, and career. I believe that the program is a great opportunity to continue sharpening my skills and contribute to the open-source R community.\u003c/p\u003e\u003ch2 id=\"sunny-tseng\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#sunny-tseng\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSunny Tseng\u003c/h2\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/sunny-tseng.jpg\"\t\t\talt=\"Profile photo of Sunny Tseng.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eSunny Tseng - University of Northern British Columbia\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHi, this is Sunny, a PhD candidate living in Vancouver, Canada. Originally from Taiwan, I am a field sound recordist, an artist, and an avian researcher. Throughout my academic career, I have been fascinated by R, which I have applied to acoustic data analysis, spatial data analysis, and statistical modeling. In the rOpenSci Champions Program, I will develop \u0026lsquo;bbsTrim\u0026rsquo;, a package to streamline Taiwan BBS data retrieval and analysis. \u0026lsquo;bbsTrim\u0026rsquo; will support data retrieval from GBIF, where Taiwan BBS data is stored. \u0026lsquo;bbsTrim\u0026rsquo; will also include population trend modeling, using TRIM (Trends and Indices for Monitoring data). Users will be able to tailor species analysis, controlling data stratification, preparation, and modeling. As an R package, \u0026lsquo;bbsTrim\u0026rsquo; will be easily integrated into other R programming processes. The goal is to expand access of Taiwan\u0026rsquo;s BBS data to the broader R-society in Taiwan.\u003c/p\u003e\u003ch2 id=\"mirna-vazquez-rosas-landa\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mirna-vazquez-rosas-landa\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMirna Vazquez Rosas Landa\u003c/h2\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/mirna-vazquez.jpg\"\t\t\talt=\"Profile photo of Mirna Vazquez Rosas Landa.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eMirna Vazquez Rosas Landa - UNAM, Instituto de Ciencias del Mar y Limnología\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am an Assistant Professor at the Marine Science and Limnology Institute at UNAM. My research focus on unraveling the mysteries of the ocean microbiome.\u003c/p\u003e\u003cp\u003eI explore fundamental questions of biogeography, evolution, ecology, and physiology within the ocean microbiome. I am driven by a quest to understand the drivers behind microbial species distribution in the ocean, explore the genomic foundations of adaptation leading to speciation, and discern the crucial role of these microorganisms in shaping Earth\u0026rsquo;s biogeochemistry. To address these questions comprehensively, my research approach integrates both computational and experimental methodologies. I employ advanced techniques such as metagenomics, transcriptomics, and stable isotope probing experiments, leveraging their potential to unveil the hidden intricacies of the ocean microbiome.\u003c/p\u003e\u003cp\u003eBeyond research, I am dedicated to the cultivation of knowledge and fostering inclusivity. My engagement in teaching, particularly within the R community, has been a rewarding aspect of my career. I initiated my journey with R as part of the CDSB and Rladies community, eventually becoming a co-organizer of RLadies Xalapa—a safe haven for minorities to explore coding.\u003c/p\u003e\u003cp\u003eI am enthusiastic about the ongoing research endeavors at UNAM and look forward to further contributing to the exploration of the ocean\u0026rsquo;s microbial realms while inspiring the next generation of scientists.\u003c/p\u003e\u003ch2 id=\"erika-siregar\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#erika-siregar\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eErika Siregar\u003c/h2\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/erika-siregar.jpeg\"\t\t\talt=\"Profile photo of Erika Siregar.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eErika Siregar - BPS-Statistics Indonesia\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am Erika Siregar, a data science enthusiast from Jakarta, Indonesia. With an academic background in Statistics and Computer Science, I actively contribute to data-driven insights at BPS-Statistics Indonesia and consult on R Shiny for the bioenergy project with GIZ Indonesia. As the co-founder of R-Ladies Jakarta, I\u0026rsquo;ve observed a strong interest in R among women and gender minorities, highlighting the crucial need for accessible resources. In the rOpenSci Champions Program, my project involves developing \u0026ldquo;rplaywright,\u0026rdquo; an R package seamlessly bridging to Playwright, simplifying web testing and automation for R users. I eagerly anticipate gaining new skills, building connections, and making a meaningful impact in the vibrant rOpenSci community. With my PhD journey in Information Science at the University of Sheffield beginning this April, I envision utilizing my learning and experience in the rOpenSci Champions Program to fortify and advocate for open-source collaboration in my research pursuits.\u003c/p\u003e\u003ch2 id=\"jacqui-levy\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#jacqui-levy\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eJacqui Levy\u003c/h2\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/jacqui-levy.png\"\t\t\talt=\"Profile photo of Jacqui Levy.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eJacqui Levy - Environment and Climate Change Canada, rOpenSci\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am a data analyst with a background in environmental science and a data enthusiast interested in all things to do with data and open-source science. I have worked developing tools to standardize datasets and reporting information related to climate change using R. I am looking forward to learning about software development and being part of the welcoming community of Champions and mentors with rOpenSci.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/02/15/champions-program-champions-2024/","date_published":"2024-02-15T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/a7t5m-cy325","title":"Please Shut Up! Verbosity Control in Packages","language":"en","authors":[{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]}],"tags":["package development"],"content_html":"\u003cp\u003eWe recently introduced a new paragraph to the development version of our dev guide\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eProvide a way for users to opt out of verbosity, preferably at the package level: make message creation dependent on an environment variable or option (like \u003ca href=\"https://usethis.r-lib.org/reference/ui.html?q=usethis.quiet#silencing-output\"\u003e\u0026ldquo;usethis.quiet\u0026rdquo;\u003c/a\u003e in the usethis package), rather than on a function parameter. The control of messages could be on several levels (\u0026ldquo;none, \u0026ldquo;inform\u0026rdquo;, \u0026ldquo;debug\u0026rdquo;) rather than logical (no messages at all / all messages). Control of verbosity is useful for end users but also in tests. More interesting comments can be found in an \u003ca href=\"https://github.com/tidyverse/design/issues/42\"\u003eissue of the tidyverse design guide\u003c/a\u003e.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThis complements the \u003ca href=\"https://stats-devguide.ropensci.org/standards.html#output-verbosity\"\u003estatistical software review requirement for Bayesian software\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThis tech note\u0026rsquo;s aim is to make the new requirement louder, demonstrate some approaches to verbosity control, and to gather community feedback!\u003c/p\u003e\u003ch2 id=\"verbosity-control-at-the-package-level\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#verbosity-control-at-the-package-level\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eVerbosity control at the package level\u003c/h2\u003e\u003cp\u003eControlling verbosity at the function level means that silencing messages requires writing code like:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003emypackage\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003emy_function\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ething\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003everbose\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003emypackage\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003emy_function\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ething\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003everbose\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ez\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003emypackage\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003emy_function\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ething\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003everbose\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWhile this is a very widespread pattern, and quite clear, it has the drawback of introducing clutter to function calls, and of being needed in every function call.Moreover, having verbosity-control at the function-level generally requires other packages which use any such functions to hard-code verbosity (or leave at default, unchangeable values).Not only does this make verbosity control difficult or even impossible, it also prevents effective debugging.\u003c/p\u003e\u003cp\u003eControlling verbosity at the package level means your user, instead, writes:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eoptions\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emypackage.quiet\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# or rlang::local_options() or withr::local_options()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003emypackage\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003emy_function\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ething\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003emypackage\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003emy_function\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ething\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ez\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003emypackage\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003emy_function\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ething\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ePackage-level control is much easier!\u003c/p\u003e\u003ch3 id=\"how-to-implement-package-level-verbosity-control-in-your-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-implement-package-level-verbosity-control-in-your-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to implement package-level verbosity control in your package\u003c/h3\u003e\u003cp\u003eOne option \u0026#x1f605; would be to write your own wrapper for messages such as,\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epkg_message\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kc\"\u003e...\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003egetOption\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;mypackage.quiet\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"kr\"\u003ereturn\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emessage\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kc\"\u003e...\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eFortunately, there are other packages which largely take care of this for you, notably \u003ca href=\"https://rlang.r-lib.org\"\u003erlang\u003c/a\u003e and \u003ca href=\"https://cli.r-lib.org\"\u003ecli\u003c/a\u003e, both of which include their own equivalents of base R\u0026rsquo;s \u003ca href=\"https://stat.ethz.ch/R-manual/R-devel/library/base/html/message.html\"\u003e\u003ccode\u003emessage()\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://stat.ethz.ch/R-manual/R-devel/library/base/html/warning.html\"\u003e\u003ccode\u003ewarning()\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://stat.ethz.ch/R-manual/R-devel/library/base/html/stop.html\"\u003e\u003ccode\u003estop()\u003c/code\u003e\u003c/a\u003e functions.(The cli functions ultimately call the rlang versions, so it really doesn\u0026rsquo;t matter which one you use.)Of course, the base R functions are perfectly fine, and can definitely be used.The alternatives merely make a few aspects more convenient, including:\u003c/p\u003e\u003col\u003e\u003cli\u003eThe \u003ca href=\"https://blog.r-hub.io/2023/11/30/cliff-notes-about-cli/#how-to-make-cli-quiet-or-not\"\u003ecli package\u003c/a\u003e draws on the rlang functions but with improved on-screen format and extensive customization options; and\u003c/li\u003e\u003cli\u003eVerbosity can be controlled in any package which uses rlang or cli by \u003ca href=\"https://rlang.r-lib.org/reference/abort.html#muffling-and-silencing-conditions\"\u003eglobal environment variables\u003c/a\u003e.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eThe second advantage is particularly relevant for the topic of this post.Simply replacing any calls to \u003ccode\u003emessage()\u003c/code\u003e or \u003ccode\u003ewarning()\u003c/code\u003e with the rlang or cli equivalent allows users to suppress messages and warnings globally:\u003c/p\u003e\u003cul\u003e\u003cli\u003eReplace \u003ccode\u003emessage()\u003c/code\u003e with \u003ccode\u003erlang::inform()\u003c/code\u003e or \u003ccode\u003ecli::cli_inform()\u003c/code\u003e. Users can now silence with \u003ccode\u003eoptions(rlib_message_verbosity = \u0026quot;quiet\u0026quot;)\u003c/code\u003e.\u003c/li\u003e\u003cli\u003eReplace \u003ccode\u003ewarning()\u003c/code\u003e with \u003ccode\u003erlang::warn()\u003c/code\u003e or \u003ccode\u003ecli::cli_warn()\u003c/code\u003e. Users can now silence with \u003ccode\u003eoptions(rlib_warning_verbosity = \u0026quot;quiet\u0026quot;)\u003c/code\u003e.\u003c/li\u003e\u003cli\u003eReplace \u003ccode\u003estop()\u003c/code\u003e with \u003ccode\u003erlang::abort()\u003c/code\u003e or \u003ccode\u003ecli::cli_abort()\u003c/code\u003e. Abort has no silencing option.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eNote that there is also an \u0026ldquo;rlang\u0026rdquo; way of setting options, the \u003ca href=\"https://rlang.r-lib.org/reference/local_options.html\"\u003e\u003ccode\u003erlang::local_options()\u003c/code\u003e function\u003c/a\u003e (or the same function in \u003ca href=\"https://withr.r-lib.org/reference/with_options.html\"\u003ethe withr package\u003c/a\u003e).As with messages above, the base R version is fine; the rlang/withr versions simply implement a few additional features.In particular, base R options are always set globally, whereas rlang\u0026rsquo;s local options are set within the current \u003ca href=\"http://adv-r.had.co.nz/Environments.html#env-basics\"\u003eR frame\u003c/a\u003e, and unset when the frame is exited.The code in the final section below provides one example of the advantages of this approach.\u003c/p\u003e\u003cp\u003eFinally, the \u003ccode\u003erlang::local_options()\u003c/code\u003e function can be used to set \u003ccode\u003erlib_message_verbosity = \u0026quot;quiet\u0026quot;\u003c/code\u003e in test files, to suppress the wall of text that often appears when running tests.This wall of text can be an obstacle when trying to debug test logs; using rlang or cli for messages and warnings provides an easy way to actively control test logs and improve debugging.\u003c/p\u003e\u003ch2 id=\"one-step-further-multiple-levels-of-verbosity\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#one-step-further-multiple-levels-of-verbosity\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOne step further: multiple levels of verbosity\u003c/h2\u003e\u003cp\u003eVerbosity control is often implemented as a binary choice, typically controlled by a logical parameter, such as \u003ccode\u003everbose = FALSE\u003c/code\u003e, or \u003ccode\u003equiet = TRUE\u003c/code\u003e.The \u003ccode\u003erlib_message_verbosity\u003c/code\u003e option described above also only has two primary levels, \u0026ldquo;quiet\u0026rdquo; and \u0026ldquo;verbose\u0026rdquo;.Note that these are not logical parameters, but character variables.The default behaviour (of \u0026ldquo;verbose\u0026rdquo;) can also be overridden an additional parameter in the \u003ccode\u003erlang_inform/warn\u003c/code\u003e functions, \u003ccode\u003e.frequency\u003c/code\u003e, which controls how often messages are issued.This is particularly useful in issuing messages only once per R session, by setting \u003ccode\u003efrequency = \u0026quot;once\u0026quot;\u003c/code\u003e.More generally, it may often be useful to implement different levels of verbosity for users and developers, like \u0026ldquo;quiet\u0026rdquo;, \u0026ldquo;inform\u0026rdquo;, and \u0026ldquo;debug\u0026rdquo;.This practice corresponds to the idea of leaving an \u003ca href=\"https://speakerdeck.com/jennybc/object-of-type-closure-is-not-subsettable?slide=77\"\u003eaccess panel\u003c/a\u003e to simplify future trouble-shooting.Even if only two levels are implemented, it is easy to extend levels in the future if they are already defined as character strings; changing verbosity control from logical (dual-level) to multi-level is more complex, and can be avoided by not using logical flags in the first place.\u003c/p\u003e\u003ch3 id=\"verbose-or-quiet\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#verbose-or-quiet\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u0026ldquo;verbose\u0026rdquo; or \u0026ldquo;quiet\u0026rdquo;?\u003c/h3\u003e\u003cp\u003e\u0026ldquo;verbose.\u0026rdquo;Because \u0026ldquo;quiet\u0026rdquo; always means nothing should be done.But because code does things, this translates to having to check whether a \u0026ldquo;quiet\u0026rdquo; parameter is somehow \u003cem\u003enot\u003c/em\u003e quiet.That is negative logic, which makes code harder to read.Positive logic is much clearer, and less error prone: \u003ccode\u003eif (verbose) { ... do something }\u003c/code\u003e, as demonstrated in the following section.\u003c/p\u003e\u003ch2 id=\"bonus-section-regaining-package-level-control-from-global-options\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#bonus-section-regaining-package-level-control-from-global-options\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBonus section: Regaining package level control from global options\u003c/h2\u003e\u003cp\u003eA package which uses rlang/cli/withr-type packages to issue and control messaging will respond to the local (or global) options in the same way as all other packages which use this system.In this way, those options become truly global, as they are shared between and understood by multiple packages.One problem with this is that users may often want to debug their own package only, while leaving all other packages quiet.This again requires custom message handlers, like the following (remembering that the second parameter to the \u003ccode\u003egetOption()\u003c/code\u003e is the default for cases where no such option has been set):\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epkg_message\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kc\"\u003e...\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eis_verbose_mode\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003egetOption\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;mypackage.verbose\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;quiet\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;verbose\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eis_verbose_mode\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# Options local to this function only; reset on exit!\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erlang\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003elocal_options\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erlib_message_verbosity\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;verbose\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003erlang\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003einform\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kc\"\u003e...\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThat then allows behaviour like this:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003epkg_message\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;normal message\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erlang\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003elocal_options\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erlib_message_verbosity\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;quiet\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003epkg_message\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;suppressed message\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erlang\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003elocal_options\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emypackage.verbose\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;verbose\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003epkg_message\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;reawakened message\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003enormal messagereawakened message\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd my local package-level verbosity options can then override the rlang verbosity controls.\u003c/p\u003e\u003ch3 id=\"extending-levels-of-verbosity\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#extending-levels-of-verbosity\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExtending levels of verbosity\u003c/h3\u003e\u003cp\u003eFinally, we\u0026rsquo;ll briefly demonstrate how the rlang/cli two-level verbosity control of \u0026ldquo;quiet\u0026rdquo;/\u0026ldquo;verbose\u0026rdquo; can be extended to implement a \u0026ldquo;debug\u0026rdquo; level in your own package.This again requires a custom message handler, slightly modified from the above to issue debug messages only:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edebug_msg\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kc\"\u003e...\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eis_debug_mode\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003egetOption\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;mypackage.verbose\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;quiet\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;debug\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003eif\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eis_debug_mode\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erlang\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003elocal_options\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erlib_message_verbosity\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;verbose\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erlang\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003einform\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kc\"\u003e...\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# or rlang::warn, cli::cli_alert_info, whatever\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThat enables this behaviour:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emy_fn\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# ... do stuff\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003edebug_msg\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003epaste0\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;\u0026#39;x\u0026#39; has wrong value: \u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003emy_fn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# no message issued\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erlang\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003elocal_options\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erlib_message_verbosity\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;verbose\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003emy_fn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# still not issued\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erlang\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003elocal_options\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emypackage.verbose\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;debug\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003emy_fn\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# debug message is issued!\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026#39;x\u0026#39; has wrong value: 1\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this tech note we explained our new requirement that verbosity control should be at the package rather than at the function level, through the users setting an option.We also presented the aspiration to have verbosity control as a choice between \u003cem\u003edegrees\u003c/em\u003e of verbosity, and showed how that enables verbosity control to be refined in future package development.Now go make some noise - just ensure that you can control it!\u003c/p\u003e\u003cp\u003eHow is verbosity control implemented in the packages you develop or like using?Do you have any comments or questions?Please don\u0026rsquo;t remain quiet. \u0026#x1f609;\u003c/p\u003e","url":"https://ropensci.org/blog/2024/02/06/verbosity-control-packages/","date_published":"2024-02-06T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/jps9f-gsh89","title":"rOpenSci News Digest, January 2024","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2024/01/25/news-january-2024\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-Universe\u003c/h3\u003e\u003cp\u003eThe R-Universe now builds MacOS ARM64 binaries for use on Apple Silicon (aka M1/M2/M3) systems!\u003c/p\u003e\u003cp\u003eFind out more in the related \u003ca href=\"/blog/2024/01/14/runiverse-arm64/\"\u003etech note\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e in our recent \u003ca href=\"/blog/2023/06/21/coworking/\"\u003epost\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-02/\"\u003eTuesday, February 6th, 9:00 Americas Pacific (17:00 UTC)\u003c/a\u003e, R-Universe Office Hours. With cohost \u003ca href=\"/author/jeroen-ooms/\"\u003eJeroen Ooms\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore what the \u003ca href=\"https://r-universe.dev/\"\u003eR-Universe\u003c/a\u003e has to offer;\u003c/li\u003e\u003cli\u003eCreate your own R-Universe;\u003c/li\u003e\u003cli\u003eAsk questions or troubleshoot your R-Universe problems with the cohost and other attendees.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-03/\"\u003eTuesday, March 5th, 9:00 Australia Western (1:00 UTC)\u003c/a\u003e, Dates, Times and Timezones in R. With cohost \u003ca href=\"/author/steff-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and \u003ca href=\"/author/alex-koiter/\"\u003eAlex Koiter\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore resources for working with dates, times, and timezones in R\u003c/li\u003e\u003cli\u003eWork on a project dealing with dates and times\u003c/li\u003e\u003cli\u003eAsk questions or troubleshoot your timezone problems with the cohost and other attendees.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following three packages recently became a part of our software suite, or were recently reviewed again:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/GLMMcosinor\"\u003eGLMMcosinor\u003c/a\u003e, developed by Rex Parsons together with Oliver Jayasinghe, Nicole White, and Oliver Rawashdeh: Allows users to fit a cosinor model using the glmmTMB framework. This extends on existing cosinor modelling packages, including cosinor and circacompare, by including a wide range of available link functions and the capability to fit mixed models. The cosinor model is described by Cornelissen (2014) \u003ca href=\"https://doi.org/10.1186/1742-4682-11-16\"\u003ehttps://doi.org/10.1186/1742-4682-11-16\u003c/a\u003e.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=GLMMcosinor\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/603\"\u003ereviewed\u003c/a\u003e by Michael Sachs and Joaquin Cavieres.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/rangr\"\u003erangr\u003c/a\u003e, developed by Katarzyna Markowska together with Lechosław Kuczyński: Species range dynamics simulation toolset. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/595\"\u003ereviewed\u003c/a\u003e by Tad Dallas and Joanne Potts.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/comtradr\"\u003ecomtradr\u003c/a\u003e, developed by Paul Bochtler together with Harriet Goers and Chris Muir: Interface with and extract data from the United Nations Comtrade API \u003ca href=\"https://comtradeplus.un.org/\"\u003ehttps://comtradeplus.un.org/\u003c/a\u003e. Comtrade provides country level shipping data for a variety of commodities, these functions allow for easy API query and data returned as a tidy data frame. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/613\"\u003ereviewed\u003c/a\u003e by Alicia Schep, Rafael Hellwig, Ernest Guevarra, and Nicholas Potter.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following fifteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/aorsf\" title=\"Accelerated Oblique Random Forests\"\u003eaorsf\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/aorsf/releases/tag/v0.1.3\"\u003e\u003ccode\u003ev0.1.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/aRxiv\" title=\"Interface to the arXiv API\"\u003eaRxiv\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/aRxiv/releases/tag/0.8\"\u003e\u003ccode\u003e0.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/c14bazAAR\" title=\"Download and Prepare C14 Dates from Different Source Databases\"\u003ec14bazAAR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/c14bazAAR/releases/tag/4.1.0\"\u003e\u003ccode\u003e4.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/excluder\" title=\"Checks for Exclusion Criteria in Online Data\"\u003eexcluder\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/excluder/releases/tag/v0.5.1\"\u003e\u003ccode\u003ev0.5.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/GLMMcosinor\" title=\"Fit a Cosinor Model Using a Generalised Mixed Modelling Framework\"\u003eGLMMcosinor\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/GLMMcosinor/releases/tag/v0.2.0\"\u003e\u003ccode\u003ev0.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/hoardr\" title=\"Manage Cached Files\"\u003ehoardr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/hoardr/releases/tag/v0.5.4\"\u003e\u003ccode\u003ev0.5.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.10.0\"\u003e\u003ccode\u003ev0.10.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/piggyback\" title=\"Managing Larger Data on a GitHub Repository\"\u003epiggyback\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/piggyback/releases/tag/v0.1.5\"\u003e\u003ccode\u003ev0.1.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/qualtRics\" title=\"Download Qualtrics Survey Data\"\u003equaltRics\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/qualtRics/releases/tag/v3.2.0\"\u003e\u003ccode\u003ev3.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rerddap\" title=\"General Purpose Client for ERDDAP Servers\"\u003ererddap\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rerddap/releases/tag/v1.1.0-1\"\u003e\u003ccode\u003ev1.1.0-1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgbif\" title=\"Interface to the Global Biodiversity Information Facility API\"\u003ergbif\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgbif/releases/tag/v3.7.9\"\u003e\u003ccode\u003ev3.7.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgnparser\" title=\"Parse Scientific Names\"\u003ergnparser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgnparser/releases/tag/v0.3.0\"\u003e\u003ccode\u003ev0.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.7.11\"\u003e\u003ccode\u003e0.7.11\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.4.1\"\u003e\u003ccode\u003e1.4.1\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/tidyhydat\" title=\"Extract and Tidy Canadian Hydrometric Data\"\u003etidyhydat\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidyhydat/releases/tag/v0.6.1\"\u003e\u003ccode\u003ev0.6.1\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are sixteen recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/613\"\u003ecomtradr\u003c/a\u003e, Interface with the United Nations Comtrade API. Submitted by \u003ca href=\"https://github.com/datapumpernickel\"\u003epaulbochtler\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/603\"\u003eGLMMcosinor\u003c/a\u003e, Fit a cosinor model using a generalised mixed modelling framework. Submitted by \u003ca href=\"https://rwparsons.github.io/\"\u003eRex Parsons\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/595\"\u003erangr\u003c/a\u003e, Mechanistic Simulation of Species Range Dynamics. Submitted by \u003ca href=\"https://github.com/katarzynam-165\"\u003eKatarzyna Markowska\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/609\"\u003ebaRulho\u003c/a\u003e, Quantifying (Animal) Sound Degradation. Submitted by \u003ca href=\"https://marce10.github.io/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003emregions2\u003c/a\u003e, Access Data from Marineregions.org: The Marine Regions Gazetteer and the Marine Regions Data Products. Submitted by \u003ca href=\"https://salvafern.github.io/\"\u003esalvafern\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/619\"\u003equadkeyr\u003c/a\u003e, Tools for converting QuadKeys used in Microsoft\u0026rsquo;s Bing Maps Tile System into raster images. Submitted by \u003ca href=\"https://github.com/flor14\"\u003eFlorencia D\u0026rsquo;Andrea\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/618\"\u003efellingdateR\u003c/a\u003e, Estimate, report and combine felling dates of historical tree-ring. Submitted by \u003ca href=\"https://www.researchgate.net/profile/Kristof_Haneca\"\u003eKriHa\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/608\"\u003ergeeExtra\u003c/a\u003e, Extensions for rgee. Submitted by \u003ca href=\"https://csaybar.github.io\"\u003eCesar Aybar\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/598\"\u003eweatherOz\u003c/a\u003e, An API Client for Australian Weather and Climate Data Resources. Submitted by \u003ca href=\"https://github.com/bozaah\"\u003eRodrigo Pires\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"https://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003epangoling\u003c/a\u003e, Access to Large Language Model Predictions. Submitted by \u003ca href=\"https://bnicenboim.github.io/\"\u003eBruno Nicenboim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/620\"\u003ekarel\u003c/a\u003e, Learning programming with Karel the robot. Submitted by \u003ca href=\"https://unr.edu.ar/\"\u003eMarcos Prunello\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"https://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/es/blog/2024/01/09/champions-program-latinr\"\u003eParticipación  Latinoamérica en el Programa de Campeonas y Campeones de rOpenSci\u003c/a\u003e by Yanina Bellini Saibene, Elio Campitelli, Marcos Prunello, Mauro Lepore, Haydée Svab, Beatriz Milz, Carolina Pradier, Cesar Luis Aybar Camacho, and Pao Corrales. Detalles de la participación latinoamericana en el primer año del programa de campeonas y campeones de rOpenSci.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/01/12/transparency2023\"\u003erOpenSci 2023 Code of Conduct Transparency Report\u003c/a\u003e by Yanina Bellini Saibene, Mark Padgham, and Kara Woo. rOpenSci 2023 Code of Conduct Transparency Report.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/01/14/runiverse-arm64\"\u003eR-universe now builds MacOS ARM64 binaries for use on Apple Silicon (aka M1/M2/M3) systems\u003c/a\u003e by Jeroen Ooms\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2024/01/16/deepl-update-babeldown\"\u003eHow to Update a Translation with Babeldown\u003c/a\u003e by Maëlle Salmon. This post was discussed on the \u003ca href=\"https://rweekly.fireside.fm/149\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/gendercoder/\"\u003egendercoder\u003c/a\u003e, Provides functions and dictionaries for recoding of freetext gender responses into more consistent categories. \u003ca href=\"https://github.com/ropensci/gendercoder/issues/56\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/sofa/\"\u003esofa\u003c/a\u003e, Provides an interface to the NoSQL database \u003ca href=\"https://couchdb.apache.org\"\u003eCouchDB\u003c/a\u003e. \u003ca href=\"https://github.com/ropensci/sofa/issues/82\"\u003eIssue for volunteering\u003c/a\u003e\u003c/p\u003e\u003ch3 id=\"call-for-co-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-co-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for co-maintainers\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"how-to-get-feedback-from-package-users\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-get-feedback-from-package-users\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to get feedback from package users\u003c/h3\u003e\u003cp\u003eMatthias Grenié recently asked an intriguing question on \u003ca href=\"https://ecoevo.social/@LeNematode/111731312906546444\"\u003eMastodon\u003c/a\u003e: \u0026ldquo;Do you know any good resource to collect feedback from users? Or general frameworks?\u0026rdquo;. Among the answers, apart from \u003ca href=\"https://digitalcourage.social/@rstub/111736172101121740\"\u003erOpenSci software peer-review\u003c/a\u003e by Ralf Stubner, we note the mention of \u003ca href=\"https://hachyderm.io/@zkamvar/111732172001573387\"\u003efriction logs\u003c/a\u003e by Zhian N. Kamvar and of a \u003ca href=\"https://fosstodon.org/@almenal99/111733782615742712\"\u003ededicated feedback channel\u003c/a\u003e by Alvaro Mendoza.\u003c/p\u003e\u003ch3 id=\"a-tip-when-refactoring-a-test-file\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-tip-when-refactoring-a-test-file\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA tip when refactoring a test file\u003c/h3\u003e\u003cp\u003eWhen refactoring a test file used with testthat (for instance removing top-level code in favor of \u003ca href=\"https://r-pkgs.org/testing-design.html#sec-tests-files-overview\"\u003etest helpers\u003c/a\u003e), you can add a \u003ca href=\"https://mastodon.social/@gaborcsardi@fosstodon.org/111719992256767987\"\u003e\u003ccode\u003ereturn()\u003c/code\u003e\u003c/a\u003e in the middle of the file so that when you test the file, only the tests above the return statement are run.This way, you can make your way through your script, refactoring it little by little and moving the return statement towards the bottom as you go.\u003c/p\u003e\u003ch3 id=\"code-clubs\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#code-clubs\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCode clubs\u003c/h3\u003e\u003cp\u003eHeidi Seibold wrote about \u003ca href=\"https://heidiseibold.ck.page/posts/code-clubs-good-coding-practices-for-all\"\u003eCode clubs\u003c/a\u003e in her newsletter.A great post to find out about them!She even mentions \u003ca href=\"/coworking\"\u003erOpenSci coworking sessions\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"cold-blooded-software\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#cold-blooded-software\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCold-blooded software\u003c/h3\u003e\u003cp\u003eAlso not R-specific, but have you heard of the phrase \u003ca href=\"https://dubroy.com/blog/cold-blooded-software/\"\u003e\u0026ldquo;cold-blooded software\u0026rdquo;\u003c/a\u003e?An innovative way to think of software that\u0026rsquo;s not updated often but still runs.\u003c/p\u003e\u003ch3 id=\"a-study-of-cran-submissions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-study-of-cran-submissions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA study of CRAN submissions\u003c/h3\u003e\u003cp\u003eLluís Revilla Sancho published an \u003ca href=\"https://llrs.dev/post/2024/01/10/submission-cran-first-try/\"\u003einteresting analysis of CRAN submissions\u003c/a\u003e to find out how many were accepted on the first try.Any guess before reading the blog post?\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/01/25/news-january-2024/","date_published":"2024-01-25T00:00:00+00:00","date_modified":"2025-04-08T11:17:46+02:00"},{"id":"https://doi.org/10.59350/3w9fd-8d411","title":"How to Update a Translation with Babeldown","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["editor"]}],"tags":["tech notes","multilingual"],"content_html":"\u003cp\u003eAs part of rOpenSci\u0026rsquo;s \u003ca href=\"/multilingual-publishing/\"\u003emultilingual publishing project\u003c/a\u003e\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e,  we have been developing the  \u003ca href=\"https://docs.ropensci.org/babeldown/\"\u003ebabeldown\u003c/a\u003e R package, for translating Markdown-based content using the DeepL API.\u003c/p\u003e\u003cp\u003eIn a previous tech note we demonstrated the \u003ca href=\"/blog/2023/09/26/how-to-translate-a-hugo-blog-post-with-babeldown/\"\u003euse of babeldown for translating a blog post\u003c/a\u003e in a workflow supported by Git.Here we use babeldown for translating \u003cstrong\u003eliving\u003c/strong\u003e documents, such as our  \u003ca href=\"https://devguide.ropensci.org/\"\u003edeveloper\u0026rsquo;s guide\u003c/a\u003e.In this case, translations not only need to be created at the time in first writing, but also updated as the document is changed over time.\u003c/p\u003e\u003cp\u003eIn this tech note, we\u0026rsquo;ll show how you can use babeldown to update a translation after you\u0026rsquo;ve edited a document.\u003c/p\u003e\u003ch2 id=\"initial-situation-an-english-document-and-its-french-translation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#initial-situation-an-english-document-and-its-french-translation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eInitial situation: an English document and its French translation\u003c/h2\u003e\u003cp\u003eLet\u0026rsquo;s assume we have an English document called \u003ccode\u003ebla.md\u003c/code\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edir\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ewithr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003elocal_tempdir\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efile\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003efile.path\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edir\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;bla.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efs\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003efile_create\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eenglish_text\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;# header\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;this is some text\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;## subtitle\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;nice!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebrio\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ewrite_lines\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eenglish_text\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# headerthis is some text## subtitlenice!\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWe have already translated it with babeldown, which provides us with an AI-based translation from DeepL, then edited the translation manually to provide the context the AI missed.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eSys.setenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;DEEPL_API_URL\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;https://api.deepl.com\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eSys.setenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eDEEPL_API_KEY\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ekeyring\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ekey_get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;deepl\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eout_file\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003efile.path\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edir\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;bla.fr.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003edeepl_translate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003epath\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eout_path\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eout_file\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003esource_lang\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;EN\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etarget_lang\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;FR\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eformality\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;less\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eyaml_fields\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNULL\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eHere\u0026rsquo;s the French text:\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# titrececi est du texte## sous-titrechouette !\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAt this stage let\u0026rsquo;s set up the Git infrastructure for the folder containing the two documents.In real life, we might already have it in place.The important thing is to start tracking changes before we edit the English document again.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_init\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edir\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_config_set\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;user.name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Jane Doe\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erepo\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edir\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_config_set\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;user.email\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;jane@example.com\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erepo\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edir\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_add\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efs\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epath_file\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003efs\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epath_file\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eout_file\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e \u003cspan class=\"n\"\u003erepo\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edir\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e       file status staged1 bla.fr.md    new   TRUE2    bla.md    new   TRUE\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_commit_all\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;First commit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erepo\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edir\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e[1] \u0026#34;5b7ae61fb72bd89ee912889207efbce5e662c405\u0026#34;\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_log\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erepo\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edir\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e                                    commit                      author1 5b7ae61fb72bd89ee912889207efbce5e662c405 Jane Doe \u0026lt;jane@example.com\u0026gt;                 time files merge        message1 2024-01-16 15:59:49     2 FALSE First commit\\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"changing-the-english-document\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#changing-the-english-document\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChanging the English document\u003c/h2\u003e\u003cp\u003eNow imagine we change the English document.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003enew_english_text\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;# a title\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;this is some text\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;awesome\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;## subtitle\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebrio\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ewrite_lines\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003enew_english_text\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_add\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efs\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epath_file\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003erepo\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edir\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e    file   status staged1 bla.md modified   TRUE\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_commit\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Second commit\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erepo\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edir\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e[1] \u0026#34;b398bf63c6c86cb3817d88e40f47afde72158e7a\u0026#34;\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# a titlethis is some textawesome## subtitle\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"updating-the-translation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#updating-the-translation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdating the translation\u003c/h2\u003e\u003cp\u003eWe don\u0026rsquo;t want to send the whole document to DeepL API again!Indeed, we do not want the text fragments that haven\u0026rsquo;t to be updated, as we would lose the improvements from careful work by human translators.Furthermore, if we were to send all the text to the API again, we\u0026rsquo;d be spending unnecessary money (or free credits).\u003c/p\u003e\u003cp\u003eFortunately we have two babeldown functions at our disposal:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"http://docs.ropensci.org/babeldown/reference/deepl_translate_markdown_string.html\"\u003e\u003ccode\u003ebabeldown::deepl_translate_markdown_string()\u003c/code\u003e\u003c/a\u003e, which sends an individual string for translation.  We could copy-and-paste the changed text into this function. We won\u0026rsquo;t show this approach here.\u003c/li\u003e\u003cli\u003e\u003ca href=\"http://docs.ropensci.org/babeldown/reference/deepl_update.html\"\u003e\u003ccode\u003ebabeldown::deepl_update()\u003c/code\u003e\u003c/a\u003e that operates more automatically by sending the lines or blocks of text that have changed for translation.  This may be more text than needed, as it will send whole paragraphs to DeepL API if it changed, even if a single sentence or less changed.\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eSys.setenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;DEEPL_API_URL\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;https://api.deepl.com\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eSys.setenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eDEEPL_API_KEY\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ekeyring\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ekey_get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;deepl\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebabeldown\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003edeepl_update\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003epath\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003eout_path\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eout_file\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003esource_lang\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;EN\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003etarget_lang\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;FR\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003eformality\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;less\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003eyaml_fields\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eNULL\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eLet\u0026rsquo;s look at the new French document:\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# titrececi est du texte## sous-titrechouette !\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOne would then carefully look at the Git diff to ensure only what was needed was changed, then commit the automatic translation.That translation would then be should then be reviewed by a human. For our multilingual work at rOpenSci, a translator (native speaker) reviews all our patches for consistency, tone, and context.\u003c/p\u003e\u003cp\u003eYou can also find an example of \u003ccode\u003ebabeldown::deepl_update()\u003c/code\u003e in a \u003ca href=\"https://github.com/maelle/auto-update-translations/pull/1\"\u003ePull request\u003c/a\u003e: the first two commits update the English document, the third one uses the function to update the Spanish document.\u003c/p\u003e\u003ch2 id=\"how-babeldowndeepl_update-works-under-the-hood\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-babeldowndeepl_update-works-under-the-hood\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow \u003ccode\u003ebabeldown::deepl_update()\u003c/code\u003e works under the hood\u003c/h2\u003e\u003cp\u003eContrary to what one might guess, \u003ccode\u003ebabeldown::deepl_update()\u003c/code\u003e doesn\u0026rsquo;t use the Git diff at all!Although that definitely was the first idea we explored.\u003c/p\u003e\u003cp\u003e\u003ccode\u003ebabeldown::deepl_update()\u003c/code\u003e does scour the Git log to use the snapshot of the main language version that was in sync with the translation.It\u0026rsquo;s the \u0026ldquo;old English document\u0026rdquo;, that goes with the \u0026ldquo;old French document\u0026rdquo;.The old English document is the English document as it was the last time the French document was featured in a Git commit.The French document is the French document as it was in that same commit snapshot.\u003c/p\u003e\u003cp\u003eWe have the \u0026ldquo;new English document\u0026rdquo; and what\u0026rsquo;s missing is the \u0026ldquo;new French document\u0026rdquo;.We want that new French document to use as much as possible of the old French document, only using an automatic translation for the parts that are new.\u003c/p\u003e\u003cp\u003eThe function uses an XML representation of the documents, as created by \u003ca href=\"https://docs.ropensci.org/tinkr\"\u003etinkr\u003c/a\u003e.A necessary condition for using \u003ccode\u003ebabeldown::deepl_update()\u003c/code\u003e is that the old English document and the old French document need to have the same XML structure: say, one heading followed by two paragraphs then a list.\u003c/p\u003e\u003cp\u003eFor each child of the body of the new English document (a paragraph, a list, a heading\u0026hellip;), \u003ccode\u003ebabeldown::deepl_update()\u003c/code\u003e tries finding the same tag in the old English document (\u003ca href=\"https://github.com/ropensci-review-tools/babeldown/blob/e8ef563eca232f1ba08b84c7bb0f999d4f452938/R/update.R#L136\"\u003eidentified by having the same \u003ccode\u003exml2::xml_text()\u003c/code\u003e and children of the same type\u003c/a\u003e).If it finds the same tag, it uses the tag located at the same position in the old French document.If it does not find it, it sends it to DeepL API.\u003c/p\u003e\u003cp\u003eA consequence of this approach is that we find the largest matching structural block between two documents. For instance, in  list where we changed one item, the whole list would be re-translated, as opposed to only the item.  However, this also means we use logical blocks, rather than fragments of text as defined by words or line breaks.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we explained how to use babeldown to update translations of living document.We at rOpenSci are ourselves users of babeldown for this scenario!Maintaining translations is time consuming but important work.We\u0026rsquo;d be thrilled to hear your feedback if you use \u003ccode\u003ebabeldown::deepl_update()\u003c/code\u003e!\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eThanks to \u003ca href=\"https://www.r-consortium.org/all-projects/awarded-projects/2022-group-2\"\u003efunding from the R Consortium\u003c/a\u003e!\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2024/01/16/deepl-update-babeldown/","date_published":"2024-01-16T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/6vc6t-0xw03","title":"R-universe now builds MacOS ARM64 binaries for use on Apple Silicon (aka M1/M2/M3) systems","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["tech notes","r-universe","arm64","macos"],"content_html":"\u003ch2 id=\"abstract--tldr\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#abstract--tldr\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAbstract / TLDR\u003c/h2\u003e\u003cp\u003e\u003ca href=\"https://r-universe.dev\"\u003eR-universe\u003c/a\u003e now provides MacOS arm64 binaries for all R packages. This means that MacOS users on Apple Silicon hardware (aka M1/M2/M3) can install the very latest builds of any R package without the need for any compilation:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003einstall.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;arrow\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;https://apache.r-universe.dev\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;https://cloud.r-project.org\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eR-universe uses cross-compiling for arm64 binaries, though this should not make much of a difference for package authors and R users. Packages with C/C++/Fortran/Rust code are all supported.\u003c/p\u003e\u003ch2 id=\"why-cross-compiling\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-cross-compiling\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy cross compiling\u003c/h2\u003e\u003cp\u003eBecause GitHub Actions currently does not offer arm64 runners for OSS projects, the arm64 binaries are cross-compiled on the MacOS intel runners. The cross build environment is set up to mimic a native arm64 machine, such that most R packages do not need any modification to work. We found only a small number of packages with a buggy configure script that may need a fix to allow cross-compilation.\u003c/p\u003e\u003cp\u003eThe r-universe workflow only builds arm64 binaries when needed, i.e. for packages that include compiled code (C/C++/Fortran/Rust). Packages that do not include any compiled code are portable by design, so for these packages the binaries built for MacOS on intel are served both in the x86_64 and arm64 cranlike repositories, without the need for an additional cross compile step.\u003c/p\u003e\u003cp\u003eJust like CRAN, the r-universe package homepage shows a link to the \u003ccode\u003er-4.3-x86_64\u003c/code\u003e and \u003ccode\u003er-4.3-arm64\u003c/code\u003e binaries. Packages without compiled code have a \u003ccode\u003er-4.3-any\u003c/code\u003e binary which is used for either architecture.\u003c/p\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2024/01/14/runiverse-arm64/example-arrow.png\" alt=\"Screenshot of r-universe apache arrow homepage\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2024/01/14/runiverse-arm64/example-arrow.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cp\u003eTo have a look at the build logs, click on the little apple icon next to these links. Alternatively, you can use the \u003ccode\u003e/buildlog\u003c/code\u003e shortlink, for example \u003ccode\u003ehttps://apache.r-universe.dev/arrow/buildlog\u003c/code\u003e will take you to the latest arrow builds.\u003c/p\u003e\u003cp\u003eOn this page you can find the arm64 build log specifically by expanding the \u003ccode\u003er-release-macos\u003c/code\u003e job and then under the section \u0026ldquo;Cross Compile for MacOS ARM64\u0026rdquo;. If this section is disabled, it means it was skipped because this package does not have compiled code, and does not need cross compilation.\u003c/p\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2024/01/14/runiverse-arm64/macos-cross.png\" alt=\"Screenshot of GitHub Actions output\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2024/01/14/runiverse-arm64/macos-cross.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003ch2 id=\"some-technical-details\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#some-technical-details\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSome technical details\u003c/h2\u003e\u003cp\u003eFor those interested how the cross compilation is set up, here are the main ingredients:\u003c/p\u003e\u003cul\u003e\u003cli\u003eThe standard MacOS Xcode toolchains are used to cross compile C/C++ code by passing the \u003ccode\u003e-arch arm64\u003c/code\u003e flag to clang and clang++.\u003c/li\u003e\u003cli\u003eThe \u003ca href=\"https://mac.r-project.org/tools/\"\u003euniversal gfortran 12.2\u003c/a\u003e version from CRAN (thanks to Simon Urbanek) is used to cross compile fortran code, also by passing \u003ccode\u003egfortran -arch arm64\u003c/code\u003e.\u003c/li\u003e\u003cli\u003eThe same collection of \u003ca href=\"https://mac.r-project.org/bin/darwin20/arm64/\"\u003esystem libs\u003c/a\u003e used by CRAN is preinstalled in the build environment.\u003c/li\u003e\u003cli\u003eR packages with a configure script are built with \u003ccode\u003e--configure-args=\u0026quot;--build=x86_64-apple-darwin20 --host=aarch64-apple-darwin20\u0026quot;\u003c/code\u003e. These flags are \u003ca href=\"https://www.gnu.org/software/autoconf/manual/autoconf-2.68/html_node/Specifying-Target-Triplets.html\"\u003eneeded by autoconf scripts\u003c/a\u003e, but other packages can use them as well.\u003c/li\u003e\u003cli\u003eThe r-universe \u003ca href=\"https://github.com/r-universe-org/build-and-check/blob/v1/macos-cross/action.yml\"\u003emacos-cross workflow\u003c/a\u003e overrides some more files and variables to target arm64.\u003c/li\u003e\u003cli\u003eWe put some shell \u003ca href=\"https://github.com/r-universe-org/prepare-macos/tree/master/shims\"\u003eshims\u003c/a\u003e on the PATH to help packages that shell out to \u003ccode\u003euname\u003c/code\u003e or \u003ccode\u003earch\u003c/code\u003e to determine the architecture.\u003c/li\u003e\u003cli\u003eA clever \u003ca href=\"https://github.com/r-universe-org/prepare-macos/blob/master/shims/cargo.sh\"\u003ecargo shim\u003c/a\u003e is used to override the default cargo build target to \u003ccode\u003eaarch64-apple-darwin\u003c/code\u003e and copy outputs to the expected directory after the build.\u003c/li\u003e\u003cli\u003ePackages are \u003ca href=\"https://stat.ethz.ch/pipermail/r-sig-mac/2024-January/014912.html\"\u003ebuilt with strict linking\u003c/a\u003e (without the \u003ccode\u003e-undefined dynamic_lookup\u003c/code\u003e flag).\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWith this setup, almost any R package can be built in the cross environment exactly the same way they do on normal arm64 hardware. But if your package does not work and you need some help fixing it, please feel free to \u003ca href=\"https://github.com/r-universe-org/help/issues\"\u003eopen an issue\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"universal-binaries\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#universal-binaries\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUniversal binaries\u003c/h2\u003e\u003cp\u003eFinally, some R packages download precompiled binaries for libraries too big or complicated to build on the fly. It is safest to distribute such libraries in the form of \u003ca href=\"https://en.wikipedia.org/wiki/Universal_binary\"\u003euniversal binaries\u003c/a\u003e which contain both the x86_64 and arm64 libs. This way your download script does not need to make any guesses about the target architecture it is building for: the same libs can be linked on either target.\u003c/p\u003e\u003cp\u003eCreating a universal binary can be done for both static and dynamic libraries and is really easy. If you have a \u003ccode\u003ex86_64\u003c/code\u003e and \u003ccode\u003earm64\u003c/code\u003e version of \u003ccode\u003elibfoo.a\u003c/code\u003e you can glue them together with lipo:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elipo -create x86_64/libfoo.a arm64/libfoo.a -output universal/libfoo.a\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAnd this new \u003ccode\u003elibfoo.a\u003c/code\u003e can be used when building either for intel or arm. Again if you need any help with this feel free to reach out.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/01/14/runiverse-arm64/","date_published":"2024-01-14T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/k1t8d-pem58","title":"rOpenSci 2023 Code of Conduct Transparency Report","language":"en","authors":[{"name":"Kara Woo","url":"https://ropensci.org/author/kara-woo/","avatar":"https://github.com/karawoo.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","code of conduct","governance"],"content_html":"\u003cp\u003eThe rOpenSci community is supported by our \u003ca href=\"/code-of-conduct\"\u003eCode of Conduct\u003c/a\u003e with a clear description of unacceptable behaviors,instructions on how to make a report, and information on how reports are handled. We, the Code of Conduct Committee,are responsible for receiving, investigating, deciding, enforcing and reporting on all reports of potentialviolations of our Code. We are committed to transparency with our community while upholding the privacyof people who experience or report incidents.\u003c/p\u003e\u003cp\u003eIn 2023, we received one Code of Conduct incident report.\u003c/p\u003e\u003ch3 id=\"summary-of-reported-incident\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#summary-of-reported-incident\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSummary of reported incident\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003eDescription of the incident:\u003c/em\u003e  We received a Code of Conduct report regarding sharing a paywalled article in Slack. After review, we found that this conversation did not violate the Code of Conduct guidelines. The conversation was voluntarily deleted from Slack by its participants.\u003c/li\u003e\u003cli\u003e\u003cem\u003eCommunity space:\u003c/em\u003e Slack\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThis code of conduct belongs to the community. We welcome your feedback at any time by emailing \u003ca href=\"mailto:conduct@ropensci.org\"\u003econduct@ropensci.org\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2024/01/12/transparency2023/","date_published":"2024-01-12T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/p9jf2-7d310","title":"rOpenSci News Digest, December 2023","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2023/12/22/news-december-2023\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"reminder-about-giving-season-consider-donating-to-ropensci\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#reminder-about-giving-season-consider-donating-to-ropensci\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReminder about giving season: consider donating to rOpenSci\u003c/h3\u003e\u003cp\u003eThis Giving Season consider donating to rOpenSci to support our mission of empowering Open Science.\u003c/p\u003e\u003cp\u003eSustaining an open project with quality infrastructure freely accessible to the global and diverse community of R software users, research software developers, and engineers requires many different resources. Our organization’s ongoing costs are supported by grants and donations from individuals and organizations which share our vision and mission.\u003c/p\u003e\u003cp\u003eBy supporting us, you’re not just donating; you’re contributing to a community that’s breaking down barriers, creating opportunities, and shaping the future of open and reproducible science for everyone.\u003c/p\u003e\u003cp\u003eJoin us in this vital mission today! You can donate here: \u003ca href=\"https://ropensci.org/donate/\"\u003ehttps://ropensci.org/donate/\u003c/a\u003e\u003c/p\u003e\u003cp\u003eWe are grateful for the donations we have already received.\u003c/p\u003e\u003ch3 id=\"easier-data-publishing-an-interview-of-mark-padgham-about-the-deposits-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#easier-data-publishing-an-interview-of-mark-padgham-about-the-deposits-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEasier data publishing: An interview of Mark Padgham about the deposits package!\u003c/h3\u003e\u003cp\u003erOpenSci Mark Padgham was interviewed on the R Consortium blog about his \u003ca href=\"https://www.r-consortium.org/blog/2023/11/30/deposits-r-package-delivers-a-common-workflow-for-r-users\"\u003edeposits package\u003c/a\u003e that simplifies data sharing.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003e\u0026ldquo;Publicly depositing datasets associated with published research is becoming more common, partly due to journals increasingly requiring data sharing and partly through more general and ongoing cultural changes with data sharing. Yet data sharing is often seen as time-consuming, particularly to meet the expectations of individual data repositories. While documentation and training can help familiarize users with data-sharing processes, browser-based data, and metadata submission workflows can only be so fast, are not easily reproduced, and do not facilitate regular or automated data and metadata updates. Better programmatic tools can transform data sharing from a mountainous climb into a pit of success.\u0026rdquo;\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThis interview was furthermore featured on the \u003ca href=\"https://rweekly.fireside.fm/145?t=848\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas.\u003c/p\u003e\u003ch3 id=\"ropensci-developer-guide-translation-to-portuguese\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-developer-guide-translation-to-portuguese\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci Developer Guide Translation to Portuguese\u003c/h3\u003e\u003cp\u003eWe want to express our gratitude to the community members who have been actively contributing to the localization and translation of the rOpenSci Developer Guide into Portuguese.Your dedication and efforts are making this valuable resource accessible to an even wider audience.\u003cbr\u003eHere\u0026rsquo;s a quick update on the progress:\u003c/p\u003e\u003cul\u003e\u003cli\u003e18% of the book is already translated!\u003c/li\u003e\u003cli\u003e2 chapters are awaiting a second review.\u003c/li\u003e\u003cli\u003e24 chapters are still awaiting translation.\u003c/li\u003e\u003cli\u003e7 amazing contributors are driving this initiative: \u003cem\u003ePedro Duarte Faria, Daniel Vartanian, Marcelo Perlin, Beatriz Milz, João Granja-Correia, António Pedro and Mariana.\u003c/em\u003e Thank you for the incredible work you\u0026rsquo;ve done so far!\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe\u0026rsquo;re not done yet, and we invite more members of our community to join this collaborative effort.If you want to contribute to the translation project, join us on GitHub: \u003ca href=\"https://github.com/orgs/ropensci/projects/7\"\u003erOpenSci Developer Guide Translation Project\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"a-package-a-day-series-on-mastodon-and-linkedin\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-package-a-day-series-on-mastodon-and-linkedin\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u0026ldquo;A package a day\u0026rdquo; series on Mastodon and LinkedIn!\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;ve started sharing about packages from our federated community of open source software developers, once a day on \u003ca href=\"https://mastodon.social/@rOpenSci@hachyderm.io/111522245481433695\"\u003eMastodon\u003c/a\u003e; and as a weekly digest on \u003ca href=\"https://www.linkedin.com/feed/update/urn:li:activity:7140023562223943680\"\u003eLinkedIn\u003c/a\u003e!On Mastodon: follow us, or search for \u003ccode\u003efrom:@rOpenSci@hachyderm.io #apackageaday\u003c/code\u003e to find all posts until now.\u003c/p\u003e\u003ch3 id=\"resources-for-multilingual-publishing-community-call-english-and-spanish\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#resources-for-multilingual-publishing-community-call-english-and-spanish\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eResources for \u003ca href=\"/commcalls/nov2023-multilingual/\"\u003emultilingual publishing\u003c/a\u003e community call, English and Spanish\u003c/h3\u003e\u003cp\u003eOn this \u003ca href=\"/commcalls/nov2023-multilingual/\"\u003ecommunity call\u003c/a\u003e (\u003ca href=\"/commcalls/nov2023-multilenguaje/\"\u003eSpanish\u003c/a\u003e), \u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e, \u003ca href=\"/author/pao-corrales/\"\u003ePaola Corrales\u003c/a\u003e, and \u003ca href=\"/author/elio-campitelli/\"\u003eElio Campitelli\u003c/a\u003e, shared the rOpenSci Multilingual project details. Maëlle presented the R packages that allow us to have our content in several languages. Elio and Paola shared about the translation workflow and showed the Translation Guide written to document the process.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;ve now posted, for the \u003ca href=\"/commcalls/nov2023-multilingual/\"\u003ecall in English\u003c/a\u003e and the \u003ca href=\"/commcalls/nov2023-multilenguaje/\"\u003ecall in Spanish\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003evideo + captions\u003c/li\u003e\u003cli\u003espeakers slides\u003c/li\u003e\u003cli\u003ecollaborative notes with Q\u0026amp;A\u003c/li\u003e\u003cli\u003elinks to R packages + localization guidelines + Dev Guide English + Spanish + Portuguese (WIP).\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e in our recent \u003ca href=\"/blog/2023/06/21/coworking/\"\u003epost\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-01/\"\u003eTuesday, January 9th, 14:00 Europe Central (13:00 UTC)\u003c/a\u003e, Working with APIs. With community host \u003ca href=\"/author/jon-harmon/\"\u003eJon Harmon\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore using APIs in your own work;\u003c/li\u003e\u003cli\u003eLearn about packages that can help;\u003c/li\u003e\u003cli\u003eDiscuss using APIs in R with our community host and other attendees.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-02/\"\u003eTuesday, February 6th, 9:00 Americas Pacific (17:00 UTC)\u003c/a\u003e, R-Universe Office Hours. With cohost \u003ca href=\"/author/jeroen-ooms/\"\u003eJeroen Ooms\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore what the \u003ca href=\"https://r-universe.dev/\"\u003eR-Universe\u003c/a\u003e has to offer;\u003c/li\u003e\u003cli\u003eCreate your own R-Universe;\u003c/li\u003e\u003cli\u003eAsk questions or troubleshoot your R-Universe problems with the cohost and other attendees.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following three packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/wmm\"\u003ewmm\u003c/a\u003e, developed by Will Frierson: Calculate magnetic field at a given location and time according to the World Magnetic Model (WMM). Both the main field and secular variation components are returned. This functionality is useful for physicists and geophysicists who need orthogonal components from WMM. Currently, this package supports annualized time inputs between 2000 and 2025. If desired, users can specify which WMM version to use, e.g., the original WMM2015 release or the recent out-of-cycle WMM2015 release.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=wmm\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ereviewed\u003c/a\u003e by Athanasia Monika Mowinckel and Rohit Goswami.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/birdsize\"\u003ebirdsize\u003c/a\u003e, developed by Renata Diaz: Generate estimated body size distributions for populations or communities of birds, given either species ID or species\u0026rsquo; mean body size. Designed to work naturally with the North American Breeding Bird Survey, or with any dataset of bird species, abundance, and/or mean size data. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/577\"\u003ereviewed\u003c/a\u003e by Quentin Read and Matt Strimas-Mackey.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/naijR\"\u003enaijR\u003c/a\u003e, developed by Victor Ordu: A set of convenience functions as well as geographical/political data about Nigeria, aimed at simplifying work with data and information that are specific to the country.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=naijR\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/600\"\u003ereviewed\u003c/a\u003e by Emily Riederer, Margaret Siple, and Cagri Alican.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following eleven packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/biomartr\" title=\"Genomic Data Retrieval\"\u003ebiomartr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/biomartr/releases/tag/v1.0.7\"\u003e\u003ccode\u003ev1.0.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/datefixR\" title=\"Standardize Dates in Different Formats or with Missing Data\"\u003edatefixR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/datefixR/releases/tag/v1.6.1\"\u003e\u003ccode\u003ev1.6.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dwctaxon\" title=\"Edit and Validate Darwin Core Taxon Data\"\u003edwctaxon\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dwctaxon/releases/tag/v2.0.3\"\u003e\u003ccode\u003ev2.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/git2r\" title=\"Provides Access to Git Repositories\"\u003egit2r\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/git2r/releases/tag/v0.33.0\"\u003e\u003ccode\u003ev0.33.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gitignore\" title=\"Create Useful .gitignore Files for your Project\"\u003egitignore\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gitignore/releases/tag/v0.1.6\"\u003e\u003ccode\u003ev0.1.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gittargets\" title=\"Data Version Control for the Targets Package\"\u003egittargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gittargets/releases/tag/0.0.7\"\u003e\u003ccode\u003e0.0.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/magick\" title=\"Advanced Graphics and Image-Processing in R\"\u003emagick\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/magick/releases/tag/v2.8.2\"\u003e\u003ccode\u003ev2.8.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rnaturalearth\" title=\"World Map Data from Natural Earth\"\u003ernaturalearth\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rnaturalearth/releases/tag/v1.0.1\"\u003e\u003ccode\u003ev1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.7.10\"\u003e\u003ccode\u003e0.7.10\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.4.0\"\u003e\u003ccode\u003e1.4.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/tic\" title=\"CI-Agnostic Workflow Definitions\"\u003etic\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tic/releases/tag/v0.14.0\"\u003e\u003ccode\u003ev0.14.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are twenty recently closed and active submissions and 2 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/600\"\u003enaijR\u003c/a\u003e, Operations to Ease Data Analyses Specific to Nigeria. Submitted by \u003ca href=\"https://victorordu.wordpress.com\"\u003eVictor Ordu \u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/577\"\u003ebirdsize\u003c/a\u003e, Estimate Avian Body Size Distributions. Submitted by \u003ca href=\"https://diazrenata.github.io/home/\"\u003eRenata Diaz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/595\"\u003erangr\u003c/a\u003e, Mechanistic Simulation of Species Range Dynamics. Submitted by \u003ca href=\"https://github.com/katarzynam-165\"\u003eKatarzyna Markowska\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003emregions2\u003c/a\u003e, Access Data from Marineregions.org: The Marine Regions Gazetteer and the Marine Regions Data Products. Submitted by \u003ca href=\"https://salvafern.github.io/\"\u003esalvafern\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/613\"\u003ecomtradr\u003c/a\u003e, Interface with the United Nations Comtrade API. Submitted by \u003ca href=\"https://github.com/datapumpernickel\"\u003epaulbochtler\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/603\"\u003eGLMMcosinor\u003c/a\u003e, Fit a cosinor model using a generalised mixed modelling framework. Submitted by \u003ca href=\"https://rwparsons.github.io/\"\u003eRex Parsons\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eNine at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/608\"\u003ergeeExtra\u003c/a\u003e, Extensions for rgee. Submitted by \u003ca href=\"https://csaybar.github.io\"\u003eCesar Aybar\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/618\"\u003efellingdateR\u003c/a\u003e, Estimate, report and combine felling dates of historical tree-ring. Submitted by \u003ca href=\"https://www.researchgate.net/profile/Kristof_Haneca\"\u003eKriHa\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/612\"\u003erOPTRAM\u003c/a\u003e, Derive soil moisture using the OPTRAM algorithm. Submitted by \u003ca href=\"https://github.com/micha-silver\"\u003eMicha Silver\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/609\"\u003ebaRulho\u003c/a\u003e, Quantifying (Animal) Sound Degradation. Submitted by \u003ca href=\"https://marce10.github.io/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/608\"\u003ergeeExtra\u003c/a\u003e, Extensions for rgee. Submitted by \u003ca href=\"https://csaybar.github.io\"\u003eCesar Aybar\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/598\"\u003eweatherOz\u003c/a\u003e, An API Client for Australian Weather and Climate Data Resources. Submitted by \u003ca href=\"https://github.com/bozaah\"\u003eRodrigo Pires\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003epangoling\u003c/a\u003e, Access to Large Language Model Predictions. Submitted by \u003ca href=\"https://bnicenboim.github.io/\"\u003eBruno Nicenboim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"https://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"https://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/619\"\u003equadkeyr\u003c/a\u003e, Tools for converting QuadKeys used in Microsoft\u0026rsquo;s Bing Maps Tile System into raster images. Submitted by \u003ca href=\"https://github.com/flor14\"\u003eFlorencia D\u0026rsquo;Andrea\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/572\"\u003equaltdict\u003c/a\u003e, Generating Variable Dictionaries and Labelled Data Exports of Qualtrics. Submitted by \u003ca href=\"https://github.com/lyh970817\"\u003elyh970817\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/11/29/champions-program-mentors-2023\"\u003eIntroducing rOpenSci Mentors - Cohort 2023-2024\u003c/a\u003e by Apoorv Anand, Bruna Wundervald, Eunseop Kim, Emi Tanaka, François Michonneau, Francisco Cardozo, Luis Verde Arregoitia, Erle Holgersen, Marie Vendettuoli, Jonathan Keane, and Yanina Bellini Saibene.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/12/05/divide_and_you_will_win_from_polar_to_the_polarverse\"\u003eDivide and Conquer: From polar To the Polarverse\u003c/a\u003e by Juan Pablo Ruiz Nicolini. Political Science Meets Coding: Crafting the polarverse with R and the LatinR Connection. Other languages: \u003ca href='/es/blog/2023/12/05/2023-12-05-divide-y-venceras-de-polar-al-polarverse' lang='es'\u003eDivide y venceras: de polar al Polarverse (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/12/19/champions-program-2023-experience\"\u003e2023 rOpensci Champions Program: My Experience\u003c/a\u003e by Bilikisu Wunmi Olatunji.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/rvertnet/index.html\"\u003ervertnet\u003c/a\u003e\u003c/strong\u003e, Retrieve, map and summarize data from the VertNet.org archives (\u003ca href=\"https://vertnet.org/\"\u003ehttps://vertnet.org/\u003c/a\u003e). Functions allow searching by many parameters, including taxonomic names, places, and dates. In addition, there is an interface for conducting spatially delimited searches, and another for requesting large datasets via email. \u003ca href=\"https://github.com/ropensci-archive/rvertnet/issues/71\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"call-for-co-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-co-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for co-maintainers\u003c/h3\u003e\u003cp\u003eRefer to our somewhat \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/#packages-looking-for-co-maintainers\"\u003erecent blog post\u003c/a\u003e to identify other packages where help is especially wished for!See also our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"an-older-post-about-dependencies\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#an-older-post-about-dependencies\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAn older post about dependencies\u003c/h3\u003e\u003cp\u003eDo you know of the post \u003ca href=\"https://www.tidyverse.org/blog/2022/09/playing-on-the-same-team-as-your-dependecy/\"\u003e\u0026ldquo;Playing on the same team as your dependency\u0026rdquo;\u003c/a\u003e by Thomas Lin Pedersen?It\u0026rsquo;s a take from the maintainer perspective, on how maintainers of reverse dependencies can help make the relationship a two-way one.\u003c/p\u003e\u003ch3 id=\"cliff-notes-about-the-cli-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#cliff-notes-about-the-cli-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCliff notes about the cli package\u003c/h3\u003e\u003cp\u003eIf you missed our \u003ca href=\"/events/coworking-2023-10/\"\u003eOctober coworking session hosted by Athanasia Mo Mowinckel\u003c/a\u003e, or attended and enjoyed it, you might want to read Athanasia\u0026rsquo;s and Maëlle\u0026rsquo;s \u003ca href=\"https://blog.r-hub.io/2023/11/30/cliff-notes-about-cli/\"\u003epost about the cli package\u003c/a\u003e!The cli package maintained by Gábor Csárdi allows you to build pretty user-interfaces (messages, including error messages and progress bars).\u003c/p\u003e\u003ch3 id=\"prepare-for-cran-list-of-resources\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#prepare-for-cran-list-of-resources\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u0026ldquo;Prepare for CRAN\u0026rdquo; list of resources\u003c/h3\u003e\u003cp\u003eDo you know about the GitHub repository \u003ca href=\"https://github.com/ThinkR-open/prepare-for-cran\"\u003e\u0026ldquo;Prepare for CRAN\u0026rdquo;\u003c/a\u003e maintained by ThinkR with help from the R community?It contains good tips and gotchas for CRAN submissions.\u003c/p\u003e\u003ch3 id=\"more-accessible-and-usable-cheatsheets-html-format\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#more-accessible-and-usable-cheatsheets-html-format\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMore accessible and usable cheatsheets: HTML format!\u003c/h3\u003e\u003cp\u003eIf you plan to create, or already maintain, a cheatsheet for a package of yours, you might be inspired from Posit\u0026rsquo;s recent publication of \u003ca href=\"https://posit.co/blog/posit-cheatsheets-now-in-html/\"\u003echeatsheets in HTML format\u003c/a\u003e for better accessibility and improved usage in the browser.The cheatsheet are Quarto documents, see their \u003ca href=\"https://github.com/rstudio/cheatsheets/\"\u003esource\u003c/a\u003e.Another example of HTML cheatsheet is the one for the dm package, which is actually integrated as an \u003ca href=\"https://dm.cynkra.com/articles/cheatsheet.html\"\u003earticle in a pkgdown website\u003c/a\u003e (\u003ca href=\"https://github.com/cynkra/dm/blob/main/vignettes/articles/cheatsheet.Rmd\"\u003esource\u003c/a\u003e).\u003c/p\u003e\u003ch3 id=\"code-smell-error-handling-eclipse\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#code-smell-error-handling-eclipse\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCode Smell: Error Handling Eclipse\u003c/h3\u003e\u003cp\u003eDon\u0026rsquo;t miss Nick Tierney\u0026rsquo;s post \u003ca href=\"https://www.njtierney.com/post/2023/12/06/long-errors-smell/\"\u003e\u0026ldquo;Code Smell: Error Handling Eclipse\u0026rdquo;\u003c/a\u003e, on why and how to refactor your code so that error-handling code doesn\u0026rsquo;t crowd your function body.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/12/22/news-december-2023/","date_published":"2023-12-22T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/ca39e-y1z14","title":"2023 rOpensci Champions Program: My Experience","language":"en","authors":[{"name":"Bilikisu Wunmi Olatunji","url":"https://ropensci.org/author/bilikisu-wunmi-olatunji/","avatar":"https://github.com/BWOlatunji.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["community","champions program"],"content_html":"\u003cp\u003eBeing a part of the rOpenSci Champion\u0026rsquo;s program has been a transformative experience, pushing me to explore the world of R package development and contribute to the world of open science. While my initial project proposal took a different route, the unexpected journey led me to create a valuable tool that I am proud to call my own \u0026ndash; an R package \u003ca href=\"https://github.com/BWOlatunji/chartkickR\"\u003eChartkickR\u003c/a\u003e. In this blog post, I\u0026rsquo;ll take you through my adventure as a rOpenSci champion and how ChartkickR became the unexpected gem of my experience.\u003c/p\u003e\u003cp\u003eWhen I embarked on my rOpenSci Champion journey, my original project proposal aimed to ease the use of geospatial data for Microplanning in public health. Little did I know that the path ahead would be filled with twists and turns, ultimately leading me to ChartkickR. As the saying goes, sometimes the best discoveries happen when you least expect them.\u003c/p\u003e\u003cp\u003eAs I went through several training sessions and mentoring meetings, I stumbled upon an opportunity to create something truly unique \u0026ndash; a htmlwidget\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e that would simplify the process of creating interactive and visually appealing charts in R. This idea took root and blossomed into what is now ChartkickR.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://github.com/BWOlatunji/chartkickR\"\u003eChartkickR\u003c/a\u003e, at its core, is an htmlwidget that seamlessly integrates with the \u003ca href=\"https://chartkick.com/\"\u003eChartkick JavaScript library\u003c/a\u003e. It provides R users with a straightforward interface to generate beautiful and interactive charts using R code. From line charts to pie charts, ChartkickR empowers users to visualize their data effortlessly using a single line of code.\u003c/p\u003e\u003ch2 id=\"examples-of-chartkickr-code\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#examples-of-chartkickr-code\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExamples of ChartkickR code\u003c/h2\u003e\u003cp\u003eThe package has ten types of plots, and all are very simple to build; here are three classic examples using the Palmer Penguins package as data.\u003c/p\u003e\u003ch3 id=\"scatter-plot\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#scatter-plot\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eScatter plot\u003c/h3\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epalmerpenguins\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eChartkickR\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep_data\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epenguins\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebill_length_mm\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebill_depth_mm\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003echartkickR\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ep_data\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                  \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ebill_length_mm\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ebill_depth_mm\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                  \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;ScatterChart\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2023/12/19/champions-program-2023-experience/scatter-plot.png\"\t\t\talt=\"Scatter Plot example - White plot with blue points and a hover tooltip showing values\" width=\"500\"\u003e\u003c/figure\u003e\u003ch3 id=\"pie-chart\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pie-chart\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePie chart\u003c/h3\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep_data\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003epenguins\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003ecount\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003especies\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003eset_names\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;species\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;count\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003echartkickR\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ep_data\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                  \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003especies\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecount\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                  \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;PieChart\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                  \u003cspan class=\"n\"\u003ecolors\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;#4f86f7\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#fc5a8d\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;yellow\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2023/12/19/champions-program-2023-experience/bar-plot.png\"\t\t\talt=\"Pie Chart example - Showing the breakdown by species with a hover tooltip reading 124 Gentoo\" width=\"500\"\u003e\u003c/figure\u003e\u003ch3 id=\"multiple-series-bar\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#multiple-series-bar\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMultiple Series Bar\u003c/h3\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep_data\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003epenguins\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eyear\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecount\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003especies\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003echartkickR\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ep_data\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                  \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eyear\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                  \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;BarChart\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                  \u003cspan class=\"n\"\u003egroup\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003especies\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecurve\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2023/12/19/champions-program-2023-experience/serie-plot.png\"\t\t\talt=\"Multiple Series Bar Plot example - Showing a series of horizontal bars depicting the numbers of each species in each year\" width=\"500\"\u003e\u003c/figure\u003e\u003ch2 id=\"developing-a-new-package-as-ropensci-champion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#developing-a-new-package-as-ropensci-champion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDeveloping a new package as rOpenSci Champion\u003c/h2\u003e\u003cp\u003eDeveloping \u003ca href=\"https://github.com/BWOlatunji/chartkickR\"\u003eChartkickR \u003c/a\u003ewas not without its challenges. I encountered hurdles in the coding process, faced moments of doubt, and navigated through the complexities of integrating R with JavaScript. However, each challenge, like having to learn JavaScript to understand the library and create the package in R, was met with perseverance, and every triumph brought a sense of accomplishment that fuelled my passion for the project. I would like to appreciate the support of \u003ca href=\"https://www.linkedin.com/in/johncoene/\"\u003eJohn Coene\u003c/a\u003e and the guidance from my mentor, \u003ca href=\"/author/christina-maimone/\"\u003eChristina Maimone\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eOne of the most rewarding aspects of the rOpenSci champion program was the collaboration with a diverse and supportive community led by Yanina Bellini Saibene. Through discussions, feedback, and shared insights, \u003ca href=\"https://github.com/BWOlatunji/chartkickR\"\u003eChartkickR\u003c/a\u003e evolved into a tool that not only met my initial vision but also exceeded it with the input of fellow rOpenSci champions and mentors.\u003c/p\u003e\u003cp\u003eThe \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e extends beyond coding; it\u0026rsquo;s a holistic experience that fosters personal and professional growth. From honing technical skills to friendliness within the open-source community, the program equipped me with invaluable tools that will undoubtedly shape my future endeavours.\u003c/p\u003e\u003cp\u003eIn this end, I have already organized two events with my local R User Groups - \u003ca href=\"https://www.meetup.com/abuja-r-user-group-meetup/events/294198946/\"\u003eAbuja RUG\u003c/a\u003e and \u003ca href=\"https://www.meetup.com/rladies-abuja/events/294198849/\"\u003eR-Ladies Abuja\u003c/a\u003e Chapter - showcasing what I learned about building htmlwidget in R. Looking into the future, I will continue to improve on my project and share it with the rOpenSci community.\u003c/p\u003e\u003cp\u003eMy journey as a rOpenSci Champion has been a rollercoaster of discovery, and ChartkickR stands as a reward. I am grateful for this opportunity given to me by rOpenSci, the support of the rOpenSci community, the guidance of my mentor, and the opportunities for growth that this program has provided. As I look back on this experience, I am not only proud of the htmlwidget I created but also of the person I\u0026rsquo;ve become throughout this incredible journey.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eBy \u003ca href=\"https://cran.r-project.org/web/packages/htmlwidgets/index.html\"\u003edefinition\u003c/a\u003e, an R \u0026lsquo;htmlwidget\u0026rsquo; is a framework for creating HTML widgets that render in various contexts including the R console, \u0026lsquo;R Markdown\u0026rsquo; documents, and \u0026lsquo;Shiny\u0026rsquo; web applications.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2023/12/19/champions-program-2023-experience/","date_published":"2023-12-19T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/swnyg-ger25","title":"Divide and Conquer: From polar To the Polarverse","language":"en","authors":[{"name":"Juan Pablo Ruiz Nicolini","url":"https://orcid.org/0000-0002-3138-6343","avatar":"https://ropensci.org/img/community/ruiz-nicolini.jpg","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["translator"]}],"tags":["community","packages","development"],"content_html":"\u003cblockquote\u003e\u003cp\u003e\u003cem\u003e\u0026ldquo;I\u0026rsquo;m just a political scientist, standing in front of the R console  asking it to help me finish my thesis.\u0026rdquo;\u003c/em\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eIt was 2015, a Political Science master\u0026rsquo;s student had to process data to hand in his thesis and decided to take the opportunity to learn how to use R. To the long and winding road of the academic requirement was added an extra degree of difficulty: incorporating programming software from scratch, with a somewhat steep learning curve.\u003c/p\u003e\u003cp\u003eYears later, \u003ca href=\"https://github.com/TuQmano/evoteSALTA_UTDT\"\u003eas I review scripts from the thesis code\u003c/a\u003e, I smile to see long lines of code to recode variables with a structure like this:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#PARTY LABELS A GOBERNADOR\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 0 VOTOS EN BLANCO\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 1 WAYAR GOBERNADOR  (WALTER WAYAR)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 2 COALICION CIVICA (ARI) (ALBERTO ROLANDO TONDA)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 3 FRENTE JUSTICIALISTA RENOVADOR DE LA VICOTRIA (JUAN MANUEL URTUBEY)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 4 FRENTE OLMEDO GOBERNADOR  (ALFREDO OLMEDO)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 5 MORELLO GOBERNADOR / PROYECTO SUR  (CARLOS FERNANDO MORELLO)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 6 PARTIDO OBRERO (CLAUDIO DEL PLA)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 7 UNION CIVICA RADICAL  (DIEGO MARINO)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 8 MIJD (CARLOS ARIEL FERNANDEZ)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#RECODE TODOS LOS PARTY LABELS SEGUN ADHESIONES A LISTAS CON CANDIDATOS A GOBERNADOR\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eListaF[\u003c/span\u003e \u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eLista\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;VOTOS EN BLANCO\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eYear\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"m\"\u003e2011\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e\u003cspan class=\"m\"\u003e9999\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eListaF[\u003c/span\u003e \u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eLista\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;AGRUPACION CRECIMIENTO SOLIDARIO\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eYear\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"m\"\u003e2011\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e\u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eListaF[\u003c/span\u003e \u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eLista\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;AGRUPACION DEMOCRATICA COMUNAL\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eYear\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"m\"\u003e2011\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e\u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eListaF[\u003c/span\u003e \u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eLista\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;AGRUPACION DEMOCRATICA TARTAGAL (ADETA)\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eYear\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"m\"\u003e2011\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e\u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eListaF[\u003c/span\u003e \u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eLista\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;AGRUPACION FEDERALISTA POPULAR MOSCONI\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eYear\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"m\"\u003e2011\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eListaF[\u003c/span\u003e \u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eLista\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;AGRUPACION FEDERALISTA POPULAR TARTAGAL\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u003c/span\u003e \u003cspan class=\"n\"\u003eSALTA\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eYear\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"m\"\u003e2011\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e\u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eLooking at it in perspective (like my scripts) I can say that learning R was the \u003cstrong\u003ebest decision I made in my professional career.\u003c/strong\u003e\u003c/p\u003e\u003cp\u003eR Since then it has become a fundamental tool in my daily life: As \u003ca href=\"https://tuqmano.github.io/geo_utdt/\"\u003eacademic\u003c/a\u003e in my work as a \u003ca href=\"https://twitter.com/menta_arg\"\u003econsultant and analyst\u003c/a\u003e; in my role \u003ca href=\"https://ropensci.org/es/blog/2022/11/23/r-universe-stars-1-es/\"\u003eas a public servant\u003c/a\u003e; in my spare time, \u003ca href=\"https://twitter.com/TuQmano/status/1426882408574595072\"\u003eas a hobby\u003c/a\u003e; and in my current role, coordinating the Data team at \u003ca href=\"https://fund.ar/\"\u003eFundar\u003c/a\u003e, a think tank that studies and formulates public policies for the sustainable and inclusive development of Argentina.\u003c/p\u003e\u003cp\u003eOf all the qualities that R has, the \u003cstrong\u003ecommunity\u003c/strong\u003e was the determining factor in my journey with this programming language.\u003c/p\u003e\u003cp\u003eWhile I was finishing the first step of the thesis, I found out about the organization of the first \u003ca href=\"https://latinr.org/\"\u003eLatin American Conference on R for R\u0026amp;D (LatinR)\u003c/a\u003e to which I owe my second (and third\u0026hellip; and umpteenth) step in my relationship with R. In the first conference I presented use cases for political analyses from R, implementing \u003ca href=\"https://www.researchgate.net/publication/327382101_Geofaceting_Argentina_LatinR_2018\"\u003egrids from Argentina to use with ggplot as if they were maps with geofacet\u003c/a\u003e. In the second conference, we presented the \u003cem\u003eShiny App\u003c/em\u003e \u003ca href=\"http://inteligenciaelectoral.mentacomunicacion.com.ar/\"\u003eElectoral Intelligence\u003c/a\u003e for the analysis of electoral results in Argentina and I was able to participate in the \u003cem\u003ePackage Development\u003c/em\u003e workshop with \u003ca href=\"https://hadley.nz/\"\u003eHadley Wickham\u003c/a\u003e. This was the ideal starting point to get started with the idea of packaging code myself.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2023/12/05/divide_and_you_will_win_from_polar_to_the_polarverse/hex_joint.png\"\t\t\talt=\"geofecetAR R package hex logo on the left and original polAr R package hex logo on the right\" width=\"600\"\u003e\u003c/figure\u003e\u003ch2 id=\"the-birth-of-polar\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-birth-of-polar\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe birth of polAr\u003c/h2\u003e\u003cp\u003eWith the aim of presenting at the third LatinR conference, I developed a polished version of \u003ca href=\"https://electorarg.github.io/geofaceteAR/\"\u003egeofacetAR\u003c/a\u003e with functions to work with the design of grids as if they were maps of Argentina.\u003c/p\u003e\u003cp\u003eThe Covid19 pandemic hit. Learning how to develop packages, in times of confinement and many hours in front of the computer, turned the electoral data processing work of my life as a political scientist and consultant into a new package: \u003ca href=\"https://github.com/electorArg/polAr\"\u003epolAr\u003c/a\u003e; that on May 16, 2020 \u003ca href=\"https://twitter.com/CRANberriesFeed/status/1261597845808975872\"\u003etraveled to CRAN\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"the-polar-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-polar-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe polAr Universe\u003c/h2\u003e\u003cp\u003eAlthough originally the package sought to facilitate access and tools for the analysis of electoral data in Argentina, over time, other workflows and data sources (geographic, presidential speeches, and legislative votes) were integrated, with an increase in dependencies and difficulty in managing more and more functions. This was a problematic issue that \u003ca href=\"https://www.youtube.com/watch?v=UYvSv8StDa8\u0026amp;t=10872s\"\u003ewas discussed with colleagues in the Package Development panel during the third LatinR confernce (2020)\u003c/a\u003e.\u003c/p\u003e\u003cfigure\u003e\u003ca href=\"https://www.youtube.com/watch?v=UYvSv8StDa8\u0026amp;t=10872s\"\u003e\u003cimg src=\"/blog/2023/12/05/divide_and_you_will_win_from_polar_to_the_polarverse/latinr-rpkg.png\"\t\t\talt=\"LatinR Confernce (2022) - Package Development Ronund Table\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003epolAr had reached 4000 downloads when I received an email from the CRAN team informing me that I had to fix a policy violation to prevent the package from being archived. DUnfortunately my submitted fix did not appear to correct the problem and the package was archived.\u003c/p\u003e\u003cfigure\u003e\u003ca href=\"https://github.com/politicaargentina/polarverse\"\u003e\u003cimg src=\"/blog/2023/12/05/divide_and_you_will_win_from_polar_to_the_polarverse/polarverse.png\"\t\t\talt=\"The polarverse\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003eIf the conversation at LatinR made me think about splitting polAr into multiple packages as a possibility, the CRAN archiving gave me the opportunity to do so. The decision was to generate independent workflows; a strategy that made it possible to move forward at different paces, making specific decisions for each topic, trying to address it at the same time as part of a whole, emulating the \u003cem\u003eTidyverse\u003c/em\u003e paradigm: a similar philosophy and grammar of operation for the \u003ca href=\"https://tuqmano.ar/2021/06/05/de-polar-al-polarverse/\"\u003ecollection of packages\u003c/a\u003e. The goal was to improve the development of that which led to the archiving of polAr.\u003c/p\u003e\u003cp\u003eI presented \u0026ldquo;\u003ca href=\"https://github.com/TuQmano/latinr2021/blob/master/divide_reinaras/divide_reinaras.pdf\"\u003eDivide and Conquer: from {polAr} to the polarverse\u003c/a\u003e at the fourth edition of LatinR, showcasing this new universe with five packages:\u003c/p\u003e\u003col\u003e\u003cli\u003e\u003cp\u003e📦 \u003ca href=\"https://politicaargentina.r-universe.dev/opinAr\"\u003eopinAr\u003c/a\u003e: provides access to data on public opinion and government in Argentina based on the Confidence in Government Index published monthly by the Universidad Torcuato Di Tella.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e📦 \u003ca href=\"https://politicaargentina.r-universe.dev/electorAr\"\u003eelectorAr\u003c/a\u003e: facilitates access to electoral data for Argentina (for different levels and with different spatial aggregation) and functions to compute relevant indicators.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e📦 \u003ca href=\"https://politicaargentina.r-universe.dev/legislAr\"\u003elegislAr\u003c/a\u003e: facilitates downloading disaggregated information of votes in the legislative chambers of Argentina, originating from the project \u003ca href=\"https://andytow.com/scripts/disciplina/index-d.html\"\u003eDecade Voted\u003c/a\u003e project by Andy Tow.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e📦 \u003ca href=\"https://politicaargentina.r-universe.dev/discursAr\"\u003ediscursAr\u003c/a\u003e: is designed to obtain data on political speeches. In principle, it provides access to presidential speeches in legislative assemblies at the inauguration of ordinary sessions.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e📦 \u003ca href=\"https://politicaargentina.r-universe.dev/geoAr\"\u003egeoAr\u003c/a\u003e: allows access to data and tools for spatial workflows from within R. One \u003ca href=\"https://github.com/TuQmano/latinr2023/blob/main/geoAr/geoAr.pdf\"\u003epaper\u003c/a\u003e on the package was accepted for the \u003ca href=\"https://latinr.org/\"\u003esixth edition of LatinR conference (2023)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eIn addition, we worked on an auxiliary library called \u003ca href=\"https://politicaargentina.r-universe.dev/polArViz\"\u003epolarViz\u003c/a\u003e to facilitate the visualization of the other packages, and a metapackage called \u003ca href=\"https://politicaargentina.r-universe.dev/polArverse\"\u003epolArverse\u003c/a\u003ethat emulates the operation of tidyverse for loading the set of associated libraries.\u003c/p\u003e\u003ch2 id=\"-meeting-of-universes-the\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#-meeting-of-universes-the\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e🌠 Meeting of universes: \u003ca href=\"https://politicaargentina.r-universe.dev/builds\"\u003ethe \u003cem\u003epolArverse\u003c/em\u003e and \u003cem\u003eR-Universe\u003c/em\u003e\u003c/a\u003e\u003c/h2\u003e\u003cp\u003eDuring this process, I incorporated  the R-Universe into the workflow. It provides an autonomous and self-managed space in which to publish these new packages (no longer simply as GitHub repositories) and provides support for testing on different operating systems and software versions. Undoubtedly, it is an important tool for better maintenance.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/12/05/divide_and_you_will_win_from_polar_to_the_polarverse/politicaargentina-r-universe.png\"\t\t\talt=\"polAr R-Universe\"\u003e\u003c/figure\u003e\u003ch3 id=\"we-continue-to-take-important-steps-for-our-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#we-continue-to-take-important-steps-for-our-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWe continue to take important steps for our universe:\u003c/h3\u003e\u003cp\u003eFirst, we returned to CRAN! In February 2023, we shipped geoAr, which, as noted, provides access to and facilitates the processing of spatially relevant data. A version under development (accessible from the R-Universe) also allows you to interact with the \u003ca href=\"https://georef-ar-api.readthedocs.io/es/latest/\"\u003eAPI of the Argentine Geographic Data Standardization Service (Servicio de Normalización de Datos Geográficos de Argentina\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eOn the other hand, I added a pending tool to the polAr toolbox to work with census data: \u003ca href=\"https://github.com/PoliticaArgentina/censAr\"\u003ecensAr\u003c/a\u003e. The package, currently under development, is based on the code from \u003ca href=\"https://docs.ropensci.org/censo2017/\"\u003ecenso2017\u003c/a\u003e developed by \u003ca href=\"https://ropensci.org/author/pach%C3%A1-aka-mauricio-vargas-sep%C3%BAlveda/\"\u003eMauricio \u0026ldquo;Pacha\u0026rdquo; Vargas\u003c/a\u003e and part of the rOpenSci suite.\u003c/p\u003e\u003ch2 id=\"summarizinig-my-experience\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#summarizinig-my-experience\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSummarizinig my experience\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eI started working with this language - or dialect, \u003ca href=\"https://tuqmano.github.io/CienciaDeDatosCiPol/clases/clase1.html#12\"\u003eas one of my colleagues likes to say\u003c/a\u003e regarding the antecedent of S from \u003cem\u003eBell\u003c/em\u003e in the 1970s - a little by chance.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eI quickly incorporated it as a work tool, in multiple facets: as an analyst, consultant and teacher.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe R community -  in particular all my experiences with \u003cem\u003eLatinR\u003c/em\u003e- were a determining factor for my development. It certainly made the process much easier.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eI think it is possible to make improvements to the process; to support CRAN becoming an even better space for the R ecosystem and to make the R development experience more enjoyable and predictable.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe \u003cem\u003eR-Universe\u003c/em\u003e project to enhance the publishing and discovery experience of packages developed in R is invaluable.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe \u003cem\u003epolarverse\u003c/em\u003e was a side project where I worked in my free time and without funding. It emerged almost playfully, as an experiment to learn how to develop software. We successfully published it in CRAN. We got frustrated and angry. We learned. We added new tools.\u003c/p\u003e\u003cp\u003eNow, with the support and encouragement provided by the great team at \u003ca href=\"https://fund.ar/\"\u003eFundar\u003c/a\u003e, in general, and the \u003ca href=\"https://fund.ar/area/datos/\"\u003edata\u003c/a\u003e area that I coordinate, in particular. We kept moving forward. Little by little. \u0026ldquo;Slowly, but steady\u0026rdquo;.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/12/05/divide_and_you_will_win_from_polar_to_the_polarverse/","date_published":"2023-12-05T00:00:00+00:00","date_modified":"2025-05-05T16:18:24+02:00"},{"id":"https://doi.org/10.59350/h1bg1-3xv48","title":"Introducing rOpenSci Mentors - Cohort 2023-2024","language":"en","authors":[{"name":"Apoorv Anand","url":"https://ropensci.org/author/apoorv-anand/","avatar":"https://github.com/apoorv74.png","_role":["author"]},{"name":"Bruna Wundervald","url":"https://ropensci.org/author/bruna-wundervald/","avatar":"https://github.com/brunaw.png","_role":["author"]},{"name":"Emi Tanaka","url":"https://ropensci.org/author/emi-tanaka/","avatar":"https://github.com/emitanaka.png","_role":["author"]},{"name":"Erle Holgersen","url":"https://ropensci.org/author/erle-holgersen/","avatar":"https://github.com/erleholgersen.png","_role":["author"]},{"name":"Eunseop Kim","url":"https://ropensci.org/author/eunseop-kim/","avatar":"https://github.com/markean.png","_role":["author"]},{"name":"Francisco Cardozo","url":"https://orcid.org/0000-0002-1925-4954","avatar":"https://github.com/focardozom.png","_role":["author"]},{"name":"François Michonneau","url":"https://ropensci.org/author/fran%C3%A7ois-michonneau/","avatar":"https://github.com/fmichonneau.png","_role":["author"]},{"name":"Jonathan Keane","url":"https://ropensci.org/author/jonathan-keane/","avatar":"https://github.com/jonkeane.png","_role":["author"]},{"name":"Luis D. Verde Arregoitia","url":"https://ropensci.org/author/luis-d.-verde-arregoitia/","avatar":"https://github.com/luisDVA.png","_role":["author"]},{"name":"Marie Vendettuoli","url":"https://ropensci.org/author/marie-vendettuoli/","avatar":"https://github.com/mariev.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","champions program"],"content_html":"\u003cp\u003eOne important aspect of rOpenSci\u0026rsquo;s mission is to build capacity and promote passionate community members who help the open science and open source software community grow and improve.\u003c/p\u003e\u003cp\u003eThe rOpenSci Champions Program is a unique opportunity for us to identify, recognize, and reward such individuals and support them in their work to improve their communities and the wider ecosystem. Mentors play a vital role in the rOpenSci Champions Program by helping select Champions and advising and inspiring their mentees. They also help to shape this program by providing feedback and proposing activities and tools.\u003c/p\u003e\u003cp\u003eThis year, the rOpenSci Team reviewed 28 applications from community member in various disciplines and from different countries to select ten mentors.\u003c/p\u003e\u003cp\u003eWe are pleased to introduce you to our mentors for the cohort 2023-2024!\u003c/p\u003e\u003ch3 id=\"apoorv-anand\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#apoorv-anand\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eApoorv Anand\u003c/h3\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/apoorv-anand.jpeg\"\t\t\talt=\"Profile photo of Apoorv Anand.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eApoorv Anand - CivicDataLab\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMember of CivicDataLab and Justice Hub.  Apoorv started his \u0026ldquo;open data\u0026rdquo; journey as a volunteer, with DataKind, to do \u0026ldquo;Data-for-good\u0026rdquo;. He joined CivicDataLab team in 2018, and started collaborating to make public datasets more accessible to citizens.\u003c/p\u003e\u003cp\u003e\u0026ldquo;I would like to contribute by not just being an active user of packages but also by helping others develop them and write about their process and experiences. This program will surely help me to grow as a developer and a mentor and will provide an opportunity to learn from and give back to this community.\u0026rdquo;\u003c/p\u003e\u003ch3 id=\"bruna-wundervald\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#bruna-wundervald\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBruna Wundervald\u003c/h3\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/bruna-wundervald.jpeg\"\t\t\talt=\"Profile photo of Bruna Wundervald\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eBruna Wundervald - Maynooth University, ABI Inbev\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am a Data Scientist graduated in Statistics, with a Ph.D. in Bayesian Machine Learning from the Hamilton Institute, Maynooth, Ireland.\u003c/p\u003e\u003cp\u003eMy main interests are causality and experimentation, Bayesian inference, multivariate analysis, feature extraction, and natural language processing.\u003c/p\u003e\u003cp\u003eI am happy to be giving back to the community that has helped me immensely in the past :)\u003c/p\u003e\u003ch3 id=\"eunseop-kim\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#eunseop-kim\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEunseop Kim\u003c/h3\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/eunseop-kim.jpg\"\t\t\talt=\"Profile photo of Eunseop Kim.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eEunseop Kim - Eli Lilly and Company\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am a data scientist at Eli Lilly and Company, specializing in the development of AI/ML methods for sales and marketing analytics. I hold a Ph.D. in Statistics from The Ohio State University, USA, and have degrees in Economics, both a Master\u0026rsquo;s and a Bachelor\u0026rsquo;s, from Seoul National University, South Korea. Originally from South Korea, I currently reside in the USA.\u003c/p\u003e\u003cp\u003eI enjoy developing and sharing software for reproducible scientific computing. Throughout my academic and professional experience, I have been actively involved in the creation and maintenance of R packages and Shiny applications. Additionally, I am the author of the \u0026ldquo;melt\u0026rdquo; package and have served as an rOpenSci software peer reviewer.\u003c/p\u003e\u003cp\u003eAs a mentor in the Champions Program, I look forward to sharing my experiences and knowledge, contributing to the ongoing success of the rOpenSci community.|\u003c/p\u003e\u003ch3 id=\"emi-tanaka\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#emi-tanaka\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEmi Tanaka\u003c/h3\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/emi-tanaka.jpg\"\t\t\talt=\"Profile photo of Emi Tanaka.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eEmi Tanaka - Australian National University\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eDr. Emi Tanaka is a Senior Lecturer in Statistics at the Biological Data Science Institute (and the Research School of Finance, Actuarial Studies and Statistics) at the Australian National University.\u003c/p\u003e\u003cp\u003eShe has developed numerous open-source tools, primarily as R packages, and resources aimed at making statistical methods accessible to a diverse audience. Emi demonstrates a proactive approach to community development and education through her involvement in the branches of the Statistical Society of Australia (SSA) and other committees.\u003c/p\u003e\u003cp\u003eEmi highly values research software as an enabler of science and as part of encouraging software development in the statistical community, she created the Di Cook Award (an open-source statistical software award) for students.\u003c/p\u003e\u003ch3 id=\"françois-michonneau\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#fran%c3%a7ois-michonneau\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFrançois Michonneau\u003c/h3\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/fran%C3%A7ois-michonneau.JPG\"\t\t\talt=\"Profile photo of François Michonneau.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eFrançois Michonneau - Voltron Data\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am an educator specializing in modern data systems. My interest in data education started when I was working on my PhD in marine biology at the University of Florida. After leaving academia, I worked at The Carpentries, and I am currently a Senior Training Engineer at Voltron Data. I co-authored several R packages, one of which went through the rOpenSci software peer review process.\u003c/p\u003e\u003cp\u003eI\u0026rsquo;m excited to be a mentor to help others participate in and grow the R community.\u003c/p\u003e\u003ch3 id=\"francisco-cardozo\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#francisco-cardozo\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFrancisco Cardozo\u003c/h3\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/francisco-cardozo.jpg\"\t\t\talt=\"Profile photo of Francisco Cardozo.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eFrancisco Cardozo - University of Miami\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is Francisco Cardozo. I am currently a Ph.D. student at the University of Miami, USA, where I am part of the Prevention Science and Community Health program.\u003c/p\u003e\u003cp\u003eI have worked on evaluating prevention programs in various countries across Latin America. At the moment, I am developing workshops to teach the use of software that enhances the reproducibility and rigor of research. These workshops focus on the use of R and statistical analysis techniques, such as machine learning and latent variables.\u003c/p\u003e\u003cp\u003eI am deeply committed to strengthening technical capacities within communities; I believe in equipping people with the necessary tools to execute their projects in the best way possible.\u003c/p\u003e\u003ch3 id=\"luis-d-verde-arregoitia\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#luis-d-verde-arregoitia\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLuis D. Verde Arregoitia\u003c/h3\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/luis-verde.jpeg\"\t\t\talt=\"Profile photo of Luis D. Verde Arregoitia.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eLuis D. Verde Arregoitia - Instituto de Ecología AC (INECOL)\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI\u0026rsquo;m a postdoctoral researcher in evolutionary macroecology. I\u0026rsquo;m a mammalogist with a Biology background. I have a BSc in Biology from the Universidad Nacional Autónoma de México and a Ph.D. in Conservation Science, from the University of Queensland, Australia.\u003c/p\u003e\u003cp\u003eIn addition to my research I spend time writing tools, blog posts, and teaching materials to help others work with messy data and spreadsheets (unheadr package) and improve their R scripts for reproducibility (annotater package).\u003c/p\u003e\u003cp\u003eHappy to guide others in their software development journey in a way that benefits both users and developers and ultimately enriches the open tools community in terms of packages and people.\u003c/p\u003e\u003ch3 id=\"erle-holgersen\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#erle-holgersen\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eErle Holgersen\u003c/h3\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/erle-holgersen.jpg\"\t\t\talt=\"Profile photo of Erle Holgersen.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eErle Holgersen - Deep Genomics\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHi! I\u0026rsquo;m Erle Holgersen, and hope to serve as a mentor in R package development. I am a computational biologist at Deep Genomics, where I collaborate closely with lab teams and build tools for streamlining data analysis.\u003c/p\u003e\u003cp\u003eLooking forward to helping with the Champions Program!\u003c/p\u003e\u003ch3 id=\"marie-c-vendettuoli\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#marie-c-vendettuoli\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMarie C. Vendettuoli\u003c/h3\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/marie-vendettuoli.jpg\"\t\t\talt=\"Profile photo of Marie C Vendettuoli\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eMarie C. Vendettuoli - Fred Hutchinson Cancer Center (2019 - 2023) and Bonneville Power Administration (2023-present)\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMarie Vendettuoli (she/her) holds a PhD in Bioinformatics/Computational Biology \u0026amp; Human Computer Interaction from Iowa State University, USA. She has spent over a decade developing R packages for scientists subject to regulatory oversight, both in the animal and human health domains. Marie values the challenge of bringing open source R tools to new audiences and looks forward to working with Champions to address their projects with an emphasis on curiosity. Originally from the Pacific Northwest, Marie is in the process of relocating to the Portland area (USA) after several years working in Seattle.\u003c/p\u003e\u003ch3 id=\"jonathan-keane\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#jonathan-keane\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eJonathan Keane\u003c/h3\u003e\u003cfigure\u003e\u003cimg src=\"/img/team/jonathan-keane.png\"\t\t\talt=\"Profile photo of Jonathan Keane.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003cstrong\u003eJonathan Keane - Independent\u003c/strong\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eJonathan Keane (they/them) is an engineering leader with a background in software engineering and data science. Jonathan is a maintainer of the Arrow project including the Arrow R package. Jonathan lives in Chicago, IL, USA and has a PhD in Linguistics from the University of Chicago.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;re so happy to have this wonderful group of mentors for the 2023-2024 cohort of the Champions Program. We are currently finalizing the selection of mentees and are looking forward to announcing them next!\u003c/p\u003e","url":"https://ropensci.org/blog/2023/11/29/champions-program-mentors-2023/","date_published":"2023-11-29T00:00:00+00:00","date_modified":"2025-06-05T10:16:41-03:00"},{"id":"https://doi.org/10.59350/e961a-yxp83","title":"rOpenSci News Digest, November 2023","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2023/11/24/news-november-2023\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"giving-season-consider-donating-to-ropensci\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#giving-season-consider-donating-to-ropensci\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGiving season: consider donating to rOpenSci\u003c/h3\u003e\u003cp\u003eThis Giving Season consider donating to rOpenSci to support our mission of empowering Open Science.\u003c/p\u003e\u003cp\u003eSustaining an open project with quality infrastructure freely accessible to the global and diverse community of R software users, research software developers, and engineers requires many different resources. Our organization’s ongoing costs are supported by grants and donations from individuals and organizations which share our vision and mission.\u003c/p\u003e\u003cp\u003eBy supporting us, you’re not just donating; you’re contributing to a community that’s breaking down barriers, creating opportunities, and shaping the future of open and reproducible science for everyone.\u003c/p\u003e\u003cp\u003eJoin us in this vital mission today! You can donate here: \u003ca href=\"https://ropensci.org/donate/\"\u003ehttps://ropensci.org/donate/\u003c/a\u003e\u003c/p\u003e\u003ch3 id=\"r-universe-now-builds-wasm-binaries-for-all-r-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-now-builds-wasm-binaries-for-all-r-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-universe now builds WASM binaries for all R packages!\u003c/h3\u003e\u003cp\u003eR-universe now builds WebAssembly binaries for all R packages for use in WebR applications such as shinylive.Read more in our \u003ca href=\"/blog/2023/11/17/runiverse-wasm/\"\u003etech note\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"recording-of-comm-call-r-in-government\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#recording-of-comm-call-r-in-government\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRecording of comm call \u003ca href=\"/commcalls/oct2023-government/\"\u003eR in Government\u003c/a\u003e\u003c/h3\u003e\u003cp\u003eIn this \u003ca href=\"/commcalls/oct2023-government/\"\u003ecommunity call\u003c/a\u003e, our panelists shared their experiences and examples of projects with R at different levels of government and in different countries.\u003c/p\u003e\u003cp\u003eWith \u003ca href=\"https://ropensci.org/author/lu%C3%ADza-andrade/\"\u003eLuíza Andrade\u003c/a\u003e, \u003ca href=\"https://ropensci.org/author/karly-harker/\"\u003eKarly Harker\u003c/a\u003e, \u003ca href=\"https://ropensci.org/author/ahmadou-dicko/\"\u003eAhmadou Dicko\u003c/a\u003e, \u003ca href=\"https://ropensci.org/author/pablo-tiscornia/\"\u003ePablo Tiscornia\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e in our recent \u003ca href=\"/blog/2023/06/21/coworking/\"\u003epost\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2023-12/\"\u003eTuesday, December 5th, 9:00 Australian Western (01:00 UTC)\u003c/a\u003e, Why won\u0026rsquo;t it pass?! Troubleshooting R package checks. With community host \u003ca href=\"/author/adam-sparks/\"\u003eAdam Sparks\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore what R package checks are and where they might fail;\u003c/li\u003e\u003cli\u003eSpend some time troubleshooting your own failing package checks;\u003c/li\u003e\u003cli\u003eDiscuss tips and tricks for troubleshooting package checks with our community host and other attendees.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-01/\"\u003eTuesday, January 9th, 14:00 Europe Central (13:00 UTC)\u003c/a\u003e, Working with APIs. With community host \u003ca href=\"/author/jon-harmon/\"\u003eJon Harmon\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore using APIs in your own work;\u003c/li\u003e\u003cli\u003eLearn about packages that can help;\u003c/li\u003e\u003cli\u003eDiscuss using APIs in R with our community host and other attendees.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2024-02/\"\u003eTuesday, February 6th, 9:00 Americas Pacific (17:00 UTC)\u003c/a\u003e, R-Universe Office Hours. With cohost \u003ca href=\"/author/jeroen-ooms/\"\u003eJeroen Ooms\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore what the \u003ca href=\"https://r-universe.dev/\"\u003eR-Universe\u003c/a\u003e has to offer;\u003c/li\u003e\u003cli\u003eCreate your own R-Universe;\u003c/li\u003e\u003cli\u003eAsk questions or troubleshoot your R-Universe problems with the cohost and other attendees.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following  package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/fastMatMR\"\u003efastMatMR\u003c/a\u003e, developed by Rohit Goswami: An interface to the fast_matrix_market C++ library, this package offers efficient read and write operations for Matrix Market files in R. It supports both sparse and dense matrix formats. Peer-reviewed at ROpenSci (\u003ca href=\"https://github.com/ropensci/software-review/issues/606\"\u003ehttps://github.com/ropensci/software-review/issues/606\u003c/a\u003e).  It is available on \u003ca href=\"https://CRAN.R-project.org/package=fastMatMR\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/606\"\u003ereviewed\u003c/a\u003e by Øystein Sørensen and Ildikó Czeller.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following eleven packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/assertr\" title=\"Assertive Programming for R Analysis Pipelines\"\u003eassertr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/assertr/releases/tag/v3.0.1\"\u003e\u003ccode\u003ev3.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/beastier\" title=\"Call BEAST2\"\u003ebeastier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beastier/releases/tag/v2.5\"\u003e\u003ccode\u003ev2.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/beautier\" title=\"BEAUti from R\"\u003ebeautier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beautier/releases/tag/v2.6.11\"\u003e\u003ccode\u003ev2.6.11\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/biomartr\" title=\"Genomic Data Retrieval\"\u003ebiomartr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/biomartr/releases/tag/v1.0.6\"\u003e\u003ccode\u003ev1.0.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/drake\" title=\"A Pipeline Toolkit for Reproducible Computation at Scale\"\u003edrake\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/drake/releases/tag/7.13.8\"\u003e\u003ccode\u003e7.13.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/eia\" title=\"API Wrapper for US Energy Information Administration Open Data\"\u003eeia\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/eia/releases/tag/v0.4.1\"\u003e\u003ccode\u003ev0.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/fastMatMR\" title=\"High-Performance Matrix Market File Operations\"\u003efastMatMR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/fastMatMR/releases/tag/v1.2.4\"\u003e\u003ccode\u003ev1.2.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gutenbergr\" title=\"Download and Process Public Domain Works from Project Gutenberg\"\u003egutenbergr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gutenbergr/releases/tag/v0.2.4\"\u003e\u003ccode\u003ev0.2.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/opencv\" title=\"Bindings to OpenCV Computer Vision Library\"\u003eopencv\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/opencv/releases/tag/v0.4.0\"\u003e\u003ccode\u003ev0.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stats19\" title=\"Work with Open Road Traffic Casualty Data from Great Britain\"\u003estats19\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stats19/releases/tag/v3.0.2\"\u003e\u003ccode\u003ev3.0.2\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/waywiser\" title=\"Ergonomic Methods for Assessing Spatial Models\"\u003ewaywiser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/waywiser/releases/tag/v0.5.1\"\u003e\u003ccode\u003ev0.5.1\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are eighteen recently closed and active submissions and 3 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/606\"\u003efastMatMR\u003c/a\u003e, \u0026ldquo;fastMatMR: High-Performance Matrix Market File Operations in R\u0026rdquo;. Submitted by \u003ca href=\"https://rgoswami.me\"\u003eRohit Goswami\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/603\"\u003eGLMMcosinor\u003c/a\u003e, Fit a cosinor model using a generalised mixed modelling framework. Submitted by \u003ca href=\"https://rwparsons.github.io/\"\u003eRex Parsons\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/600\"\u003enaijR\u003c/a\u003e, Operations to Ease Data Analyses Specific to Nigeria. Submitted by \u003ca href=\"https://victorordu.wordpress.com\"\u003eVictor Ordu \u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSeven at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/613\"\u003ecomtradr\u003c/a\u003e, Interface with the United Nations Comtrade API. Submitted by \u003ca href=\"https://github.com/datapumpernickel\"\u003epaulbochtler\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/609\"\u003ebaRulho\u003c/a\u003e, Quantifying (Animal) Sound Degradation. Submitted by \u003ca href=\"https://marceloarayasalas.weebly.com/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/595\"\u003erangr\u003c/a\u003e, Mechanistic Simulation of Species Range Dynamics. Submitted by \u003ca href=\"https://github.com/katarzynam-165\"\u003eKatarzyna Markowska\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003emregions2\u003c/a\u003e, Access Data from Marineregions.org: The Marine Regions Gazetteer and the Marine Regions Data Products. Submitted by \u003ca href=\"https://salvafern.github.io/\"\u003esalvafern\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003epangoling\u003c/a\u003e, Access to Large Language Model Predictions. Submitted by \u003ca href=\"https://bnicenboim.github.io/\"\u003eBruno Nicenboim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/598\"\u003eweatherOz\u003c/a\u003e, An API Client for Australian Weather and Climate Data Resources. Submitted by \u003ca href=\"https://github.com/bozaah\"\u003eRodrigo Pires\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"https://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/618\"\u003efellingdateR\u003c/a\u003e, Estimate, report and combine felling dates of historical tree-ring. Submitted by \u003ca href=\"https://wwww.researchgate.net/profile/Kristof_Haneca\"\u003eKriHa\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/608\"\u003ergeeExtra\u003c/a\u003e, Extensions for rgee. Submitted by \u003ca href=\"http://csaybar.github.io\"\u003eCesar Aybar\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"https://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/572\"\u003equaltdict\u003c/a\u003e, Generating Variable Dictionaries and Labelled Data Exports of Qualtrics. Submitted by \u003ca href=\"https://github.com/lyh970817\"\u003elyh970817\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/11/06/r-universe-stars-finale\"\u003eThe rOpenSci Multiverse\u003c/a\u003e by Alejandra Bellini and Yanina Bellini Saibene. In this article we summarize the interviews of the series \u003cem\u003eMeeting the stars of the R universe\u003c/em\u003e In this article, we bring you five examples of organizations and teams that choose the R Universe to facilitate access and promote community sharing of data and software. Other languages: \u003ca href='/es/blog/2023/11/06/r-universe-stars-finale-es' lang='es'\u003eEl multiverso de rOpenSci (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/11/21/donation-2023\"\u003eEmpowering Open Science: Donate to Support our Mission\u003c/a\u003e by The rOpenSci Team. rOpenSci is a nonprofit organization that is funded entirely by grants and donations. These collaborations enable us to sustain our projects and meet our goals.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/10/30/opencv-qr\"\u003eScanning QR codes in R\u003c/a\u003e by Jeroen Ooms. The new version of the opencv package includes a cool QR code scanner. This post was featured in the \u003ca href=\"https://rweekly.fireside.fm/143\"\u003eR Weekly Highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/11/17/runiverse-wasm\"\u003eR-universe now builds WASM binaries for all R packages\u003c/a\u003e by Jeroen Ooms. R-universe now builds WebAssembly binaries for all R packages for use in WebR applications such as shinylive.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eThree use cases of our packages and resources have been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/a-toolkit-workflow-for-climate-sensitive-infectious-disease-modelling/3659\"\u003eA toolkit workflow for climate-sensitive infectious disease modelling\u003c/a\u003e. Reported by Raphael Saldanha.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/targets-and-other-tools-to-make-college-comparison-website/3680\"\u003eTargets and other tools to make college comparison website\u003c/a\u003e. Reported by Brian O\u0026rsquo;Meara.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/unlock-r-functions-with-qr-codes/3681\"\u003eUnlock R functions with QR codes\u003c/a\u003e. Reported by Matt Dray.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e (or listening to its discussion on the \u003ca href=\"https://rweekly.fireside.fm/111\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas)!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/rvertnet/index.html\"\u003ervertnet\u003c/a\u003e\u003c/strong\u003e, Retrieve, map and summarize data from the VertNet.org archives (\u003ca href=\"https://vertnet.org/\"\u003ehttps://vertnet.org/\u003c/a\u003e). Functions allow searching by many parameters, including taxonomic names, places, and dates. In addition, there is an interface for conducting spatially delimited searches, and another for requesting large datasets via email. \u003ca href=\"https://github.com/ropensci-archive/rvertnet/issues/71\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"call-for-co-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-co-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for co-maintainers\u003c/h3\u003e\u003cp\u003eRefer to our somewhat \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/#packages-looking-for-co-maintainers\"\u003erecent blog post\u003c/a\u003e to identify other packages where help is especially wished for!See also our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;For a change, this month\u0026rsquo;s tips are more about programming than about packaging.\u003c/p\u003e\u003ch3 id=\"classed-conditions-from-rlang-functions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#classed-conditions-from-rlang-functions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eClassed conditions from rlang functions\u003c/h3\u003e\u003cp\u003eIf you use rlang (or cli, that will pass arguments to rlang) for messages, warnings, errors, you can add a class to the signal you\u0026rsquo;re returning.This is handy for conditionally suppressing some warnings, and also for more specific testing, as explained in \u003ca href=\"https://www.mm218.dev/posts/2023-11-07-classed-errors/\"\u003eMike Mahoney\u0026rsquo;s short and insightful blog post\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"static-code-analysis-with-lintr\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#static-code-analysis-with-lintr\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStatic code analysis with lintr\u003c/h3\u003e\u003cp\u003eThe lintr package helps you write better R code by detecting common mistakes.It is customizable: you can skip the linters you\u0026rsquo;re not interested in.\u003c/p\u003e\u003cp\u003eA new version of the package was recently released on CRAN.Refer to the \u003ca href=\"https://lintr.r-lib.org/news/index.html#lintr-311\"\u003echangelog\u003c/a\u003e for the changes, including a way to exclude the next line for linting, and new linters, for instance \u003ccode\u003elength_levels_linter()\u003c/code\u003e \u0026ldquo;for using the specific function \u003ccode\u003enlevels()\u003c/code\u003e instead of checking \u003ccode\u003elength(levels(x))\u003c/code\u003e\u0026rdquo;.\u003c/p\u003e\u003ch3 id=\"how-to-get-good-with-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-get-good-with-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to get good with R\u003c/h3\u003e\u003cp\u003eNick Tierney wrote a wise post on \u003ca href=\"https://www.njtierney.com/post/2023/11/10/how-to-get-good-with-r/\"\u003eHow to get good with R\u003c/a\u003e, and the conclusion indicates he\u0026rsquo;s open to discussion.An important topic not only for package developers.\u003c/p\u003e\u003ch3 id=\"lesser-known-reasons-to-prefer-apply-over-for-loops\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#lesser-known-reasons-to-prefer-apply-over-for-loops\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLesser-known reasons to prefer \u003ccode\u003eapply()\u003c/code\u003e over for loops\u003c/h3\u003e\u003cp\u003eHugo Gruson wrote a very informative blog post on \u003ca href=\"https://epiverse-trace.github.io/posts/for-vs-apply/\"\u003e\u0026ldquo;Lesser-known reasons to prefer \u003ccode\u003eapply()\u003c/code\u003e over for loops\u0026rdquo;\u003c/a\u003e.The third one will surprise you. \u0026#x1f609; (Yes, this is click bait.)\u003c/p\u003e\u003ch3 id=\"null-coalescing-operator-soon-in-base-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#null-coalescing-operator-soon-in-base-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNull coalescing operator soon in base R\u003c/h3\u003e\u003cp\u003eThe \u003ccode\u003e%||%\u003c/code\u003e operator that you \u003ca href=\"https://masalmon.eu/2023/06/06/basic-patterns/#use-a-default-if-the-user-provided-null\"\u003emight know\u003c/a\u003e from rlang has been added to \u003ca href=\"https://github.com/wch/r-source/commit/10df7eac991c297271e16c7a1888240196d540f2\"\u003ethe development version of base R\u003c/a\u003e!Source: a \u003ca href=\"https://mastodon.social/@jennybryan@fosstodon.org/111302964212692505\"\u003etoot of Jenny Bryan\u0026rsquo;s\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"evercran-run-historical-r-versions-on-todays-computers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#evercran-run-historical-r-versions-on-todays-computers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEvercran: run historical R versions on today\u0026rsquo;s computers\u003c/h3\u003e\u003cp\u003eGábor Csárdi\u0026rsquo;s experimental \u003ca href=\"https://github.com/r-hub/evercran#readme\"\u003eevercran project\u003c/a\u003e helps you run historical R versions on today\u0026rsquo;s computers\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.You can also support our work through \u003ca href=\"/donate\"\u003edonations\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/11/24/news-november-2023/","date_published":"2023-11-24T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/9den0-fmz94","title":"Empowering Open Science: Donate to Support our Mission","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["community"],"content_html":"\u003cp\u003erOpenSci is a nonprofit organization that is funded entirely by grants and donations. These contributions enable us to keep our projects and infrastructure active and accessible to the community.\u003c/p\u003e\u003cp\u003eOur projects are dedicated to establishing and upholding both technical and social infrastructure that supports open and reproducible science for all our members. This means our efforts must be sustainable, inclusive, and created collaboratively by and for all groups.\u003c/p\u003e\u003cp\u003eEach action taken by rOpenSci seeks to break down barriers to accessing knowledge in the drive to democratize access to quality resources. Examples are the \u003ca href=\"/r-universe/\"\u003eR-Universe\u003c/a\u003e, the \u003ca href=\"/champions/\"\u003eChampions Program\u003c/a\u003e, and the \u003ca href=\"/multilingual-publishing/\"\u003epublication of multilingual\u003c/a\u003e resources. We also strive to transform science by creating processes and building capacity to ensure software quality and good practices, for example, our (\u003ca href=\"/software-review/\"\u003estatistical\u003c/a\u003e) \u003ca href=\"/software-review/\"\u003esoftware peer review\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eSustaining an open project with quality infrastructure freely accessible to the global and diverse community of R software users, research software developers, and engineers requires many different resources. Our organization\u0026rsquo;s ongoing costs are supported by grants and donations from individuals and organizations which share our vision and mission.\u003c/p\u003e\u003cp\u003eBy supporting us, you’re not just donating; you’re contributing to a community that’s breaking down barriers, creating opportunities, and shaping the future of open and reproducible science for everyone. Join us in this vital mission today!\u003c/p\u003e\u003ch2 id=\"being-part-of-the-community\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#being-part-of-the-community\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBeing part of the community\u003c/h2\u003e\u003cp\u003eThe concept of community gives meaning to rOpenSci\u0026rsquo;s work and it is within this framework that we develop projects. Therefore, it is natural for us to look to the community to help us move forward.\u003c/p\u003e\u003cp\u003eEvery little bit helps. That is why we invite you to collaborate with us or to share this information with any people or organizations that you think may be interested.\u003c/p\u003e\u003cp\u003eYou can also support us by participating in our projects and activities.  Check out our \u003ca href=\"https://contributing.ropensci.org/\"\u003eContributing Guide\u003c/a\u003e which covers all the ways you can get more involved with rOpenSci and how you may benefit. 😄\u003c/p\u003e\u003ch2 id=\"donate-to-ropensci\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#donate-to-ropensci\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDonate to rOpenSci\u003c/h2\u003e\u003cp\u003erOpenSci is a project sponsored by NumFOCUS, a U.S. 501(c)(3) non-profit charitable organization.\u003c/p\u003e\u003cp\u003eYou can donate here: \u003ca href=\"https://ropensci.org/donate/\"\u003ehttps://ropensci.org/donate/\u003c/a\u003e\u003c/p\u003e\u003cp\u003eThank you for helping us to keep rOpenSci active! 🙏\u003c/p\u003e","url":"https://ropensci.org/blog/2023/11/21/donation-2023/","date_published":"2023-11-21T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/bkag3-csz91","title":"R-universe now builds WASM binaries for all R packages","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["tech notes","r-universe","webr","wasm"],"content_html":"\u003ch2 id=\"abstract--tldr\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#abstract--tldr\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAbstract / TLDR\u003c/h2\u003e\u003cp\u003e\u003ca href=\"https://r-universe.dev\"\u003eR-universe\u003c/a\u003e now builds WASM binaries of all R packages for use in WebR applications (such as \u003ca href=\"https://shinylive.io/r\"\u003eshinylive\u003c/a\u003e). For example to test the dev version of dplyr, you can open the \u003ca href=\"https://webr.r-wasm.org/latest/\"\u003eWebR demo\u003c/a\u003e page and run:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003einstall.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;dplyr\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;https://tidyverse.r-universe.dev\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;https://repo.r-wasm.org\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAs explained below, not all R packages are supported yet; some packages need some fixes to work in WebAssembly, but coverage is rapidly growing. The r-universe dashboards shows which packages are available and link to the build logs to help you debug issues.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eUpdate:\u003c/strong\u003e Have a look at this \u003ca href=\"https://observablehq.com/d/6936259b898a25ce\"\u003eobservable notebook\u003c/a\u003e for more ideas on how to use WebR on websites.\u003c/p\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/17/runiverse-wasm/screenshot.png\" alt=\"Screenshot of rOpenSci dashboard with WebAssembly icons highlighted\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/17/runiverse-wasm/screenshot.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003ch2 id=\"what-is-webassembly\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-webassembly\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is WebAssembly\u003c/h2\u003e\u003cp\u003eOne of the most exciting recent developments in the R ecosystem is the \u003ca href=\"https://docs.r-wasm.org/webr/latest/\"\u003eWebR\u003c/a\u003e project by George Stagg from Posit, to port R to WebAssembly (for short: WASM).\u003c/p\u003e\u003cp\u003eWithout going into much technical detail, \u003ca href=\"https://webassembly.org/\"\u003eWebAssembly\u003c/a\u003e is a new portable binary-code format that makes it possible to safely run compiled code (from e.g. C/C++/Fortran/Rust) within a website. All major browsers support WASM, and the format is now also getting adopted in other environments. For example cloudflare lets you \u003ca href=\"https://developers.cloudflare.com/workers/runtime-apis/webassembly/\"\u003erun wasm binaries in the cdn workers\u003c/a\u003e, and the R package \u003ca href=\"https://jeroen.r-universe.dev/V8\"\u003eV8\u003c/a\u003e provides a very basic experimental WASM engine in R.\u003c/p\u003e\u003cp\u003eWebAssembly is becoming a ubiquitous binary execution format, that enables us to ship executable code that can run on any platform. Sounds familiar? Indeed, however there are two major differences with Java. Unlike Java, no special language is needed; we just compile existing C/C++/Rust code into WebAssembly. And second, WebAssembly is an open standard designed to be natively supported in browsers, whereas Java required installation of a terrible plugin to run \u0026ldquo;web applets\u0026rdquo;. So this time it actually works well.\u003c/p\u003e\u003ch2 id=\"porting-r-to-webassembly\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#porting-r-to-webassembly\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePorting R to WebAssembly\u003c/h2\u003e\u003cp\u003eWebR is a port of a (\u003ca href=\"https://github.com/r-wasm/webr/tree/main/patches/R-4.3.0\"\u003eslightly modified\u003c/a\u003e) version of R to WebAssembly. Before continuing, we should appreciate the mountains of work that were invested in this, mainly by George Stagg.\u003c/p\u003e\u003cp\u003eThe R codebase consists of a lot of C and Fortran code. I said above that we can just compile C/Fortran into WASM, but this is only partially true: because WASM has to run safely within any website, it is a fairly restricted platform. A lot of common operations available on most systems are disabled in WASM. For example, we cannot open network sockets, invoke shell commands, or access the local filesystem. Hence porting software to WASM involves adapting the code to work with and around these limitations.\u003c/p\u003e\u003cp\u003eIn this \u003ca href=\"https://www.youtube.com/watch?v=Mpq9a6yMl_w\"\u003evideo presentation\u003c/a\u003e George briefly discusses some of the pieces that are used to make R run inside WebAssembly, such as the virtual filesystem and off-screen canvas. Also have a look at \u003ca href=\"https://georgestagg.github.io/shiny-without-a-server-2023/\"\u003ethese slides\u003c/a\u003e about shinylive, which is an experimental version of shiny based on WebR that runs entirely in WebAssembly without the need for any server.\u003c/p\u003e\u003ch2 id=\"building-all-the-r-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#building-all-the-r-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBuilding all the R packages\u003c/h2\u003e\u003cp\u003eNow that we have a working version of R in WebAssembly, the next challenge is to build the 23000+ contributed R packages for WebAssembly.\u003c/p\u003e\u003cp\u003eOne thing that is perhaps not immediately obvious, is that it won\u0026rsquo;t be possible to install packages directly \u003cem\u003efrom source\u003c/em\u003e the way we typically do in R, because the toolchains needed to compile WASM themselves to not run under WASM. To make it possible to use R packages in WebR, they first have to be compiled on another platform using e.g. \u003ca href=\"https://emscripten.org\"\u003eemscripten\u003c/a\u003e and/or \u003ca href=\"https://www.rust-lang.org/\"\u003erust\u003c/a\u003e toolchains. The resulting \u003cem\u003ebinary package\u003c/em\u003e can be served in a package repository from where WebR can download and install it.\u003c/p\u003e\u003cp\u003eAs you can imagine, doing this manually is quite an exercise. But with some help from George we were able to create a docker container that has all the tooling to build R packages for WebAssembly, and plugged this into the r-universe build workflow. So now r-universe automatically builds WebR compatible binaries for each update in any of the packages we are tracking. This makes it easy for users and maintainers to try the package in WebR or test changes.\u003c/p\u003e\u003cp\u003eThe packages can be installed simply using as described above \u003ccode\u003einstall.packages\u003c/code\u003e. Each package homepage on r-universe also contains a direct link to the wasm binary if available:\u003c/p\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/17/runiverse-wasm/packagepage.png\" alt=\"Screenshot of dplyr package homepage on r-universe\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/17/runiverse-wasm/packagepage.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003ch2 id=\"available-system-libraries\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#available-system-libraries\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAvailable System libraries\u003c/h2\u003e\u003cp\u003eThe main reason why some popular R packages are not yet available for WebAssembly is because they depend on external system libraries, such as \u003ccode\u003elibcurl\u003c/code\u003e or \u003ccode\u003egdal\u003c/code\u003e. On most platforms such libraries can be installed by a package manager like \u003ccode\u003eapt\u003c/code\u003e or \u003ccode\u003ebrew\u003c/code\u003e, however no good package manager for WebAssembly currently exists, so we need to port and build these libraries manually, which again is a lot of work.\u003c/p\u003e\u003cp\u003eThe docker build image currently includes about 25 external C/C++ libraries which are built from the \u003ca href=\"https://github.com/r-wasm/webr/tree/main/libs/recipes\"\u003er-wasm recipes\u003c/a\u003e scripts. This is a pretty arbitrary selection, mainly consisting of libraries used by the R spatial packages (gdal + dependencies) and some libraries related to graphics used to build base R itself.\u003c/p\u003e\u003cp\u003eIn order to expand the coverage of R packages available in WebR, we would need to expand this list. If your R package requires a system library that is currently unavailable, you could try sending a PR to the above recipes (but please make sure that you first test it by building the docker image locally). Hopefully at some point a proper emscripten package manager will appear that provides these libraries for us.\u003c/p\u003e\u003ch2 id=\"webassembly-coverage\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#webassembly-coverage\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWebAssembly Coverage\u003c/h2\u003e\u003cp\u003eCurrently R-universe is tracking 41086 packages of which 38677 have a WASM binary. However note that these are not all unique packages: for CRAN packages we both track the latest CRAN release, as well as upstream Git repo (aka devel version) if known.\u003c/p\u003e\u003cp\u003eThere is another important caveat: many R packages can themselves be compiled to WebAssembly, but they depend on one or more other R packages that currently are not available, and therefore cannot be used yet. This is actually a significant share: many of the packages mentioned above that require system libraries are actually important packages used by many others. So if that system library is not available, it makes all the dependents unavailable as well.\u003c/p\u003e\u003cp\u003eThe webR project maintains a \u003ca href=\"https://repo.r-wasm.org/\"\u003eshiny app to monitor WASM status for CRAN packages\u003c/a\u003e (the app is slow to load, be patient). So here we can see that currently 19356 out of 20040 CRAN packages can be built for WebAssembly, but only 10483 are are ready to use in the sense that all their dependencies are available as well.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/11/17/runiverse-wasm/","date_published":"2023-11-17T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/g7mpc-1ek03","title":"The rOpenSci Multiverse","language":"en","authors":[{"name":"Alejandra Bellini","url":"https://ropensci.org/author/alejandra-bellini/","avatar":"https://ropensci.org/img/community/ale-bellini.jpeg","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","r-universe","interviews","r-universe-stars"],"content_html":"\u003cp\u003eThe \u003ca href=\"https://r-universe.dev\"\u003eR-Universe\u003c/a\u003e is used by professionals from different fields, although they all pursue the same objective: \u003cstrong\u003eto offer their R packages in a simple and accessible way\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eAt rOpenSci we work to provide tools that facilitate access to data and research software generated with good software development practices and in a friendly community. With the R-Universe platform we basically seek to present the entire #rstats universe so that anyone can find the most suitable package to solve a problem.\u003c/p\u003e\u003cp\u003eIn the R-Universe we find very diverse packages. From teams analyzing statistical data in the Argentine state to research on the human brain in Norway.\u003c/p\u003e\u003cp\u003eIn this blog post, we summarize the interviews of the series \u003cem\u003eMeeting the stars of the R-Universe\u003c/em\u003e and bring you five examples of organizations and teams that choose the R-Universe to facilitate access and promote community sharing of data and software.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003e\u003ca href=\"/blog/2022/11/23/r-universe-stars-1-en/\"\u003eSINTA: R community, sharing and learning\u003c/a\u003e\u003c/em\u003e. In this interview we reviewed the experience of working with R packages in the Argentine state. From the Ministry of Tourism and Sports our stars work to optimize workflows in open processes which are accessible to everyone. They define the R-Universe as a \u0026ldquo;big closet where to put our toolboxes\u0026rdquo;.\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition\" itemscope itemtype=\"http://schema.org/ImageGallery\"\u003e\t  \u003clink rel=\"stylesheet\" href=/css/hugo-easy-gallery.css /\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/11/06/r-universe-stars-finale/sinta.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/06/r-universe-stars-finale/sinta.png\" alt=\"SINTA\u0026#39;s website. Tourism Open Data.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/06/r-universe-stars-finale/sinta.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/11/06/r-universe-stars-finale/sinta2.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/06/r-universe-stars-finale/sinta2.png\" alt=\"SINTA\u0026#39;s R Universe.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/06/r-universe-stars-finale/sinta2.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003e\u003ca href=\"/blog/2023/02/28/r-universe-stars-2-en/\"\u003eLearn, help and share: ThinkR\u0026rsquo;s method to create a growing and friendly R community\u003c/a\u003e\u003c/em\u003e. In this meeting we talked about R in education through the story of a French organization that seeks to help more people work with R. They define the R-Universe as a place to record all their processes and tools in an orderly way and with useful information.\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition\" itemscope itemtype=\"http://schema.org/ImageGallery\"\u003e\t  \u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/11/06/r-universe-stars-finale/thinkr.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/06/r-universe-stars-finale/thinkr.png\" alt=\"Thinkr\u0026#39;s R Universe, package view.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/06/r-universe-stars-finale/thinkr.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/11/06/r-universe-stars-finale/thinkr2.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/06/r-universe-stars-finale/thinkr2.png\" alt=\"Thinkr\u0026#39;s R Universe, build view.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/06/r-universe-stars-finale/thinkr2.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003e\u003ca href=\"/blog/2023/03/30/r-universe-stars-3-en/\"\u003eResearching our brain with the magic of the R-Universe\u003c/a\u003e\u003c/em\u003e. In this interview we learned how the R-Universe came at the right time to solve the problems with data size and multiple tools needed to work on human brain research as part of the LifeBrain Consortium.\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition\" itemscope itemtype=\"http://schema.org/ImageGallery\"\u003e\t  \u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/11/06/r-universe-stars-finale/lifebrain1.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/06/r-universe-stars-finale/lifebrain1.png\" alt=\"Lifebrain Consortium\u0026#39;s R Universe, package view.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/06/r-universe-stars-finale/lifebrain1.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/11/06/r-universe-stars-finale/lifebrain2.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/06/r-universe-stars-finale/lifebrain2.png\" alt=\"Two outlines of a brain drawn with lines. On the left, an image from above; on the right, an image from the side. Both show colored spots highlighting dots in the center corresponding to different parts of the brain.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/06/r-universe-stars-finale/lifebrain2.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/11/06/r-universe-stars-finale/lifebrain3.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/06/r-universe-stars-finale/lifebrain3.png\" alt=\"A series of three examples of graphs of different brain atlases. Each row shows four brain outlines with different colored shapes.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/06/r-universe-stars-finale/lifebrain3.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003e\u003ca href=\"/blog/2023/06/06/r-universe-stars-4-en/\"\u003ePEcAn: an open source project to care for the planet\u003c/a\u003e\u003c/em\u003e. In this meeting we came to know the Universe of a team that works with climate change and research in a diverse and complex field which demands models that save time and resources to researchers.\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition\" itemscope itemtype=\"http://schema.org/ImageGallery\"\u003e\t  \u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/11/06/r-universe-stars-finale/pecan0.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/06/r-universe-stars-finale/pecan0.png\" alt=\"PEcAn project\u0026#39;s website.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/06/r-universe-stars-finale/pecan0.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/11/06/r-universe-stars-finale/pecan.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/06/r-universe-stars-finale/pecan.png\" alt=\"Flowchart showing the standards approach to reduce redundant work when adopting common formats.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/06/r-universe-stars-finale/pecan.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/11/06/r-universe-stars-finale/pecan2.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/06/r-universe-stars-finale/pecan2.png\" alt=\"PEcAn project\u0026#39;s R universe, package view.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/06/r-universe-stars-finale/pecan2.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003e\u003ca href=\"/blog/2023/09/15/r-universe-stars-5-en/\"\u003eThe R-Universe against diseases\u003c/a\u003e\u003c/em\u003e. In this fifth meeting, we discovered the work done by a team of developers at the MRC Centre for Global Infectious Disease Analysis to fight against infectious diseases and how they use the R-Universe to host their packages. Our experiences with the pandemic help us to understand the dimension and importance of this work.\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition\" itemscope itemtype=\"http://schema.org/ImageGallery\"\u003e\t  \u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/11/06/r-universe-stars-finale/mrc1.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/06/r-universe-stars-finale/mrc1.png\" alt=\"MRC\u0026#39;s R Universe, contributions view.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/06/r-universe-stars-finale/mrc1.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/11/06/r-universe-stars-finale/mrc2.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/06/r-universe-stars-finale/mrc2.png\" alt=\"MRC\u0026#39;s R Universe, builds view.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/06/r-universe-stars-finale/mrc2.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/11/06/r-universe-stars-finale/mrc3.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/11/06/r-universe-stars-finale/mrc3.png\" alt=\"MRC\u0026#39;s R Universe, package view.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/11/06/r-universe-stars-finale/mrc3.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003eThis is a small sample of a large Universe where professionals from different areas coexist, all of them people who use R. Each team highlights different benefits of our platform:\u003c/p\u003e\u003cul\u003e\u003cli\u003eAutomate the building of binaries for different operating systems and thus\u003c/li\u003e\u003cli\u003eFacilitate the release and installation of packages and save hours of work related to these tasks\u003c/li\u003e\u003cli\u003ePublish packages with large amounts of data\u003c/li\u003e\u003cli\u003ePublish all your software tools in one place in an organized way\u003c/li\u003e\u003cli\u003eShow joint software development efforts of many organizations in one place\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThere are a lot more R-Universes out there! \u003ca href=\"mailto:yabellini@ropensci.org\"\u003eWhich other Universes you would like us to interview\u003c/a\u003e in the next series so we can learn even more about the teams and packages that are part of the rOpenSci Multiverse?\u003c/p\u003e\u003cp\u003eYou can also become a part of our community by subscribing to our \u003ca href=\"/news/\"\u003eNewsletter\u003c/a\u003e and you can follow us on our social networks at \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon\u003c/a\u003e and \u003ca href=\"https://www.linkedin.com/company/ropensci/\"\u003eLinkedIn\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/11/06/r-universe-stars-finale/","date_published":"2023-11-06T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/cwnhn-jx736","title":"Scanning QR codes in R","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["tech notes","packages","opencv"],"content_html":"\u003cp\u003eThe latest version of the \u003ca href=\"https://ropensci.r-universe.dev/opencv\"\u003eopencv R package\u003c/a\u003e can detect and decode QR codes!\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Install latest opencv\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003einstall.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;opencv\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;https://ropensci.r-universe.dev\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThere are two ways of using this: the \u003ca href=\"https://docs.ropensci.org/opencv/reference/qrcode.html\"\u003e\u003ccode\u003eocv_qr_detect\u003c/code\u003e\u003c/a\u003e function tries to find the QR in an image file. It returns either a text string or NULL (if no QR code was found in the image):\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eimg\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e  \u003cspan class=\"n\"\u003eopencv\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eocv_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;https://jeroen.github.io/images/qrtest.jpg\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eopencv\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eocv_qr_detect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eimg\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## https://www.r-project.org\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAlternatively if your laptop has a camera, you can use R as a true QR code scanner! The \u003ca href=\"https://docs.ropensci.org/opencv/reference/qrcode.html\"\u003e\u003ccode\u003eqr_scanner\u003c/code\u003e\u003c/a\u003e function starts the camera device and filters the video stream through the above \u003ccode\u003eocv_qr_detect\u003c/code\u003e until a QR code has been detected.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# This requires a camera\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etxt\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003eopencv\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eqr_scanner\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eBy default, both \u003ccode\u003eocv_qr_detect\u003c/code\u003e and \u003ccode\u003eqr_scanner\u003c/code\u003e return the text value of the decoded QR code. But both functions also have an option \u003ccode\u003edraw = TRUE\u003c/code\u003e which will instead return an annotated image with the position and value of the QR drawn into the image, and qr text value as an attribute.\u003c/p\u003e\u003cdiv class=\"gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition\" itemscope itemtype=\"http://schema.org/ImageGallery\"\u003e\t  \u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/10/30/opencv-qr/input.jpg');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/10/30/opencv-qr/input.jpg\" alt=\"Input photo which includes a QR code\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/10/30/opencv-qr/input.jpg\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/10/30/opencv-qr/output.jpg');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/10/30/opencv-qr/output.jpg\" alt=\"Annotated output which shows the input plus highlighted QR area\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/10/30/opencv-qr/output.jpg\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003ch2 id=\"generating-qr-codes-in-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#generating-qr-codes-in-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGenerating QR codes in R\u003c/h2\u003e\u003cp\u003eThere exists another package on CRAN called \u003ca href=\"https://thierryo.github.io/qrcode/\"\u003eqrcode\u003c/a\u003e (currently maintained by Thierry Onkelinx) which can generate most types of QR codes using R graphics, which is super cool.\u003c/p\u003e\u003cp\u003eWe can combine the two packages to roundtrip text to QR codes in R:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## generate a qr code image\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003epng\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;qr-test.png\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eqrcode\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eqr_code\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;This is a test!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003edev.off\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Verify that we can read it:\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eocv_qr_detect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eocv_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;qr-test.png\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [1] \u0026#34;This is a test!\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eSo this provides a quick way to exchange small blobs of information between computers running R, without the need for any network connection.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/10/30/opencv-qr/","date_published":"2023-10-30T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/c6935-n5w84","title":"rOpenSci News Digest, October 2023","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2023/10/20/news-october-2023\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"help-us-translate-our-dev-guide-to-portuguese\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#help-us-translate-our-dev-guide-to-portuguese\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHelp us translate our dev guide to Portuguese\u003c/h3\u003e\u003cp\u003eSince last year we started the translation and localization of our Spanish version of our \u003ca href=\"https://devguide.ropensci.org/\"\u003ecomprehensive guide to software development\u003c/a\u003e. We have a \u003ca href=\"https://devdevguide.netlify.app/es/preface.es.html\"\u003efirst version in Spanish\u003c/a\u003e and now, thanks to the R Community initiative, we are working on the Portuguese version.\u003c/p\u003e\u003cp\u003eOur process includes the review of automatic translations by two people, and we need your help!\u003c/p\u003e\u003cp\u003eIf you are interested in collaborating with this community effort, please check the \u0026ldquo;TODO - Second Review\u0026rdquo; tab of \u003ca href=\"https://github.com/orgs/ropensci/projects/7\"\u003ethis project on GitHub\u003c/a\u003e and let us know you want to collaborate by leaving a comment in the corresponding Pull Request.\u003c/p\u003e\u003cp\u003eAll contributors will be added to the rOpenSci Slack, \u003ca href=\"/multilingual-publishing/\"\u003elisted on our multilingual publishing project webpage\u003c/a\u003e and acknowledged as authors of the Portuguese translation.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e in our recent \u003ca href=\"/blog/2023/06/21/coworking/\"\u003epost\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2023-11/\"\u003eTuesday, Nov 7th, 9:00 America Pacific (17:00 UTC)\u003c/a\u003e, Fixing scary bugs 😱🐛 With community host \u003ca href=\"/author/salix-dubois/\"\u003eSalix Dubois\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e.\u003cul\u003e\u003cli\u003eIdentify/fix some scary bugs;\u003c/li\u003e\u003cli\u003eChat with Salix about scary bugs!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch3 id=\"reminder-three-upcoming-community-calls-and-our-first-one-in-spanish\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#reminder-three-upcoming-community-calls-and-our-first-one-in-spanish\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReminder: Three upcoming community calls, and our first one in Spanish!\u003c/h3\u003e\u003ch4 id=\"r-in-government\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-in-government\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ca href=\"/commcalls/oct2023-government/\"\u003eR in Government\u003c/a\u003e\u003c/h4\u003e\u003cp\u003eIn this community call, our panelists will share their experiences and examples of projects with R at different levels of government and in different countries.We invite you to learn about the challenges and lessons learned from our panelists and attendees in their efforts to make their government data, processes, and analyses more open and reproducible.\u003c/p\u003e\u003cp\u003eWith \u003ca href=\"https://ropensci.org/author/lu%C3%ADza-andrade/\"\u003eLuíza Andrade\u003c/a\u003e, \u003ca href=\"https://ropensci.org/author/karly-harker/\"\u003eKarly Harker\u003c/a\u003e, \u003ca href=\"https://ropensci.org/author/ahmadou-dicko/\"\u003eAhmadou Dicko\u003c/a\u003e, \u003ca href=\"https://ropensci.org/author/pablo-tiscornia/\"\u003ePablo Tiscornia\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eTuesday, 31 October 2023 16:00 UTC\u003c/strong\u003e\u003c/p\u003e\u003ch4 id=\"multilingual-publishing\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#multilingual-publishing\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMultilingual Publishing\u003c/h4\u003e\u003cp\u003eAs global movements, Open Source and Open Science face language-based exclusion as most resources are in English. This affects scientists and research software engineers working in R, particularly those who don’t have English as their first language.\u003c/p\u003e\u003cp\u003erOpenSci multilingual efforts aim to lower access barriers, democratize quality resources, and increase the possibilities of contributing to open software and science. We successfully piloted our Spanish-language peer review and the localization to Spanish of our comprehensive guide to software development, with Portuguese translation underway.\u003c/p\u003e\u003cp\u003e\u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e, \u003ca href=\"/author/pao-corrales/\"\u003ePaola Corrales\u003c/a\u003e, and \u003ca href=\"/author/elio-campitelli/\"\u003eElio Campitelli\u003c/a\u003e,  will share the rOpenSci Multilingual project details on this call. Maëlle will present the R packages that allow us to have our content in several languages. Then Elio and Paola will share the translation workflow and show the Translation Guide written to document the process.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/commcalls/nov2023-multilingual/\"\u003e\u003cstrong\u003eMultilingual Publishing\u003c/strong\u003e:  Tuesday, 21 November 2023 12:00 UTC\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/commcalls/nov2023-multilenguaje/\"\u003e\u003cstrong\u003eProyecto Multilingüe\u003c/strong\u003e: Thursday, 23 November 2023 12:00 UTC\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"software-package-new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package-new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;: new versions\u003c/h2\u003e\u003cp\u003eThe following twenty-three packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/gert\" title=\"Simple Git Client for R\"\u003egert\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/gert/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/aorsf\" title=\"Accelerated Oblique Random Survival Forests\"\u003eaorsf\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/aorsf/releases/tag/v0.1.1\"\u003e\u003ccode\u003ev0.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/beastier\" title=\"Call BEAST2\"\u003ebeastier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beastier/releases/tag/v2.4.12\"\u003e\u003ccode\u003ev2.4.12\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/beautier\" title=\"BEAUti from R\"\u003ebeautier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beautier/releases/tag/v2.6.9\"\u003e\u003ccode\u003ev2.6.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/biomartr\" title=\"Genomic Data Retrieval\"\u003ebiomartr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/biomartr/releases/tag/v1.0.5\"\u003e\u003ccode\u003ev1.0.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/drake\" title=\"A Pipeline Toolkit for Reproducible Computation at Scale\"\u003edrake\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/drake/releases/tag/7.13.6\"\u003e\u003ccode\u003e7.13.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/EDIutils\" title=\"An API Client for the Environmental Data Initiative Repository\"\u003eEDIutils\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/EDIutils/releases/tag/v1.0.3\"\u003e\u003ccode\u003ev1.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/epubr\" title=\"Read EPUB File Metadata and Text\"\u003eepubr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/epubr/releases/tag/v0.6.4\"\u003e\u003ccode\u003ev0.6.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/FedData\" title=\"Functions to Automate Downloading Geospatial Data Available fromSeveral Federated Data Sources\"\u003eFedData\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/FedData/releases/tag/v4.0.0\"\u003e\u003ccode\u003ev4.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/hunspell\" title=\"High-Performance Stemmer, Tokenizer, and Spell Checker\"\u003ehunspell\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/hunspell/releases/tag/v3.0.3\"\u003e\u003ccode\u003ev3.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/MODIStsp\" title=\"Find, Download and Process MODIS Land ProductsData\"\u003eMODIStsp\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/MODIStsp/releases/tag/v2.1.0\"\u003e\u003ccode\u003ev2.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.9.8\"\u003e\u003ccode\u003ev0.9.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/prism\" title=\"Access Data from the Oregon State Prism Climate Project\"\u003eprism\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/prism/releases/tag/v0.2.1\"\u003e\u003ccode\u003ev0.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rdhs\" title=\"API Client and Dataset Management for the Demographic and Health Survey (DHS) Data\"\u003erdhs\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rdhs/releases/tag/v0.8.0\"\u003e\u003ccode\u003ev0.8.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rglobi\" title=\"Interface to Global Biotic Interactions\"\u003erglobi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rglobi/releases/tag/v0.3.4\"\u003e\u003ccode\u003ev0.3.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rtweet\" title=\"Collecting Twitter Data\"\u003ertweet\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rtweet/releases/tag/v1.2.1\"\u003e\u003ccode\u003ev1.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stats19\" title=\"Work with Open Road Traffic Casualty Data from Great Britain\"\u003estats19\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stats19/releases/tag/v3.0.0\"\u003e\u003ccode\u003ev3.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.7.9\"\u003e\u003ccode\u003e0.7.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.3.2\"\u003e\u003ccode\u003e1.3.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/terrainr\" title=\"Landscape Visualizations in R and Unity\"\u003eterrainr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/terrainr/releases/tag/v0.7.5\"\u003e\u003ccode\u003ev0.7.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tiler\" title=\"Create Geographic and Non-Geographic Map Tiles\"\u003etiler\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tiler/releases/tag/v0.3.1\"\u003e\u003ccode\u003ev0.3.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tracerer\" title=\"Tracer from R\"\u003etracerer\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tracerer/releases/tag/v2.2.3\"\u003e\u003ccode\u003ev2.2.3\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/waywiser\" title=\"Ergonomic Methods for Assessing Spatial Models\"\u003ewaywiser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/waywiser/releases/tag/v0.5.0\"\u003e\u003ccode\u003ev0.5.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are eighteen recently closed and active submissions and 3 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/606\"\u003efastMatMR\u003c/a\u003e, \u0026ldquo;fastMatMR: High-Performance Matrix Market File Operations in R\u0026rdquo;. Submitted by \u003ca href=\"https://rgoswami.me\"\u003eRohit Goswami\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/600\"\u003enaijR\u003c/a\u003e, Operations to Ease Data Analyses Specific to Nigeria. Submitted by \u003ca href=\"https://victorordu.wordpress.com\"\u003eVictor Ordu \u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSeven at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/603\"\u003eGLMMcosinor\u003c/a\u003e, Fit a cosinor model using a generalised mixed modelling framework. Submitted by \u003ca href=\"https://rwparsons.github.io/\"\u003eRex Parsons\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/595\"\u003erangr\u003c/a\u003e, Mechanistic Simulation of Species Range Dynamics. Submitted by \u003ca href=\"https://github.com/katarzynam-165\"\u003eKatarzyna Markowska\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003emregions2\u003c/a\u003e, Access Data from Marineregions.org: The Marine Regions Gazetteer and the Marine Regions Data Products. Submitted by \u003ca href=\"https://salvafern.github.io/\"\u003esalvafern\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003epangoling\u003c/a\u003e, Access to Large Language Model Predictions. Submitted by \u003ca href=\"https://bnicenboim.github.io/\"\u003eBruno Nicenboim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/603\"\u003eGLMMcosinor\u003c/a\u003e, Fit a cosinor model using a generalised mixed modelling framework. Submitted by \u003ca href=\"https://rwparsons.github.io/\"\u003eRex Parsons\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/613\"\u003ecomtradr\u003c/a\u003e, Interface with the United Nations Comtrade API. Submitted by \u003ca href=\"https://github.com/datapumpernickel\"\u003epaulbochtler\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/609\"\u003ebaRulho\u003c/a\u003e, Quantifying (Animal) Sound Degradation. Submitted by \u003ca href=\"https://marceloarayasalas.weebly.com/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/598\"\u003eweatherOz\u003c/a\u003e, An API Client for Australian Weather and Climate Data Resources. Submitted by \u003ca href=\"https://github.com/bozaah\"\u003eRodrigo Pires\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"https://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/608\"\u003ergeeExtra\u003c/a\u003e, Extensions for rgee. Submitted by \u003ca href=\"http://csaybar.github.io\"\u003eCesar Aybar\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"http://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/572\"\u003equaltdict\u003c/a\u003e, Generating Variable Dictionaries and Labelled Data Exports of Qualtrics. Submitted by \u003ca href=\"https://github.com/lyh970817\"\u003elyh970817\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2023/09/26/how-to-translate-a-hugo-blog-post-with-babeldown\"\u003eHow to Translate a Hugo Blog Post with Babeldown\u003c/a\u003e by Maëlle Salmon, and Yanina Bellini Saibene. Other languages: \u003ca href='/es/blog/2023/09/26/cómo_traducir_una_entrada_de_blog_de_hugo_con_babeldown' lang='es'\u003eCómo traducir un artículo de blog de Hugo con Babeldown (es)\u003c/a\u003e, \u003ca href='/fr/blog/2023/09/26/comment_traduire_un_billet_de_blog_hugo_avec_babeldown' lang='fr'\u003eComment traduire un billet de blog Hugo avec Babeldown (fr)\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e (or listening to its discussion on the \u003ca href=\"https://rweekly.fireside.fm/111\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas)!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/rvertnet/index.html\"\u003ervertnet\u003c/a\u003e\u003c/strong\u003e, Retrieve, map and summarize data from the VertNet.org archives (\u003ca href=\"https://vertnet.org/\"\u003ehttps://vertnet.org/\u003c/a\u003e). Functions allow searching by many parameters, including taxonomic names, places, and dates. In addition, there is an interface for conducting spatially delimited searches, and another for requesting large datasets via email. \u003ca href=\"https://github.com/ropensci-archive/rvertnet/issues/71\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"call-for-co-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-co-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for co-maintainers\u003c/h3\u003e\u003cp\u003eRefer to our somewhat \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/#packages-looking-for-co-maintainers\"\u003erecent blog post\u003c/a\u003e to identify other packages where help is especially wished for!See also our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"system-dependencies-in-r-packages--automatic-testing\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#system-dependencies-in-r-packages--automatic-testing\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSystem Dependencies in R Packages \u0026amp; Automatic Testing\u003c/h3\u003e\u003cp\u003eAre you curious about, or stalled by, the installation of system dependencies in your continuous integration workflows?Refer to \u003ca href=\"https://blog.r-hub.io/2023/09/26/system-dependency/\"\u003eHugo Gruson\u0026rsquo;s clear and extensive post\u003c/a\u003e on the R-hub blog.\u003c/p\u003e\u003ch3 id=\"translate-your-packages-messages-with-potools\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#translate-your-packages-messages-with-potools\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTranslate your package\u0026rsquo;s messages with {potools}\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://michaelchirico.github.io/potools/\"\u003epotools\u003c/a\u003e package by Michael Chirico is to translation files what roxygen2 is to Rd documentation files: it very much simplifies your writing and maintaining them!Refer to \u003ca href=\"https://michaelchirico.github.io/potools/\"\u003epotools documentation\u003c/a\u003e or a recent \u003ca href=\"https://masalmon.eu/2023/10/06/potools-mwe/\"\u003etutorial\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"testthat-new-release\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#testthat-new-release\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003etestthat new release\u003c/h3\u003e\u003cp\u003eIf you use testthat for your package tests, don\u0026rsquo;t miss the \u003ca href=\"https://www.tidyverse.org/blog/2023/10/testthat-3-2-0/\"\u003erelease announcement\u003c/a\u003e of testthat 3.2.0!That post describes the major features such as the return of mocking support within testthat itself.\u003c/p\u003e\u003cp\u003eAmong \u003ca href=\"https://testthat.r-lib.org/news/index.html#minor-features-and-bug-fixes-3-2-0\"\u003eminor features\u003c/a\u003e you might notice the new \u003ccode\u003edesc\u003c/code\u003e argument of \u003ccode\u003etestthat::test_file()\u003c/code\u003e to run a single test at a time.You can now for instance run \u003ccode\u003edevtools::test_active_file(desc = 'blop() runs')\u003c/code\u003e\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/10/20/news-october-2023/","date_published":"2023-10-20T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/evaf9-2qf48","title":"How to Translate a Hugo Blog Post with Babeldown","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["tech notes","multilingual"],"content_html":"\u003cp\u003eAs part of our \u003ca href=\"/multilingual-publishing/\"\u003emultilingual publishing project\u003c/a\u003e, and with \u003ca href=\"https://www.r-consortium.org/all-projects/awarded-projects/2022-group-2\"\u003efunding from the R Consortium\u003c/a\u003e, we\u0026rsquo;ve worked on the R package \u003ca href=\"https://docs.ropensci.org/babeldown/\"\u003ebabeldown\u003c/a\u003e for translating Markdown-based content using the DeepL API.In this tech note, we\u0026rsquo;ll show how you can use babeldown to translate a Hugo blog post!\u003c/p\u003e\u003ch2 id=\"motivation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#motivation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMotivation\u003c/h2\u003e\u003cp\u003eTranslating a Markdown blog post from your R console is not only more comfortable (when you\u0026rsquo;ve already written said blog post in R), but also less frustrating.With babeldown, compared to copy-pasting the content of a blog post into some translation service, the Markdown syntax won\u0026rsquo;t be broken\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e, and code chunks won\u0026rsquo;t be translated.This works, because under the hood, babeldown uses \u003ca href=\"https://docs.ropensci.org/tinkr\"\u003etinkr\u003c/a\u003e to produce XML which it then sends to the DeepL API, flagging some tags as not to be translated. It then converts the XML translated by DeepL back into Markdown again.\u003c/p\u003e\u003cp\u003eNow, as you might expect this machine-translated content isn\u0026rsquo;t perfect yet!You will still need a human or two to review and amend the translation.Why not have the humans translate the post from scratch then?We have observed that editing an automatic translation is faster than translating the whole post, and that it frees up mental space for focusing on implementing translation rules such as gender-neutral phrasing.\u003c/p\u003e\u003ch2 id=\"setup\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#setup\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSetup\u003c/h2\u003e\u003ch3 id=\"pre-requisites-on-the-hugo-website\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pre-requisites-on-the-hugo-website\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePre-requisites on the Hugo website\u003c/h3\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/babeldown/reference/deepl_translate_hugo.html\"\u003e\u003ccode\u003ebabeldown::deepl_translate_hugo()\u003c/code\u003e\u003c/a\u003e assumes the Hugo website uses\u003c/p\u003e\u003cul\u003e\u003cli\u003eleaf bundles (each post in a folder, \u003ccode\u003econtent/path-to-leaf-bundle/index.md\u003c/code\u003e);\u003c/li\u003e\u003cli\u003emultilingualism so that a post in (for example) Spanish lives in \u003ccode\u003econtent/path-to-leaf-bundle/index.es.md\u003c/code\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003ebabeldown could be extended work with other Hugo multilingual setups. If you\u0026rsquo;d be interested in using babeldown with a different setup, please open an issue in the \u003ca href=\"https://github.com/ropensci-review-tools/babeldown/\"\u003ebabeldown repository\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eNote that babeldown won\u0026rsquo;t be able to determine the default language of your website\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e so even if your website\u0026rsquo;s default language is English, babeldown will place an English translation in a file called \u0026ldquo;.en.md\u0026rdquo; not \u0026ldquo;.md\u0026rdquo;.Hugo will recognize the new file all the same (at least in our setup).\u003c/p\u003e\u003ch3 id=\"deepl-pre-requisites\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#deepl-pre-requisites\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDeepL pre-requisites\u003c/h3\u003e\u003cp\u003eFirst check that your desired source and target languages are supported by the DeepL API!Look up the \u003ca href=\"https://www.deepl.com/docs-api/translate-text\"\u003edocs of the \u003ccode\u003esource_lang\u003c/code\u003e and \u003ccode\u003etarget_lang\u003c/code\u003e API parameters\u003c/a\u003e for a full list.\u003c/p\u003e\u003cp\u003eOnce you know you\u0026rsquo;ll be able to take advantage of the DeepL API, you\u0026rsquo;ll need to create an account for \u003ca href=\"https://www.deepl.com/en/docs-api/\"\u003eDeepL\u0026rsquo;s translation service API\u003c/a\u003e.Note that even getting a free account requires registering a payment method with them.\u003c/p\u003e\u003ch3 id=\"r-pre-requisites\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-pre-requisites\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR pre-requisites\u003c/h3\u003e\u003cp\u003eYou\u0026rsquo;ll need to install babeldown from rOpenSci R-universe:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003einstall.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;babeldown\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;https://ropensci.r-universe.dev\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;https://cloud.r-project.org\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThen, in each R session, set your DeepL API key via the environment variable DEEPL_API_KEY. You could store it once and for all with the \u003ca href=\"https://r-lib.github.io/keyring/index.html\"\u003ekeyring\u003c/a\u003e package and retrieve it in your scripts like so:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eSys.setenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eDEEPL_API_KEY\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ekeyring\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ekey_get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;deepl\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eLastly, the DeepL API URL depends on your API plan.babeldown uses the DeepL free API URL by default.If you use a Pro plan, set the API URL in each R session/script via\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eSys.setenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;DEEPL_API_URL\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;https://api.deepl.com\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"translation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#translation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTranslation!\u003c/h2\u003e\u003cp\u003eYou could run the code below\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebabeldown\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003edeepl_translate_hugo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003epost_path\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eto\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003epost\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003esource_lang\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;EN\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etarget_lang\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;ES\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eformality\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;less\u0026#34;\u003c/span\u003e \u003cspan class=\"c1\"\u003e# that\u0026#39;s how we roll here!\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ebut we\u0026rsquo;d recommend a tad more work for your own good.\u003c/p\u003e\u003ch2 id=\"translation-using-a-gitgithub-workflow\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#translation-using-a-gitgithub-workflow\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTranslation using a Git/GitHub workflow\u003c/h2\u003e\u003cp\u003eIf you use version control, having the translation as a diff is very handy!\u003c/p\u003e\u003ch3 id=\"first-in-words-and-pictures\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#first-in-words-and-pictures\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFirst: In words and pictures\u003c/h3\u003e\u003cul\u003e\u003cli\u003eIn the branch of your post (let\u0026rsquo;s call it \u0026ldquo;new-post\u0026rdquo;) create a placeholder: save your original blog post (\u003ccode\u003eindex.es.md\u003c/code\u003e) under the target blog post name (\u003ccode\u003eindex.en.md\u003c/code\u003e) and commit it, then push.\u003c/li\u003e\u003c/ul\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/09/26/how-to-translate-a-hugo-blog-post-with-babeldown/placeholder.png\"\t\t\talt=\"Diagram with on the left the leaf folder in the new-post branch with the post in Spanish with the text \u0026#39;Hola\u0026#39; and an image; on the right the leaf folder in the new-post branch with the post in Spanish with the text \u0026#39;hola\u0026#39;, the post with the English target filename with the text \u0026#39;hola\u0026#39;, and the image.\"\u003e\u003c/figure\u003e\u003cul\u003e\u003cli\u003eCreate a new branch, \u0026ldquo;auto-translate\u0026rdquo; for instance.\u003c/li\u003e\u003cli\u003eRun \u003ccode\u003ebabeldown::deepl_translate_hugo()\u003c/code\u003e with \u003ccode\u003eforce = TRUE\u003c/code\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/09/26/how-to-translate-a-hugo-blog-post-with-babeldown/translate.png\"\t\t\talt=\"Diagram with on the left the leaf folder in the auto-translate branch with the post in Spanish with the text \u0026#39;hola\u0026#39;, the post with the English target filename with the text \u0026#39;hola\u0026#39;, and the image; on the right the only thing that changed is that the content of the post with the English target filename is now \u0026#39;hello\u0026#39;.\"\u003e\u003c/figure\u003e\u003cul\u003e\u003cli\u003eCommit and push the result.\u003c/li\u003e\u003cli\u003eOpen a PR from the \u003cstrong\u003e\u0026ldquo;translation-tech-note\u0026rdquo;\u003c/strong\u003e branch to the \u003cstrong\u003e\u0026ldquo;new-post\u0026rdquo;\u003c/strong\u003e branch.The only difference between the two branches is the automatic translation of your post. The diff for the target blog post will be the diff between the source and target languages! If you have the good habit to start a new line after each sentence / sentence part, it\u0026rsquo;s even better.\u003c/li\u003e\u003c/ul\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/09/26/how-to-translate-a-hugo-blog-post-with-babeldown/pr.png\"\t\t\talt=\"Drawing of the pull request from the auto-translate to the new-post branch where the difference is that the content of the post with the English target filename has now been translated to English.\"\u003e\u003c/figure\u003e\u003cul\u003e\u003cli\u003eThe human translators can then a open a second PR to the translation branch with their edits! Or they can add their edits as \u003ca href=\"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/commenting-on-a-pull-request#adding-comments-to-a-pull-request\"\u003ePR suggestions\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"again-in-code\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#again-in-code\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAgain: In code\u003c/h3\u003e\u003cp\u003eNow let\u0026rsquo;s go over this again, but with a coding workflow. Here, we\u0026rsquo;ll use fs and gert (but you do you!), and we\u0026rsquo;ll assume your current directory is the root of the website folder, and also the root of the git repository.\u003c/p\u003e\u003cul\u003e\u003cli\u003eIn the post branch, (again, let\u0026rsquo;s call it \u0026ldquo;new-post\u0026rdquo;), save your original blog post (\u003ccode\u003eindex.es.md\u003c/code\u003e) under the target blog post name (\u003ccode\u003eindex.en.md\u003c/code\u003e) and commit it, then push.\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efs\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003efile_copy\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efile.path\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;content\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;blog\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;2023-10-01-r-universe-interviews\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;index.es.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efile.path\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;content\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;blog\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;2023-10-01-r-universe-interviews\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;index.en.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_add\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003efile.path\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;content\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;blog\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;2023-10-01-r-universe-interviews\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;index.en.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_commit\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Add translation placeholder\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_push\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003eCreate a new branch, \u0026ldquo;auto-translate\u0026rdquo; for instance.\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_branch_create\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;translation-tech-note\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003eRun \u003ccode\u003ebabeldown::deepl_translate_hugo()\u003c/code\u003e with \u003ccode\u003eforce = TRUE\u003c/code\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebabeldown\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003edeepl_translate_hugo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003epost_path\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003efile.path\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;content\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;blog\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;2023-10-01-r-universe-interviews\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;index.es.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eforce\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eyaml_fields\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;title\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;tags\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003esource_lang\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;ES\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etarget_lang\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;EN-US\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eYou can also omit the \u003ccode\u003epost_path\u003c/code\u003e argument if you\u0026rsquo;re running the code from RStudio IDE and if the open and focused file (the one you see above your console) is the post to be translated.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebabeldown\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003edeepl_translate_hugo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eforce\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eyaml_fields\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;title\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;tags\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003esource_lang\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;ES\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etarget_lang\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;EN-US\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003eCommit the result with the code below.\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_add\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003efile.path\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;content\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;blog\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;2023-10-01-r-universe-interviews\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;index.en.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_commit\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Add translation\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egit_push\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOpen a PR from the \u003cstrong\u003e\u0026ldquo;translation-tech-note\u0026rdquo;\u003c/strong\u003e branch to the \u003cstrong\u003e\u0026ldquo;new-post\u0026rdquo;\u003c/strong\u003e branch.The only difference between the two branches is the automatic translation of \u003ccode\u003e\u0026quot;content/blog/2023-10-01-r-universe-interviews/index.en.md\u0026quot;\u003c/code\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe human translators can then a open a \u003cem\u003esecond\u003c/em\u003e PR to the translation branch with their edits! Or they can add their edits as \u003ca href=\"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/commenting-on-a-pull-request#adding-comments-to-a-pull-request\"\u003ePR suggestions\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"summary-of-branches-and-prs\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#summary-of-branches-and-prs\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSummary of branches and PRs\u003c/h3\u003e\u003cp\u003eIn the end there should be two to three branches:\u003c/p\u003e\u003cul\u003e\u003cli\u003ebranch A with blog post in Spanish and placeholder blog post for English (with Spanish content) \u0026ndash; PR to main;\u003c/li\u003e\u003cli\u003ebranch B with blog post automatically translated to English \u0026ndash; PR to branch A;\u003c/li\u003e\u003cli\u003eOptionally branch C with blog post\u0026rsquo;s English automatic translation edited by a human \u0026ndash; PR to branch B. If branch C does not exist, edits by a human are made as PR review suggestions in the PR from B to A.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe PR are merged in this order:\u003c/p\u003e\u003cul\u003e\u003cli\u003ePR to branch B;\u003c/li\u003e\u003cli\u003ePR to branch A;\u003c/li\u003e\u003cli\u003ePR to main.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"real-example\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#real-example\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReal example\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/roweb3/pull/629\"\u003ePR adding a post to the rOpenSci blog\u003c/a\u003e, notice it\u0026rsquo;s a PR from the \u003cstrong\u003e\u0026ldquo;r-universe-interviews\u0026rdquo;\u003c/strong\u003e branch to the \u003cstrong\u003e\u0026ldquo;main\u0026rdquo; (default)\u003c/strong\u003e branch;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/roweb3/pull/639\"\u003ePR adding the automatic translation\u003c/a\u003e, notice it\u0026rsquo;s a PR to the \u003cstrong\u003e\u0026ldquo;r-universe-interviews\u0026rdquo;\u003c/strong\u003e branch.\u003c/li\u003e\u003c/ul\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/09/26/how-to-translate-a-hugo-blog-post-with-babeldown/pr-diff.png\"\t\t\talt=\"Screenshot of the files tab of the pull request adding the automatic translation, where we observe Spanish text in the YAML metadata and Markdown content has been translated to English.\"\u003e\u003c/figure\u003e\u003cp\u003eYanina tweaked the automatic translation by suggesting changes on the PR, then accepting them.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/09/26/how-to-translate-a-hugo-blog-post-with-babeldown/pr-comments.png\"\t\t\talt=\"Screenshot of the main tab of the pull request adding the automatic translation, where we observe a comment by Yanina replacing the word \u0026#39;article\u0026#39; with \u0026#39;blog post\u0026#39; and fixing the name of \u0026#39;R-universe\u0026#39;.\"\u003e\u003c/figure\u003e\u003ch3 id=\"yaml-fields\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#yaml-fields\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eYAML fields\u003c/h3\u003e\u003cp\u003eBy default babeldown translates the YAML fields \u0026ldquo;title\u0026rdquo; and \u0026ldquo;description\u0026rdquo;.If you have text in more of them, use the \u003ccode\u003eyaml_fields\u003c/code\u003e argument of \u003ccode\u003ebabeldown::deepl_translate_hugo()\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eNote that if babeldown translates the title, it updates the slug.\u003c/p\u003e\u003ch3 id=\"glossary\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#glossary\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGlossary\u003c/h3\u003e\u003cp\u003eImagine you have a few preferences for some words \u0026ndash; something you\u0026rsquo;ll build up over time.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ereadr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eread_csv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003esystem.file\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;example-es-en.csv\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epackage\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;babeldown\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eshow_col_types\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## # A tibble: 2 × 2##   Spanish     English   ##   \u0026lt;chr\u0026gt;       \u0026lt;chr\u0026gt;     ## 1 paquete     package   ## 2 repositorio repository\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can record these preferred translations in a glossary in your DeepL account\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003edeepl_upsert_glossary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003epath\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eto\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ecsv\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003efile\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eglossary_name\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;rstats-glosario\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etarget_lang\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Spanish\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003esource_lang\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;English\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eYou\u0026rsquo;d use the exact same code to \u003cem\u003eupdate\u003c/em\u003e the glossary hence the name \u0026ldquo;upsert\u0026rdquo; for the function.You need one glossary per source language / target language pair: the English-Spanish glossary can\u0026rsquo;t be used for Spanish to English for instance.\u003c/p\u003e\u003cp\u003eIn your \u003ccode\u003ebabeldown::deepl_translate_hugo()\u003c/code\u003e call you then use the glossary name (here \u0026ldquo;rstats-glosario\u0026rdquo;) for the \u003ccode\u003eglossary\u003c/code\u003e argument.\u003c/p\u003e\u003ch3 id=\"formality\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#formality\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFormality\u003c/h3\u003e\u003cp\u003e\u003ccode\u003edeepl_translate_hugo()\u003c/code\u003e has a \u003ccode\u003eformality\u003c/code\u003e argument.Now, the DeepL API only supports this for some languages as explained in the \u003ca href=\"https://www.deepl.com/docs-api/translate-text\"\u003edocumentation of the \u003ccode\u003eformality\u003c/code\u003e API parameter\u003c/a\u003e:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eSets whether the translated text should lean towards formal or informal language. This feature currently only works for target languages DE (German), FR (French), IT (Italian), ES (Spanish), NL (Dutch), PL (Polish), PT-BR and PT-PT (Portuguese), JA (Japanese), and RU (Russian). (\u0026hellip;) Setting this parameter with a target language that does not support formality will fail, unless one of the prefer_\u0026hellip; options are used.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eTherefore to be sure a translation will work, instead of writing \u003ccode\u003eformality = \u0026quot;less\u0026quot;\u003c/code\u003e you can write \u003ccode\u003eformality = \u0026quot;prefer_less\u0026quot;\u003c/code\u003e which will only use formality if available.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we explained how to translate a Hugo blog post using babeldown.Although the gist is to use one call to \u003ccode\u003ebabeldown::deepl_translate_hugo()\u003c/code\u003e,\u003c/p\u003e\u003cul\u003e\u003cli\u003eone needs to indicate the API URL and key,\u003c/li\u003e\u003cli\u003eone can improve results by using the function\u0026rsquo;s different arguments,\u003c/li\u003e\u003cli\u003ewe recommend pairing the translation with a Git + GitHub (or GitLab, gitea\u0026hellip;) workflow.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003ebabeldown has \u003ca href=\"https://docs.ropensci.org/babeldown/reference/index.html\"\u003efunctions\u003c/a\u003e for translating Quarto book chapters, any Markdown file, and any Markdown string, with similar arguments and recommended usage, so explore its reference!\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;d be happy to hear about your \u003ca href=\"/usecases/\"\u003euse cases\u003c/a\u003e.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eBut you should refer to \u003ca href=\"https://docs.ropensci.org/tinkr/#loss-of-markdown-style\"\u003etinkr docs\u003c/a\u003e to see what might change in the Markdown syntax style.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eadding code to handle Hugo\u0026rsquo;s \u003ca href=\"https://github.com/r-lib/hugodown/issues/14#issuecomment-632850506\"\u003e\u0026ldquo;bewildering array of possible config locations\u0026rdquo;\u003c/a\u003e and two possible formats (YAML and TOML) is out of scope for babeldown at this point.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2023/09/26/how-to-translate-a-hugo-blog-post-with-babeldown/","date_published":"2023-09-26T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/7bmc1-xsy61","title":"rOpenSci News Digest, September 2023","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2023/09/22/news-september-2023\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"wip-webassembly-support-in-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#wip-webassembly-support-in-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWIP: WebAssembly support in R-universe!\u003c/h3\u003e\u003cp\u003eThanks to some help from George Stagg, we added experimental support for building WebAssembly binary packages. This makes it possible to install packages in \u003ca href=\"https://docs.r-wasm.org/webr/latest/\"\u003ewebr\u003c/a\u003e, directly from the R-universe.\u003c/p\u003e\u003cp\u003eFor instance:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewebr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003einstall\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s\"\u003e\u0026#39;jsonlite\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s\"\u003e\u0026#39;https://jeroen.r-universe.dev\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s\"\u003e\u0026#39;https://repo.r-wasm.org\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThis only works if the package and all of its dependencies support webassembly.For CRAN packages you can look at \u003ca href=\"https://repo.r-wasm.org/\"\u003ehttps://repo.r-wasm.org/\u003c/a\u003e. For other packages\u0026hellip; you\u0026rsquo;ll have to give it a try!\u003c/p\u003e\u003ch3 id=\"first-ropensci-champions-package-to-go-through-peer-review-in-spanish\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#first-ropensci-champions-package-to-go-through-peer-review-in-spanish\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFirst rOpenSci Champion\u0026rsquo;s package to go through peer-review, in Spanish!\u003c/h3\u003e\u003cp\u003e\u003ca href=\"/blog/2023/05/05/ropensci-champions-program-teams-meet-carolina-pradier-and-athanasia-monika-mowinckel/#carolina-pradier---champion\"\u003eCarolina Pradier\u003c/a\u003e\u0026rsquo;s package \u003ca href=\"https://docs.ropensci.org/eph/\"\u003eeph\u003c/a\u003e was approved after a \u003ca href=\"https://github.com/ropensci/software-review/issues/593\"\u003ereview process in Spanish\u003c/a\u003e!Congratulations to Carolina, and thanks to editor \u003ca href=\"/author/mauro-lepore/\"\u003eMauro Lepore\u003c/a\u003e, reviewers \u003ca href=\"https://github.com/guadag12\"\u003eGuadalupe Gonzalez\u003c/a\u003e and \u003ca href=\"https://github.com/lidefi87\"\u003eDenisse Fierro Arcos\u003c/a\u003e, and mentor \u003ca href=\"/blog/2023/05/05/ropensci-champions-program-teams-meet-carolina-pradier-and-athanasia-monika-mowinckel/#athanasia-monika-mowinckel---mentor\"\u003eAthanasia Monika Mowinckel\u003c/a\u003e. eph is a package which helps process data from the Argentina household survey.\u003c/p\u003e\u003ch3 id=\"123-applications-to-our-champions-program-2023-2024\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#123-applications-to-our-champions-program-2023-2024\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e123 Applications to our Champions Program 2023-2024\u003c/h3\u003e\u003cp\u003eWe are excited we received 123 applications from 41 countries on 5 continents!\u003cbr\u003eWe are very grateful to everyone who submitted their proposals to our program.The review process is starting.Stay tuned for updates!\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e in our recent \u003ca href=\"/blog/2023/06/21/coworking/\"\u003epost\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2023-10/\"\u003eTuesday, October 3rd, 14h00 Europe Central (12:00 UTC)\u003c/a\u003e, Learn about cli and how to make nice command-line interfaces in R! With community host \u003ca href=\"/author/athanasia-mo-mowinckel/\"\u003eAthanasia Monika Mowinckel\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e.\u003cul\u003e\u003cli\u003eRead up on making nice command line interfaces with \u003ca href=\"https://cli.r-lib.org/\"\u003ecli\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eUpdate some scripts or packages to include cleaner and effective interfaces;\u003c/li\u003e\u003cli\u003eChat with Mo about using cli\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2023-11/\"\u003eTuesday, Nov 7th, 9:00 America Pacific (17:00 UTC)\u003c/a\u003e, Fixing scary bugs 😱🐛 With community host \u003ca href=\"/author/salix-dubois/\"\u003eSalix Dubois\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e.\u003cul\u003e\u003cli\u003eIdentify/fix some scary bugs;\u003c/li\u003e\u003cli\u003eChat with Salix about scary bugs!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch3 id=\"r-consortium-call-for-proposals-until-october-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-consortium-call-for-proposals-until-october-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR Consortium Call for Proposals until October 1!\u003c/h3\u003e\u003cp\u003eDo you have a project idea that is likely to have a broad impact on the R community and has a focused scope?Don\u0026rsquo;t miss the \u003ca href=\"https://www.r-consortium.org/all-projects/call-for-proposals\"\u003etwice-yearly R Consortium Call for Proposals\u003c/a\u003e!Past funded projects include rOpenSci projects like the \u003ca href=\"https://www.r-consortium.org/all-projects/awarded-projects/2020-group-1#http+testing+in+r+book\"\u003eHTTP testing in R book\u003c/a\u003e, and work on the \u003ca href=\"https://www.r-consortium.org/all-projects/awarded-projects/2022-group-2#Tooling%20and%20Guidance%20for%20Translations%20of%20Markdown-Based%20R%20Content%20(Quarto,%20R%20Markdown\"\u003ebabeldown package\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"reminder-our-first-community-call-in-spanish-and-english-too\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#reminder-our-first-community-call-in-spanish-and-english-too\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReminder: Our first community call in Spanish (and English too)\u003c/h3\u003e\u003cp\u003eAs global movements, Open Source and Open Science face language-based exclusion as most resources are in English. This affects scientists and research software engineers working in R, particularly those who don’t have English as their first language.\u003c/p\u003e\u003cp\u003erOpenSci multilingual efforts aim to lower access barriers, democratize quality resources, and increase the possibilities of contributing to open software and science. We successfully piloted our Spanish-language peer review and the localization to Spanish of our comprehensive guide to software development, with Portuguese translation underway.\u003c/p\u003e\u003cp\u003e\u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e, \u003ca href=\"/author/pao-corrales/\"\u003ePaola Corrales\u003c/a\u003e, and \u003ca href=\"/author/elio-campitelli/\"\u003eElio Campitelli\u003c/a\u003e,  will share the rOpenSci Multilingual project details on this call. Maëlle will present the R packages that allow us to have our content in several languages. Then Elio and Paola will share the translation workflow and show the Translation Guide written to document the process.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/commcalls/nov2023-multilingual/\"\u003e\u003cstrong\u003eMultilingual Publishing\u003c/strong\u003e:  Tuesday, 21 November 2023 12:00 UTC\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/commcalls/nov2023-multilenguaje/\"\u003e\u003cstrong\u003eProyecto Multilingüe\u003c/strong\u003e: Thursday, 23 November 2023 12:00 UTC\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following two packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/eph\"\u003eeph\u003c/a\u003e, developed by Carolina Pradier together with Diego Kozlowski, Pablo Tiscornia, Guido Weksler, Natsumi Shokida, and German Rosati: Tools to download and manipulate the Permanent Household Survey from Argentina (EPH is the Spanish acronym for Permanent Household Survey). e.g: get_microdata() for downloading the datasets, get_poverty_lines() for downloading the official poverty baskets, calculate_poverty() for the calculation of stating if a household is in poverty or not, following the official methodology. organize_panels() is used to concatenate observations from different periods, and organize_labels() adds the official labels to the data. The implemented methods are based on INDEC (2016) \u003ca href=\"http://www.estadistica.ec.gba.gov.ar/dpe/images/SOCIEDAD/EPH_metodologia_22_pobreza.pdf\"\u003ehttp://www.estadistica.ec.gba.gov.ar/dpe/images/SOCIEDAD/EPH_metodologia_22_pobreza.pdf\u003c/a\u003e. As this package works with the argentinian Permanent Household Survey and its main audience is from this country, the documentation was written in Spanish.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=eph\"\u003eCRAN\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/ohun\"\u003eohun\u003c/a\u003e, developed by Marcelo Araya-Salas: Facilitates the automatic detection of acoustic signals, providing functions to diagnose and optimize the performance of detection routines. Detections from other software can also be explored and optimized. Araya-Salas et al. (2022) \u003ca href=\"doi:10.1101/2022.12.13.520253\"\u003edoi:10.1101/2022.12.13.520253\u003c/a\u003e.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=ohun\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/568\"\u003ereviewed\u003c/a\u003e by Alec L. Robitaille, and Sam Lapp.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following fourteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/bold\" title=\"Interface to Bold Systems API\"\u003ebold\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/bold/releases/tag/v1.3.0\"\u003e\u003ccode\u003ev1.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/charlatan\" title=\"Make Fake Data\"\u003echarlatan\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/charlatan/releases/tag/v0.5.1\"\u003e\u003ccode\u003ev0.5.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/chromer\" title=\"Interface to Chromosome Counts Database API\"\u003echromer\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/chromer/releases/tag/v0.6\"\u003e\u003ccode\u003ev0.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/eph\" title=\"Argentina's Permanent Household Survey Data and Manipulation Utilities\"\u003eeph\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/eph/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/europepmc\" title=\"R Interface to the Europe PubMed Central RESTful Web Service\"\u003eeuropepmc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/europepmc/releases/tag/v0.4.3\"\u003e\u003ccode\u003ev0.4.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/geojsonio\" title=\"Convert Data from and to GeoJSON or TopoJSON\"\u003egeojsonio\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/geojsonio/releases/tag/v0.11.3\"\u003e\u003ccode\u003ev0.11.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.9.7\"\u003e\u003ccode\u003ev0.9.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/readODS\" title=\"Read and Write ODS Files\"\u003ereadODS\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/readODS/releases/tag/v2.1.0\"\u003e\u003ccode\u003ev2.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgbif\" title=\"Interface to the Global Biodiversity Information Facility API\"\u003ergbif\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgbif/releases/tag/v3.7.8\"\u003e\u003ccode\u003ev3.7.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spatsoc\" title=\"Group Animal Relocation Data by Spatial and Temporal Relationship\"\u003espatsoc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spatsoc/releases/tag/v0.2.2\"\u003e\u003ccode\u003ev0.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stplanr\" title=\"Sustainable Transport Planning\"\u003estplanr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stplanr/releases/tag/v1.1.2\"\u003e\u003ccode\u003ev1.1.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.7.8\"\u003e\u003ccode\u003e0.7.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.3.0\"\u003e\u003ccode\u003e1.3.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/weathercan\" title=\"Download Weather Data from Environment and Climate Change Canada\"\u003eweathercan\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weathercan/releases/tag/v0.7.1\"\u003e\u003ccode\u003ev0.7.1\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are sixteen recently closed and active submissions and 3 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/593\"\u003eeph\u003c/a\u003e, Argentina\u0026rsquo;s Permanent Household Survey Data and Manipulation Utilities. Submitted by \u003ca href=\"/blog/2023/05/05/ropensci-champions-program-teams-meet-carolina-pradier-and-athanasia-monika-mowinckel/#carolina-pradier---champion\"\u003eCarolina Pradier\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/568\"\u003eohun\u003c/a\u003e, Optimizing Acoustic Signal Detection. Submitted by \u003ca href=\"https://marceloarayasalas.weebly.com/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSeven at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/606\"\u003efastMatMR\u003c/a\u003e, \u0026ldquo;fastMatMR: High-Performance Matrix Market File Operations in R\u0026rdquo;. Submitted by \u003ca href=\"https://rgoswami.me\"\u003eRohit Goswami\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/600\"\u003enaijR\u003c/a\u003e, Operations to Ease Data Analyses Specific to Nigeria. Submitted by \u003ca href=\"https://victorordu.wordpress.com\"\u003eVictor Ordu \u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/595\"\u003erangr\u003c/a\u003e, Mechanistic Simulation of Species Range Dynamics. Submitted by \u003ca href=\"https://github.com/katarzynam-165\"\u003eKatarzyna Markowska\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003emregions2\u003c/a\u003e, Access Data from Marineregions.org: The Marine Regions Gazetteer and the Marine Regions Data Products. Submitted by \u003ca href=\"https://salvafern.github.io/\"\u003esalvafern\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003epangoling\u003c/a\u003e, Access to Large Language Model Predictions. Submitted by \u003ca href=\"https://bnicenboim.github.io/\"\u003eBruno Nicenboim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/603\"\u003eGLMMcosinor\u003c/a\u003e, Fit a cosinor model using a generalised mixed modelling framework. Submitted by \u003ca href=\"https://rwparsons.github.io/\"\u003eRex Parsons\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/598\"\u003eweatherOz\u003c/a\u003e, An API Client for Australian Weather and Climate Data Resources. Submitted by \u003ca href=\"https://github.com/bozaah\"\u003eRodrigo Pires\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"https://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/599\"\u003eagromet\u003c/a\u003e, Índices y Estadísticos Climáticos e Hidrológicos. Submitted by \u003ca href=\"http://paocorrales.github.io\"\u003ePaola Corrales\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/572\"\u003equaltdict\u003c/a\u003e, Generating Variable Dictionaries and Labelled Data Exports of Qualtrics. Submitted by \u003ca href=\"https://github.com/lyh970817\"\u003elyh970817\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/09/15/r-universe-stars-5-en\"\u003eMeeting the Stars of the R-Universe: The R-Universe Against Diseases.\u003c/a\u003e by Yanina Bellini Saibene, Alejandra Bellini, Lucio Casalla, and Steffi LaZerte. . Other languages: \u003ca href='/es/blog/2023/09/15/r-universe-stars-5-es' lang='es'\u003eConociendo a las estrellas del Universo R: El universo R contra las enfermedades. (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/09/19/help-wanted\"\u003eAttract Contributors with \u0026lsquo;help wanted\u0026rsquo; Issues\u003c/a\u003e by Maëlle Salmon, Yanina Bellini Saibene, and Steffi LaZerte. Tips on how to create and advertise help-wanted issues.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e (or listening to its discussion on the \u003ca href=\"https://rweekly.fireside.fm/111\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas)!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/rvertnet/index.html\"\u003ervertnet\u003c/a\u003e\u003c/strong\u003e, Retrieve, map and summarize data from the VertNet.org archives (\u003ca href=\"https://vertnet.org/\"\u003ehttps://vertnet.org/\u003c/a\u003e). Functions allow searching by many parameters, including taxonomic names, places, and dates. In addition, there is an interface for conducting spatially delimited searches, and another for requesting large datasets via email. \u003ca href=\"https://github.com/ropensci-archive/rvertnet/issues/71\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"call-for-comaintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-comaintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for comaintainers\u003c/h3\u003e\u003cp\u003eRefer to our somewhat \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/#packages-looking-for-co-maintainers\"\u003erecent blog post\u003c/a\u003e to identify other packages where help is especially wished for!See also our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"help-needed-issues\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#help-needed-issues\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHelp needed issues\u003c/h3\u003e\u003cp\u003eDon\u0026rsquo;t miss our blog post \u003ca href=\"/blog/2023/09/19/help-wanted/\"\u003eAttract Contributors with ‘help wanted’ Issues\u003c/a\u003e! \u0026#x1f638;\u003c/p\u003e\u003ch3 id=\"check-your-contributing-guide\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#check-your-contributing-guide\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCheck your contributing guide\u0026hellip;\u003c/h3\u003e\u003cp\u003e\u0026hellip; with this \u003ca href=\"https://contributing.streamlit.app/\"\u003eevaluation tool\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"regularly-check-your-pkgdown-configuration-file\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#regularly-check-your-pkgdown-configuration-file\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRegularly check your pkgdown configuration file\u003c/h3\u003e\u003cp\u003eUsing a pkgdown configuration file to \u003ca href=\"https://pkgdown.r-lib.org/reference/build_reference.html#reference-index\"\u003egroup and order functions\u003c/a\u003e on your package\u0026rsquo;s reference page is great for users, but also mean you need to maintain the file as pkgdown will error if a help topic is missing from the configuration.\u003c/p\u003e\u003cp\u003eIf your package documentation is built by rOpenSci, it might be easier to miss a failure.\u003c/p\u003e\u003cp\u003eYou can:\u003c/p\u003e\u003cul\u003e\u003cli\u003eRemember to update the configuration when you add a new function;\u003c/li\u003e\u003cli\u003eRun \u003ca href=\"https://pkgdown.r-lib.org/reference/check_pkgdown.html\"\u003e\u003ccode\u003epkgdown::check_pkgdown()\u003c/code\u003e\u003c/a\u003e in a \u003ca href=\"https://github.com/ropensci/BaseSet/issues/66#issuecomment-1706561644\"\u003eGit pre-commit hook\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eRun \u003ca href=\"https://pkgdown.r-lib.org/reference/check_pkgdown.html\"\u003e\u003ccode\u003epkgdown::check_pkgdown()\u003c/code\u003e\u003c/a\u003e in a \u003ca href=\"https://github.com/ropensci/webchem/blob/master/.github/workflows/check-pkgdown.yml\"\u003eGitHub Actions workflow\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"submit-your-package-to-the-r-journal-with-rjtools\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#submit-your-package-to-the-r-journal-with-rjtools\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSubmit your package to the R Journal with rjtools\u003c/h3\u003e\u003cp\u003eAs a reminder, the \u003ca href=\"https://rjournal.github.io/rjtools/#\"\u003erjtools package\u003c/a\u003e will help you prepare a submission of a paper to the \u003ca href=\"https://journal.r-project.org/\"\u003eR Journal\u003c/a\u003e.This could be a good way to spread the word about a CRAN package of yours!\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/09/22/news-september-2023/","date_published":"2023-09-22T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/zh01g-yby98","title":"Attract Contributors with 'help wanted' Issues","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","packages","welcome","maintenance","contributors"],"content_html":"\u003cp\u003eMaintaining a package can be a lonesome activity, which sometimes poses a problem if you prefer team work or if you encounter a very thorny-for-you problem.Beside belonging to a supportive community of maintainers (like rOpenSci \u0026#x1f609;), for collaborative help and commiseration you can try to build a community of contributors around your package!In this post, we\u0026rsquo;ll explore one tool helping you towards that goal: \u0026ldquo;help wanted\u0026rdquo; issues, with which your repository could attract and retain new developers! We\u0026rsquo;ll discuss what \u0026ldquo;help wanted\u0026rdquo; issues are, four steps for soliciting external help, and remind you that this can be a beneficial process, even if you don\u0026rsquo;t end up attracting help.\u003c/p\u003e\u003cp\u003e\u003cem\u003eNote that this post uses GitHub-specific terminology like issues and labels. If you use GitLab or another git platform, there\u0026rsquo;s probably an equivalent.\u003c/em\u003e \u0026#x1f642;\u003c/p\u003e\u003ch2 id=\"what-are-help-wanted-issues\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-are-help-wanted-issues\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat are \u0026ldquo;help wanted\u0026rdquo; issues?\u003c/h2\u003e\u003cp\u003e\u0026ldquo;Help wanted\u0026rdquo; issues are issues for which you\u0026rsquo;d accept or need external contributions.They are labelled with the community standard \u0026ldquo;help wanted\u0026rdquo; label (\u003ca href=\"https://github.com/ropensci/osmextract/issues/286\"\u003eexample\u003c/a\u003e; optionally with an emoji, if you ran \u003ca href=\"https://usethis.r-lib.org/reference/use_github_labels.html\"\u003e\u003ccode\u003eusethis::use_tidy_github_labels()\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eFor some of them, if they\u0026rsquo;re not too involved, or if they\u0026rsquo;re a good onboarding ramp to your codebase, you can also use the \u003ca href=\"https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/encouraging-helpful-contributions-to-your-project-with-labels\"\u003e\u0026ldquo;good first issue\u0026rdquo; label\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eNext we\u0026rsquo;ll cover four steps for soliciting external help.\u003c/p\u003e\u003ch2 id=\"step-1-select-help-wanted-topics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#step-1-select-help-wanted-topics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStep 1. Select \u0026ldquo;help wanted\u0026rdquo; topics\u003c/h2\u003e\u003ch3 id=\"topics-you-really-need-help-on-development-hurdles\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#topics-you-really-need-help-on-development-hurdles\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTopics you \u003cem\u003ereally\u003c/em\u003e need help on: development hurdles\u003c/h3\u003e\u003cp\u003eSometimes a hurdle you are unsure how to handle looms ahead on the road to your next development milestone.At this stage you can either\u003c/p\u003e\u003cul\u003e\u003cli\u003eask for help in an usual channel (for example, rOpenSci Slack\u0026rsquo;s package-maintenance channel if you\u0026rsquo;re in that \u003ca href=\"https://contributing.ropensci.org/resources.html#channels\"\u003eworkspace\u003c/a\u003e; \u003ca href=\"/blog/2022/01/11/ropensci-forum/\"\u003erOpenSci discussion forum\u003c/a\u003e; \u003ca href=\"https://community.rstudio.com/\"\u003ePosit community forum\u003c/a\u003e);\u003c/li\u003e\u003cli\u003eopen an issue in an upstream dependency if that\u0026rsquo;s where the actual problem is;\u003c/li\u003e\u003cli\u003eopen an issue in your repository describing your problem.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFor instance, when working on the tinkr package, Maëlle opened a \u003ca href=\"https://github.com/ropensci/tinkr/issues/9\"\u003every specific issue\u003c/a\u003e that did end up getting miraculous outside help.\u003c/p\u003e\u003cp\u003eYou can also add the \u0026ldquo;help wanted\u0026rdquo; label to a bug report or feature request someone else opened in your package!With a bit of luck, the issue creator themselves will be able to participate 🎉 .\u003c/p\u003e\u003ch3 id=\"topics-you-could-use-help-on-delegating-or-willingness-to-grow-your-team\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#topics-you-could-use-help-on-delegating-or-willingness-to-grow-your-team\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTopics you could use help on: delegating or willingness to grow your team\u003c/h3\u003e\u003cp\u003eNow sometimes there are some upkeep or enhancement ideas you have for your package for which you don\u0026rsquo;t have time right now, or which are not urgent.For instance, \u003ca href=\"https://github.com/ropensci/geojsonio/issues/183\"\u003eupdating the testing infrastructure to testthat third edition\u003c/a\u003e, or \u003ca href=\"https://github.com/ropensci/landscapetools/issues/33\"\u003eadding terra support to a spatial package\u003c/a\u003e.By listing them in your issue tracker,\u003c/p\u003e\u003cul\u003e\u003cli\u003eyou show curious users that they\u0026rsquo;re on your mind,\u003c/li\u003e\u003cli\u003eyou can organize your own work,\u003c/li\u003e\u003cli\u003eand you can receive external help, especially if you explicitly solicit help with the \u0026ldquo;help wanted\u0026rdquo; label.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"step-2-polish-your-issue-and-contributing-guide\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#step-2-polish-your-issue-and-contributing-guide\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStep 2. Polish your issue and contributing guide\u003c/h2\u003e\u003cp\u003eOnce you have a topic in mind, make the issue title and text as clear as possible.Even if you are the one fixing the issue in the end, future-you will be happy you didn\u0026rsquo;t jot down an undecipherable comment.Link to resources as needed, and make sure to include context.Approach writing an issue in your own repo the same way you would in a repo that isn\u0026rsquo;t yours: challenge description, desired outcome, trade-offs, etc.\u003c/p\u003e\u003cp\u003eBeyond efforts in the individual issue, it\u0026rsquo;s crucial to have a \u003ca href=\"https://devguide.ropensci.org/collaboration.html#contributing-guide\"\u003econtributing guide\u003c/a\u003e underlining anything that is good to know about contributing to your package: tooling used, style and design preferences.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003eDo not duplicate external resources, point to them instead.Try to be a bit flexible so you don\u0026rsquo;t overload or scare off contributors by having requirements which are too strict: you can probably finish off PRs yourself, or teach them little by little.\u003c/p\u003e\u003ch2 id=\"step-3-broadcast-your-need-for-help\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#step-3-broadcast-your-need-for-help\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStep 3. Broadcast your need for help\u003c/h2\u003e\u003cp\u003eFirst of all, for rOpenSci packages \u0026ldquo;help wanted\u0026rdquo; issues are broadcast to the community via the \u003ca href=\"/help-wanted\"\u003ewebsite\u003c/a\u003e and social media posts!\u003c/p\u003e\u003cp\u003eYou can also share it within your own networks: rOpenSci slack workspace, your social media, a local R User Group communication channel, etc.\u003c/p\u003e\u003cp\u003eYou can also consider leveraging hack-a-thon events like \u003ca href=\"https://hacktoberfest.com/\"\u003eHacktoberfest\u003c/a\u003e for instance (if you add the \u003ca href=\"https://hacktoberfest.com/participation/\"\u003e\u0026ldquo;hacktoberfest\u0026rdquo; topic to your repository\u003c/a\u003e), but with really large events like this you can\u0026rsquo;t necessarily count on someone discovering your tiny issue in that sea of issues.\u003c/p\u003e\u003ch2 id=\"step-4-thank-contributors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#step-4-thank-contributors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStep 4. Thank contributors\u003c/h2\u003e\u003cp\u003eIf someone answers in the issue or open a PR, try to be somewhat responsive.Check your settings allow you to be notified of issue comments and PRs, you might need to \u003ca href=\"https://docs.github.com/en/account-and-profile/managing-subscriptions-and-notifications-on-github/managing-subscriptions-for-activity-on-github/viewing-your-subscriptions\"\u003ewatch\u003c/a\u003e your repository.\u003c/p\u003e\u003cp\u003eAcknowledge contributions \u003ca href=\"https://devguide.ropensci.org/collaboration.html?q=generous#attributions\"\u003egenerously\u003c/a\u003e! 🙏🏼\u003c/p\u003e\u003ch2 id=\"dont-despair\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#dont-despair\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDon\u0026rsquo;t despair\u003c/h2\u003e\u003cp\u003eEven if you wrote an excellent issue, it just might not get picked up.In that case, consider broadcasting again, ask for general tips from your fellow maintainers, and consider applying for funding (therefore time, either yours or an external contractor\u0026rsquo;s) for your maintenance efforts.See for instance the \u003ca href=\"https://www.r-consortium.org/all-projects/call-for-proposals#Rstats\"\u003eR Consortium\u0026rsquo;s two yearly calls for proposals\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eEven if no one tackles the issue in the end, going through this process can be helpful as it gives you a chance to think through this issue in detail and to consider possible resolutions, which can help you solve your problem your own.Also, a well-documented issue is a great way to document your decisions about your software transparently and can help future users and contributors understand the reasons for your choices.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eOpening \u0026ldquo;help wanted\u0026rdquo; issues can be a way to grow your package\u0026rsquo;s contributor community.They might be a better door to contribution than less specific issues with a laundry list of needed tasks, as they\u0026rsquo;re less overwhelming.Contributors might fix one \u0026ldquo;help wanted\u0026rdquo; issue and then leave, or go ahead and solve more of them.Sometimes a conversation in the comments can help you find a solution even if a contributor doesn\u0026rsquo;t submit a PR.\u003c/p\u003e\u003cp\u003eAs a contributor, always comment in an issue before tackling it, to ensure it\u0026rsquo;s still up-to-date, and that no one else is preparing a duplicate PR right now!How vexing would that be to work for nothing.\u003c/p\u003e\u003cp\u003eFor further thoughts on how to foster a community around your package, you might enjoy the recording and materials on our past \u003ca href=\"/commcalls/apr2021-pkg-community/\"\u003ecommunity call on the topic\u003c/a\u003e.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eYou might find \u003ca href=\"https://contributing.streamlit.app/\"\u003ehttps://contributing.streamlit.app/\u003c/a\u003e helpful, but another way to improve your contributing guide is to keep amending it based on your experience with new contributors.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2023/09/19/help-wanted/","date_published":"2023-09-19T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/d1j4d-vem44","title":"Meeting the Stars of the R-Universe: The R-Universe Against Diseases.","language":"en","authors":[{"name":"Alejandra Bellini","url":"https://ropensci.org/author/alejandra-bellini/","avatar":"https://ropensci.org/img/community/ale-bellini.jpeg","_role":["author"]},{"name":"Lucio Casalla","url":"https://ropensci.org/author/lucio-casalla/","avatar":"https://ropensci.org/img/community/lucio-casalla.JPG","_role":["author"]},{"name":"Rich FitzJohn","url":"https://ropensci.org/author/rich-fitzjohn/","avatar":"https://github.com/richfitz.png","_role":["interviewee"]},{"name":"Rob Ashton","url":"https://ropensci.org/author/rob-ashton/","avatar":"https://api.dicebear.com/7.x/identicon/svg?seed=138c4ac5a7931c08b88b85d81e3833dd&amp;rowColor=276dcc&amp;size=50","_role":["interviewee"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","r-universe","interviews","r-universe-stars"],"content_html":"\u003cp\u003eA new post of our interview series \u003ca href=\"/tags/r-universe-stars/\"\u003e“Meeting the stars of the R-universe”\u003c/a\u003e. We aim to introduce the teams and people behind the development of software and packages many of us use and which are available through the R-Universe. We want to highlight and explore different teams and projects around the world, the work they do, their processes and users. This stop is at the \u003cstrong\u003eUnited Kingdom\u003c/strong\u003e to talk with members of the Centre for Global Infectious Disease Analysis. Be sure to watch the video at the end with excerpts from the interview.\u003c/p\u003e\u003cp\u003e\u003cem\u003eInfectious diseases continue to generate multiple problems in human health. The pandemic experience taught us the importance of research to fight epidemics. Today we will meet a team of developers who use the R-Universe to host packages that help in this work.\u003c/em\u003e\u003c/p\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/blog/2023/09/15/r-universe-stars-5-en/rich.jpeg\"\t\t\talt=\"Profile photo of Rich FitzJohn.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eRich FitzJohn\u003c/strong\u003e\u003cbr\u003ePrincipal Architect\u003cbr\u003eResearch Software Engineering Group\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThe chat begins with \u003ca href=\"/author/rich-fitzjohn/\"\u003eRich FitzJohn\u003c/a\u003e, who leads the research software engineering team at the \u003ca href=\"https://www.imperial.ac.uk/mrc-global-infectious-disease-analysis\"\u003eMRC Centre for Global Infectious Disease Analysis\u003c/a\u003e. This center works on the global analysis of infectious diseases. It is a center for research and development of tools for epidemiological analysis and modeling of infectious diseases to collaborate with the work of national and international agencies to plan public policy responses to potential infectious disease threats.\u003c/p\u003e\u003cp\u003eThis team was one of the first to use our R-Universe and we\u0026rsquo;re interested in understanding and sharing their reasons for joining the platform.\u003c/p\u003e\u003cp\u003eAs Rich explains, their work consists of providing answers to general and specific epidemiology problems and responding to more than 200 different companies. Within this framework, they use the R-Universe as a way to distribute and present packages they develop and use in their work.\u003c/p\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2023/09/15/r-universe-stars-5-en/rob.jpeg\"\t\t\talt=\"Profile picture of Rob Ashton.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eRobert Ashton\u003c/strong\u003e\u003cbr\u003eSenior Research Software Engineer\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eRob Ashton, a software engineer who works with Rich, adds that these packages are important as they allow them to deliver the work to all the users in a simple, useful, and responsible way. Especially if you consider that it is very collaborative work and often they are working against the clock. That is why they try to all work at the same time on the same code with a permanent development and revision cycle to meet the needs of the researchers.This work will then be used by researchers worldwide, and that is where the R-Universe becomes a fundamental tool.\u003c/p\u003e\u003cp\u003eMultiple users can access the \u003ca href=\"https://mrc-ide.r-universe.dev\"\u003eMRC R-Universe\u003c/a\u003e at the same time to use the packages and have the necessary material available for their research. However, it is likely that they will need some training or knowledge to be able to use these packages because of the level of specificity, and the R-Universe helps there too by hosting documentation such as vignettes and articles.\u003c/p\u003e\u003cp\u003eRecalling how they first entered the R-universe, Rich says it was by being invited to try out a new project that rOpenSci was working on. They then quickly realized that it represented the possibility of saving hours of work in different tasks. Over time the features and functionalities of the R-Universe changed and expanded as the project matured.\u003c/p\u003e\u003cp\u003eIt was at this point in the interview that Rich and Rob discussed possible future features that could be useful in the R-Universe; from archiving different versions of the binaries of each package according to a researcher\u0026rsquo;s reproducibility needs, to automatic generation of package documentation, to different ideas for increasing the R-Universe\u0026rsquo;s package search and discovery capabilities.\u003c/p\u003e\u003cp\u003eSome of these features are currently under development and others have already been implemented. For example: \u003ca href=\"/blog/2023/05/31/runiverse-snapshots/\"\u003eDownloading snapshots and creating stable R packages repositories using R-Universe\u003c/a\u003e and \u003ca href=\"/blog/2023/02/27/runiverse-discovering/\"\u003eDiscovering and learning everything there is to know about R packages using R-Universe\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIn the following video, Rich and Rob share more details of their work in the MRC and with the rOpenSci R-Universe.\u003c/p\u003e\t\t\t\u003cdiv\t\t\t\t\tstyle=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\t\t\t\t\u003ciframe\t\t\t\t\tsrc=\"https://player.vimeo.com/video/861836969?dnt=0\"\t\t\t\t\t\tstyle=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;\" allow=\"fullscreen\" title=\"Meeting R-Universe Stars - Centre for Global Infectious Disease Analysis project\"\u003e\t\t\t\t\u003c/iframe\u003e\t\t\t\u003c/div\u003e","url":"https://ropensci.org/blog/2023/09/15/r-universe-stars-5-en/","date_published":"2023-09-15T00:00:00+00:00","date_modified":"2025-09-16T09:31:26+02:00"},{"id":"https://doi.org/10.59350/v4wbc-77957","title":"rOpenSci News Digest, August 2023","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2023/08/25/news-august-2023\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"open-call-for-ropensci-champions-program-applications\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#open-call-for-ropensci-champions-program-applications\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOpen Call for rOpenSci Champions Program Applications!\u003c/h3\u003e\u003cp\u003eStill open: \u003ca href=\"/blog/2023/07/14/call-champions-program/\"\u003eour call\u003c/a\u003e for the second cohort of Champions and Mentors for the rOpenSci Champions Program 🎉 !\u003c/p\u003e\u003cp\u003eThis 12-month-long program will continue to support our goal of identifying, recognizing, and rewarding passionate community members who help the community grow and improve.  The activities include \u003ca href=\"/blog/2023/08/04/champions-program-training/\"\u003ecohort-based training\u003c/a\u003e, project development, and personal mentorship.\u003c/p\u003e\u003cp\u003eThis program focuses on people who belong to groups that are historically and systematically excluded from the open software and research software communities and who are interested in contributing to rOpenSci and the broader open source and research software communities.\u003c/p\u003e\u003cp\u003eYou can apply to be a \u003ca href=\"https://airtable.com/shrAsYlSXU0coJ5Ld\"\u003echampion\u003c/a\u003e or a \u003ca href=\"https://airtable.com/shrlrLdQbb4wphosK\"\u003ementor\u003c/a\u003e until \u003cstrong\u003eSeptember 4th\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eWant to hear more from the protagonists?In these videos (in \u003ca href=\"https://vimeo.com/848537831\"\u003eEnglish\u003c/a\u003e and \u003ca href=\"https://vimeo.com/854320485\"\u003eSpanish\u003c/a\u003e) our champions and mentors tell us what it\u0026rsquo;s like to be part of the program.\u003c/p\u003e\u003cp\u003eMore information on eligibility, timeline, curriculum, application process, etc. is \u003ca href=\"/champions/\"\u003eon the program webpage\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"our-first-community-call-in-spanish-and-english-too\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#our-first-community-call-in-spanish-and-english-too\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOur first community call in Spanish (and English too)!\u003c/h3\u003e\u003cp\u003eAs global movements, Open Source and Open Science face language-based exclusion as most resources are in English. This affects scientists and research software engineers working in R, particularly those who don’t have English as their first language.\u003c/p\u003e\u003cp\u003erOpenSci multilingual efforts aim to lower access barriers, democratize quality resources, and increase the possibilities of contributing to open software and science. We successfully piloted our Spanish-language peer review and the localization to Spanish of our comprehensive guide to software development, with Portuguese translation underway.\u003c/p\u003e\u003cp\u003e\u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e, \u003ca href=\"/author/pao-corrales/\"\u003ePaola Corrales\u003c/a\u003e, and \u003ca href=\"/author/elio-campitelli/\"\u003eElio Campitelli\u003c/a\u003e,  will share the rOpenSci Multilingual project details on this call. Maëlle will present the R packages that allow us to have our content in several languages. Then Elio and Paola will share the translation workflow and show the Translation Guide written to document the process.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/commcalls/nov2023-multilingual/\"\u003e\u003cstrong\u003eMultilingual Publishing\u003c/strong\u003e:  Tuesday, 21 November 2023 12:00 UTC\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/commcalls/nov2023-multilenguaje/\"\u003e\u003cstrong\u003eProyecto Multilingüe\u003c/strong\u003e: Thursday, 23 November 2023 12:00 UTC\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"community-call-recording-mentoring--training-program-for-scientific-open-source-champions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call-recording-mentoring--training-program-for-scientific-open-source-champions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity call recording: Mentoring \u0026amp; Training Program for Scientific Open Source Champions\u003c/h3\u003e\u003cp\u003e\u003ca href=\"/commcalls/july2023-championprogram/\"\u003eVideo and resources\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eChampions programs are designed to identify, recognize, and reward emerging leaders within a community. The \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e is part of a series of activities and projects we are carrying out to ensure our research software serves everyone in our communities, which means that it needs to be sustainable and open, and built by and for all groups.\u003c/p\u003e\u003cp\u003eOn this \u003ca href=\"/commcalls/july2023-championprogram/\"\u003ecall\u003c/a\u003e \u003cem\u003eBeatriz Milz\u003c/em\u003e, \u003cem\u003eVictor Ordu\u003c/em\u003e and \u003cem\u003eCarolina Pradier\u003c/em\u003e shared their experience of being rOpenSci mentors and champions.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e in our recent \u003ca href=\"/blog/2023/06/21/coworking/\"\u003epost\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday, September 5th, 09:00 Australia Western (01:00 UTC), \u003ca href=\"/events/coworking-2023-09/\"\u003e\u0026quot; AI in/for R\u0026quot;\u003c/a\u003e \u003cem\u003eHosted by \u003ca href=\"/author/joel-nitta/\"\u003eJoel Nitta\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003cul\u003e\u003cli\u003eExplore how R can inform/perform AI as well as how AI can inform/perform R.\u003c/li\u003e\u003cli\u003eCowork independently on work related to R.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cdel\u003e\u003cstrong\u003eNote\u003c/strong\u003e October coworking is cancelled (see you in November!)\u003c/del\u003e \u003cstrong\u003eNope, it\u0026rsquo;s back on!\u003c/strong\u003e Stay tuned for coworking Tuesday, October 3rd, 14h00 Europe Central (12:00 UTC), Theme TBA\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following twenty-four packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/gert\" title=\"Simple Git Client for R\"\u003egert\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/gert/releases/tag/v1.9.3\"\u003e\u003ccode\u003ev1.9.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/av\" title=\"Working with Audio and Video in R\"\u003eav\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/av/releases/tag/v0.8.4\"\u003e\u003ccode\u003ev0.8.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/BaseSet\" title=\"Working with Sets the Tidy Way\"\u003eBaseSet\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/BaseSet/releases/tag/v0.9.0\"\u003e\u003ccode\u003ev0.9.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/c14bazAAR\" title=\"Download and Prepare C14 Dates from Different Source Databases\"\u003ec14bazAAR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/c14bazAAR/releases/tag/4.0.0\"\u003e\u003ccode\u003e4.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/chromer\" title=\"Interface to Chromosome Counts Database API\"\u003echromer\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/chromer/releases/tag/v0.5\"\u003e\u003ccode\u003ev0.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dittodb\" title=\"A Test Environment for Database Requests\"\u003edittodb\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dittodb/releases/tag/v0.1.7\"\u003e\u003ccode\u003ev0.1.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ezknitr\" title=\"Avoid the Typical Working Directory Pain When Using knitr\"\u003eezknitr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ezknitr/releases/tag/v0.6.3\"\u003e\u003ccode\u003ev0.6.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/geojsonio\" title=\"Convert Data from and to GeoJSON or TopoJSON\"\u003egeojsonio\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/geojsonio/releases/tag/v0.11.2\"\u003e\u003ccode\u003ev0.11.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/GSODR\" title=\"Global Surface Summary of the Day (GSOD) Weather Data Client\"\u003eGSODR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/GSODR/releases/tag/v3.1.9\"\u003e\u003ccode\u003ev3.1.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lingtypology\" title=\"Linguistic Typology and Mapping\"\u003elingtypology\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lingtypology/releases/tag/v1.1.15\"\u003e\u003ccode\u003ev1.1.15\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/magick\" title=\"Advanced Graphics and Image-Processing in R\"\u003emagick\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/magick/releases/tag/v2.7.5\"\u003e\u003ccode\u003ev2.7.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nasapower\" title=\"NASA POWER API Client\"\u003enasapower\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nasapower/releases/tag/v4.0.11\"\u003e\u003ccode\u003ev4.0.11\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.9.6\"\u003e\u003ccode\u003ev0.9.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/openalexR\" title=\"Getting Bibliographic Records from OpenAlex Database Using DSLAPI\"\u003eopenalexR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/openalexR/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmdata\" title=\"Import OpenStreetMap Data as Simple Features or Spatial Objects\"\u003eosmdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmdata/releases/tag/v0.2.5\"\u003e\u003ccode\u003ev0.2.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmextract\" title=\"Download and Import Open Street Map Data Extracts\"\u003eosmextract\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmextract/releases/tag/v0.5.0\"\u003e\u003ccode\u003ev0.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/readODS\" title=\"Read and Write ODS Files\"\u003ereadODS\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/readODS/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rerddap\" title=\"General Purpose Client for ERDDAP Servers\"\u003ererddap\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rerddap/releases/tag/v1.0.4\"\u003e\u003ccode\u003ev1.0.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spatsoc\" title=\"Group Animal Relocation Data by Spatial and Temporal Relationship\"\u003espatsoc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spatsoc/releases/tag/v0.2.0\"\u003e\u003ccode\u003ev0.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spiro\" title=\"Manage Data from Cardiopulmonary Exercise Testing\"\u003espiro\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spiro/releases/tag/v0.2.1\"\u003e\u003ccode\u003ev0.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.2.2\"\u003e\u003ccode\u003e1.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tiler\" title=\"Create Geographic and Non-Geographic Map Tiles\"\u003etiler\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tiler/releases/tag/v0.3.0\"\u003e\u003ccode\u003ev0.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/waywiser\" title=\"Ergonomic Methods for Assessing Spatial Models\"\u003ewaywiser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/waywiser/releases/tag/v0.4.2\"\u003e\u003ccode\u003ev0.4.2\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/weathercan\" title=\"Download Weather Data from Environment and Climate Change Canada\"\u003eweathercan\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weathercan/releases/tag/v0.7.0\"\u003e\u003ccode\u003ev0.7.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are thirteen recently closed and active submissions and 3 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/568\"\u003eohun\u003c/a\u003e, Optimizing Acoustic Signal Detection. Submitted by \u003ca href=\"https://marceloarayasalas.weebly.com/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSix at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/595\"\u003erangr\u003c/a\u003e, Mechanistic Simulation of Species Range Dynamics. Submitted by \u003ca href=\"https://github.com/katarzynam-165\"\u003eKatarzyna Markowska\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/593\"\u003eeph\u003c/a\u003e, Argentina\u0026rsquo;s Permanent Household Survey Data and Manipulation Utilities. Submitted by \u003ca href=\"/blog/2023/05/05/ropensci-champions-program-teams-meet-carolina-pradier-and-athanasia-monika-mowinckel/#carolina-pradier---champion\"\u003eCarolina Pradier\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003emregions2\u003c/a\u003e, Access Data from Marineregions.org: The Marine Regions Gazetteer and the Marine Regions Data Products. Submitted by \u003ca href=\"https://linktr.ee/salvafern\"\u003esalvafern\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003epangoling\u003c/a\u003e, Access to Large Language Model Predictions. Submitted by \u003ca href=\"https://bnicenboim.github.io/\"\u003eBruno Nicenboim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"https://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/600\"\u003enaijR\u003c/a\u003e, Operations to Ease Data Analyses Specific to Nigeria. Submitted by \u003ca href=\"https://victorordu.wordpress.com\"\u003eVictor Ordu \u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/598\"\u003eweatherOz\u003c/a\u003e, An API Client for Australian Weather and Climate Data Resources. Submitted by \u003ca href=\"https://github.com/bozaah\"\u003eRodrigo Pires\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/572\"\u003equaltdict\u003c/a\u003e, Generating Variable Dictionaries and Labelled Data Exports of Qualtrics. Submitted by \u003ca href=\"https://github.com/lyh970817\"\u003elyh970817\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/07/20/teaching-targets-with-penguins\"\u003eTeaching targets with Penguins\u003c/a\u003e by Athanasia Mo Mowinckel, and Joel Nitta. An inspiring collaboration for reproducibility! rOpenSci members Joel and Mo\u0026rsquo;s fortuitous encounter led to an exciting targets workshop in Oslo.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/08/01/r-universe-and-cran\"\u003eMy Life with the R-universe\u003c/a\u003e by Zhian N. Kamvar. Using the R-universe to rapidly deploy releases, dependencies, and bugfixes.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/08/04/champions-program-training\"\u003erOpenSci Champions Pilot Year: Training Wrap-Up\u003c/a\u003e by Yanina Bellini Saibene, Camille Santistevan, Maya Sanghvi, Lou Woodley, Maëlle Salmon, Mauro Lepore, Heather Turner, and Pao Corrales.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2023/07/26/cran-dev\"\u003eNew cran.dev shortlinks to package information and documentation\u003c/a\u003e by Jeroen Ooms. The new \u003ccode\u003ecran.dev\u003c/code\u003e shortlinks help you navigate directly to the r-universe homepage, docs or API for any CRAN package.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e (or listening to its discussion on the \u003ca href=\"https://rweekly.fireside.fm/111\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas)!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/rvertnet/index.html\"\u003ervertnet\u003c/a\u003e\u003c/strong\u003e, Retrieve, map and summarize data from the VertNet.org archives (\u003ca href=\"https://vertnet.org/\"\u003ehttps://vertnet.org/\u003c/a\u003e). Functions allow searching by many parameters, including taxonomic names, places, and dates. In addition, there is an interface for conducting spatially delimited searches, and another for requesting large datasets via email. \u003ca href=\"https://github.com/ropensci-archive/rvertnet/issues/71\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/natserv/index.html\"\u003enatserv\u003c/a\u003e\u003c/strong\u003e. Interface to NatureServe (\u003ca href=\"https://www.natureserve.org/\"\u003ehttps://www.natureserve.org/\u003c/a\u003e). Includes methods to get data, image metadata, search taxonomic names, and make maps. \u003ca href=\"https://github.com/ropensci-archive/natserv/issues/29\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"call-for-comaintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-comaintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for comaintainers\u003c/h3\u003e\u003cp\u003eRefer to our somewhat \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/#packages-looking-for-co-maintainers\"\u003erecent blog post\u003c/a\u003e to identify other packages where help is especially wished for!See also our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"register-a-package-author-in-description-in-one-function-call\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#register-a-package-author-in-description-in-one-function-call\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRegister a package author in DESCRIPTION in one function call\u0026hellip;\u003c/h3\u003e\u003cp\u003ewith \u003ca href=\"https://desc.r-lib.org/reference/desc_add_author_gh.html\"\u003e\u003ccode\u003edesc::desc_add_author_gh()\u003c/code\u003e\u003c/a\u003e!For instance, \u003ccode\u003edesc::desc_add_author_gh(\u0026quot;maelle\u0026quot;, role = \u0026quot;aut\u0026quot;)\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eYou can also register \u003cem\u003eyourself\u003c/em\u003e with \u003ca href=\"https://desc.r-lib.org/reference/desc_add_me.html\"\u003e\u003ccode\u003edesc::desc_add_me()\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThese functions are great tools to implement our advice \u003ca href=\"https://devguide.ropensci.org/collaboration.html#attributions\"\u003e\u0026ldquo;Be generous with attributions\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"hadley-wickhams-newsletter-tidy-design-principles\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#hadley-wickhams-newsletter-tidy-design-principles\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHadley Wickham\u0026rsquo;s newsletter \u0026ldquo;Tidy design principles\u0026rdquo;\u003c/h3\u003e\u003cp\u003eHadley Wickham started a \u003ca href=\"https://tidydesign.substack.com/\"\u003efree newsletter\u003c/a\u003e to share his \u0026ldquo;semi-regular thoughts on writing good R code\u0026rdquo;, as part of work on his \u003ca href=\"https://design.tidyverse.org/\"\u003enew book\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"broken-doctype-package-documentation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#broken-doctype-package-documentation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBroken \u003ccode\u003e@docType\u003c/code\u003e package documentation\u003c/h3\u003e\u003cp\u003eIf you got an email from CRAN about a broken \u003ccode\u003e@docType\u003c/code\u003e package documentation (package-level manual page), you might want to read this\u003ca href=\"https://github.com/r-lib/roxygen2/issues/1491\"\u003eroxygen2 GitHub issue\u003c/a\u003e.\u003ca href=\"https://github.com/ropensci/rnaturalearth/commit/7191a22b8277a31caeef944fcbe78367ebdfeca5\"\u003eExample fix\u003c/a\u003e.\u003c/p\u003e\u003cp\u003erOpenSci dev guide recommends having a package-level manual page.You can create it by running \u003ca href=\"https://usethis.r-lib.org/reference/use_package_doc.html\"\u003e\u003ccode\u003eusethis::use_package_doc()\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/08/25/news-august-2023/","date_published":"2023-08-25T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/3p9qg-06v97","title":"rOpenSci Champions Pilot Year: Training Wrap-Up","language":"en","authors":[{"name":"Camille Santistevan","url":"https://ropensci.org/author/camille-santistevan/","avatar":"https://ropensci.org/img/community/camille-santistevan.jpeg","_role":["author"]},{"name":"Heather Turner","url":"https://orcid.org/0000-0002-1256-3375","avatar":"https://github.com/hturner.png","_role":["author"]},{"name":"Lou Woodley","url":"https://ropensci.org/author/lou-woodley/","avatar":"https://github.com/LouWoodley.png","_role":["author"]},{"name":"Mauro Lepore","url":"https://orcid.org/0000-0002-1986-7988","avatar":"https://ropensci.org/img/team/mauro-lepore.jpg","_role":["author"]},{"name":"Maya Sanghvi","url":"https://ropensci.org/author/maya-sanghvi/","avatar":"https://ropensci.org/img/community/maya-sanghvi.jpeg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Pao Corrales","url":"https://orcid.org/0000-0003-1923-9129","avatar":"https://ropensci.org/img/team/paola-corrales.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","champions program","training","workshops"],"content_html":"\u003cp\u003eOur first cohort of the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e has now completed the first phase of their training.One of the goals of this program was to ensure that all participants gained new skills and understanding.We wanted to support Champions and Mentors, but also those who applied to the program but were not selected.Therefore we ensured that all groups had access to different training opportunities.\u003c/p\u003e\u003cp\u003eIn this article, we share the curriculum created for the Champions, Mentors, and non-selected applicants, as well as what we learned during this pilot.\u003c/p\u003e\u003ch2 id=\"training-for-the-champions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#training-for-the-champions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTraining for the Champions\u003c/h2\u003e\u003cp\u003eWe planned six weeks of training that covered the following topics:\u003c/p\u003e\u003cul\u003e\u003cli\u003ehow to plan and facilitate engaging and inclusive workshops to support participants’ success,\u003c/li\u003e\u003cli\u003eknowledge of various channels through which new members can engage in and contribute to rOpenSci and R projects, and\u003c/li\u003e\u003cli\u003etechnical skills in software development and review.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe final curriculum for this pilot consisted of 5 courses.In addition, Champions were invited to the \u003ca href=\"#training-for-non-selected-applicants\"\u003etraining session for non-selected applicants\u003c/a\u003e as an optional activity.\u003c/p\u003e\u003ch3 id=\"making-a-pact-for-engaging-virtual-meetings-and-events\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#making-a-pact-for-engaging-virtual-meetings-and-events\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMaking a PACT for engaging virtual meetings and events\u003c/h3\u003e\u003cp\u003eIn this 90-minute mini-workshop hosted by the \u003ca href=\"https://www.cscce.org/\"\u003eCenter for Scientific Collaboration and Community Engagement\u003c/a\u003e,participants explored designing and facilitating engaging and productive virtual meetings and events.\u003c/p\u003e\u003cp\u003eParticipants discussed the opportunities and challenges of working together online and outlined the “Making a PACT” framework for effective meeting design. In addition to reviewing examples of the framework in action, attendees practiced applying it to some example scenarios to empower them to try using the framework in their own work.Participants were welcome to review the CSCCE’s free guidebook on Zenodo ahead of the session: \u003ca href=\"https://zenodo.org/record/4987666#.Y-1Y4nbMK5c\"\u003eA guide to using virtual events to facilitation community building: Making a PACT for more engaging virtual meetings and events\u003c/a\u003e\u003c/p\u003e\u003cp\u003eThis training was mandatory for all Champions, and was taught by \u003ca href=\"/author/camille-santistevan/\"\u003eCamille Santistevan\u003c/a\u003e and \u003ca href=\"/author/maya-sanghvi/\"\u003eMaya Sanghvi\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"package-development-the-mechanics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-the-mechanics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ca href=\"https://rpkgdev-mechanics.netlify.app/\"\u003ePackage Development: The Mechanics\u003c/a\u003e\u003c/h3\u003e\u003cp\u003eIn this two-hour session with a live demo, an rOpenSci trainer demystified the creation of R packages. R packages are mostly well-organized folders, with automatic tools to help, such as usethis.This workshop was intended for Champions planning to develop a package who had not previously developed or contributed to packages.\u003c/p\u003e\u003cp\u003eThis training was developed for the Champions Program and taught by \u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"package-development-not-rocket-science\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-not-rocket-science\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ca href=\"https://rpkgdev-rocket.netlify.app/\"\u003ePackage Development: Not Rocket Science\u003c/a\u003e\u003c/h3\u003e\u003cp\u003eThis two-hour workshop was for R users who had already developed or contributed to packages or had taken the \u0026ldquo;Package Development: The Mechanics workshop\u0026rdquo;. It was intended for Champions planning to develop a package or submit it for review and who wanted to learn several tips and tricks on package development.Ideally, participants attended with a package of their own to use as a playground.\u003c/p\u003e\u003cp\u003eThis training was developed for the Champion Program and taught by \u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"how-ropensci-performs-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-ropensci-performs-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ca href=\"https://github.com/maurolepore/ropensci-review\"\u003eHow rOpenSci Performs Peer Review\u003c/a\u003e\u003c/h3\u003e\u003cp\u003eThis one-hour workshop was for people wanting to try the rOpenSci review process, particularly for Champions planning to send a package to review or become reviewers. We reviewed the way we communicate, build, and review software with selected examples and resources, with some time for questions and comments.\u003c/p\u003e\u003cp\u003eThis training was developed for the Champion Program and taught by \u003ca href=\"/author/mauro-lepore/\"\u003eMauro Lepore\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"how-to-contribute-to-base-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-contribute-to-base-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ca href=\"/events/2023-05-18-how-to-contribute-base-r/\"\u003eHow to contribute to base R\u003c/a\u003e\u003c/h3\u003e\u003cp\u003eThis workshop was a 60-minute walk-through of how to contribute to base R. It included how to contribute to a bug, confirm a bug, diagnose a bug, and propose a fix to code/documentation.\u003c/p\u003e\u003cp\u003eThe workshop presented tools and strategies to find a bug to work on and discussed which features make a bug good for a first-timer. Using real bug reports, participants practiced identifying good first issues. Then the process of debugging code/documentation was introduced in a collaborative exercise. Participants were briefly shown how to propose a bug fix by commenting on Bugzilla or creating a patch using GitHub. Finally, pointers and resources were shared.\u003c/p\u003e\u003cp\u003eThis training was developed and taught by \u003ca href=\"/author/heather-turner/\"\u003eHeather Turner\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"training-for-the-mentors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#training-for-the-mentors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTraining for the Mentors\u003c/h2\u003e\u003cp\u003eIn addition to the following workshop, Mentors were invited to all the training sessions offered to Champions and non-selected applicants as an optional activity.\u003c/p\u003e\u003ch3 id=\"ropensci-champions-program-mentorship-training-and-orientation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-champions-program-mentorship-training-and-orientation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ca href=\"https://ropensci-training.github.io/ropensci-mentors/\"\u003erOpenSci Champions Program. Mentorship Training and Orientation\u003c/a\u003e\u003c/h3\u003e\u003cp\u003eMentors developed their mentoring skills during this training and orientation, which covered active listening, effective questioning, and giving feedback. They received resources for their mentoring roles, such as the Mentors\u0026rsquo; Guidelines, Meeting Templates, and details of the logistics of the Champions Program.\u003c/p\u003e\u003cp\u003eThis training was mandatory for all Mentors. It was developed for the Champions Program and taught by \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"training-for-non-selected-applicants\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#training-for-non-selected-applicants\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTraining for non-selected applicants\u003c/h2\u003e\u003cp\u003eWe also conducted a workshop for those not selected to be Champions. The aim of this workshop was to provide an opportunity for all applicants to develop skills in open-source software development to support their professional advancement, which may include future applications to this or other similar programs.\u003c/p\u003e\u003ch3 id=\"developing-software-together\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#developing-software-together\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003ca href=\"https://paocorrales.github.io/git-developing-software-together/\"\u003eDeveloping Software Together\u003c/a\u003e\u003c/h3\u003e\u003cp\u003eThis was a three-hour course on using Git and GitHub to collaboratively develop open-source software with the R language. The training presented how to work with Git, using the command line, RStudio, and GitHub. The workshop introduced the concept of version control systems, local and remote repositories, and actions like stage, commit, push, pull, and merge.  It also demonstrated how to collaborate with others through forks and pull requests. The workshop had hands-on and group exercises.\u003c/p\u003e\u003cp\u003eThis training was developed by \u003ca href=\"/author/pao-corrales/\"\u003ePaola Corrales\u003c/a\u003e and taught by Paola and Yanina Bellini Saibene.\u003c/p\u003e\u003ch2 id=\"what-do-our-participants-think-of-the-training-received\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-do-our-participants-think-of-the-training-received\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat do our participants think of the training received?\u003c/h2\u003e\u003cp\u003eAt the end of each workshop, we asked those who participated to fill out an anonymous survey asking three questions:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eWhat did you like the most?\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eWhat did you like the least?\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eCan you rate this meeting? (on a scale from 1-worst to 5-best).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe plan to use this feedback to improve the next run of the Champions Program. The average score for all the training sessions was \u003cstrong\u003e4.6\u003c/strong\u003e, which shows that the attendees are very satisfied with the workshops.\u003c/p\u003e\u003cp\u003eWhen we analyze the responses to \u0026ldquo;What did you like the most?\u0026rdquo; we found four positive aspects mentioned: \u003cem\u003eInteraction with other participants\u003c/em\u003e, \u003cem\u003eStructure\u003c/em\u003e of the workshop, \u003cem\u003eMaterials and Resources\u003c/em\u003e shared during the workshop, and \u003cem\u003eExercises\u003c/em\u003e performed during training.\u003c/p\u003e\u003cp\u003eThe following plot shows the number of mentions for each aspect and an example comment explaining why it was perceived positively by the participants. The comments highlight various aspects of the training, such as enjoyable interactions, valuable tools provided, opportunities for reflection and a good structure based on practice after instruction.\u003c/p\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2023/08/04/champions-program-training/feedback_positive.png\"\t\t\talt=\"Ranked quantities of four different positive aspects in a bar plot. The aspects are Material and Resources (15 mentions), Interaction with other participants, (10 mentions), Exercises (8 mentions), and Structure (7 mentions). Each aspect is followed by a comment explaining why it was perceived positively by the participants.\"\u003e\u003c/figure\u003e\u003cp\u003eEven though the answers to \u0026ldquo;What did you like the least?\u0026rdquo; show that most attendees think there is \u003cem\u003eNothing\u003c/em\u003e they liked the least, we identify five areas for improvement: \u003cem\u003eLevel\u003c/em\u003e of the training, \u003cem\u003eMore time\u003c/em\u003e for all the content or exercises, \u003cem\u003eTools\u003c/em\u003e used during the workshops, \u003cem\u003eExercises\u003c/em\u003e during the workshop, and \u003cem\u003ePace\u003c/em\u003e of the teaching. In the plot we show the number of mentions and each aspect is followed by a comment explaining the specific improvement, suggestion, or feedback.\u003c/p\u003e\u003cp\u003eThe comments highlight the need for more time to cover content, the desire for better collaboration tools, the request for additional exercises, and the suggestion to offer different levels of training, one for beginners and one for competent practitioners. The comments also include expressions of overall satisfaction while mentioning challenges, like time zones.\u003c/p\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/blog/2023/08/04/champions-program-training/feedback_toimprove.png\"\t\t\talt=\"Ranked quantities of five areas of improvement in a bar plot. The aspect are Nothing (12 mentions), Level (5 mentions), More time (4 mentions), Tools (4 mentions), Exercises (3 mentions), and Pace (3 mentions). Each aspect has a comment explaining the specific improvement suggestion or feedback.\"\u003e\u003c/figure\u003e\u003cp\u003eThe survey data provided us with valuable insights into the participants\u0026rsquo; perspectives on the strengths and areas for improvement of our workshops. We\u0026rsquo;re looking forward to taking these comments into account when we develop the next set of training sessions.\u003c/p\u003e\u003ch2 id=\"next-steps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#next-steps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNext Steps\u003c/h2\u003e\u003cp\u003eWith a new cohort starting this year (\u003ca href=\"/blog/2023/07/14/call-champions-program/\"\u003eyou can apply now\u003c/a\u003e!) we plan to improve the schedule for each training session, allowing participants to choose between two runs of the session that cover different time zones, and recording the sessions for participants to watch after the meeting. We will develop guidelines to increase accessibility of each session and will change the order of the workshops. Specifically, training on how to organize events will be conducted closer to the time when Champions should start planning their outreach activities. In this way they will be able to use the workshop to work on their concrete proposals and receive feedback from the instructors and the rest of their peers.\u003c/p\u003e\u003cp\u003eWe also plan to complete another assessment at the end of the program, including a final survey and interviews with Mentors and Champions with the support of CSCCE team.\u003c/p\u003e\u003ch2 id=\"achievements\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#achievements\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAchievements\u003c/h2\u003e\u003cp\u003eWe developed a new curriculum involving not only rOpenSci staff but also Champions, Mentors, and individuals from other communities, which has strengthened connections among rOpenSci and others in our shared ecosystem.\u003c/p\u003e\u003cp\u003eWe also published all the training material with open licenses. This has enabled other organizations, such as \u003ca href=\"https://www.esciencecenter.nl/\"\u003eThe Netherlands eScience Center\u003c/a\u003e, to adapt and reuse our materials for training Mentors for their own \u003ca href=\"https://www.esciencecenter.nl/fellowship-programme/\"\u003eFellowship program\u003c/a\u003e.  If you use our training materials, please let us know \u003ca href=\"/usecases/\"\u003eby sharing your use case\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eOverall, the rOpenSci Champions Program successfully trained participants in essential skills for their role as Champions and Mentors while fostering engagement and collaboration in open-source research software development.\u003c/p\u003e\u003ch2 id=\"acknowledgements\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#acknowledgements\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAcknowledgements\u003c/h2\u003e\u003cp\u003eThe rOpenSci Champions Program is funded by \u003ca href=\"https://chanzuckerberg.com/\"\u003eThe Chan Zuckerberg Initiative\u003c/a\u003e. This phase of the Champions Program was made possible by the work and feedback of many people.\u003c/p\u003e\u003cp\u003eWe want to thank the \u003ca href=\"https://www.cscce.org/\"\u003eCSCCE\u003c/a\u003e team, especially \u003cem\u003eLou Woodley\u003c/em\u003e, \u003cem\u003eCamille Santistevan\u003c/em\u003e, and \u003cem\u003eMaya Sanghvi\u003c/em\u003e, for their support in designing the overall program and for their \u0026ldquo;Making a PACT\u0026rdquo; workshop for the Champions.\u003c/p\u003e\u003cp\u003eWe also want to thank \u003cem\u003eMaëlle Salmon\u003c/em\u003e, \u003cem\u003eMauro Lepore\u003c/em\u003e, \u003cem\u003ePaola Corrales\u003c/em\u003e, \u003cem\u003eHeather Turner\u003c/em\u003e, and \u003cem\u003eYanina Bellini Saibene\u003c/em\u003e for developing and teaching the rest of the workshops in the program and to \u003cem\u003eYanina\u003c/em\u003e for supporting the design of the new workshops, the support infrastructure and organizing all the training.\u003c/p\u003e\u003cp\u003eWe also thank \u003cem\u003eBatool Almarzouq\u003c/em\u003e for her feedback on the idea of Mentor training and \u003cem\u003eAbigail Cabunoc Mayes\u003c/em\u003e for her advice and material in developing the Mentor\u0026rsquo;s workshop.\u003c/p\u003e\u003cp\u003eFinally, thanks to our \u003ca href=\"/champions/\"\u003eChampions and Mentors\u003c/a\u003e for actively participating and sharing their recommendations to improve the training sessions in this program.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/08/04/champions-program-training/","date_published":"2023-08-04T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/t5nnz-csp92","title":"My Life with the R-universe","language":"en","authors":[{"name":"Zhian N. Kamvar","url":"https://orcid.org/0000-0003-1458-7108","avatar":"https://github.com/zkamvar.png","_role":["author"]}],"tags":["community","r-universe","cran","carpentries","packages","github"],"content_html":"\u003ch2 id=\"summary\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#summary\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSummary\u003c/h2\u003e\u003cp\u003eInstalling a package that has \u003cem\u003ejust\u003c/em\u003e been released to CRAN is painful for many users on Mac and Windows because often the difference between a \u0026lsquo;binary\u0026rsquo; and a \u0026lsquo;source\u0026rsquo; version is not immediately clear and they end up trying to install the source version, which leads to errors and heartbreak.When I was designing \u003ca href=\"https://carpentries.github.io/workbench\"\u003eThe Carpentries Workbench\u003c/a\u003e, I needed to make sure that people could reliably install R packages at \u003cem\u003eany time\u003c/em\u003e regardless of whether or not they had a compiler set up.\u003c/p\u003e\u003cp\u003eI use a hybrid model of the R-universe and CRAN to host in-development packages that are not on CRAN alongside their dependencies that are released to CRAN, but also require compilation via their latest release tag on GitHub.This provides end users with \u003cstrong\u003ea repository that will always contain the most up-to-date binary packages that can be easily restored via \u003ca href=\"https://rstudio.github.io/renv/\"\u003erenv\u003c/a\u003e without the need of a compiler.\u003c/strong\u003e\u003c/p\u003e\u003cp\u003eIn this blog post, I will provide a summary of the following:\u003c/p\u003e\u003col\u003e\u003cli\u003eWhat is The R-universe and how to set one up\u003c/li\u003e\u003cli\u003eHow to host your own in-development packages\u003c/li\u003e\u003cli\u003eHow to use it as an extension of CRAN to provide just-in-time binaries foryour dependencies\u003c/li\u003e\u003cli\u003eHow to use it to provide the latest bugfix versions of critical dependencies\u003cem\u003ebefore\u003c/em\u003e they hit CRAN\u003c/li\u003e\u003c/ol\u003e\u003ch2 id=\"what-is-the-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-the-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is the R-universe?\u003c/h2\u003e\u003cp\u003e\u003ca href=\"/r-universe/\"\u003eThe R-universe\u003c/a\u003e is a project by rOpenSci that serves as a rolling development repository to host R packages that are in development on a git repository such as GitHub.This has a few benefits from the get-go.\u003c/p\u003e\u003cp\u003eWith the R-universe, you can:\u003c/p\u003e\u003col\u003e\u003cli\u003ehost packages that could never be on CRAN due to size restrictions\u003c/li\u003e\u003cli\u003eprovide binary versions of packages that require compilation\u003c/li\u003e\u003cli\u003edeploy quick bugfixes to your package without needing to ask the users toinstall from GitHub\u003c/li\u003e\u003cli\u003ehost packages that are not on CRAN that you depend on\u003c/li\u003e\u003cli\u003equery linux system dependencies via its API\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eTo \u003ca href=\"/blog/2021/06/22/setup-runiverse/\"\u003eset up a universe\u003c/a\u003e, you do three things:\u003c/p\u003e\u003col\u003e\u003cli\u003ecreate a repository in your GitHub account called \u0026ldquo;[user].r-universe.dev\u0026rdquo; (e.g. \u003ca href=\"https://github.com/zkamvar/zkamvar.r-universe.dev\"\u003ehttps://github.com/zkamvar/zkamvar.r-universe.dev\u003c/a\u003e)\u003c/li\u003e\u003cli\u003eadd the R-universe app to your GitHub account\u003c/li\u003e\u003cli\u003eadd packages to a JSON file called \u0026ldquo;packages.json\u0026rdquo; (e.g. \u003ca href=\"https://github.com/zkamvar/zkamvar.r-universe.dev/blob/main/packages.json\"\u003ehttps://github.com/zkamvar/zkamvar.r-universe.dev/blob/main/packages.json\u003c/a\u003e)\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eAfter that, your universe will be available for use at \u003ccode\u003ehttps://[yourname].r-universe.dev/\u003c/code\u003e and anyone can install those packages.\u003c/p\u003e\u003ch2 id=\"dev-cran\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#dev-cran\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRolling your own\u003c/h2\u003e\u003cp\u003eBefore the R-universe, there were three ways to provide users with your in-development version of a package:\u003c/p\u003e\u003col\u003e\u003cli\u003ehave people install from GitHub via \u003ccode\u003eremotes::install_github(\u0026quot;user/repo\u0026quot;)\u003c/code\u003e or \u003ccode\u003epak::pkg_install(\u0026quot;user/repo\u0026quot;)\u003c/code\u003e\u003c/li\u003e\u003cli\u003eprovide a \u003ca href=\"https://eddelbuettel.github.io/drat/\"\u003edrat\u003c/a\u003e repository (I\u0026rsquo;ve \u003ca href=\"https://zkamvar.netlify.app/blog/gh-drat/\"\u003eposted about auto-building a drat repository previously\u003c/a\u003e)\u003c/li\u003e\u003cli\u003ehost a cran-like repository on your personal site that contains the tarball(this is how dev versions of the \u003ca href=\"http://ape-package.ird.fr/\"\u003eape\u003c/a\u003e package used to be distributed)\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eAll of these solutions either required an extra package and syntax for your users (option 1) or it involved extra work on your end to build and provide updates for the packages on your server (options 2 and 3).Unless you happen to have access to a Linux, Windows, and macOS machine, you are only able to serve the source version of the packages.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eThe R-universe changes all of that\u003c/strong\u003e by allowing us to specify that we want todeploy releases in our JSON file:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-json\" data-lang=\"json\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;package\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;pegboard\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://github.com/carpentries/pegboard\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;branch\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;*release\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;package\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;sandpaper\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://github.com/carpentries/sandpaper\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;branch\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;*release\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e},\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;package\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;varnish\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://github.com/carpentries/varnish\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;branch\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;*release\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eBecause of this, we are able to \u003cem\u003edeploy releases quickly\u003c/em\u003e and continue to test development versions when we need to.\u003c/p\u003e\u003ch2 id=\"alt-cran\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#alt-cran\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUsing R-universe as an extension for CRAN\u003c/h2\u003e\u003ch3 id=\"problem\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#problem\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eProblem\u003c/h3\u003e\u003cp\u003eBack in January 2022, \u003ca href=\"/blog/2022/01/06/runiverse-renv/\"\u003ea blog post explaining how renv 0.15.0 interacts with the R-universe\u003c/a\u003e was put up on the rOpenSci blog.It describes the model by which renv will restore package versions in R.In brief, if renv sees a binary package version that\u0026rsquo;s on CRAN or a CRAN archive, it will use that version, and if it does not find that version there, it will install from the R-universe if the SHA hash matches the package DESCRIPTION, and then from the GitHub hash if it does not match.\u003c/p\u003e\u003cp\u003eWe had initially put up our packages on the R-universe because it was a good way to distribute them without taxing the user\u0026rsquo;s GitHub API calls, but there were some issues to hosting only our packages.Imagine that you are a macOS or Windows user and you find that a new-to-you package has just updated on CRAN.What happens when you try to install it?\u003c/p\u003e\u003cp\u003eYou get this message:\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e There are binary versions available but the  source versions are later:          binary source needs_compilationhttpuv     1.6.4  1.6.5              TRUEDo you want to install from sources the packages which need compilation?\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIt\u0026rsquo;s clear that \u003ca href=\"https://stackoverflow.com/q/54346839/2752888\"\u003emany users simply do not know what to do with this message\u003c/a\u003e and run into problems if they try to install the source version.The reason for this message is because CRAN can take up to 3 days to build the MacOS and Windows binary versions of a package that is newly released to CRAN.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/08/01/r-universe-and-cran/httpuv-cran-2022-01-06.png\"\t\t\talt=\"image of the available downloads for the httpuv package showing half of the binary versions at 1.6.5 and the other half at 1.6.4\"\u003e\u003c/figure\u003e\u003cp\u003eSo the question is, if your package depends on packages that require a complex setup to install the source version, how do you prevent this situation from happening?\u003cstrong\u003eHow can the R-universe provide just-in-time binaries of released versions of packages \u003cem\u003ethat you do not control\u003c/em\u003e\u003c/strong\u003e?\u003c/p\u003e\u003ch3 id=\"solution\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#solution\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSolution\u003c/h3\u003e\u003cp\u003eYou can add the development version of this package to your \u003ccode\u003epackages.json\u003c/code\u003e file and \u003cem\u003eset the branch to \u003ccode\u003e*release\u003c/code\u003e\u003c/em\u003e so that it will rebuild on the R-universe only when the author generates a release.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-json\" data-lang=\"json\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;package\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;httpuv\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://github.com/rstudio/httpuv\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;branch\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;*release\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eBecause the R-universe will build package binaries within an hour, if someone attempts to install a package that was \u003cem\u003ejust\u003c/em\u003e released to CRAN, they will not see the dialogue above, because R will detect that a binary is available from your R-universe.\u003c/p\u003e\u003cp\u003eThere are some caveats with this however:\u003c/p\u003e\u003col\u003e\u003cli\u003eThe authors must develop on GitHub.\u003c/li\u003e\u003cli\u003eThe authors must use the GitHub release mechanism when they submit to CRAN.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eIf either of these are not met, this solution will not work, but you might be able to link to the repository on the \u003ca href=\"https://github.com/cran\"\u003eCRAN mirror in GitHub\u003c/a\u003e without the \u003ccode\u003e*release\u003c/code\u003e tag.\u003c/p\u003e\u003ch2 id=\"pre-cran\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pre-cran\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSeamless bugfixes ahead of cran\u003c/h2\u003e\u003cp\u003eIn March 2023, renv released version 0.17.0, and subsequently \u003ca href=\"https://github.com/carpentries/sandpaper/issues/406\"\u003ecaused chaoswith lesson workflows using sandpaper\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThanks to the rapid response from Kevin Ushey, I was able to get him to provide bugfixes that addressed these issues to the dev version of renv.However, he was also dealing with other bugfixes before he could resubmit to CRAN, so how was I to deploy these fixes to my community before he submitted the fix to CRAN, which could take days?\u003c/p\u003e\u003cp\u003eI added \u003cstrong\u003ethe specific bugfix tag/commit\u003c/strong\u003e\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e from renv to my \u003ccode\u003epackages.json\u003c/code\u003e file:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-json\" data-lang=\"json\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;package\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;renv\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://github.com/rstudio/renv\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;branch\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;0.17.0-38\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWhen users installed renv from The Carpentries R-universe, they would get version 0.17.0-38 until Kevin pushed the bugfix to CRAN.Note that Kevin was very diligent about bumping the development version number and adding a tag to every fix, but this would still work as long as the developer used \u003cem\u003eany form of development version\u003c/em\u003e on GitHub.\u003c/p\u003e\u003cp\u003eThe reason this works is because of the same reason that we can serve binaries before they are built on CRAN: \u003ccode\u003einstall.packages()\u003c/code\u003e will always look for the latest version of a package and install that if a binary is available.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003ch3 id=\"benefits-for-the-r-community\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#benefits-for-the-r-community\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBenefits for the R Community\u003c/h3\u003e\u003cp\u003eOne of the best features of R is a packaging ecosystem that, for the most part, \u0026ldquo;just works.\u0026rdquo; This is largely thanks to CRAN and its volunteers who check every package against the packages that it uses and uses it regularly to make sure that they are all compatible with each other.The downside of having such a thorough system for checking packages is that the barrier for entry is very high\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e.It also means that providing bugfixes can be on the order of days.The R-universe solves these problems by providing a way for authors and organisations to quickly deploy package suites and dependencies without burdening the users with the task of compiling code or installing extra packages.\u003c/p\u003e\u003ch3 id=\"grace-for-my-past-self\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#grace-for-my-past-self\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGrace for my past self\u003c/h3\u003e\u003cp\u003eWhen I was a grad student, I wrote my very first R package, \u003ca href=\"https://grunwaldlab.github.io/poppr\"\u003epoppr\u003c/a\u003e, which I had released to CRAN on 2013-05-26.In 2014, we released the paper describing poppr and were preparing to give \u003ca href=\"https://grunwaldlab.github.io/Population_Genetics_in_R/\"\u003eour first workshop\u003c/a\u003e for plant pathologists at the annual American Phytopathological Meeting.The only catch: I was working on a new version that would introduce many new features that we wanted to highlight in our workshop.To get people prepared, I had them to (1) install R, (2) install a C compiler, (3) install \u003ca href=\"https://devtools.r-lib.org/\"\u003edevtools\u003c/a\u003e, and then (4) use \u003ccode\u003edevtools::install_github(\u0026quot;grunwaldlab/poppr@candidate-1.1\u0026quot;)\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eMy question to you: how do you think that went over? If the answer is: it was a success, then you are correct! But there is a big caveat to this success: it was only because I had asked each of the \u0026gt;40 participants to email me the results of their installation and then I would troubleshoot these installations via email several weeks before the workshop.\u003cstrong\u003eIf the R-universe had existed back then\u003c/strong\u003e, I would have been able to tell people to (1) install R and (2) run \u003ccode\u003einstall.packages(\u0026quot;poppr\u0026quot;, repos = c(\u0026quot;https://zkamvar.r-universe.dev\u0026quot;, getOption(\u0026quot;repos\u0026quot;)))\u003c/code\u003e without having them to wonder why they needed a C compiler (or what it was) and why they needed devtools.\u003c/p\u003e\u003cp\u003eIt\u0026rsquo;s very hard to overstate just how much benefit the R-universe provides to the R community.It allows developers to rapidly deploy testing versions of their packages to their user-base for feedback, and it is one of the main reasons that we are able to easily maintain \u003ca href=\"https://carpentries.github.io/workbench\"\u003eThe Carpentries Workbench\u003c/a\u003e.And there are many other benefits that I haven\u0026rsquo;t even mentioned here such as public APIs to get system dependencies, lightweight HTML manuals, articles, and more! So, thank you to rOpenSci for providing and continuing to support this work.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eI could have also specified \u003ccode\u003e\u0026quot;branch\u0026quot;: \u0026quot;fd9181395e13652d2b3dc942ac1bf807e9564c25\u0026quot;\u003c/code\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eThis goes beyond the requirements to pass R CMD Check into gatekeeping behaviour from the CRAN maintainers and seemingly arbitrary policies that are regularly shifting, but that\u0026rsquo;s a discussion for another post.The system is flawed, but it\u0026rsquo;s still valuable.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2023/08/01/r-universe-and-cran/","date_published":"2023-08-01T00:00:00+00:00","_relationships":[{"url":"https://zkamvar.netlify.app/blog/r-universe-and-cran/","title":"Zhian Kamvar's Blog","relation":"IsIdenticalTo"}],"date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/wc62s-wqc30","title":"New cran.dev shortlinks to package information and documentation","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","tech notes","packages"],"content_html":"\u003ch2 id=\"introducing-crandev-shortlinks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#introducing-crandev-shortlinks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIntroducing cran.dev shortlinks!\u003c/h2\u003e\u003cp\u003eOn r-universe you can find package repositories from many different organizations and maintainers. But sometimes you just want to lookup a particular CRAN package, without knowing the developer.The new \u003ccode\u003ecran.dev\u003c/code\u003e shortlink service lets you navigate or link directly to the r-universe homepage and docs of any established CRAN package.\u003c/p\u003e\u003cp\u003eThe root domain \u003ccode\u003ehttps://cran.dev/{package}\u003c/code\u003e redirects to the primary homepage for a package:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://cran.dev/magick\"\u003ehttps://cran.dev/magick\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://cran.dev/Matrix\"\u003ehttps://cran.dev/Matrix\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://cran.dev/ggplot2\"\u003ehttps://cran.dev/ggplot2\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe subdomain \u003ccode\u003ehttps://docs.cran.dev/{package}\u003c/code\u003e redirects to package manual page:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.cran.dev/targets\"\u003ehttps://docs.cran.dev/targets\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://docs.cran.dev/MASS\"\u003ehttps://docs.cran.dev/MASS\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://docs.cran.dev/Rcpp\"\u003ehttps://docs.cran.dev/Rcpp\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFinally the subdomain \u003ccode\u003ehttps://api.cran.dev/{package}\u003c/code\u003e does not redirect, but returns a JSON blob with links to the package versions and resources. For example:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://api.cran.dev/gert\"\u003ehttps://api.cran.dev/gert\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThis shows the package page and maintainer for the gert package, and information on both the current CRAN release and development versions. Right now it returns:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-json\" data-lang=\"json\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;package\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;gert\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;maintainer\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Jeroen Ooms \u0026lt;jeroen@berkeley.edu\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;home\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://ropensci.r-universe.dev/gert\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;release\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;version\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;1.9.2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;date\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2023-06-30T08:43:26.000Z\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;source\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://github.com/cran/gert\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;repository\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://cloud.r-project.org\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;docs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://cran.r-universe.dev/gert/doc/manual.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;api\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://cran.r-universe.dev/api/packages/gert\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e},\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;devel\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;version\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;1.9000\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;date\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2023-07-20T11:08:09.000Z\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;source\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://github.com/r-lib/gert\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;repository\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://ropensci.r-universe.dev\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;docs\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://ropensci.r-universe.dev/gert/doc/manual.html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nt\"\u003e\u0026#34;api\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;https://ropensci.r-universe.dev/api/packages/gert\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWe can see the release and devel version of this package, with links to the respective sources, cranlike repository, manual, and package metadata.\u003c/p\u003e\u003cp\u003eFrom the above it can be seen that the gert r-universe page is \u003ca href=\"https://ropensci.r-universe.dev/gert\"\u003ehttps://ropensci.r-universe.dev/gert\u003c/a\u003e and the r-universe \u003ccode\u003e\u0026quot;repository\u0026quot;\u003c/code\u003e from where to install the devel version of gert:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# install \u0026#39;devel\u0026#39; gert\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003einstall.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;gert\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;https://ropensci.r-universe.dev\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe \u003ccode\u003e\u0026quot;api\u0026quot;\u003c/code\u003e field shows the JSON url with all the information and metadata about this package:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Everything there is to know about devel gert\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ejsonlite\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003efromJSON\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;https://ropensci.r-universe.dev/api/packages/gert\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNote that not all packages have a \u003ccode\u003edevel\u003c/code\u003e version available. CRAN packages that are not found GitHub or GitLab or r-forge only have a \u003ccode\u003erelease\u003c/code\u003e version, for example: \u003ca href=\"https://api.cran.dev/MASS\"\u003ehttps://api.cran.dev/MASS\u003c/a\u003e\u003c/p\u003e","url":"https://ropensci.org/blog/2023/07/26/cran-dev/","date_published":"2023-07-26T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/72vvp-q7v08","title":"rOpenSci News Digest, July 2023","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2023/07/21/news-july-2023\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"open-call-for-ropensci-champions-program-applications\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#open-call-for-ropensci-champions-program-applications\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOpen Call for rOpenSci Champions Program Applications!\u003c/h3\u003e\u003cp\u003eWe are pleased to \u003ca href=\"/blog/2023/07/14/call-champions-program/\"\u003eopen the call\u003c/a\u003e for the second cohort of Champions and Mentors for the rOpenSci Champions Program 🎉 !\u003c/p\u003e\u003cp\u003eThis 12-month-long program will continue to support our goal of identifying, recognizing, and rewarding passionate community members who help the community grow and improve.  The activities include cohort-based training, project development, and personal mentorship.\u003c/p\u003e\u003cp\u003eThis program focuses on people who belong to groups that are historically and systematically excluded from the open software and research software communities and who are interested in contributing to rOpenSci and the broader open source and research software communities.\u003c/p\u003e\u003cp\u003eYou can apply to be a \u003cem\u003echampion\u003c/em\u003e or a \u003cem\u003ementor\u003c/em\u003e until \u003cstrong\u003eSeptember 4th\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eMore information on eligibility, timeline, curriculum, application process, etc. is \u003ca href=\"/champions/\"\u003eon the program webpage\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"community-call-mentoring--training-program-for-scientific-open-source-champions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call-mentoring--training-program-for-scientific-open-source-champions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity call: Mentoring \u0026amp; Training Program for Scientific Open Source Champions\u003c/h3\u003e\u003cp\u003eTuesday, 25 July 2023 14:00 UTC. \u003ca href=\"/commcalls/july2023-championprogram/\"\u003eMore info\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eChampions programs are designed to identify, recognize, and reward emerging leaders within a community. The \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e is part of a series of activities and projects we are carrying out to ensure our research software serves everyone in our communities, which means that it needs to be sustainable and open, and built by and for all groups.\u003c/p\u003e\u003cp\u003eOn this \u003ca href=\"/commcalls/july2023-championprogram/\"\u003ecall\u003c/a\u003e \u003cem\u003eBeatriz Milz\u003c/em\u003e, \u003cem\u003eVictor Ordu\u003c/em\u003e and \u003cem\u003eCarolina Pradier\u003c/em\u003e will share their experience of being rOpenSci mentors and champions.We will highlight the benefits of being part of the program for you and for your community, what kind of learning,activities and opportunities an open source community champions program provides.rOpenSci Community Manager \u003cem\u003eYani\u003c/em\u003e will present the details of our Champion Program and answer all your questions about it.\u003c/p\u003e\u003ch3 id=\"cran-packages-on-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#cran-packages-on-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCRAN packages on R-universe\u003c/h3\u003e\u003ch4 id=\"all-cran-packages-indexed-on-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#all-cran-packages-indexed-on-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAll CRAN packages indexed on R-universe!\u003c/h4\u003e\u003cp\u003eWe have now indexed all CRAN packages on \u003ca href=\"https://r-universe.dev\"\u003er-universe.dev\u003c/a\u003e. You can use the R-universe \u003ca href=\"/blog/2023/02/27/runiverse-discovering/#level-1-searching-the-entire-r-ecosystem\"\u003epowersearch\u003c/a\u003e to find any CRAN package with a particular topic, author, datasets etc.\u003c/p\u003e\u003ch4 id=\"r-universe-crandev-shortlinks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-crandev-shortlinks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-universe cran.dev shortlinks\u003c/h4\u003e\u003cp\u003eYou can now use cran.dev shortlinks: \u003ccode\u003ehttps://cran.dev/{package}\u003c/code\u003e, \u003ccode\u003ehttps://docs.cran.dev/{package}\u003c/code\u003e to fly directly to the R-universe dev page or html manual for any CRAN package!\u003c/p\u003e\u003cp\u003eExample: \u003ca href=\"https://cran.dev/xml2\"\u003ehttps://cran.dev/xml2\u003c/a\u003e and \u003ca href=\"https://docs.cran.dev/xml2\"\u003ehttps://docs.cran.dev/xml2\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e in our new \u003ca href=\"/blog/2023/06/21/coworking/\"\u003epost\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday, August 1st, 09:00 Americas Pacific (16:00 UTC), \u003ca href=\"/events/coworking-2023-08/\"\u003e\u0026ldquo;Spatial data in R\u0026rdquo;\u003c/a\u003e \u003cem\u003eHosted by \u003ca href=\"/author/mike-mahoney\"\u003eMike Mahoney\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003cul\u003e\u003cli\u003eWork on a project related to spatial data.\u003c/li\u003e\u003cli\u003eExplore R packages for working with spatial data.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eTuesday, September 5th, 09:00 Australia Western (01:00 UTC), TBA\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eNote\u003c/strong\u003e October coworking is cancelled (see you in November!)\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following eight packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/daiquiri\" title=\"Data Quality Reporting for Temporal Datasets\"\u003edaiquiri\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/daiquiri/releases/tag/v1.1.1\"\u003e\u003ccode\u003ev1.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/datefixR\" title=\"Standardize Dates in Different Formats or with Missing Data\"\u003edatefixR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/datefixR/releases/tag/v1.5.0\"\u003e\u003ccode\u003ev1.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ijtiff\" title=\"Comprehensive TIFF I/O with Full Support for ImageJ TIFF Files\"\u003eijtiff\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ijtiff/releases/tag/v2.3.2\"\u003e\u003ccode\u003ev2.3.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/phylotaR\" title=\"Automated Phylogenetic Sequence Cluster Identification fromGenBank\"\u003ephylotaR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/phylotaR/releases/tag/v1.3.0\"\u003e\u003ccode\u003ev1.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rerddap\" title=\"General Purpose Client for ERDDAP Servers\"\u003ererddap\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rerddap/releases/tag/v1.0.3\"\u003e\u003ccode\u003ev1.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rsnps\" title=\"Get SNP (Single-Nucleotide Polymorphism) Data on the Web\"\u003ersnps\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rsnps/releases/tag/v0.6.0\"\u003e\u003ccode\u003ev0.6.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.2.0\"\u003e\u003ccode\u003e1.2.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/waywiser\" title=\"Ergonomic Methods for Assessing Spatial Models\"\u003ewaywiser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/waywiser/releases/tag/v0.4.1\"\u003e\u003ccode\u003ev0.4.1\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are eleven recently closed and active submissions and 3 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/568\"\u003eohun\u003c/a\u003e, Optimizing Acoustic Signal Detection. Submitted by \u003ca href=\"https://marceloarayasalas.weebly.com/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003emregions2\u003c/a\u003e, Access Data from Marineregions.org: The Marine Regions Gazetteer and the Marine Regions Data Products. Submitted by \u003ca href=\"https://linktr.ee/salvafern\"\u003esalvafern\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003epangoling\u003c/a\u003e, Access to Large Language Model Predictions. Submitted by \u003ca href=\"https://bnicenboim.github.io/\"\u003eBruno Nicenboim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/595\"\u003erangr\u003c/a\u003e, Mechanistic Simulation of Species Range Dynamics. Submitted by \u003ca href=\"https://github.com/katarzynam-165\"\u003eKatarzyna Markowska\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"https://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/593\"\u003eeph\u003c/a\u003e, Argentina\u0026rsquo;s Permanent Household Survey Data and Manipulation Utilities. Submitted by \u003ca href=\"/blog/2023/05/05/ropensci-champions-program-teams-meet-carolina-pradier-and-athanasia-monika-mowinckel/#carolina-pradier---champion\"\u003eCarolina Pradier\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/572\"\u003equaltdict\u003c/a\u003e, Generating Variable Dictionaries and Labelled Data Exports of Qualtrics. Submitted by \u003ca href=\"https://github.com/lyh970817\"\u003elyh970817\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/06/21/coworking\"\u003eAll About Coworking Sessions with rOpenSci\u003c/a\u003e by Steffi LaZerte. Discover how rOpenSci coworking sessions have evolved to include themes and community hosts, while still providing a place of community to work and chat.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/06/23/ropensci-champions-program-teams-meet-ghozayel-elotteebi-and-zebulun-arendsee\"\u003erOpenSci Champions Program Teams: Meet Ghozayel Elotteebi and Zebulun Arendsee\u003c/a\u003e by Ghozayel Elotteebi, and Zebulun Arendsee. Introducing Champions and Mentors - Ghozayel Elotteebi and Zebulun Arendsee.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/07/14/call-champions-program\"\u003eOpen Call for rOpenSci Champions Program Applications!\u003c/a\u003e by Yanina Bellini Saibene. We open the call for the second cohort of Champions and Mentors. Other languages: \u003ca href='/es/blog/2023/07/14/launch-champions-program-es' lang='es'\u003e¡Convocatoria abierta para la presentación de candidaturas al Programa de Campeonas y Campeones de rOpenSci! (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/07/20/teaching-targets-with-penguins\"\u003eTeaching targets with Penguins\u003c/a\u003e by Athanasia Mo Mowinckel, and Joel Nitta. An inspiring collaboration for reproducibility! rOpenSci members Joel and Mo\u0026rsquo;s fortuitous encounter led to an exciting targets workshop in Oslo.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eOne use case of our packages and resources has been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://discuss.ropensci.org/t/using-targets-for-an-omics-analysis-and-report-manuscript/3541\"\u003eUsing targets for an omics analysis and report / manuscript\u003c/a\u003e. Reported by Robert M Flight.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e (or listening to its discussion on the \u003ca href=\"https://rweekly.fireside.fm/111\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas)!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/rvertnet/index.html\"\u003ervertnet\u003c/a\u003e\u003c/strong\u003e, Retrieve, map and summarize data from the VertNet.org archives (\u003ca href=\"https://vertnet.org/\"\u003ehttps://vertnet.org/\u003c/a\u003e). Functions allow searching by many parameters, including taxonomic names, places, and dates. In addition, there is an interface for conducting spatially delimited searches, and another for requesting large datasets via email. \u003ca href=\"https://github.com/ropensci-archive/rvertnet/issues/71\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/natserv/index.html\"\u003enatserv\u003c/a\u003e\u003c/strong\u003e. Interface to NatureServe (\u003ca href=\"https://www.natureserve.org/\"\u003ehttps://www.natureserve.org/\u003c/a\u003e). Includes methods to get data, image metadata, search taxonomic names, and make maps. \u003ca href=\"https://github.com/ropensci-archive/natserv/issues/29\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"call-for-comaintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-comaintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for comaintainers\u003c/h3\u003e\u003cp\u003eRefer to our somewhat \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/#packages-looking-for-co-maintainers\"\u003erecent blog post\u003c/a\u003e to identify other packages where help is especially wished for!See also our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"check-for-partial-matching-as-part-of-your-testing--ci-process\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#check-for-partial-matching-as-part-of-your-testing--ci-process\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCheck for partial matching as part of your testing \u0026amp; CI process\u003c/h3\u003e\u003cp\u003eYou can change your options to generate warnings on partial matching:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eoptions\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ewarnPartialMatchAttr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ewarnPartialMatchDollar\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ewarnPartialMatchArgs\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eBut your options and \u003ca href=\"https://rstats.wtf/r-startup.html#rprofile\"\u003eRprofile\u003c/a\u003e are ignored by R CMD check.\u003c/p\u003e\u003cp\u003eA way to still get warnings in your continuous integration is to integrate it to testthat by creating a \u003ca href=\"https://blog.r-hub.io/2020/11/18/testthat-utility-belt/\"\u003especial \u003ccode\u003esetup-options.R\u003c/code\u003e file\u003c/a\u003e, as in \u003ca href=\"https://github.com/epiverse-trace/packagetemplate/pull/61\"\u003ehttps://github.com/epiverse-trace/packagetemplate/pull/61\u003c/a\u003e. This file could also be used to change any other options (but use with caution to not create situations where it\u0026rsquo;s too difficult to debug).\u003c/p\u003e\u003cp\u003eThanks to \u003ca href=\"/author/hugo-gruson/\"\u003eHugo Gruson\u003c/a\u003e for this tip!\u003c/p\u003e\u003ch3 id=\"change-in-r-devel-for-comparing-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#change-in-r-devel-for-comparing-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChange in R-devel for comparing versions\u003c/h3\u003e\u003cp\u003eDoes your package compare version with code snippets like \u003ccode\u003esome_version \u0026gt;= 1.5\u003c/code\u003e?If so, you might encounter the warning below with R-devel.\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eCondition  Warning in `.make_numeric_version()`:  invalid non-character version specification \u0026#39;x\u0026#39; (type: double)\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"https://bugs.r-project.org/show_bug.cgi?id=18548\"\u003eReference\u003c/a\u003e, \u003ca href=\"https://mastodon.social/@zkamvar@fosstodon.org/110634968544104625\"\u003etoot\u003c/a\u003e.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eTo avoid it, you need to make your comparison a character vector:\u003ccode\u003esome_version \u0026gt;= '1.5'\u003c/code\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003e\u003ca href=\"https://github.com/r-lib/usethis/commit/a5e80b516154309dd28d09e642ea7e7b6c7e723a\"\u003eExample commit fixing this, in usethis\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThanks to \u003ca href=\"author/zhian-n.-kamvar/\"\u003eZhian Kamvar\u003c/a\u003e for this tip!\u003c/p\u003e\u003ch3 id=\"how-to-take-vacation-as-an-open-source-maintainer\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-take-vacation-as-an-open-source-maintainer\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to take vacation as an open-source maintainer\u003c/h3\u003e\u003cp\u003eSome inspiration by Will Landau: \u003ca href=\"https://mastodon.social/@landau@fosstodon.org/110636695153363955\"\u003ehttps://mastodon.social/@landau@fosstodon.org/110636695153363955\u003c/a\u003eTake care, y\u0026rsquo;all.\u003c/p\u003e\u003c!-- To be curated by hand --\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/07/21/news-july-2023/","date_published":"2023-07-21T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/8jxk6-r7m33","title":"Teaching targets with Penguins","language":"en","authors":[{"name":"Athanasia Mo Mowinckel","url":"https://ropensci.org/author/athanasia-mo-mowinckel/","avatar":"https://github.com/drmowinckels.png","_role":["author"]},{"name":"Joel Nitta","url":"https://orcid.org/0000-0003-4719-7472","avatar":"https://github.com/joelnitta.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["targets","teaching","meetings","community"],"content_html":"\u003cp\u003eMany researchers are becoming more aware of the importance of reproducibility.Although reproducibility involves a diverse array of topics and tools, one rOpenSci package has gained considerable attention for enabling reproducible analysis pipelines in R: \u003ca href=\"https://books.ropensci.org/targets/\"\u003etargets\u003c/a\u003e, by Will Landau.\u003c/p\u003e\u003ch2 id=\"why-a-targets-workshop\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-a-targets-workshop\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy a targets workshop?\u003c/h2\u003e\u003cp\u003eDespite its popularity, targets can be challenging to learn because it requires code to be organized in a way that is different from what most people are used to.\u003c/p\u003e\u003cp\u003eOne of the authors (Joel) had been using targets since the time of its predecessor, \u003ca href=\"https://github.com/ropensci/drake\"\u003edrake\u003c/a\u003e, and had taught several smaller workshops (for example, \u003ca href=\"https://github.com/joelnitta/asiaR-targets-intro\"\u003ethis one\u003c/a\u003e) to help others learn to use it. Although these workshops were useful, they were produced informally and didn\u0026rsquo;t demonstrate the full range of capabilities of targets.\u003c/p\u003e\u003cp\u003eThe idea for a full, one-day workshop came out of a fortuitous set of events.Joel was planning to visit Oslo, Norway, for one week to teach a completely separate \u003ca href=\"https://www.forbio.uio.no/events/courses/2023/Workshop%20in%20Spatial%20Phylogenetics\"\u003eworkshop on Spatial Phylogenetics\u003c/a\u003e.He reached out to his colleague Mo, another active member of rOpenSci, to ask about getting together for a coffee, whereupon Mo asked if Joel would be up for teaching another workshop during his visit.Mo had seen Joel on an rOpenSci \u003ca href=\"/commcalls/jan2023-targets/\"\u003ecommunity call about targets\u003c/a\u003e just a couple of weeks prior, and really wanted to take advantage of his experience to start digging into targets.Joel, on his side, realized this was just the motivation he needed to fully flesh out the workshop materials, so he happily agreed.\u003c/p\u003e\u003cp\u003eIn this post, we will describe the process of designing the curriculum, share highlights from the first (and so far, only) workshop, and end with a look toward the future.\u003c/p\u003e\u003ch2 id=\"curriculum-design\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#curriculum-design\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCurriculum design\u003c/h2\u003e\u003ch3 id=\"at-the-workbench\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#at-the-workbench\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAt the workbench\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://carpentries.github.io/workbench/\"\u003eCarpentries Workbench\u003c/a\u003e was used to write the curriculum.Workbench is a set of R packages developed by \u003ca href=\"/author/zhian-n.-kamvar/\"\u003eZhian Kamvar\u003c/a\u003e that makes it easy to render beautifully formatted Carpentries workshop curricula from (R)markdown.This allows the author to focus on the content rather than the formatting. Furthermore, Workbench provides lesson templates with sections like Questions, Objectives, and Key Points that help guide curriculum development.While Workbench is geared towards Carpentries lessons, it is an excellent tool for designing online curricula in general, so we highly recommend it for anyone interested in developing (technical) teaching materials.\u003c/p\u003e\u003ch3 id=\"from-tar_script-to-palmerpenguins\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#from-tar_script-to-palmerpenguins\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFrom \u003ccode\u003etar_script()\u003c/code\u003e to palmerpenguins\u003c/h3\u003e\u003cp\u003eJoel\u0026rsquo;s previous workshops used the default targets template generated by \u003ccode\u003etar_script()\u003c/code\u003e as a starting point and demonstrated various concepts with short, ad-hoc code examples.The initial workshop as developed by Joel was a nice step-wise walk into targets, with different small datasets to highlight targets features.While this approach worked for short demos, we realized that for a full day workshop, it would be better to have a more well-defined analysis goal to work towards.\u003c/p\u003e\u003cp\u003eTaking inspiration from a \u003ca href=\"https://targets-ecology.netlify.app/\"\u003erecently developed targets workshop by Matt Brousil\u003c/a\u003e, we decided to switch to the palmerpenguins dataset.palmerpenguins has some excellent properties for teaching data analysis.It includes the raw data in a CSV file, so we can teach data loading and cleaning, a nearly ubiquitous part of any workflow.The data are organized in a way that is intuitive, allowing the participants to quickly move into analysis without having to tease apart data structure.Finally, there is an interesting pattern that is eventually revealed when analyzing the penguins\u0026rsquo; bill length and depth: although the data seem to indicate a negative relationship overall, the slope actually becomes positive when species are taken into account, demonstrating a statistical phenomenon known as \u0026ldquo;\u003ca href=\"https://en.wikipedia.org/wiki/Simpson%27s_paradox\"\u003eSimpson\u0026rsquo;s Paradox\u003c/a\u003e\u0026rdquo;.\u003c/p\u003e\u003cp\u003eThe second iteration of the workshop stil followed Joels original \u0026ldquo;path\u0026rdquo; through targets, but now keeping to the single dataset through the workshop (we did still switch to something else a couple of times to prove a point).\u003c/p\u003e\u003cp\u003eHowever, using a single dataset for the whole workshop does come with some challenges.There are still times when it may be easier to demonstrate a certain concept with a different example, like when demonstrating speed increases with parallelization.Since the dataset is rather small, the models all finish in a negligible amount of time, and it is difficult to appreciate the difference when running in parallel.However, even though bringing up a different example may seem trivial to someone who is familiar with targets, we realized this context switching may add considerable cognitive load to learners.\u003c/p\u003e\u003ch2 id=\"the-first-workshop\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-first-workshop\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe first workshop\u003c/h2\u003e\u003ch3 id=\"setup\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#setup\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSetup\u003c/h3\u003e\u003cp\u003eIn the days before the workshop, we (Mo and Joel) communicated and revised the lesson plan together through a series of GitHub Pull Requests.As Mo had no experience with targets, but lots of R and teaching R experience, she provided feedback on the general flow of the lesson.Joel, with more experience in using and teaching targets, provided context and objectives for each lesson.This made a really nice dynamic between the two of us, and made the total experience even more enjoyable.\u003c/p\u003e\u003cp\u003eThe workshop was hosted by the \u003ca href=\"https://www.ub.uio.no/english/libraries/dsc/\"\u003eDigital Scholarship Center\u003c/a\u003e (DSC) at the University of Oslo, which also hosts the local \u003ca href=\"https://www.ub.uio.no/english/libraries/dsc/carpentry-uio/\"\u003eCarpentries community (Carpentry@UiO)\u003c/a\u003e.The DSC took care of the important administrative tasks required to host a workshop: setting up a website to announce the workshop, handling the sign-ups (including a waiting list), booking an accessible and suitable room, etc.Additionally, they provided sticky-notes and extension cords for the room on the day.In short, organising the workshop was made very smooth by the expert and friendly staff of the DSC.\u003c/p\u003e\u003ch3 id=\"participants\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#participants\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eParticipants\u003c/h3\u003e\u003cp\u003eWe had 19 participants sign up, and more than half of those who signed up came (about normal no-show rate for DSC workshops). The participants covered a wide range of disciplines, from psychology to biology to humanities, and in every academic stage.  This diverse group was perfect to test the workshop on!\u003c/p\u003e\u003ch3 id=\"feedback\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#feedback\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFeedback\u003c/h3\u003e\u003cp\u003eOverall, feedback was quite positive, so we feel that we are definitely on the right track with this implementation of the workshop. Participants said that they feel more confident about using targets for their own analyses. The biggest challenge seems to be writing functions, which may be unfamiliar to many researchers but is absolutely necessary for effective use of targets. This is something that probably needs to be tailored to each workshop: the instructor should understand the participants\u0026rsquo; skill level with writing functions and provide more instruction on this topic as needed.\u003c/p\u003e\u003ch2 id=\"next-steps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#next-steps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNext steps\u003c/h2\u003e\u003cp\u003eWe are very happy with the success of the first (unofficial) \u003ca href=\"https://github.com/joelnitta/targets-workshop\"\u003eCarpentries targets workshop\u003c/a\u003e.Our biggest hope is that more people will teach the workshop and contribute back to it.If you have any suggestions about the material, please feel free to submit a PR or \u003ca href=\"https://github.com/joelnitta/targets-workshop/issues\"\u003efile an issue\u003c/a\u003e, or just reach out to us by email.\u003c/p\u003e\u003cp\u003eHappy workflowing!\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2023/07/20/teaching-targets-with-penguins/mo-joel.jpg\"\t\t\talt=\"Joel and Mo posing with grins after the workshop in front of a large projector screen showing the rOpenSci website behind them.\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eJoel and Mo after the workshop\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e","url":"https://ropensci.org/blog/2023/07/20/teaching-targets-with-penguins/","date_published":"2023-07-20T00:00:00+00:00","_relationships":[{"url":"https://carpentries.org/blog/2023/07/teaching-targets-with-penguinds/","title":"The Carpentries Blog","relation":"IsIdenticalTo"}],"date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/72d3m-vnm23","title":"Open Call for rOpenSci Champions Program Applications!","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","help","beginner","welcome","champions program"],"content_html":"\u003cp\u003eWe are pleased to open the call for the second cohort of \u003cstrong\u003eChampions and Mentors\u003c/strong\u003e for the rOpenSci Champions Program 🎉 ! This program will continue to support our goal of identifying, recognizing, and rewarding passionate community members who help the community grow and improve.\u003c/p\u003e\u003cp\u003eThe Champions Program \u003ca href=\"/blog/2021/12/20/inclusive-leadership-program/\"\u003eis part of a series of activities and projects we are carrying out to ensure our research software serves everyone in our communities\u003c/a\u003e, which means that it needs to be sustainable and open, and built \u003cstrong\u003eby and for all groups.\u003c/strong\u003e\u003c/p\u003e\u003cp\u003eWe strive to drive meaningful change in the Open Science ecosystem and the R Community in particular, and for that  we recognize the need to support a diverse cohort of community leaders and contributors to all aspects of research software creation through our Champions Program.That is why this program focuses on \u003cstrong\u003epeople who belong to groups that are historically and systematically excluded\u003c/strong\u003e from the open software and research software communities and who are interested in contributing to rOpenSci and the broader open source and research software communities.\u003c/p\u003e\u003cp\u003eWe are looking for people that work in STEAM fields, from anywhere in the world, who already have development knowledge and experience with the R language.\u003c/p\u003e\u003ch2 id=\"what-is-expected-of-a-champion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-expected-of-a-champion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is expected of a Champion?\u003c/h2\u003e\u003cp\u003eWe have developed a \u003cstrong\u003e12-month-long program including cohort-based training, project development, and personal mentorship\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eChampions will participate in a 6-week long cohort-based training on a) planning and facilitating engaging and inclusive workshops to support participants’ success, b) knowledge of various channels through which new members can engage in and contribute to rOpenSci and R projects, and c) technical skills in software development and review.\u003c/p\u003e\u003cp\u003eAfter training, Champions will develop their project, which can be one of these options:\u003c/p\u003e\u003cul\u003e\u003cli\u003ecreate a new package,\u003c/li\u003e\u003cli\u003ego through the review process with an R package they have already developed,\u003c/li\u003e\u003cli\u003eor be a reviewer for our peer review system.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eOther Champions activities include options for delivering a talk, writing blog posts and teaching other community members. During this stage, Champions will receive personal and group mentorship through meetings with mentors, quarterly cohort calls, Community Manager support, and a dedicated channel on rOpenSci Slack workspace.\u003c/p\u003e\u003cp\u003eWe will provide a $1000 (USD) stipend to the selected community Champions after they complete the program.We are looking for \u003cstrong\u003esix to nine\u003c/strong\u003e Champions for this second cohort. We expect to co-create this iteration of the rOpenSci Champions Program with the selected applicants and to refine future editions with their experience and feedback.\u003c/p\u003e\u003cp\u003eWe look forward to receiving many applications and are committed to directing non-selected applicants towards other ways in which they can develop skills and contribute to rOpenSci.\u003c/p\u003e\u003ch2 id=\"what-is-expected-of-a-mentor\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-expected-of-a-mentor\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is expected of a Mentor?\u003c/h2\u003e\u003cp\u003eMentors will play a vital role in the rOpenSci Champions Program by helping select the Champions and advising and inspiring their mentees. Mentors will also connect their mentees to people, programs, and organizations; recommend resources, readings, training, and experiences; and provide feedback on the mentee’s project.\u003c/p\u003e\u003cp\u003eWe are seeking mentors from the rOpenSci community who have:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eDemonstrated an understanding and ability to work openly and collaboratively;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe willingness to guide and teach others;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003ePrevious experience with any of the following:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eDeveloping, maintaining or contributing to any rOpenSci package or package which has gone through rOpenSci review, or\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eParticipating in the rOpenSci review process, or\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003ePackage development and/or peer code review.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eMentors will gain mentoring experience and skills, be acknowledged on the rOpenSci website and social media channels, and make new connections across the Champions’ networks. By mentoring our selected Champions and helping to shape this program mentors will also be giving back to the rOpenSci community in a great and meaningful way!\u003c/p\u003e\u003ch2 id=\"how-to-apply\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-apply\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to apply?\u003c/h2\u003e\u003cp\u003ePlease fill out an application form before \u003cstrong\u003eMonday, Sep 4, 2023\u003c/strong\u003e. Application forms have to be filled in \u003cem\u003eEnglish\u003c/em\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://airtable.com/shrAsYlSXU0coJ5Ld\"\u003e\u003cstrong\u003eChampions\u003c/strong\u003e application form\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://airtable.com/shrlrLdQbb4wphosK\"\u003e\u003cstrong\u003eMentors\u003c/strong\u003e application form\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"2023-application-timeline\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#2023-application-timeline\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e2023 Application timeline\u003c/h3\u003e\u003ctable\u003e\t\u003cthead\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003cth\u003eDate\u003c/th\u003e\t\t\t\t\t\u003cth\u003eEvent\u003c/th\u003e\t\t\t\u003c/tr\u003e\t\u003c/thead\u003e\t\u003ctbody\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eJul 14\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCall for Champions and Mentor Applications opens 🎉\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eJul 25\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e[OPTIONAL] \u003ca href=\"/commcalls/july2023-championprogram/\"\u003eCommunity Call\u003c/a\u003e - Learn from other Mentors and Champions and get tips for submitting your application\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eAug 17 \u0026amp; 23\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e[OPTIONAL] Coworking Champions Application Clinics in different timezones (\u003ca href=\"/events/coworking-2023-08-17/\"\u003eAug 17\u003c/a\u003e and \u003ca href=\"/events/coworking-2023-08-23/\"\u003eAug 23\u003c/a\u003e): receive help with your application to the Champions Program\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eSep 4\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCall for applications closes\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\u003c/tbody\u003e\u003c/table\u003e\u003ch2 id=\"do-you-have-any-questions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#do-you-have-any-questions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDo you have any questions?\u003c/h2\u003e\u003cp\u003eSee the \u003ca href=\"/champions/\"\u003eChampions Program page\u003c/a\u003e for all details regarding applying, timelines and eligibility.\u003c/p\u003e\u003cp\u003eWe will have a \u003ca href=\"/commcalls/july2023-championprogram/\"\u003eCommunity Call on Tuesday, 25 July 2023 14:00 UTC\u003c/a\u003e and two Coworking sessions in August (\u003ca href=\"/events/coworking-2023-08-17/\"\u003eAug 17\u003c/a\u003e and \u003ca href=\"/events/coworking-2023-08-23/\"\u003eAug 23\u003c/a\u003e) to help you with your application.\u003c/p\u003e\u003cp\u003eYou can also contact our Community Manager \u003ca href=\"mailto:yabellini@ropensci.org\"\u003eby email\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eWe look forward to meeting all of you passionate Champions and Mentors out there :-D\u003c/strong\u003e\u003c/p\u003e","url":"https://ropensci.org/blog/2023/07/14/call-champions-program/","date_published":"2023-07-14T00:00:01-07:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/j10q9-pab85","title":"rOpenSci Champions Program Teams: Meet Ghozayel Elotteebi and Zebulun Arendsee","language":"en","authors":[{"name":"Ghozayel Elotteebi","url":"https://ropensci.org/author/ghozayel-elotteebi/","avatar":"https://github.com/Ghozayel.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]},{"name":"Zebulun Arendsee","url":"https://ropensci.org/author/zebulun-arendsee/","avatar":"https://github.com/arendsee.png","_role":["author"]}],"tags":["community","champions program"],"content_html":"\u003cp\u003e\u003cem\u003eWe designed the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e with a mentorship aspect. Mentoring plays a significant role in the growth and development of both mentors and mentees alike. In our program, each Champion has a mentor who accompanies them during their training and development of their project.\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cem\u003eIn this series of blog posts, we introduce you to the ten teams of this first cohort and what they will be working on in the program.\u003c/em\u003e\u003c/p\u003e\u003cp\u003eAnd last, but not least, meet \u003cstrong\u003eGhozayel Elotteebi\u003c/strong\u003e from Saudi Arabia and \u003cstrong\u003eZebulun Arendsee\u003c/strong\u003e from United States!\u003c/p\u003e\u003ch2 id=\"ghozayel-elotteebi---champion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ghozayel-elotteebi---champion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGhozayel Elotteebi - Champion\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/chozayel-elotteebi-mentee.jpg\"\t\t\talt=\"Profile photo of Ghozayel Elotteebi\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eGhozayel Elotteebi\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHi, I\u0026rsquo;m Ghozayel Elotteebi, an \u003ca href=\"https://osc-ksa.com/\"\u003eOpen Science Community Saudi Arabia (OSCSA)\u003c/a\u003e member with an MA in applied linguistics. I\u0026rsquo;m based in the UK, completing my PhD at the \u003ca href=\"https://www.nottingham.ac.uk/\"\u003eUniversity of Nottingham\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eI\u0026rsquo;ve developed a new package called \u003ca href=\"https://ghozayel.github.io/Lextale/\"\u003eLextale\u003c/a\u003e. To my knowledge, this is the first R package in the field of linguistics developed in Saudi Arabia and would be the first local contribution to rOpenSci. I would love to create a community of contributors around the packages and promote advocacy for a culture of data sharing and reusable software, especially from Middle East/North Africa regions. Being part of rOpenSci is an opportunity for networking with other champions/mentors from around the world, a potential to support the community, share experiences, and contribute to the existing body of reproducible science.\u003c/p\u003e\u003c/br\u003e\u003ch2 id=\"zebulun-arendsee---mentor\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#zebulun-arendsee---mentor\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eZebulun Arendsee - Mentor\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/zebulun-zrendsee-mentor.jpg\"\t\t\talt=\"Profile photo of Zebulun Arendsee\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eZebulun Arendsee\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHi! I\u0026rsquo;m Zebulun Arendsee (Zeb) and hope to serve as a mentor in R package development.\u003c/p\u003e\u003cp\u003eI am a bioinformatics scientist at Regeneron working on sequencing, annotation, and oligonucleotide therapeutics design. In the past, I studied influenza at the USDA as a postdoc and orphan genes at Iowa State University as a graduate student. I\u0026rsquo;ve published many packages in R, including a few on CRAN and rOpenSci. I also develop in Python where I maintain several packages on PyPI and Conda and have one accepted JOSS paper. Outside my scientific work, I write mostly in Haskell, where I am building the Morloc programming language.\u003c/p\u003e\u003cp\u003eSo that\u0026rsquo;s me in a nutshell, I\u0026rsquo;m really excited about the Champion Program and am looking forward to helping where I can!\u003c/p\u003e\u003cp\u003e\u003cem\u003eWe\u0026rsquo;re excited to have both Ghozayel and Zebulun be part of the Champions program and look forward to enjoying the outcomes of their project.\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cem\u003eThis is the last introduction and we hope you\u0026rsquo;ve enjoyed meeting our 2022/2023 Champions and Mentors!\u003c/em\u003e\u003c/p\u003e","url":"https://ropensci.org/blog/2023/06/23/ropensci-champions-program-teams-meet-ghozayel-elotteebi-and-zebulun-arendsee/","date_published":"2023-06-23T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/ws8e1-d3d38","title":"rOpenSci News Digest, June 2023","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2023/06/22/ropensci-news-digest-june-2023\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"meeting-the-stars-of-the-r-universe-pecan-an-open-source-project-to-take-care-of-the-planet\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#meeting-the-stars-of-the-r-universe-pecan-an-open-source-project-to-take-care-of-the-planet\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMeeting the stars of the R-universe: PEcAn, an Open Source Project to Take Care of the Planet\u003c/h3\u003e\u003cp\u003eKnowing our community\u0026rsquo;s stories helps us to learn about the people behind our software, brings us closer and offers us new opportunities. To share some of these community stories, we created the rOpenSci interview series \u003ca href=\"/tags/r-universe-stars/\"\u003e\u003cem\u003e\u0026ldquo;Meeting the stars of the R-Universe\u0026rdquo;\u003c/em\u003e\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eClimate change and research in this area have diverse and complex data that demand increasingly complex analysis models. The PEcAn project works to develop this ability.\u003c/p\u003e\u003cp\u003eIn this \u003ca href=\"/blog/2023/06/06/r-universe-stars-4-en/\"\u003einterview\u003c/a\u003e, we go into the science of climate change, and explore where data analysis and ecosystem modeling tools are developed. That is the main objective of the PEcAn project, where they collaboratively seek new ways to collect and synthesize data and develop accessible tools to perform these tasks in a reproducible way.Our discussion was attended by Rob Kooper, Chris Black, Eric Scott, Michael C. Dietze, and David LeBauer. All members of the PEcAn project with the same goal: to find more and better ways to integrate the enormous amount of existing data on climate change.\u003c/p\u003e\u003cp\u003eYou can also read the post in \u003ca href=\"/es/blog/2023/06/06/r-universe-stars-4-es/\"\u003eSpanish\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"downloading-snapshots-and-creating-stable-r-packages-repositories-using-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#downloading-snapshots-and-creating-stable-r-packages-repositories-using-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDownloading snapshots and creating stable R packages repositories using R-universe!\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"/blog/2023/05/31/runiverse-snapshots/\"\u003enew snapshot API\u003c/a\u003e lets you download a full copy of any CRAN-like repository on R-universe. You can use such a snapshot to mirror the entire CRAN-like repository on your own servers, or for example to build a stable, validated release of your package suite.\u003c/p\u003e\u003ch3 id=\"statistical-software-review-now-completely-integrated-with-standard-review-process\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#statistical-software-review-now-completely-integrated-with-standard-review-process\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStatistical software review now completely integrated with standard review process\u003c/h3\u003e\u003cp\u003e\u003ca href=\"/software-review/\"\u003eStatistical software review\u003c/a\u003e has finally reached a stable and mature state, with all organizational processes now entirely integrated with the standard review process.Developers submitting software should notice little difference, except hopefully faster initial processing of submissions.Each submission is now smoothly handled by members of our \u003ca href=\"/software-review/#editors\"\u003eteam\u003c/a\u003e of statistical software editors:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/author/adam-sparks/\"\u003eAdam Sparks\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://emitanaka.org/\"\u003eEmi Tanaka\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/jouni-helske/\"\u003eJouni Helske\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://www.paulamoraga.com/\"\u003ePaula Moraga\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/author/rebecca-killick/\"\u003eRebecca Killick\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://tdhock.github.io/\"\u003eToby Hocking\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe currently accept software in the eight categories described in our \u003ca href=\"https://stats-devguide.ropensci.org/standards.html\"\u003e\u003cem\u003eStatistical Software Development Guide\u003c/em\u003e\u003c/a\u003e, and are still working on integrating the two additional categories of Statistical Workflow and Network Software.We encourage anybody thinking about submitting to contact any one of the editors, or the two leaders of the software review team, \u003ca href=\"/author/noam-ross/\"\u003eNoam Ross\u003c/a\u003e and \u003ca href=\"/author/mark-padgham/\"\u003eMark Padgham\u003c/a\u003e, at any time, including anybody interested in submitting software in the upcoming categories of workflow or network software.\u003c/p\u003e\u003ch3 id=\"ropenscis-communication-channels-for-safe-and-friendly-exchange\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropenscis-communication-channels-for-safe-and-friendly-exchange\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci\u0026rsquo;s Communication Channels for Safe and Friendly Exchange\u003c/h3\u003e\u003cp\u003eAs \u003ca href=\"/blog/2022/11/16/mastodon-en\"\u003ewe anticipated in November 2022\u003c/a\u003e the changes implemented by Twitter have generated a less safe and friendly space for our community.That is why from \u003cem\u003eJune 2023\u003c/em\u003e, we will stop interacting on this platform.We will maintain the account in hopes that we can return when Twitter is once again a safe and supportive space, but in the meanwhile will focus our communication efforts elsewhere.Read more in our \u003ca href=\"/blog/2023/06/14/ropensci-communication-channels-en/\"\u003eannouncement\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"two-upcoming-community-calls\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#two-upcoming-community-calls\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTwo upcoming community calls!\u003c/h3\u003e\u003ch4 id=\"a-journey-through-arrow-in-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-journey-through-arrow-in-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA Journey through Arrow in R\u003c/h4\u003e\u003cp\u003eWednesday, 28 June 2023 16:00 UTC. \u003ca href=\"/commcalls/jun2023-arrow/\"\u003eMore info\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eApache Arrow is a software development platform for building high performance applications that process and transport large data sets. It is designed to improve the performance of data analysis methods, and to increase the efficiency of moving data from one system or programming language to another.\u003c/p\u003e\u003cp\u003eIn this \u003ca href=\"/commcalls/jun2023-arrow/\"\u003ecommunity call\u003c/a\u003e moderated by Stephanie Hazlitt, our speakers, Nic Crane and Jonathan Keane, will lead us through the Arrow R package.\u003c/p\u003e\u003ch4 id=\"mentoring--training-program-for-scientific-open-source-champions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mentoring--training-program-for-scientific-open-source-champions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMentoring \u0026amp; training program for Scientific Open Source Champions\u003c/h4\u003e\u003cp\u003eTuesday, 25 July 2023 14:00 UTC. \u003ca href=\"/commcalls/july2023-championprogram/\"\u003eMore info\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eChampions programs are designed to identify, recognize, and reward emerging leaders within a community. The \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e is part of a series of activities and projects we are carrying out to ensure our research software serves everyone in our communities, which means that it needs to be sustainable and open, and built by and for all groups.\u003c/p\u003e\u003cp\u003eOn this \u003ca href=\"/commcalls/july2023-championprogram/\"\u003ecall\u003c/a\u003e \u003cem\u003eBeatriz Milz\u003c/em\u003e, \u003cem\u003eVictor Ordu\u003c/em\u003e and \u003cem\u003eCarolina Pradier\u003c/em\u003e will share their experience of being rOpenSci mentors and champions.We will highlight the benefits of being part of the program for you and for your community, what kind of learning,activities and opportunities an open source community champions program provides.\u003cem\u003eYani\u003c/em\u003e will present the details of our Champion Program and answer all your question about it.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eRead \u003ca href=\"/blog/2023/06/21/coworking/\"\u003eall about coworking\u003c/a\u003e in our new \u003ca href=\"/blog/2023/06/21/coworking/\"\u003epost\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday, July 4th, 14:00 European Central / 12:00 UTC \u003ca href=\"/events/coworking-2023-07/\"\u003e\u0026ldquo;Create/Update your \u0026lsquo;Happy File\u0026rsquo;/\u0026lsquo;Brag Document\u0026rsquo;!\u0026rdquo;\u003c/a\u003e \u003cem\u003eHosted by \u003ca href=\"/author/ma%C3%ABlle-salmon\"\u003eMaëlle Salmon\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003cul\u003e\u003cli\u003eExplore what goes into a \u003ca href=\"https://twitter.com/JennyBryan/status/1582862196870373377\"\u003e‘Happy File’\u003c/a\u003e/\u003ca href=\"https://jvns.ca/blog/brag-documents/\"\u003e‘Brag Document’\u003c/a\u003e and why you need one.\u003c/li\u003e\u003cli\u003eStart collecting items to add to your ‘Happy File’.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cul\u003e\u003cli\u003eTuesday, August 1st, 09:00 Americas Pacific (16:00 UTC), \u003ca href=\"/events/coworking-2023-08/\"\u003e\u0026ldquo;Spatial data in R\u0026rdquo;\u003c/a\u003e \u003cem\u003eHosted by \u003ca href=\"/author/mike-mahoney\"\u003eMike Mahoney\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003cul\u003e\u003cli\u003eWork on a project related to spatial data.\u003c/li\u003e\u003cli\u003eExplore R packages for working with spatial data.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following  package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/dwctaxon\"\u003edwctaxon\u003c/a\u003e, developed by Joel H. Nitta: Edit and validate taxonomic data in compliance with Darwin Core standards (Darwin Core Taxon class \u003ca href=\"https://dwc.tdwg.org/terms/#taxon\"\u003ehttps://dwc.tdwg.org/terms/#taxon\u003c/a\u003e).  It is available on \u003ca href=\"https://CRAN.R-project.org/package=dwctaxon\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/574\"\u003ereviewed\u003c/a\u003e by Collin Schwantes, and Stephen Formel.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following fifteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/biomartr\" title=\"Genomic Data Retrieval\"\u003ebiomartr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/biomartr/releases/tag/v1.0.4\"\u003e\u003ccode\u003ev1.0.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dwctaxon\" title=\"Edit and Validate Darwin Core Taxon Data\"\u003edwctaxon\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dwctaxon/releases/tag/v2.0.2\"\u003e\u003ccode\u003ev2.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/FedData\" title=\"Functions to Automate Downloading Geospatial Data Available fromSeveral Federated Data Sources\"\u003eFedData\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/FedData/releases/tag/v3.0.4\"\u003e\u003ccode\u003ev3.0.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lingtypology\" title=\"Linguistic Typology and Mapping\"\u003elingtypology\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lingtypology/releases/tag/v1.1.14\"\u003e\u003ccode\u003ev1.1.14\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/MODIStsp\" title=\"Find, Download and Process MODIS Land ProductsData\"\u003eMODIStsp\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/MODIStsp/releases/tag/v2.0.10\"\u003e\u003ccode\u003ev2.0.10\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.9.5\"\u003e\u003ccode\u003ev0.9.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmdata\" title=\"Import OpenStreetMap Data as Simple Features or Spatial Objects\"\u003eosmdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmdata/releases/tag/v0.2.3\"\u003e\u003ccode\u003ev0.2.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/predictNMB\" title=\"Evaluate Clinical Prediction Models by Net Monetary Benefit\"\u003epredictNMB\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/predictNMB/releases/tag/v0.2.1\"\u003e\u003ccode\u003ev0.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rnaturalearth\" title=\"World Map Data from Natural Earth\"\u003ernaturalearth\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rnaturalearth/releases/tag/v0.3.3\"\u003e\u003ccode\u003ev0.3.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rotl\" title=\"Interface to the Open Tree of Life API\"\u003erotl\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rotl/releases/tag/v3.1.0\"\u003e\u003ccode\u003ev3.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.7.7\"\u003e\u003ccode\u003e0.7.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.1.3\"\u003e\u003ccode\u003e1.1.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tic\" title=\"CI-Agnostic Workflow Definitions\"\u003etic\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tic/releases/tag/v0.13.3\"\u003e\u003ccode\u003ev0.13.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/UCSCXenaTools\" title=\"Download and Explore Datasets from UCSC Xena Data Hubs\"\u003eUCSCXenaTools\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/UCSCXenaTools/releases/tag/v1.4.8\"\u003e\u003ccode\u003ev1.4.8\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/webchem\" title=\"Chemical Information from the Web\"\u003ewebchem\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/webchem/releases/tag/v1.3.0\"\u003e\u003ccode\u003ev1.3.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are ten recently closed and active submissions and 3 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/574\"\u003edwctaxon\u003c/a\u003e, Tools for Working with Darwin Core Taxon Data. Submitted by \u003ca href=\"https://joelnitta.com\"\u003eJoel Nitta\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/568\"\u003eohun\u003c/a\u003e, Optimizing Acoustic Signal Detection. Submitted by \u003ca href=\"https://marceloarayasalas.weebly.com/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003emregions2\u003c/a\u003e, Access Data from Marineregions.org: The Marine Regions Gazetteer and the Marine Regions Data Products. Submitted by \u003ca href=\"https://github.com/salvafern\"\u003esalvafern\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003epangoling\u003c/a\u003e, Access to Large Language Model Predictions. Submitted by \u003ca href=\"https://bnicenboim.github.io/\"\u003eBruno Nicenboim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"https://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/572\"\u003equaltdict\u003c/a\u003e, Generating Variable Dictionaries and Labelled Data Exports of Qualtrics. Submitted by \u003ca href=\"https://github.com/lyh970817\"\u003elyh970817\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/05/18/ropensci-champions-program-teams-meet-c%C3%A9sar-and-marc\"\u003erOpenSci Champions Program Teams: Meet César and Marc\u003c/a\u003e by Cesar Luis Aybar Camacho, and Marc Choisy.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/06/06/r-universe-stars-4-en\"\u003eMeeting the Stars of the R-Universe: PEcAn, an Open Source Project to Take Care of the Planet\u003c/a\u003e by Yanina Bellini Saibene, Alejandra Bellini, Lucio Casalla, and Steffi LaZerte. Climate change and research in this area have diverse and complex data that demand increasingly complex analysis models. The PEcAn project works to develop this ability. Other languages: \u003ca href='/es/blog/2023/06/06/r-universe-stars-4-es' lang='es'\u003eConociendo a las estrellas del Universo R: PEcAn, un proyecto de código abierto para cuidar el planeta (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/06/14/ropensci-communication-channels-en\"\u003erOpenSci\u0026rsquo;s Communication Channels for Safe and Friendly Exchange\u003c/a\u003e by Yanina Bellini Saibene. Communication channels announcement. rOpenSci stop interacting on Twitter, but we can meet in many other spaces. Other languages: \u003ca href='/es/blog/2023/06/14/ropensci-communication-channels-es' lang='es'\u003eLos canales de comunicación de rOpenSci para un intercambio seguro y amigable (es)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/06/12/ropensci-champions-program-teams-meet-cheryl-isabella-lim-and-mauro-lepore\"\u003erOpenSci Champions Program Teams: Meet Cheryl Isabella Lim and Mauro Lepore\u003c/a\u003e by Cheryl Isabella Lim, and Mauro Lepore.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/06/15/ropensci-champions-impact-en\"\u003eHow do you measure the impact of a champions program? \u003c/a\u003e by Yanina Bellini Saibene, and CSCCE Staff. A summary of the discussion session on measuring the impact of champion programs at \u003cem\u003eCZI’s Accelerating Open Science in Latin America\u003c/em\u003e workshop.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/06/19/ropensci-champions-program-teams-meet-alican-cagri-gokcek-and-elio-campitelli\"\u003erOpenSci Champions Program Teams: Meet Alican Cagri Gokcek and Elio Campitelli\u003c/a\u003e by Alican Cagri Gokcek, and Elio Campitelli.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/06/21/coworking\"\u003eAll About Coworking Sessions with rOpenSci\u003c/a\u003e by Steffi LaZerte. Discover how rOpenSci coworking sessions have evolved to include themes and community hosts, while still providing a place of community to work and chat.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/05/31/runiverse-snapshots\"\u003eDownloading snapshots and creating stable R packages repositories using r-universe\u003c/a\u003e by Jeroen Ooms. We added a a new API on R-universe to download a full snapshot of any CRAN-like repo plus documentation, which you can use to mirror somewhere or just for backup.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/06/01/troubleshooting-pandoc-problems-as-an-r-user\"\u003eTroubleshooting Pandoc Problems as an R User\u003c/a\u003e by Maëlle Salmon, and Christophe Dervieux. How to solve your Pandoc problems thanks to documentation reading, experimentation\u0026hellip; and a bit of experience 😅 . Other languages: \u003ca href='/fr/blog/2023/06/01/troubleshooting-pandoc-problems-as-an-r-user' lang='fr'\u003eRésoudre ses problèmes de Pandoc en tant qu\u0026rsquo;utilisateur·rice de R (fr)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c!-- ## Use cases`snakecase::to_sentence_case(english(length(usecases)))` use case` if (length(usecases) \u003e 1) \"s\"` of our packages and resources ha` if (length(usecases) \u003e 1) \"ve\" else \"s\"` been reported since we sent the last newsletter.Explore [other use cases](/usecases) and [report your own](https://discuss.ropensci.org/c/usecases/10)! --\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003ch3 id=\"call-for-maintainers-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e (or listening to its discussion on the \u003ca href=\"https://rweekly.fireside.fm/111\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas)!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/rvertnet/index.html\"\u003ervertnet\u003c/a\u003e\u003c/strong\u003e, Retrieve, map and summarize data from the VertNet.org archives (\u003ca href=\"https://vertnet.org/\"\u003ehttps://vertnet.org/\u003c/a\u003e). Functions allow searching by many parameters, including taxonomic names, places, and dates. In addition, there is an interface for conducting spatially delimited searches, and another for requesting large datasets via email. \u003ca href=\"https://github.com/ropensci-archive/rvertnet/issues/71\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/natserv/index.html\"\u003enatserv\u003c/a\u003e\u003c/strong\u003e. Interface to NatureServe (\u003ca href=\"https://www.natureserve.org/\"\u003ehttps://www.natureserve.org/\u003c/a\u003e). Includes methods to get data, image metadata, search taxonomic names, and make maps. \u003ca href=\"https://github.com/ropensci-archive/natserv/issues/29\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/geojsonlint/index.html\"\u003egeojsonlint\u003c/a\u003e\u003c/strong\u003e, Tools for linting GeoJSON. Includes tools for interacting with the online tool \u003ca href=\"https://geojsonlint.com\"\u003ehttps://geojsonlint.com\u003c/a\u003e, the Javascript library geojsonhint (\u003ca href=\"https://www.npmjs.com/package/geojsonhint\"\u003ehttps://www.npmjs.com/package/geojsonhint\u003c/a\u003e), and validating against a GeoJSON schema via the Javascript library (\u003ca href=\"https://www.npmjs.com/package/is-my-json-valid\"\u003ehttps://www.npmjs.com/package/is-my-json-valid\u003c/a\u003e). Some tools work locally while others require an internet connection. \u003ca href=\"https://github.com/ropensci-archive/geojsonlint/issues/22\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"call-for-comaintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-comaintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for comaintainers\u003c/h3\u003e\u003cp\u003eRefer to our somewhat \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/#packages-looking-for-co-maintainers\"\u003erecent blog post\u003c/a\u003e to identify other packages where help is especially wished for!See also our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"how-to-produce-code-hints-for-users\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-produce-code-hints-for-users\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to produce code hints for users?\u003c/h3\u003e\u003cp\u003eSometimes your code can infer what the next user step should be, or what the next \u003cem\u003epossible\u003c/em\u003e user \u003cem\u003esteps\u003c/em\u003e could be.How to make it easy for the user to run these hints?\u003c/p\u003e\u003cp\u003eHere\u0026rsquo;s some inspiration:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eYou could use \u003ca href=\"https://usethis.r-lib.org/reference/ui.html\"\u003e\u003ccode\u003ecli::ui_todo()\u003c/code\u003e\u003c/a\u003e, as done in usethis. By the way if your package is using \u003ccode\u003eui_\u003c/code\u003e functions from usethis, don\u0026rsquo;t miss the cli article on how to \u003ca href=\"https://cli.r-lib.org/articles/usethis-ui.html\"\u003emigrate your code to using cli instead\u003c/a\u003e, as that\u0026rsquo;s what\u0026rsquo;s currently recommended.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eAlso in the cli package, a you can provide a special kind of link that runs the code if clicked in the RStudio IDE: \u003ca href=\"https://cli.r-lib.org/reference/links.html?q=run#click-to-run-code\"\u003e\u0026ldquo;Click to run code\u0026rdquo;\u003c/a\u003e. You might recognize this from running snapshot tests with testthat, and receiving the message to review/accept them with these special links.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecli\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ecli_text\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Run {.run praise::praise()} now!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003eIf your code is run in RStudio IDE (checkable with \u003ca href=\"https://rstudio.github.io/rstudioapi/reference/isAvailable.html\"\u003e\u003ccode\u003erstudioapi::isAvailable()\u003c/code\u003e\u003c/a\u003e), you could use \u003ca href=\"https://rstudio.github.io/rstudioapi/reference/sendToConsole.html\"\u003e\u003ccode\u003erstudioapi::sendToConsole()\u003c/code\u003e\u003c/a\u003e to send example code to the console for the user to consider (\u003ca href=\"https://github.com/cynkra/fledge/blob/520b9b2e36da7bc58136378407f1f4454bfbeadf/R/finalize-version.R#L63-L80=\"\u003eexample\u003c/a\u003e).\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"devtag-restrict-some-help-files-to-development\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#devtag-restrict-some-help-files-to-development\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003edevtag: Restrict Some Help Files to Development\u003c/h3\u003e\u003cp\u003eThe new \u003ca href=\"https://github.com/moodymudskipper/devtag\"\u003edevtag package by Antoine Fabri\u003c/a\u003e \u0026ldquo;allows you to use \u003ccode\u003e@dev\u003c/code\u003e tags in your roxygen2 headers so you’ll generate help files for unexported objects, that you will enjoy during development but won’t be accessible for users that install your package\u0026rdquo;.This might be nicer to read than the classical \u003ca href=\"https://blog.r-hub.io/2019/12/12/internal-functions/#how-to-document-internal-functions\"\u003e\u003ccode\u003e@NoRd\u003c/code\u003e docs for internal functions\u003c/a\u003e!\u003c/p\u003e\u003ch3 id=\"useful-post-on-the-retirement-of-popular-spatial-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#useful-post-on-the-retirement-of-popular-spatial-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUseful post on the retirement of popular spatial packages\u003c/h3\u003e\u003cp\u003eDon\u0026rsquo;t miss Jakub Nowosad\u0026rsquo; blog post \u003ca href=\"https://geocompx.org/post/2023/rgdal-retirement/\"\u003e\u0026ldquo;Upcoming changes to popular R packages for spatial data: what you need to do\u0026rdquo;\u003c/a\u003e!And again, tell your spatial R friends about this big change.\u003c/p\u003e\u003ch3 id=\"more-on-cran-c-requirements\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#more-on-cran-c-requirements\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMore on CRAN C++ requirements\u003c/h3\u003e\u003cp\u003eDo you remember the tidyverse article \u003ca href=\"https://www.tidyverse.org/blog/2023/03/cran-checks-compiled-code/\"\u003e\u0026ldquo;New CRAN requirements for packages with C and C++\u0026rdquo;\u003c/a\u003e?You might also enjoy this \u003ca href=\"https://github.com/mpadge/settest\"\u003erepo\u003c/a\u003e by rOpenSci Mark Padgham, \u0026ldquo;Test R package compilation with \u0026gt;= C++17\u0026rdquo;.\u003c/p\u003e\u003c!-- To be curated by hand --\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/06/22/ropensci-news-digest-june-2023/","date_published":"2023-06-22T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/ktyc2-er732","title":"All About Coworking Sessions with rOpenSci","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]}],"tags":["R","community","community-manager-tools","coworking","events"],"content_html":"\u003cp\u003eWe first \u003ca href=\"/blog/2021/08/17/coworking-sessions\"\u003eintroduced\u003c/a\u003e our Coworking andOffice Hour sessions in August 2021 after a successful pilot of several\u0026rsquo;label-athon\u0026rsquo;s in the April and May prior.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;ve had a successful couple of years since then and the coworking sessionshave evolved into themed events with different community hosts and me asa facilitator. It\u0026rsquo;s been a lovely change and we thought it was time to share these updates with the rOpenSci community! 🎉\u003c/p\u003e\u003ch2 id=\"what-are-these-sessions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-are-these-sessions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat are these sessions?\u003c/h2\u003e\u003cp\u003eOur coworking sessions are generally held on the first Tuesday of the month, rotatingthrough different timezones (Americas Pacific at 9am, Australia Western at 9am, and European Central at 14h).We meet on Zoom for two hours with introductions followed by two 40-min coworkingsessions with a mini-break and scavenger hunts 🔎 in the middle.People join us from all over the world, and we generally have ∼7-14 people at a session.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2023/06/21/coworking/scavenger_hunt.jpg\"\t\t\talt=\"A screenshot of a Zoom meeting showing 6 different video participants each holding something different: Decorated Easter egg, Sunglasses, Tulips, Allergy medicine, Sunbeam, and Touque*\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eApril Scavenger hunt: Find something that reminds you of the season!\u003cbr\u003ePeople shared a variety of findings from tulips to touques*, and sunshine to sunglasses!\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003e* \u0026lsquo;Touque\u0026rsquo; is \u003ca href=\"https://www.thecanadianencyclopedia.ca/en/article/tuque\"\u003eCanadian\u003c/a\u003e for a warm knitted winter hat.\u003c/p\u003e\u003cp\u003eWhile coworking we have two \u0026lsquo;rooms\u0026rsquo;, a Quiet room (🤫) where I hang out and where people silently work on their tasks,and a Noisy room with the community host and where chatter is welcome (but not required).\u003c/p\u003e\u003cp\u003eEach session we have a theme and a \u003ca href=\"https://docs.google.com/document/d/1RhLBS20uH7uoD89NYS9LxVqUC1oWTlpeeMe40Z6ua3M/edit?usp=sharing\"\u003eshared document\u003c/a\u003eto hold ideas and links that people share.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eThe theme is only a guideline!\u003cbr\u003eYou don\u0026rsquo;t need to know anything about it, or be invested in it to participate.\u003c/strong\u003e\u003c/p\u003e\u003cp\u003eAs these events are in the rOpenSci community space, they are governed by ourcode of conduct (\u003ca href=\"/code-of-conduct\"\u003eEnglish\u003c/a\u003e/\u003ca href=\"/es/codigo-de-conducta/\"\u003eSpanish\u003c/a\u003e)\u003c/p\u003e\u003ch2 id=\"coworking-and-office-hours\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking-and-office-hours\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking and Office Hours\u003c/h2\u003e\u003cblockquote\u003e\u003cp\u003e\u003cstrong\u003eCoworking:\u003c/strong\u003e Working with others, but on your own work.A bit like a joint study session, where you can do some work, but also a bit of socializing.\u003c/p\u003e\u003c/blockquote\u003e\u003cblockquote\u003e\u003cp\u003e\u003cstrong\u003eOffice Hours:\u003c/strong\u003e A time when you can go chat with someone and ask questions.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eWe call these sessions Coworking and Office Hours because we have a bit of both,depending what you want for the day.\u003c/p\u003e\u003cp\u003eIf you want to work on your own, you can join either the Quiet room for focused work,or join the Noisy room and work on your tasks while listening to the discussion and joining in as you like.\u003c/p\u003e\u003cp\u003eIf you want to discuss things or ask questions, head over to the Noisy room and chat with thecommunity host or other attendees. You can chat about the theme of the month oranything else you\u0026rsquo;re interested in.\u003c/p\u003e\u003cp\u003eThe only rule of the Noisy room is to be kind!\u003c/p\u003e\u003ch2 id=\"why-cowork\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-cowork\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy cowork?\u003c/h2\u003e\u003cp\u003eAs I say at the start of nearly every coworking session, I live in a small town, and there aren\u0026rsquo;t many R enthusiasts around. Sessions like theseare good for my soul as they really give me the chance to connect with other Rdevelopers/users which I don\u0026rsquo;t get every day.\u003c/p\u003e\u003cp\u003eCoworking helps reduce social isolation and gives you opportunities to socialize as wellas accountability and motivation to work on projects that tend to be neglectedor are hard to get started on.\u003c/p\u003e\u003ch2 id=\"themes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#themes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThemes\u003c/h2\u003e\u003cp\u003eEvery month we try to have a different theme hosted by a community host interested in that theme.For example, in June we had\u0026ldquo;\u003ca href=\"/events/coworking-2023-06\"\u003eIntegrating and merging datasets from different sources\u003c/a\u003e\u0026rdquo;,hosted by \u003ca href=\"/author/cynthia-huang\"\u003eCynthia Huang\u003c/a\u003e, a PhD Student working on principals and methods for data preparation and preprocessing;this July we\u0026rsquo;ll have \u0026ldquo;\u003ca href=\"/events/coworking-2023-07/\"\u003eCreate/Update your \u0026lsquo;happy file\u0026rsquo;/\u0026lsquo;brag document\u0026rsquo;\u003c/a\u003e\u0026rdquo;hosted by \u003ca href=\"/author/ma%C3%ABlle-salmon\"\u003eMaëlle Salmon\u003c/a\u003e, rOpenSci Research Software Engineer;and in August \u0026ldquo;\u003ca href=\"/events/coworking-2023-08\"\u003eSpatial data in R\u003c/a\u003e\u0026rdquo; with \u003ca href=\"/author/mike-mahoney\"\u003eMike Mahoney\u003c/a\u003e,author of several rOpenSci spatial packages.\u003c/p\u003e\u003cp\u003eCheck out the \u003ca href=\"https://docs.google.com/document/d/1RhLBS20uH7uoD89NYS9LxVqUC1oWTlpeeMe40Z6ua3M/edit?usp=sharing\"\u003efull list of themes\u003c/a\u003e and their corresponding coworking documents.\u003c/p\u003e\u003ch2 id=\"so-you-want-to-be-a-community-host\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#so-you-want-to-be-a-community-host\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSo you want to be a community host?\u003c/h2\u003e\u003cp\u003eExcellent!\u003c/p\u003e\u003cp\u003eCommunity hosts don\u0026rsquo;t need to be experts in a theme, just interested!For example, in May I hosted the theme \u0026ldquo;\u003ca href=\"/events/coworking-2023-05\"\u003eSpring Cleaning for R Packages and Scripts\u003c/a\u003e\u0026rdquo;.I had never done spring cleaning, but it was an idea proposed by \u003ca href=\"/author/ma%C3%ABlle-salmon\"\u003eMaëlle\u003c/a\u003eand I was intrigued.\u003c/p\u003e\u003cp\u003eI handle the logistics of setting up the coworking session and host the Quiet room.Community hosts hang out in the Noisy room and essentially just chat with attendees.It can be a facilitated discussion, completely casual chit-chat, Q \u0026amp; A, or all of the above, as the vibe goes.\u003c/p\u003e\u003cp\u003eDon\u0026rsquo;t worry about having to know everything!If you have answers to questions, great!If not, just ask others if they know the answer,or do some joint web searching to see if you can come up with the answer as a group.If things are a little quiet a good tactic to get the conversation rolling is to ask others if what theythink of the theme or what their familiarity with it is.\u003c/p\u003e\u003cp\u003eThe only other tasks I will ask of you as a community host are to create a slide in our deck tointroduce yourself (see example slides from this year, below),and to add any relevant links you can think of to the community document.We will promote the event on social media and in various R community spaces and you should feel free to promote the event to your friends and colleagues and through your own channels, but otherwise that\u0026rsquo;s it!\u003c/p\u003e\u003cdiv class=\"gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition\" itemscope itemtype=\"http://schema.org/ImageGallery\"\u003e\t  \u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/06/21/coworking/slide_alex_sm.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/06/21/coworking/slide_alex_sm.png\" alt=\"Example slide introducing the January community host, Alex\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/06/21/coworking/slide_alex_sm.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e      \u003cfigcaption\u003e          \u003cp\u003eJanuary Community Host, Alex 🎉\u003c/p\u003e      \u003c/figcaption\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/06/21/coworking/slide_hugo_sm.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/06/21/coworking/slide_hugo_sm.png\" alt=\"Example slide introducing the February community host, Hugo\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/06/21/coworking/slide_hugo_sm.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e      \u003cfigcaption\u003e          \u003cp\u003eFebruary Community Host, Hugo 🎉\u003c/p\u003e      \u003c/figcaption\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/06/21/coworking/slide_nick_sm.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/06/21/coworking/slide_nick_sm.png\" alt=\"Example slide introducing the March community host, Nick\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/06/21/coworking/slide_nick_sm.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e      \u003cfigcaption\u003e          \u003cp\u003eMarch Community Host, Nick 🎉\u003c/p\u003e      \u003c/figcaption\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/06/21/coworking/slide_miguel_sm.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/06/21/coworking/slide_miguel_sm.png\" alt=\"Example slide introducing the April community host, Miguel\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/06/21/coworking/slide_miguel_sm.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e      \u003cfigcaption\u003e          \u003cp\u003eApril Community Host, Miguel 🎉\u003c/p\u003e      \u003c/figcaption\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/06/21/coworking/slide_steffi_sm.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/06/21/coworking/slide_steffi_sm.png\" alt=\"Example slide introducing the May community host, Steffi\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/06/21/coworking/slide_steffi_sm.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e      \u003cfigcaption\u003e          \u003cp\u003eMay Community Host, Steffi 🎉\u003c/p\u003e      \u003c/figcaption\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/06/21/coworking/slide_cynthia_sm.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/06/21/coworking/slide_cynthia_sm.png\" alt=\"Example slide introducing the June community host, Cynthia\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/06/21/coworking/slide_cynthia_sm.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e      \u003cfigcaption\u003e          \u003cp\u003eJune Community Host, Cynthia 🎉\u003c/p\u003e      \u003c/figcaption\u003e  \u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003eIf you\u0026rsquo;re interested in helping me host a coworking session, contact me onthe rOpenSci Slack, \u003ca href=\"@steffilazerte@fosstodon.org\"\u003eMastodon\u003c/a\u003e,or via our Community Manager, \u003ca href=\"mailto:yabellini@ropensci.org\"\u003eYani\u003c/a\u003e, and let me know ifyou have a theme in mind (or I can help come up with one).\u003c/p\u003e\u003cp\u003eLogistically you will need access to Zoom via a device (mobile or computer) andan internet connection.But beyond that, all you need is interest, kindness, and perhaps a bit of enthusiasm 😉!\u003c/p\u003e\u003ch2 id=\"see-you-next-time\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#see-you-next-time\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSee you next time!\u003c/h2\u003e\u003cp\u003eI hope this update inspires you to check out our coworking sessions soon!We have a lot of fun and I always enjoy the chance to meet people \u0026lsquo;face-to-face\u0026rsquo;.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/06/21/coworking/","date_published":"2023-06-21T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/v117x-gnz60","title":"rOpenSci Champions Program Teams: Meet Alican Cagri Gokcek and Elio Campitelli","language":"en","authors":[{"name":"Alican Cagri Gokcek","url":"https://ropensci.org/author/alican-cagri-gokcek/","avatar":"https://ropensci.org/img/team/alican-cagri-gokcek.jpeg","_role":["author"]},{"name":"Elio Campitelli","url":"https://ropensci.org/author/elio-campitelli/","avatar":"https://ropensci.org/img/team/elio-campitelli.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["community","champions program"],"content_html":"\u003cp\u003e\u003cem\u003eWe designed the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e with a mentorship aspect. Mentoring plays a significant role in the growth and development of both mentors and mentees alike. In our program, each Champion has a mentor who accompanies them during their training and development of their project.\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cem\u003eIn this series of blog posts, we introduce you to the ten teams of this first cohort and what they will be working on in the program.\u003c/em\u003e\u003c/p\u003e\u003cp\u003eMeet \u003cstrong\u003eAlican Cagri Gokcek\u003c/strong\u003e from Turkey and \u003cstrong\u003eElio Campitelli\u003c/strong\u003e from Argentina!\u003c/p\u003e\u003ch2 id=\"alican-cagri-gokcek---champion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#alican-cagri-gokcek---champion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAlican Cagri Gokcek - Champion\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/alican-cagri-gokcek.jpeg\"\t\t\talt=\"Profile photo of Alican Cagri Gokcek\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eAlican Cagri Gokcek\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is Alican Cagri Gokcek. I am originally from Turkey, and currently live in the United States. I am a visually impaired person since the birth. I have a BA and MA from the department of Political Science and International Relations at Bogazici University, Istanbul, Turkey where I also spent three more years as a Ph.D. student before coming to the United States in August 2022 to start my new Ph.D. training from scratch in the department of Political Science at the University of Nevada, Reno. My research interests are social movements and contentious politics with a specific focus on labor; international political economy with a special interest in capitalism\u0026rsquo;s crises and opportunities in the contemporary world; and computational social science with a specific focus on accessibility of statistics and statistical software in education. In the Champions Program, I aim to become a peer reviewer to contribute to the package evaluation processes from the viewpoint of the disabled. I believe that the Champions Program sends an invaluable message to the entire R community through its inclusiveness and respect for underrepresented minorities.\u003c/p\u003e\u003c/br\u003e\u003ch2 id=\"elio-campitelli---mentor\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#elio-campitelli---mentor\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eElio Campitelli - Mentor\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/elio-campitelli.jpg\"\t\t\talt=\"Profile photo of Elio Campitelli\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eElio Campitelli\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI’m a PhD student at the University of Buenos Aires where I study atmospheric circulation in the Southern Hemisphere and how it affects weather in South America. I\u0026rsquo;m also the maintainer for several R packages and am a teacher of R and data analysis. As a mentor, I\u0026rsquo;m exited to be able to help people to navigate the waters of package maintenance with what I learnt from my successes and mistakes.\u003c/p\u003e\u003cp\u003e\u003cem\u003eWe look forward to seeing the results of this team from our champions program. We will continue with more team presentations in the coming weeks, stay-tuned!\u003c/em\u003e\u003c/p\u003e","url":"https://ropensci.org/blog/2023/06/19/ropensci-champions-program-teams-meet-alican-cagri-gokcek-and-elio-campitelli/","date_published":"2023-06-19T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/21v7p-8q889","title":"How do you measure the impact of a champions program? ","language":"en","authors":[{"name":"CSCCE Staff","url":"https://ropensci.org/author/cscce-staff/","avatar":"https://ropensci.org/img/community/CSCCE.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","champions program"],"content_html":"\u003cblockquote\u003e\u003cp\u003eThis post can also be \u003ca href=\"https://www.cscce.org/2023/06/15/how-do-you-measure-the-impact-of-a-community-champions-program/\"\u003efound on the CSCCE blog\u003c/a\u003e.\u0026quot;\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eHow do you measure the impact of a champions program? This was the central question of a working session at \u003cem\u003eCZI’s Accelerating Open Science in Latin America\u003c/em\u003e workshop, convened by rOpenSci’s Community Manager Yani Bellini Saibene and attended by CSCCE’s Founder and Director, Lou Woodley.\u003c/p\u003e\u003cp\u003eMeasuring the impact of any kind of community program presents a series of challenges:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eWhat is the impact that you’re hoping your program will have?\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eIs the impact you hope the program will have something that can be measured?\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eWhat types of instruments can be used to measure impact? (e.g., surveys, focus groups, etc.)\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eHow many times can you reasonably ask your participants to give feedback?\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eHow do you (or can you?) reliably follow up with participants months or even years after a program has concluded?\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe session took the form of a facilitated discussion of these points that all of the 15 -  20 participants were invited to contribute to - with the goal of learning more about one another’s experiences and creating a list of useful resources. In this blog post, we summarize these conversations with a view to continuing them in the rOpenSci Slack, the CZI Slack, and CSCCE’s Slack workspace for STEM community managers.\u003c/p\u003e\u003ch2 id=\"what-is-a-champions-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-a-champions-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is a champions program?\u003c/h2\u003e\u003cp\u003eCommunity champions are individuals who take on more responsibility for the success, sustainability, and/or running of a community (\u003ca href=\"https://doi.org/10.5281/zenodo.5275270\"\u003eread more in CCSCE’s guidebook\u003c/a\u003e). Champions programs formalize these roles, and may offer champions incentives, opportunities to connect and access to training and other support. They also offer community managers a means of maintaining, growing, or evolving a community by partnering with champions to further the community’s mission.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/06/15/ropensci-champions-impact-en/function-champions.png\"\t\t\talt=\"Table presenting the roles of community champions with a definition and an example. The maintain role. The champions support the day-to-day running of the community. For example, they welcome new members or are part of the code of conduct committee. The Grow role. Champions support the growth of the community and extend the community impact on its results. For example, recommending new members and sharing resources outside the community. Evolve role: champions contribute to steering the direction of the community. Example, serve on a steering committee, task force or participate in focus groups\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eImage taken from Center for Scientific Collaboration and Community Engagement. (2021) The CSCCE Community Participation Model - Exploring the Champion mode. Woodley and Pratt doi 10.5281/zenodo.5275270\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eChampions programs have a variety of names in STEM, including fellowships and ambassador programs. You can find out more about champions programs, including a collection of tip sheets for those interested in creating a program for their own community, \u003ca href=\"https://www.cscce.org/resources/community-champions-programs/\"\u003eon the CSCCE website\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"what-is-impact-and-how-can-you-measure-it\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-impact-and-how-can-you-measure-it\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is “impact,” and how can you measure it?\u003c/h2\u003e\u003cp\u003eCommunity managers running champions programs are invested in their success for a variety of reasons. But deciding how to evaluate a program, and define the data that will support that evaluation, isn’t particularly straightforward.\u003c/p\u003e\u003cp\u003eDuring the session, participants considered a range of nuances around evaluation, starting with understanding the meaning of “impact.” Champions programs ideally impact both the champions themselves and the community writ large. Asking participants to complete surveys or exit interviews is a great way to collect initial feedback on the former, but measuring longer-term community impacts is less straightforward.\u003c/p\u003e\u003cp\u003eA complicating factor for many community managers is assigning “value” to different types of activities, which is especially complicated when measuring outcomes that rely on “invisible labor.” For example, in open-source communities, impact is often measured by tracking code contributions, but the work that champions may do to organize a monthly community call or translate documentation is neither so obvious nor so quantifiable.\u003c/p\u003e\u003cp\u003eSome champions programs include a training and mentoring aspect, which adds roles such as mentors and instructors in addition to champions. Measuring the impact of the program on these individuals is useful, too.\u003c/p\u003e\u003ch2 id=\"combining-qualitative-and-quantitative-metrics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#combining-qualitative-and-quantitative-metrics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCombining qualitative and quantitative metrics\u003c/h2\u003e\u003cp\u003eSome solutions to these challenges included defining clear goals for the program and then designing evaluation tools to match; benchmarking champions’ expectations at the beginning of the program during an initial intake meeting; and using regular check-in meetings to ask about how the program is going as a way to learn more about less visible work. By combining “annecdata” with quantitative metrics (e.g., number of commits, attendance at training sessions, participation in a community forum, etc.), community managers can gain a more complete picture of the overall success of their program.\u003c/p\u003e\u003cp\u003eAs you design your survey, only include questions that matter to your evaluation, and clearly communicate to your champions and other participants what you’ll be doing with any data you collect. It is also  important to think through the metrics you’re collecting so that you aren’t always valuing the same type of contribution. Program participants can help identify and collect non-traditional contributions, especially in open software projects. And champions programs can be very good places to start valuing these contributions by using and displaying the metrics associated with them.\u003c/p\u003e\u003ch2 id=\"resources\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#resources\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eResources\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003erOpenSci Champions Program: \u003ca href=\"https://ropensci.org/champions/\"\u003ehttps://ropensci.org/champions/\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eMozilla Open Leaders: \u003ca href=\"https://foundation.mozilla.org/en/initiatives/mozilla-open-leaders/fork-open-leaders/\"\u003ehttps://foundation.mozilla.org/en/initiatives/mozilla-open-leaders/fork-open-leaders/\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eCSCCE resources on community champions programs: \u003ca href=\"https://www.cscce.org/resources/community-champions-programs/\"\u003ehttps://www.cscce.org/resources/community-champions-programs/\u003c/a\u003e including a series of 9 tipsheets and a guidebook describing the role of community champions.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eChannel in the CZI Slack: #opensci-measuring-impact\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.google.com/document/d/1QgPTUhxnrvxw-Fi1i-pdYfJHBXyP3_LxL00YyEcnZ64/edit?usp=sharing\"\u003eSimple and Editable Logic Model Development Template\u003c/a\u003e (Google Doc, CC BY licensed)\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e","url":"https://ropensci.org/blog/2023/06/15/ropensci-champions-impact-en/","date_published":"2023-06-15T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/s8c0q-jwv28","title":"rOpenSci's Communication Channels for Safe and Friendly Exchange","language":"en","authors":[{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community"],"content_html":"\u003cp\u003eAs \u003ca href=\"/blog/2022/11/16/mastodon-en\"\u003ewe anticipated in November 2022\u003c/a\u003e the changes implemented by Twitter have generated a less safe and friendly space for our community.  That is why from \u003cem\u003eJune 2023\u003c/em\u003e, we will stop interacting on this platform. We will maintain the account in hopes that we can return when Twitter is once again a safe and supportive space, but in the meanwhile will focus our communication efforts elsewhere.\u003c/p\u003e\u003cp\u003eWe understand that until now Twitter has been one of the reference platforms for the R community, data, research and open science community but we have to be responsible andcoherent with the spaces we choose for exchange and interaction and \u003ca href=\"/code-of-conduct/\"\u003eour values as a community\u003c/a\u003e and \u003ca href=\"/about/\"\u003eorganization\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eHowever, there are many other online spaces which can be used by our community and we have been working to develop our presence on platforms which allow us to promote a \u003cem\u003ewelcoming and diverse community\u003c/em\u003e.\u003c/p\u003e\u003cp\u003eHere we outline the different communication channels of rOpenSci. Remember that you can always visit the \u003ca href=\"https://contributing.ropensci.org/resources.html#channels\"\u003eContributing Guide\u003c/a\u003e for a more in depth exploration of how you can be involved in the rOpenSci community and what that can do for you!\u003c/p\u003e\u003cp\u003eAs always, in all of our spaces and communication channels, we are committed to ensuring safe, accessible, open, diverse and friendly spaces. See our \u003ca href=\"/code-of-conduct/\"\u003ecode of conduct\u003c/a\u003e for more details.\u003c/p\u003e\u003ch2 id=\"mastodon\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mastodon\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMastodon\u003c/h2\u003e\u003cp\u003e\u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eWe joined Mastodon in November\u003c/a\u003e along with a large number of friend communities and members of our community.After exploring different instances, we selected one that is aligned with our mission and that allows us to communicate in several languages. We also \u003ca href=\"/blog/2023/05/17/scheduling-mastodon/\"\u003edeveloped tools to share our content\u003c/a\u003e there.\u003c/p\u003e\u003ch2 id=\"newsletter-and-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#newsletter-and-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNewsletter and Blog\u003c/h2\u003e\u003cp\u003e\u003ca href=\"/news/\"\u003eOur monthly newsletter\u003c/a\u003e is a permanent update on the most important news and project developments. You can subscribe via email or read it on the blog.On our blog you will also find articles, technical notes, interviews and updates.You can read it on the web, receive a digest via the newsletter, or subscribe to our \u003ca href=\"/rbloggers/index.xml\"\u003eRSS feed\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"discussion-forum\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#discussion-forum\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDiscussion forum\u003c/h2\u003e\u003cp\u003eExchanges are always enriching for our work and it is in these spaces where new challenges and ideas arise. Join us in the \u003ca href=\"https://discuss.ropensci.org/\"\u003ediscussion forum\u003c/a\u003e, and learn more about \u003ca href=\"/blog/2022/01/11/ropensci-forum/\"\u003ehow you can interact in this space\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"events\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#events\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEvents\u003c/h2\u003e\u003cp\u003e\u003ca href=\"/commcalls/\"\u003eCommunity calls\u003c/a\u003e, our \u003ca href=\"/events/\"\u003ecoworking sessions\u003c/a\u003e and our \u003ca href=\"/talks/\"\u003eparticipation in events and conferences\u003c/a\u003e are other spaces where you can interact with other community members and the rOpenSci team.\u003cbr\u003eCheck our calendar (or read the newsletter) to find out when and where they are happening.\u003c/p\u003e\u003ch2 id=\"see-you-around\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#see-you-around\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSee you around!\u003c/h2\u003e\u003cp\u003eSo while things change, we hope you are able to continue to join us in new and fun online spaces, and that we can continue to support each other along our journeys to open and reproducible science!\u003c/p\u003e\u003cp\u003eIf you have any questions, comments or suggestions you can write us at \u003ca href=\"mailto:info@ropensci.org\"\u003einfo@ropensci.org\u003c/a\u003e. Also, we\u0026rsquo;d love to hear of other channels you think we should explore.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/06/14/ropensci-communication-channels-en/","date_published":"2023-06-14T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/6q4xv-pm770","title":"rOpenSci Champions Program Teams: Meet Cheryl Isabella Lim and Mauro Lepore","language":"en","authors":[{"name":"Cheryl Isabella Lim","url":"https://ropensci.org/author/cheryl-isabella-lim/","avatar":"https://github.com/cherylisabella.png","_role":["author"]},{"name":"Mauro Lepore","url":"https://orcid.org/0000-0002-1986-7988","avatar":"https://ropensci.org/img/team/mauro-lepore.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["community","champions program"],"content_html":"\u003cp\u003e\u003cem\u003eWe designed the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e with a mentorship aspect. Mentoring plays a significant role in the growth and development of both mentors and mentees alike. In our program, each Champion has a mentor who accompanies them during their training and development of their project.\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cem\u003eIn this series of blog posts, we introduce you to the ten teams of this first cohort and what they will be working on in the program.\u003c/em\u003e\u003c/p\u003e\u003cp\u003eMeet \u003cstrong\u003eCheryl Isabella Lim\u003c/strong\u003e from Singapore and \u003cstrong\u003eMauro Lepore\u003c/strong\u003e from Argentina!\u003c/p\u003e\u003ch2 id=\"cheryl-isabella-lim---champion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#cheryl-isabella-lim---champion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCheryl Isabella Lim - Champion\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/cheryl-isabella-lim-mentee.jpg\"\t\t\talt=\"Profile photo of Cheryl Isabella Lim\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eCheryl Isabella Lim\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eHi! I\u0026rsquo;m Cheryl Isabella, an R enthusiast from Singapore.\u003c/p\u003e\u003cp\u003eAs the first female Asian POC to be inducted into this program, I\u0026rsquo;ll be trained as a Software Reviewer for rOpenSci\u0026rsquo;s peer review process. This means combining elements from academic peer review and production code review to apply GitHub features to packages from a range of broadly-defined categories.\u003c/p\u003e\u003cp\u003eThrough my role as an rOpenSci Champion, I expect to gain transferable skills and advocate for greater visibility of previously marginalised communities in STEM.\u003c/p\u003e\u003cp\u003eHopefully, this inaugural programme will be followed by collaborations and meaningful conversations between all individuals beyond their conventional camps.\u003c/p\u003e\u003c/br\u003e\u003ch2 id=\"mauro-lepore---mentor\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mauro-lepore---mentor\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMauro Lepore - Mentor\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/mauro-lepore-mentor.jpg\"\t\t\talt=\"Profile photo of Mauro Lepore\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eMauro Lepore\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI’m Mauro Lepore. I grew up in Argentina, studied biology at the University of Buenos Aires, then did a PhD in coral reefs ecology at the University of Queensland, Australia.\u003c/p\u003e\u003cp\u003eI’m now a research software developer at \u003ca href=\"https://theiafinance.org/\"\u003eTheia Finance Labs\u003c/a\u003e, and an editor for rOpenSci. I’m excited to join the rOpenSci Champions Program as a mentor.\u003c/p\u003e\u003cp\u003eThis program should help more people experience the great support that our community provides.\u003c/p\u003e\u003cp\u003e\u003cem\u003eWe are grateful that Cheryl and Mauro are part of our program. We look forward to seeing the results of their work together.\u003c/em\u003e\u003c/p\u003e","url":"https://ropensci.org/blog/2023/06/12/ropensci-champions-program-teams-meet-cheryl-isabella-lim-and-mauro-lepore/","date_published":"2023-06-12T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/s8m95-ap410","title":"Meeting the Stars of the R-Universe: PEcAn, an Open Source Project to Take Care of the Planet","language":"en","authors":[{"name":"Alejandra Bellini","url":"https://ropensci.org/author/alejandra-bellini/","avatar":"https://ropensci.org/img/community/ale-bellini.jpeg","_role":["author"]},{"name":"Chris Black","url":"https://ropensci.org/author/chris-black/","avatar":"https://github.com/infotroph.png","_role":["interviewee"]},{"name":"David LeBauer","url":"https://ropensci.org/author/david-lebauer/","avatar":"https://github.com/dlebauer.png","_role":["interviewee"]},{"name":"Eric Scott","url":"https://orcid.org/0000-0002-7430-7879","avatar":"https://github.com/Aariq.png","_role":["interviewee"]},{"name":"Lucio Casalla","url":"https://ropensci.org/author/lucio-casalla/","avatar":"https://ropensci.org/img/community/lucio-casalla.JPG","_role":["author"]},{"name":"Michael Dietze","url":"https://ropensci.org/author/michael-dietze/","avatar":"https://github.com/mdietze.png","_role":["interviewee"]},{"name":"Rob Kooper","url":"https://ropensci.org/author/rob-kooper/","avatar":"https://github.com/robkooper.png","_role":["interviewee"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","r-universe","interviews","r-universe-stars"],"content_html":"\u003cp\u003eA new post of our interview series \u003ca href=\"/tags/r-universe-stars/\"\u003e“Meeting the stars of the R-universe”\u003c/a\u003e. We aim to introduce the teams and people behind the development of software and packages many of us use and which are available through the R-Universe. We want to highlight and explore different teams and projects around the world, the work they do, their processes and users. Our third stop is the \u003cstrong\u003eUnited States\u003c/strong\u003e to talk with members of the PEcAn project. Be sure to watch the video at the end with excerpts from the interview.\u003c/p\u003e\u003ch4 id=\"climate-change-and-research-in-this-area-have-diverse-and-complex-data-that-demand-increasingly-complex-analysis-models-the-pecan-project-works-to-develop-this-ability\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#climate-change-and-research-in-this-area-have-diverse-and-complex-data-that-demand-increasingly-complex-analysis-models-the-pecan-project-works-to-develop-this-ability\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eClimate change and research in this area have diverse and complex data that demand increasingly complex analysis models. The PEcAn project works to develop this ability.\u003c/h4\u003e\u003cp\u003eIn this next interview, we will go into the science of climate change, and explore where data analysis and ecosystem modeling tools are developed. That is the main objective of the \u003ca href=\"https://pecanproject.github.io/\"\u003ePEcAn project\u003c/a\u003e, where they collaboratively seek new ways to collect and synthesize data and develop accessible tools to perform these tasks in a reproducible way.\u003c/p\u003e\u003cp\u003eOur discussion was attended by Rob Kooper, Chris Black, Eric Scott, Michael C. Dietze, and David LeBauer. All members of the PEcAn project with the same goal: to find more and better ways to integrate the enormous amount of existing data on climate change.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/06/06/r-universe-stars-4-en/team.jpg\"\t\t\talt=\"Profile photos of David LeBauer, Michael C. Dietze, Rob Kooper, Eric Scott, and Chris Black\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eDavid LeBauer, Michael C. Dietze, Rob Kooper, Eric Scott, and Chris Black\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eAccording to Michael C. Dietze\u0026rsquo;s own account, the project \u003cem\u003e\u0026ldquo;is like a kind of computerized data modeling system. It\u0026rsquo;s a set of tools that facilitate the combination of process and data models, with a special focus on ecological models.\u0026rdquo;\u003c/em\u003e\u003c/p\u003e\u003cp\u003eIn the project description, the concept of community quickly comes up. They have a large network of people distributed geographically and strategically, allowing them to reach more students involved in different parts of the process and in different projects. Thus, they can share work with many people simultaneously, have a significant number of collaborators and disseminate knowledge beyond academic boundaries because, as Rob explains, those students will continue their developments in other places where they are likely to bring their tools and data packages. In these connections and collaborative work lies much of the strength of the PEcAn Project.\u003c/p\u003e\u003cp\u003eAn example of this practice is the project they are developing with Brooklyn National Laboratory, where they are working on NASA carbon monitoring that uses a data simulation system. In this case, there are both PhD students and Post Doctoral Researchers working on the project.\u003c/p\u003e\u003ch2 id=\"a-tree-that-keeps-growing\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-tree-that-keeps-growing\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA tree that keeps growing\u003c/h2\u003e\u003cp\u003eIn this work structure, one of the main objectives is to become a kind of \u0026ldquo;Hacker\u0026rdquo; that solves problems in a more general sense that can then be applied in other contexts and in other areas. According to Rob, knowledge can be sustained and grow thanks to the research developed across multiple institutions including University of Illinois, Boston University, University of Arizona, University of Wisconsin and Brookhaven National Laboratory.\u003c/p\u003e\u003cp\u003eWorking with Google Summer of Code, which has helped with developing and promoting an ecosystem of modeling tools, Chris explains that part of the success is that it is not just one university doing research but a large team of people all over the world working together. Although it takes longer, the result is used by a much wider community.\u003c/p\u003e\u003ch2 id=\"doing-more-in-less-time-with-standards\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#doing-more-in-less-time-with-standards\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDoing more in less time with standards\u003c/h2\u003e\u003cp\u003eDuring the talk, the team shared the work \u003ca href=\"https://onlinelibrary.wiley.com/doi/pdfdirect/10.1111/gcb.15409\"\u003e\u0026ldquo;Beyond ecosystem modeling: A roadmap to communitycyberinfrastructure for ecological data-model integration\u0026rdquo;\u003c/a\u003e as an example, where they explain with a diagram how the PEcAn project makes the life of researchers who have to do multi-model analysis \u0026ldquo;352\u0026rdquo; times easier.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/06/06/r-universe-stars-4-en/diagram.png\"\t\t\talt=\"A flow diagram showing the standards approach for reducing redundant work when adopting common formats. There are “ n” data types that must be linked to “m” simulation models and “k” post-simulation analyses. In the top panel, the conventional approach where modeling teams work independently requires implementing n × m different input and m × k different output conversions. As data, models, and analyses are added, and effort scales quadratically. On the other hand, the bottom panel shows that by working as a community, and adopting common formats and shared analytical tools, the number of converters necessary to link models, data, and analyses reduces to an m \u0026#43; n and m \u0026#43; k problem, and scales linearly. \"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eConventional and Standards approach to modeling. PEcAn project is an example of the standards approach for modeling.\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eBy using standards and having packages that can solve the reading, embedding and writing of all the data involved in the process, researchers don\u0026rsquo;t need to know how many different formats work, or communicate with many different research teams, in order to do this kind of work.\u003c/p\u003e\u003cp\u003eThis allows an individual researcher to run a whole ensemble models. \u0026ldquo;Just a couple of years ago analyzing multi-models was not something that was accessible to individual researchers\u0026rdquo; Michael explains.\u003c/p\u003e\u003ch2 id=\"the-r-universe-experience\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-r-universe-experience\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe R-Universe experience\u003c/h2\u003e\u003cp\u003ePEcAn packages are organized into different groups, such as basic packages, useful tools, and modules that include packages for data management and also packages to do statistical analysis on the inputs and outputs of the models.\u003c/p\u003e\u003cp\u003eOne of the most important points of \u003ca href=\"https://pecanproject.r-universe.dev/builds\"\u003ehaving all the packages in an orderly manner in the R-Universe\u003c/a\u003e is to simplify the work of researchers. Having easy and organized access to these models saves years of work and resources.\u003c/p\u003e\u003cp\u003eIn addition, with so many people working on the packages, errors are more likely to discovered. Although the team knows that the PEcAn project code is not bug-free, they have a better chance of finding and fixing bugs by having more eyes looking at the same thing.\u003c/p\u003e\u003cp\u003eIn the following video, the team shares how they organize the packages in the R-Universe and the strengths of using this tool:\u003c/p\u003e\t\t\t\u003cdiv\t\t\t\t\tstyle=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\t\t\t\t\u003ciframe\t\t\t\t\tsrc=\"https://player.vimeo.com/video/829850626?dnt=0\"\t\t\t\t\t\tstyle=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;\" allow=\"fullscreen\" title=\"Meeting R-Universe Stars - PEcAn project\"\u003e\t\t\t\t\u003c/iframe\u003e\t\t\t\u003c/div\u003e","url":"https://ropensci.org/blog/2023/06/06/r-universe-stars-4-en/","date_published":"2023-06-06T00:00:00+00:00","date_modified":"2025-09-16T09:31:26+02:00"},{"id":"https://doi.org/10.59350/k7p56-j8497","title":"Troubleshooting Pandoc Problems as an R User","language":"en","authors":[{"name":"Christophe Dervieux","url":"https://orcid.org/0000-0003-4474-2498","avatar":"https://github.com/cderv.png","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]}],"tags":["pandoc","rmarkdown","publication","quarto","markdown","tech notes"],"content_html":"\u003cp\u003eThe Pandoc CLI by \u003ca href=\"https://johnmacfarlane.net/\"\u003eJohn MacFarlane\u003c/a\u003e is a really useful tool: for instance, rOpenSci community manager Yanina Bellini Saibene recently asked Maëlle whether she could convert a Google Document into a Quarto book.Maëlle solved the request with a combination of Pandoc (conversion from docx to HTML then to Markdown through \u003ca href=\"https://cderv.github.io/pandoc/reference/pandoc_convert.html\"\u003e\u003ccode\u003epandoc::pandoc_convert()\u003c/code\u003e\u003c/a\u003e) and XPath.You can find the resulting experimental package \u003ca href=\"https://github.com/ropenscilabs/quartificate\"\u003equartificate\u003c/a\u003e on GitHub.Pandoc is not only anecdotally useful: it\u0026rsquo;s part of the \u003ca href=\"https://rmarkdown.rstudio.com/\"\u003eR Markdown\u003c/a\u003e machinery, and powers \u003ca href=\"https://quarto.org/\"\u003eQuarto\u003c/a\u003e.So, whether you\u0026rsquo;re juggling documents in various formats or simply trying to publish your reproducible analysis, you might have been using Pandoc (even if you didn\u0026rsquo;t know!), or maybe you \u003cem\u003eshould\u003c/em\u003e be using Pandoc.\u003c/p\u003e\u003cp\u003eSometimes, all goes well, sometimes, you think of Pandoc because it seems to be the source of an error.In such cases, Maëlle, who\u0026rsquo;s witnessed Christophe\u0026rsquo;s detective work\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e in several GitHub issues, tends to wonder \u0026ldquo;What would Christophe do?\u0026rdquo;.The answer is probably \u0026ldquo;read the docs and investigate\u0026rdquo;.In this post, we gather resources and tips to help you troubleshoot Pandoc as an R user.\u003c/p\u003e\u003ch2 id=\"pandoc-101\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pandoc-101\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePandoc 101\u003c/h2\u003e\u003cp\u003eSay we have a Markdown file and want to convert it to HTML.We can do it from R calling the \u003ca href=\"https://cderv.github.io/pandoc/reference/pandoc_convert.html\"\u003e\u003ccode\u003epandoc::pandoc_convert()\u003c/code\u003e\u003c/a\u003e\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e function that handily wraps Pandoc.If you are rather a terminal first user, the \u003ca href=\"https://pandoc.org/MANUAL.html\"\u003e\u003ccode\u003epandoc\u003c/code\u003e CLI tool\u003c/a\u003e is your friend.In the rest of this post, we will use the pandoc R package for examples.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create an example temporary markdown file\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emd_lines\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s\"\u003e\u0026#34;# Important announcement\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s\"\u003e\u0026#34;[Pandoc](https://pandoc.org/) is **great**!\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emd_file\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ewithr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003elocal_tempfile\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebrio\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ewrite_lines\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emd_lines\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emd_file\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Convert to temporary html file!\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ehtml_file\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ewithr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003elocal_tempfile\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epandoc\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epandoc_convert\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003efile\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emd_file\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003efrom\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;markdown\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eoutput\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ehtml_file\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## /tmp/RtmpyUQMTR/filec626e1f35cf\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Read what we\u0026#39;ve got!\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebrio\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eread_lines\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ehtml_file\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## [1] \u0026#34;\u0026lt;h1 id=\\\u0026#34;important-announcement\\\u0026#34;\u0026gt;Important announcement\u0026lt;/h1\u0026gt;\u0026#34;## [2] \u0026#34;\u0026lt;p\u0026gt;\u0026lt;a href=\\\u0026#34;https://pandoc.org/\\\u0026#34;\u0026gt;Pandoc\u0026lt;/a\u0026gt; is\u0026#34;             ## [3] \u0026#34;\u0026lt;strong\u0026gt;great\u0026lt;/strong\u0026gt;!\u0026lt;/p\u0026gt;\u0026#34;\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThat magic of \u003cstrong\u003egoing from one Markup language to another\u003c/strong\u003e is Pandoc\u0026rsquo;s job.Pandoc supports many input and output formats, with tweaks available for various elements.\u003c/p\u003e\u003cp\u003eFor instance, we could change the call slightly to not get an identifier for the h1 heading in the HTML (that is to say, remove the \u003ccode\u003eid\u003c/code\u003e part of the \u003ccode\u003e\u0026lt;h1\u0026gt;\u003c/code\u003e tag).\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epandoc\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epandoc_convert\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003efile\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emd_file\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003efrom\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;markdown-auto_identifiers\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;html\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eoutput\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ehtml_file\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## /tmp/RtmpyUQMTR/filec626e1f35cf\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ebrio\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eread_lines\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ehtml_file\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## [1] \u0026#34;\u0026lt;h1\u0026gt;Important announcement\u0026lt;/h1\u0026gt;\u0026#34;                 ## [2] \u0026#34;\u0026lt;p\u0026gt;\u0026lt;a href=\\\u0026#34;https://pandoc.org/\\\u0026#34;\u0026gt;Pandoc\u0026lt;/a\u0026gt; is\u0026#34;## [3] \u0026#34;\u0026lt;strong\u0026gt;great\u0026lt;/strong\u0026gt;!\u0026lt;/p\u0026gt;\u0026#34;\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis is just a glimpse of what Pandoc can do.\u003c/p\u003e\u003ch2 id=\"when-is-pandoc-the-problem-or-solution\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#when-is-pandoc-the-problem-or-solution\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhen is Pandoc the problem (or solution)?\u003c/h2\u003e\u003cp\u003eIf you\u0026rsquo;re calling Pandoc yourself, directly or via Christophe\u0026rsquo;s \u003ca href=\"https://cderv.github.io/pandoc/\"\u003epandoc package\u003c/a\u003e, you will obviously know when Pandoc is at play.\u003c/p\u003e\u003cp\u003eIn other cases, Pandoc might be buried under layers of other software.For instance with R Markdown, rmarkdown package will first call knitr before calling Pandoc.Same with Quarto that will call knitr or jupyter before calling Pandoc.\u003c/p\u003e\u003cp\u003eHere are some elements to help you pinpoint whether Pandoc is the thing tripping you up:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eBasically, if you\u0026rsquo;re getting an error with your R code, Pandoc is not at fault.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eYou might actually see a Pandoc error in the output, which usually mean something is wrong during the Pandoc conversion step.Debugging using the input file passed to Pandoc will be the easiest.If the tool you use is creating this input for you (like R Markdown or Quarto), add the configuration to keep the Markdown input. See next subsection for more details!\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eIf you\u0026rsquo;re having a case of \u0026ldquo;but it worked yesterday!\u0026rdquo;, for instance \u0026ldquo;I did not change anything on R side but this does not work anymore: maybe the Pandoc version changed? Switching the Pandoc version, perhaps using \u003ca href=\"https://cderv.github.io/pandoc/reference/index.html#handle-pandoc-version\"\u003ethe pandoc package\u0026rsquo;s functionality for handling the Pandoc version\u003c/a\u003e, can show a problem with a new Pandoc version, however this is rare.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIn all cases, Pandoc might also be your problem if you\u0026rsquo;re pushing the limits of what you can achieve with another tool using Pandoc.For instance, if you want some particular conversion, like having emojis à la \u003ccode\u003e:​grin:\u003c/code\u003e rendered to actual emojis in your Quarto reveal.js slides, you might need to tweak something related to Pandoc.\u003c/p\u003e\u003ch3 id=\"how-to-access-pandocs-input\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-access-pandocs-input\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to access Pandoc\u0026rsquo;s input\u003c/h3\u003e\u003cp\u003eEven though Pandoc is a generic converter that can handle several formats as inputs and outputs, in the R Markdown and Quarto ecosystem, the input format will be always be Markdown through a \u003ccode\u003e.md\u003c/code\u003e file.\u003c/p\u003e\u003cp\u003eWhen using a \u003ccode\u003e.Rmd\u003c/code\u003e or a \u003ccode\u003e.qmd\u003c/code\u003e, the document will be converted to a \u003ccode\u003e.md\u003c/code\u003e version by knitr with all code and results sewed together.This is the input that Pandoc will used to convert to the desired output.The R Markdown cookbook by Yihui Xie, Christophe Dervieux and Emily Riederer features a \u003ca href=\"https://bookdown.org/yihui/rmarkdown-cookbook/rmarkdown-process.html\"\u003ehandy diagram\u003c/a\u003e to understand this relation.\u003c/p\u003e\u003cp\u003eUsually tools like these will have some configuration so that you can keep the intermediates for debugging more easily: \u003ccode\u003ekeep_md\u003c/code\u003e or \u003ccode\u003ekeep-md\u003c/code\u003e respectively for R Markdown and Quarto formats.\u003c/p\u003e\u003cp\u003eExploring this intermediate file input for Pandoc can help understand what will be seen by Pandoc and can help you debug, or at least build a better reproducible example of your problem.\u003c/p\u003e\u003ch2 id=\"speaking-pandoc-linguo\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#speaking-pandoc-linguo\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSpeaking Pandoc linguo\u003c/h2\u003e\u003cp\u003eNow that you understand the relationship between R and Pandoc, the next step is to understand how Pandoc works.Did you think we wouldn\u0026rsquo;t get this far?Unfortunately, it is when we start troubleshooting a tool that all the \u003cem\u003emagic\u003c/em\u003e is unveiled 😉.\u003c/p\u003e\u003cp\u003eFirst of all, how do you find Pandoc docs?You can type \u003ca href=\"https://cderv.github.io/pandoc/reference/pandoc_browse_manual.html\"\u003e\u003ccode\u003epandoc::pandoc_browse_manual()\u003c/code\u003e\u003c/a\u003e.Or you can bookmark the \u003ca href=\"https://pandoc.org/MANUAL.html\"\u003ePandoc manual URL\u003c/a\u003e.It\u0026rsquo;s actually all-caps MANUAL which underlines the importance of reading it: if you skim through it at least once, you will have a better idea of what\u0026rsquo;s there\u0026hellip; and of how things are referenced in the Pandoc world, so you can ask better questions to your search engine or collaborators!You can even be \u003ca href=\"https://yihui.org/en/2017/11/thanks-tj-mahr/\"\u003erewarded for having read the Pandoc MANUAL\u003c/a\u003e !\u003c/p\u003e\u003cp\u003eNow, how else does one learn how to \u0026ldquo;speak Pandoc\u0026rdquo;?\u003c/p\u003e\u003cp\u003eYou can use a search engine to refine your keywords: you might find threads with questions by people using the same rough vocabulary as yours, with more refined answers.For instance, Maëlle was recently looking for an option that she knew existed, to transform things that look like URLs in Markdown, say \u003ccode\u003ehttps://ropensci.org\u003c/code\u003e, into links in HTML, say \u003ccode\u003e\u0026lt;a href=\u0026quot;https://ropensci.org\u0026quot;\u0026gt;https://ropensci.org\u0026lt;/a\u0026gt;\u003c/code\u003e.She first looked for \u0026ldquo;raw/naked links\u0026rdquo;, before (re)discovering they\u0026rsquo;re called bare URIs, with the extension called \u003ccode\u003eautolink_bare_uris\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eSpeaking of extensions!What is the basic vocabulary one needs to troubleshoot a Pandoc issue?It comes with time but a good starting list would be\u0026hellip;\u003c/p\u003e\u003ch3 id=\"formats\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#formats\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFormats\u003c/h3\u003e\u003cp\u003eThe format (doh) Pandoc converts from and to.There\u0026rsquo;s an impressive list on the \u003ca href=\"https://pandoc.org/\"\u003ePandoc homepage\u003c/a\u003e.docx, gfm (GitHub flavored Markdown), HTML, RTF\u0026hellip;\u003c/p\u003e\u003cp\u003eIn Quarto and R Markdown you are by default expected to be writing in \u0026ldquo;Pandoc\u0026rsquo;s Markdown\u0026rdquo; which is a special flavor of Markdown.\u003c/p\u003e\u003ch3 id=\"extension\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#extension\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExtension\u003c/h3\u003e\u003cp\u003e\u003ca href=\"https://pandoc.org/MANUAL.html#extensions\"\u003eExtensions\u003c/a\u003e modify the behavior of Pandoc readers and writers.Extensions are extensions (or contractions, since they can be turned off) of \u003cem\u003eformats\u003c/em\u003e, not of \u003cem\u003ePandoc\u003c/em\u003e.For instance, the \u003ca href=\"https://pandoc.org/MANUAL.html#extension-smart\"\u003e\u0026ldquo;smart\u0026rdquo;\u003c/a\u003e extension will interpret some typography elements, like two dashes as en-dash\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e, and is enabled by default for Markdown.So if you want to convert from Markdown to HTML without transforming the two dashes, you\u0026rsquo;d use \u003ccode\u003emarkdown-smart\u003c/code\u003e as input format.That means \u003ccode\u003emarkdown\u003c/code\u003e \u003cem\u003eminus\u003c/em\u003e the \u003ccode\u003esmart\u003c/code\u003e extension.Not all extensions work for a format, so make sure you read the docs (😉). You can use \u003ca href=\"https://cderv.github.io/pandoc/reference/pandoc_list_extensions.html\"\u003e\u003ccode\u003epandoc::pandoc_list_extensions()\u003c/code\u003e\u003c/a\u003e to list extensions available for a format.A format Maëlle often uses when producing slides with Quarto is\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eformat\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003erevealjs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003efrom\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emarkdown+emoji\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eto turn on the \u003cem\u003eindispensable\u003c/em\u003e emoji support.🎉\u003c/p\u003e\u003cp\u003eBelow is an example where we call Pandoc directly.Note that in this example, we use text strings directly, without writing anything to files, which can be handy at times!\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# em dash\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epandoc\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epandoc_convert\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etext\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;I like Pandoc -- when it works as I want it to!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003efrom\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;markdown\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;html\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## \u0026lt;p\u0026gt;I like Pandoc – when it works as I want it to!\u0026lt;/p\u0026gt;\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# no em dash\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epandoc\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epandoc_convert\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etext\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;I like Pandoc -- when it works as I want it to!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003efrom\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;markdown-smart\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;html\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## \u0026lt;p\u0026gt;I like Pandoc -- when it works as I want it to!\u0026lt;/p\u0026gt;\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eUsually, using R Markdown or Quarto, there is not need to modify extensions but they can be the source of the troubles or differences you see sometimes.\u003c/p\u003e\u003ch3 id=\"options\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#options\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOptions\u003c/h3\u003e\u003cp\u003eSee how we refrained from framing extensions as \u0026ldquo;options\u0026rdquo;, because \u003ca href=\"https://pandoc.org/MANUAL.html#options\"\u003eoptions\u003c/a\u003e are another thing!They\u0026rsquo;re sort of arguments to Pandoc calls.For instance \u003ccode\u003e--mathml\u003c/code\u003e is an option for rendering math to MathML.\u003c/p\u003e\u003cp\u003eSome options might be hidden by the tool you use to call Pandoc, or handily exposed as argument: for instance, the \u003ccode\u003eto\u003c/code\u003e argument of the \u003ca href=\"https://cderv.github.io/pandoc/reference/pandoc_convert.html\"\u003e\u003ccode\u003epandoc::pandoc_convert()\u003c/code\u003e\u003c/a\u003e function is actually a Pandoc option.\u003c/p\u003e\u003cp\u003eBelow, we use an option to shift heading levels by 1 which increases the heading level number thereby reducing the heading importance.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epandoc\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epandoc_convert\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etext\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;# Important announcement\\n\\nPandoc is cool!\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003efrom\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;markdown\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eto\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;HTML\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eargs\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;--shift-heading-level-by=1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## \u0026lt;h2 id=\u0026#34;important-announcement\u0026#34;\u0026gt;Important announcement\u0026lt;/h2\u0026gt;## \u0026lt;p\u0026gt;Pandoc is cool!\u0026lt;/p\u0026gt;\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSee how the \u0026ldquo;Important announcement\u0026rdquo; header becomes an h \u003cem\u003e2\u003c/em\u003e in the output.\u003c/p\u003e\u003cp\u003eThose options can be set with Pandoc using YAML format through a \u003ca href=\"https://pandoc.org/MANUAL.html#defaults-files\"\u003edefault file\u003c/a\u003e.This is another advanced technique which we won\u0026rsquo;t cover in any detail\u0026hellip; but now you know about default files\u003csup id=\"fnref:4\"\u003e\u003ca href=\"#fn:4\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e4\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003ch3 id=\"variables\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#variables\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eVariables\u003c/h3\u003e\u003cp\u003e\u003ca href=\"https://pandoc.org/MANUAL.html#variables\"\u003eVariables\u003c/a\u003e are the metadata you might be accustomed to passing to Pandoc via the YAML header (for R Markdown and Quarto).They will generally be used in templates to opt-in some specific content and behavior for the output format.\u003c/p\u003e\u003cp\u003eThey can also be passed via the command line, for instance rmarkdown\u0026rsquo;s output format function can create these as command line arguments with \u003ca href=\"https://pkgs.rstudio.com/rmarkdown/reference/pandoc_args.html\"\u003e\u003ccode\u003ermarkdown::pandoc_variable_arg()\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"templates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#templates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTemplates\u003c/h3\u003e\u003cp\u003eIf you ask Pandoc to create a reveal.js slidedeck, it will do so using its default \u003ca href=\"https://github.com/jgm/pandoc-templates/blob/master/default.revealjs\"\u003ereveal.js template\u003c/a\u003e.The template is filled with your Markup content but also with variables like author names.You can supply your own \u003ca href=\"https://pandoc.org/MANUAL.html#templates\"\u003ecustom templates\u003c/a\u003e by using the \u003ccode\u003e--template\u003c/code\u003e option.\u003ca href=\"https://cderv.github.io/pandoc/reference/pandoc_export_template.html\"\u003epandoc::pandoc_export_template()\u003c/a\u003e will create a file with the default template for a specific version of Pandoc which you can explore, or use as a starting point for creating your own.\u003c/p\u003e\u003ch3 id=\"raw-attributes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#raw-attributes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRaw attributes\u003c/h3\u003e\u003cp\u003eSay you have raw HTML in your Markdown document.You can protect it from Pandoc parsing by wrapping it in a \u003ca href=\"https://pandoc.org/MANUAL.html#generic-raw-attribute\"\u003e\u0026ldquo;raw attribute\u0026rdquo;\u003c/a\u003e.This is for instance used by \u003ca href=\"https://github.com/r-lib/hugodown/pull/53\"\u003ehugodown\u003c/a\u003e to protect Hugo shortcodes.\u003c/p\u003e\u003cp\u003eBe careful, this is part of the \u003ccode\u003eraw_attribute\u003c/code\u003e extension so might not be included by default and may not be supported by your chosen format.\u003c/p\u003e\u003ch3 id=\"how-to-use-these-things\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-use-these-things\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to use these things?\u003c/h3\u003e\u003cp\u003eWhat you need to solve a given Pandoc challenge might be a format or extension or option.It\u0026rsquo;s up to you to find the correct combination, but having some vague understanding of what these things are and how to use them, will help you.Another thing that will help you, is to know how to pass these things to Pandoc using the Pandoc interface of your choice:\u003c/p\u003e\u003cul\u003e\u003cli\u003eIf you\u0026rsquo;re calling Pandoc directly or with the pandoc package, it should be relatively straightforward (see the links and examples above).\u003c/li\u003e\u003cli\u003eIf you\u0026rsquo;re using R Markdown or Quarto you might need to search for, say \u003ca href=\"https://bookdown.org/yihui/rmarkdown/template-pandoc.html\"\u003e\u0026ldquo;R Markdown custom Pandoc templates\u0026rdquo;\u003c/a\u003e. Besides, there might be a more native R Markdown or Quarto way to reach your goal without messing with Pandoc. It is important to keep in mind that those tools leverage Pandoc extensively and aim to make it more user friendly: concepts are the same but they should be easier to use, if not quite as varied.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"how-to-experiment-with-pandoc\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-experiment-with-pandoc\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to experiment with Pandoc?\u003c/h2\u003e\u003cp\u003eOnce you know your issue is Pandoc, how do you create a reproducible example?Interestingly, although it\u0026rsquo;s great to create a Pandoc reprex, you \u003cstrong\u003ecannot\u003c/strong\u003e create it with reprex, because reprex uses R Markdown machinery.\u003c/p\u003e\u003cp\u003eIn this post we\u0026rsquo;ve shown a few examples, calling Pandoc directly on strings, or on \u003ca href=\"#pandoc-101\"\u003etemporary files created with withr\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eHere\u0026rsquo;s Christophe\u0026rsquo;s usual Rmd reprex provided as an RStudio \u003ca href=\"https://support.posit.co/hc/en-us/articles/204463668-Code-Snippets-in-the-RStudio-IDE\"\u003esnippet\u003c/a\u003e:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003edir.create\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etmp_dir\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003etempfile\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eowd\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esetwd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etmp_dir\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003exfun\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ewrite_utf8\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s\"\u003e\u0026#34;---\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s\"\u003e\u0026#34;title: test\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s\"\u003e\u0026#34;---\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s\"\u003e\u0026#34;# A header\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;test.Rmd\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ermarkdown\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003erender\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;test.Rmd\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;${2:html_document}\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003esetwd\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eowd\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eunlink\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etmp_dir\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erecursive\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eIn any case, as with any reprex you\u0026rsquo;ll want to make it minimal.\u003c/p\u003e\u003cp\u003eWhen troubleshooting pandoc behavior through other tools here is some useful tips:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eYou can test Pandoc in your browser on \u003ca href=\"https://pandoc.org/try/\"\u003epandoc.org/try\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eWith Quarto, you can access the bundled pandoc with \u003ccode\u003equarto pandoc\u003c/code\u003e command.It will be like calling \u003ccode\u003epandoc\u003c/code\u003e directly, but using the version bundled with the Quarto version you are using.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eWith R Markdown, \u003ca href=\"https://pkgs.rstudio.com/rmarkdown/reference/find_pandoc.html\"\u003e\u003ccode\u003ermarkdown::find_pandoc()\u003c/code\u003e\u003c/a\u003e will allow you to know where the Pandoc binary is located.You can run it in a terminal, or use the \u003ca href=\"https://pkgs.rstudio.com/rmarkdown/reference/index.html#pandoc\"\u003e\u003ccode\u003ermarkdown::pandoc_*\u003c/code\u003e family of functions\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eWithin R, the pandoc package can help you run a specific version, compare between versions and isolate your Pandoc work.Whichever tool you are using, once you know the version number, you can run Pandoc itself (from R with the pandoc package, from a terminal) by installing the correct version.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"keeping-up-with-pandoc-or-freezing-pandoc\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#keeping-up-with-pandoc-or-freezing-pandoc\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eKeeping up with Pandoc, or freezing Pandoc!\u003c/h2\u003e\u003cp\u003eKeeping up with Pandoc is really not mandatory and reading the changelog could be hard to follow without proper understanding of how Pandoc works.You \u003cem\u003ecould\u003c/em\u003e subscribe to \u003ca href=\"https://groups.google.com/g/pandoc-announce\"\u003ePandoc mailing list\u003c/a\u003e.But you might need to comb through the \u003ca href=\"https://pandoc.org/releases.html\"\u003echangelog\u003c/a\u003e when noticing something amiss.\u003c/p\u003e\u003cp\u003ePay attention to the Pandoc version that you\u0026rsquo;re using locally and on continuous integration, especially when something only works on your machine.\u003c/p\u003e\u003cp\u003eTo know what Pandoc version you\u0026rsquo;re running you can use\u0026hellip;\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://pkgs.rstudio.com/rmarkdown/reference/pandoc_available.html\"\u003e\u003ccode\u003ermarkdown::pandoc_version()\u003c/code\u003e\u003c/a\u003e which returns the version used by \u003cstrong\u003ermarkdown\u003c/strong\u003e;\u003c/li\u003e\u003cli\u003e\u003ccode\u003equarto pandoc --version\u003c/code\u003e (in a command line) which returns the version internal to Quarto;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://cderv.github.io/pandoc/reference/pandoc_version.html\"\u003e\u003ccode\u003epandoc::pandoc_version()\u003c/code\u003e\u003c/a\u003e which returns the version for the default pandoc (the active one, usually the most recent one among the pandoc versions \u003cstrong\u003einstalled with the R package\u003c/strong\u003e);\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://cderv.github.io/pandoc/reference/system_pandoc.html\"\u003e\u003ccode\u003epandoc::pandoc_system_version()\u003c/code\u003e\u003c/a\u003e which returns the version of \u003ccode\u003epandoc\u003c/code\u003e found in PATH;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://cderv.github.io/pandoc/reference/rstudio_pandoc.html\"\u003e\u003ccode\u003epandoc::pandoc_rstudio_version()\u003c/code\u003e\u003c/a\u003e which returns the version of the Pandoc built in the IDE (could be different version of \u003ca href=\"https://pkgs.rstudio.com/rmarkdown/reference/pandoc_available.html\"\u003e\u003ccode\u003ermarkdown::pandoc_version()\u003c/code\u003e\u003c/a\u003e which could be one from PATH or \u003ccode\u003eRSTUDIO_PANDOC\u003c/code\u003e environment variable).\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eSo yes, paying attention to the Pandoc version does require some  attention.\u003c/p\u003e\u003cp\u003eWith Quarto it is less of an issue than with R Markdown since Quarto will pin a Pandoc version.With R Markdown, the design is to work well with the latest Pandoc version while still working with older versions.This is important to understand as it could mean different systems may get different results even if they have the same rmarkdown version because Pandoc version is not the same.As often with R, \u003ca href=\"https://bookdown.org/yihui/rmarkdown-cookbook/install-pandoc.html\"\u003eupdate regularly\u003c/a\u003e unless you a specific reason not to.\u003c/p\u003e\u003cp\u003eSpecial advice if you build with Pandoc on CI: Pin a pandoc version for your production setup (GitHub Actions workflow for instance) so that it matches your local development environment.\u003csup id=\"fnref:5\"\u003e\u003ca href=\"#fn:5\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e5\u003c/a\u003e\u003c/sup\u003e\u003c/p\u003e\u003cp\u003eThe pandoc package also has very handly withr-like helpers to run code with a given Pandoc version: \u003ca href=\"https://cderv.github.io/pandoc/reference/with_pandoc_version.html\"\u003e\u003ccode\u003epandoc::local_pandoc_version()\u003c/code\u003e and \u003ccode\u003epandoc::with_pandoc_version()\u003c/code\u003e\u003c/a\u003e; as well as a \u003ccode\u003eversion\u003c/code\u003e argument in \u003ca href=\"https://cderv.github.io/pandoc/reference/pandoc_convert.html\"\u003e\u003ccode\u003epandoc::pandoc_convert()\u003c/code\u003e\u003c/a\u003e.This special feature aims at making testing and debugging between several Pandoc versions very easy!\u003c/p\u003e\u003ch2 id=\"beyond-the-official-docs-beyond-pandoc\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#beyond-the-official-docs-beyond-pandoc\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBeyond the official docs, beyond Pandoc\u003c/h2\u003e\u003cp\u003eIf reading the docs and experimenting doesn\u0026rsquo;t get you where you need to be, what to do?\u003c/p\u003e\u003cul\u003e\u003cli\u003eJohn MacFarlane\u0026rsquo;s answers in GitHub issues can be enlightening. See this \u003ca href=\"https://github.com/jgm/pandoc/issues/6259#issuecomment-841859989\"\u003eexample\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eYou could scour, or participate in, the \u003ca href=\"https://groups.google.com/g/pandoc-discuss\"\u003ePandoc discussion mailing list\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eIf your problem is related to Pandoc for R Markdown or Quarto specifically, head over to the \u003ca href=\"https://community.rstudio.com/\"\u003ePosit community forum\u003c/a\u003e or their respective Github repositories.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eOr what if Pandoc is not enough for your use case?\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://quarto.org/\"\u003eQuarto\u003c/a\u003e is in fact a very user friendly layer of Pandoc with a lot of additional features and new defaults to make Pandoc better for scientific publishing. So usually if Pandoc is not enough (or hard to use), go look at Quarto (which has projects, etc.). Using Quarto with straight Markdown files (.md) is a like using a cleverer Pandoc (no R, no computation, only text conversion).\u003c/li\u003e\u003cli\u003eYou could \u003cem\u003ebuild upon\u003c/em\u003e Pandoc. Christophe recommends learning about \u003ca href=\"https://pandoc.org/lua-filters.html\"\u003eLua filters\u003c/a\u003e. See also \u003ca href=\"https://quarto.org/docs/extensions/filters.html\"\u003eLua filters for Quarto\u003c/a\u003e; \u003ca href=\"https://bookdown.org/yihui/rmarkdown-cookbook/lua-filters.html\"\u003eLua filters for R Markdown\u003c/a\u003e. Maëlle hasn\u0026rsquo;t learnt about them yet, and tends to convert things into HTML then parse them with xml2\u003csup id=\"fnref:6\"\u003e\u003ca href=\"#fn:6\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e6\u003c/a\u003e\u003c/sup\u003e.\u003c/li\u003e\u003cli\u003eYou could open a Pandoc feature request.\u003c/li\u003e\u003cli\u003eYou could use something else than Pandoc, like the \u003ca href=\"https://docs.ropensci.org/commonmark/\"\u003ecommonmark R package by Jeroen Ooms\u003c/a\u003e or the \u003ca href=\"https://pkgs.rstudio.com/rmarkdown/articles/rmarkdown.html\"\u003emarkdown package by Yihui Xie\u003c/a\u003e or the \u003ca href=\"https://docs.ropensci.org/tinkr/\"\u003etinkr package by Zhian Kamvar\u003c/a\u003e that build upon it.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we shared some useful resources for troubleshooting your Pandoc problems.It\u0026rsquo;s crucial to remember that while this can seem like a lot, your Pandoc skills and vocabulary will improve with practice, such as \u003ca href=\"https://docs.ropensci.org/quartificate/\"\u003econverting Google docs\u003c/a\u003e for a colleague! \u0026#x1f609;\u003c/p\u003e\u003cp\u003eAs an R user, do not forget that Pandoc supports a lot of your publication tools; and that there\u0026rsquo;s a handy R package for interacting with Pandoc: pandoc 🎉.\u003c/p\u003e\u003cp\u003eIf you enjoy playing with files in various formats, you might also appreciate reading about \u003ca href=\"/blog/2018/04/25/rtika-introduction/\"\u003ertika\u003c/a\u003e by Sasha Goodman.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eIf you want to read examples of troubleshooting, see this \u003ca href=\"https://github.com/rstudio/rmarkdown/issues/2437\"\u003ermarkdown issue\u003c/a\u003e and the corresponding \u003ca href=\"https://github.com/jgm/pandoc/issues/8499\"\u003ePandoc issue\u003c/a\u003e; or this \u003ca href=\"https://github.com/jgm/pandoc/issues/7352\"\u003ePandoc issue\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eThe R package pandoc is quite a recent development \u003ca href=\"https://github.com/cderv/pandoc\"\u003ehttps://github.com/cderv/pandoc\u003c/a\u003e, and provides access to the Pandoc CLI from R.You can also use the more usual \u003ca href=\"https://pkgs.rstudio.com/rmarkdown/reference/pandoc_convert.html\"\u003e\u003ccode\u003ermarkdown::pandoc_convert()\u003c/code\u003e\u003c/a\u003e to access pandoc used with R Markdown.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eMaëlle thought these were called \u0026ldquo;long dashes\u0026rdquo;.Speaking Pandoc sometimes required having some typography vocabulary!\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:4\"\u003e\u003cp\u003eBy the way, this is what Quarto leverages internally so that YAML options from document can be passed to Pandoc.Useful to know if you\u0026rsquo;re debugging Pandoc within Quarto.\u0026#160;\u003ca href=\"#fnref:4\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:5\"\u003e\u003cp\u003eThat\u0026rsquo;s also a strategy one can use with Hugo when building a static website!Saving oneself many headaches.\u0026#160;\u003ca href=\"#fnref:5\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:6\"\u003e\u003cp\u003eAlthough this might might make workflows feel like \u003ca href=\"https://en.wikipedia.org/wiki/The_Incredible_Machine_(video_game)\"\u003eThe Incredible Machine\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:6\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2023/06/01/troubleshooting-pandoc-problems-as-an-r-user/","date_published":"2023-06-01T00:00:00+00:00","date_modified":"2025-09-18T09:42:10+02:00"},{"id":"https://doi.org/10.59350/bbsvn-cxv17","title":"Downloading snapshots and creating stable R packages repositories using r-universe","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","tech notes","snapshot","packages","dashboard"],"content_html":"\u003ch2 id=\"downloading-repository-snapshots\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#downloading-repository-snapshots\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDownloading repository snapshots\u003c/h2\u003e\u003cp\u003eThe new snapshot API lets you download a full copy of any CRAN-like repository on r-universe. You can use such a snapshot to mirror the entire CRAN-like repository on your own servers, or for example to build a stable, validated release of your package suite.\u003c/p\u003e\u003cp\u003eThe API endpoint is simply \u003ccode\u003e/api/snapshot\u003c/code\u003e and has several options to filter content. By default it returns a zip file with all the packages, binaries, and documentation in your repository. If this is more than you need, there are parameters to include e.g. only binaries for certain platforms or certain versions of R, or to create a repository from a subset of the packages in your universe. Explore the parameters on the API tab of any universe, for example: \u003ca href=\"https://ggseg.r-universe.dev/api\"\u003ehttps://ggseg.r-universe.dev/api\u003c/a\u003e\u003c/p\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/05/31/runiverse-snapshots/screenshot.png\" alt=\"Screenshot of r-universe API explorer tab.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/05/31/runiverse-snapshots/screenshot.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003ch2 id=\"how-to-use-snapshots\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-use-snapshots\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to use snapshots\u003c/h2\u003e\u003cp\u003eA CRAN-like R package repository is essentially a static directory of package files and indexes, with a specific naming structure. R-universe automatically builds and updates all these files based on a registry of packages and upstream git sources. But once everything is generated, you can simply copy the entire folder elsewhere, and have a frozen CRAN-like package repository on that server!\u003c/p\u003e\u003cp\u003eFor example, you could create a github-action which regularly downloads a snapshot from r-universe to publish on github-pages. Here is a minimal example of such an action: \u003ca href=\"https://github.com/jeroen/backup\"\u003ehttps://github.com/jeroen/backup\u003c/a\u003e. Note how the action is vary fast: downloading and extracting te snapshot from r-universe only takes a few seconds. So this is easily something that could be done on demand, or automatically on a regular basis.\u003c/p\u003e\u003cp\u003eYou can also install packages in R directly from a local snapshot folder, by prefixing the path that you pass to \u003ccode\u003einstall.packages\u003c/code\u003e with \u003ccode\u003efile://\u003c/code\u003e (Windows paths need to be normalized to look more unixy):\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Download and extract the snapshot\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecurl\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ecurl_download\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://jeroen.r-universe.dev/api/snapshot/zip?binaries=4.3\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;snapshot.zip\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esnapshot\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003efile.path\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etempdir\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;jeroen\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eunzip\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;snapshot.zip\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eexdir\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003esnapshot\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Install packages from the local repository\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eprefix\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eifelse \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e.Platform\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eOS.type\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;windows\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;file:///\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;file://\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003epaste0\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eprefix\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003enormalizePath\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esnapshot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;/\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003einstall.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;V8\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;mongolite\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erepos\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"towards-validated-stable-r-packages-repositories\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#towards-validated-stable-r-packages-repositories\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTowards \u0026lsquo;validated\u0026rsquo; stable R packages repositories\u003c/h2\u003e\u003cp\u003eSnapshots can be useful for several purposes, e.g for archiving, or to mirror an R package repository within a corporate intranet. But there is one important use case we want to highlight:\u003c/p\u003e\u003cp\u003eOne gap in the R ecosystem \u003ca href=\"https://journal.r-project.org/archive/2013-1/ooms.pdf\"\u003ehas always been\u003c/a\u003e the lack of staged, stable package repositories. Packages on CRAN and R-universe and other networks\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e get constantly updated, pushing major changes directly to end-users. This is convenient for developers but not ideal for production and reproducibility.\u003c/p\u003e\u003cp\u003eBy comparison, Linux distributions (like Ubuntu, RHEL) also consist of a large set of constantly changing software packages. However most Linux end-users do not get updates directly, because their system gets updates from a stable branch of the package repositories. Such a stable branch is like a snapshot of the entire package repository, which only gets small critical updates; never major changes. This way end-users are shielded from unexpected big changes until they decide to upgrade to a new release of the Linux distribution, which basically just changes the package repository to the next stable branch.\u003c/p\u003e\u003ch2 id=\"using-registries-and-snapshots-for-controlled-repositories\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#using-registries-and-snapshots-for-controlled-repositories\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUsing registries and snapshots for controlled repositories\u003c/h2\u003e\u003cp\u003eBy default, packages in r-universe get updated from their git master/main branch. However all tools are available for controlling the R package repository to build and publish a custom validated set R packages.\u003c/p\u003e\u003cp\u003eIn the \u003ccode\u003epackages.json\u003c/code\u003e registry file where you list the git-urls to include, you can \u003ca href=\"https://ropensci.org/blog/2021/06/22/setup-runiverse/#pro-tip-tracking-custom-branches-or-releases\"\u003especify which branch or tag to track\u003c/a\u003e for all packages in your universe. You can even set this value to a fixed commit. This way you control exactly which version of each R package gets included in your cranlike repository, such that you can make sure that version passes your criteria or review process.\u003c/p\u003e\u003cp\u003eOnce your universe contains the packages and versions that you want (say for use by a given paper or application), you can use the snapshot API to create a release of your cranlike repository. By hosting or sharing this snapshot, you provide permanent easy access to the frozen cranlike package repository with exactly the packages and versions that you validated or can use to (re)produce particular results.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eOne notable exception is bioconductor, which does have stable releases of the entire bioconductor package network.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2023/05/31/runiverse-snapshots/","date_published":"2023-05-31T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/rh54h-9hf52","title":"rOpenSci News Digest, May 2023","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2023/05/19/ropensci-news-digest-may-2023\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"statistical-software-review-updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#statistical-software-review-updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStatistical software review updates\u003c/h3\u003e\u003cp\u003eWe are very happy to welcome \u003ca href=\"/author/jouni-helske\"\u003eJouni Helske\u003c/a\u003e to the editorial team for statistical software review.Jouni jumped straight in to act as editor for the \u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot submission\u003c/a\u003e, an exciting first extension of our system beyond R alone to include functions in the Julia language.We have so far approved \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+sort%3Aupdated-desc+label%3Astats+is%3Aclosed+label%3A6%2Fapproved\"\u003eeight packages\u003c/a\u003e, five of which have a silver badge, and three gold, with two further packages currently under review.\u003c/p\u003e\u003ch3 id=\"ropensci-at-csvconfv7\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-at-csvconfv7\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci at Csv,Conf,v7\u003c/h3\u003e\u003cp\u003eWe participated in the \u003ca href=\"https://csvconf.com/\"\u003eCSV,Conf,v7\u003c/a\u003e in Buenos Aires April 19-20, 2023.\u003c/p\u003e\u003cp\u003eOn the first day of the conference, \u003ca href=\"/author/karthik-ram\"\u003eKarthik Ram\u003c/a\u003e was one of the keynotes presenting \u003ca href=\"/events/2023-04-19-csvconf_keynote/\"\u003e\u0026ldquo;How to enable and sustain thriving Open Source Ecosystems (OSE)\u0026rdquo;\u003c/a\u003e. The next day, \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e presented \u003ca href=\"/events/2023-04-20-csvconf-regulartalk/\"\u003e\u0026ldquo;Tell me who you hang out with, and I will tell you who you are. A collaborations analysis using social networks analysis\u0026rdquo;\u003c/a\u003e, a work done together with \u003ca href=\"https://www.researchgate.net/profile/Sandro-Camargo\"\u003eSandro Camargo\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThis was a very special edition as it was the first time the event took place in the Southern Hemisphere, allowing several Latin American projects to be part of the conference.\u003c/p\u003e\u003ch3 id=\"export-package-data-from-the-r-universe-thanks-to-webr\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#export-package-data-from-the-r-universe-thanks-to-webr\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExport package data from the R-Universe thanks to webr\u003c/h3\u003e\u003cp\u003eThe R-Universe node stack now provides data export links, which use \u003ca href=\"https://docs.r-wasm.org/webr/latest/\"\u003ewebr\u003c/a\u003e to convert pkg datasets on-the-fly to JSON (via jsonlite), xlsx (via writexl), csv (via data.table), etc.\u003c/p\u003e\u003cp\u003eTry it yourself, for instance with the \u003ca href=\"https://ropensci.r-universe.dev/webchem#\"\u003ewebchem package\u0026rsquo;s two datasets\u003c/a\u003e.You can click on the download icons near their names, or use the direct URLs, for instance \u003ca href=\"https://ropensci.r-universe.dev/webchem/data/lc50/json\"\u003ehttps://ropensci.r-universe.dev/webchem/data/lc50/json\u003c/a\u003e for the lc50 dataset (Acute toxicity data from U.S. EPA ECOTOX).\u003c/p\u003e\u003cp\u003eThe permanent URL to a dataset in a given format can be used in your browser, from R, or from any other tools: this means the R-Universe helps publish your data to the world!\u003c/p\u003e\u003cp\u003eOn the technical side, R-universe actually uses webr (with its own \u003ca href=\"https://github.com/r-universe-org/webr-bundle\"\u003ewebr bundle\u003c/a\u003e) \u003ca href=\"https://github.com/r-universe-org/cranlike-server\"\u003eserver-side\u003c/a\u003e, so not in a browser!\u003c/p\u003e\u003cp\u003eNote that R-universe already had a few features related to datasets beside listing them on a package page: datasets are indexed for \u003ca href=\"/blog/2023/02/27/runiverse-discovering/#level-1-searching-the-entire-r-ecosystem\"\u003esearch\u003c/a\u003e, and the \u003ca href=\"https://ropensci.r-universe.dev/webchem/json\"\u003estandard API output for a package\u003c/a\u003e includes some info about datasets.\u003c/p\u003e\u003ch3 id=\"http-testing-in-r-book\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#http-testing-in-r-book\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHTTP testing in R book\u003c/h3\u003e\u003cp\u003eMaëlle Salmon was \u003ca href=\"https://www.r-consortium.org/blog/2023/05/15/better-understanding-your-tools-choices-online-book-http-testing-r\"\u003einterviewed about her and Scott Chamberlain\u0026rsquo;s HTTP testing in R book\u003c/a\u003e on the R Consortium blog.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTuesday, June 6th, 9:00 Australia Western / 01:00 UTC \u003ca href=\"/events/coworking-2023-06/\"\u003e\u0026ldquo;Integrating and merging datasets from different sources\u0026rdquo;\u003c/a\u003e \u003cem\u003eHosted by community host \u003ca href=\"/author/cynthia-huang\"\u003eCynthia Huang\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eSpend time integrating datasets for your own work\u003c/li\u003e\u003cli\u003eExplore how others tackle the problem of merging datasets from different sources or different data versions\u003c/li\u003e\u003cli\u003eTalk to our community host and other attendees and discuss strategies for integrating datasets.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTuesday, July 4th, 14:00 European Central / 12:00 UTC \u003ca href=\"/events/coworking-2023-07/\"\u003e\u0026ldquo;Create/Update your \u0026lsquo;Happy File\u0026rsquo;/\u0026lsquo;Brag Document\u0026rsquo;!\u0026rdquo;\u003c/a\u003e \u003cem\u003eHosted by \u003ca href=\"/author/ma%C3%ABlle-salmon\"\u003eMaëlle Salmon\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore what goes into a \u003ca href=\"https://twitter.com/JennyBryan/status/1582862196870373377\"\u003e‘Happy File’\u003c/a\u003e/\u003ca href=\"https://jvns.ca/blog/brag-documents/\"\u003e‘Brag Document’\u003c/a\u003e and why you need one\u003c/li\u003e\u003cli\u003eStart collecting items to add to your ‘Happy File’\u003c/li\u003e\u003cli\u003eTalk to our community host and other attendees and discuss strategies for integrating datasets.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following  package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/babelquarto\"\u003ebabelquarto\u003c/a\u003e, developed by Maëlle Salmon: Automate rendering and cross-linking of Quarto books following a prescribed structure.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following twelve packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/biomartr\" title=\"Genomic Data Retrieval\"\u003ebiomartr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/biomartr/releases/tag/v1.0.3\"\u003e\u003ccode\u003ev1.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (cff) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v0.5.0\"\u003e\u003ccode\u003ev0.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/crul\" title=\"HTTP Client\"\u003ecrul\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/crul/releases/tag/v1.4\"\u003e\u003ccode\u003ev1.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/geojsonio\" title=\"Convert Data from and to GeoJSON or TopoJSON\"\u003egeojsonio\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/geojsonio/releases/tag/v0.11.1\"\u003e\u003ccode\u003ev0.11.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nlrx\" title=\"Setup, Run and Analyze NetLogo Model Simulations from R via XML\"\u003enlrx\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nlrx/releases/tag/v0.4.4\"\u003e\u003ccode\u003ev0.4.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.9.4\"\u003e\u003ccode\u003ev0.9.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmdata\" title=\"Import OpenStreetMap Data as Simple Features or Spatial Objects\"\u003eosmdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmdata/releases/tag/v0.2.2\"\u003e\u003ccode\u003ev0.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/phruta\" title=\"Phylogenetic Reconstruction and Time-dating\"\u003ephruta\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/phruta/releases/tag/MEE\"\u003e\u003ccode\u003eMEE\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spiro\" title=\"Manage Data from Cardiopulmonary Exercise Testing\"\u003espiro\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spiro/releases/tag/v0.2.0\"\u003e\u003ccode\u003ev0.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.7.6\"\u003e\u003ccode\u003e0.7.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/1.0.0\"\u003e\u003ccode\u003e1.0.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/waywiser\" title=\"Ergonomic Methods for Assessing Spatial Models\"\u003ewaywiser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/waywiser/releases/tag/v0.4.0\"\u003e\u003ccode\u003ev0.4.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are ten recently closed and active submissions and 3 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/574\"\u003edwctaxon\u003c/a\u003e, Tools for Working with Darwin Core Taxon Data. Submitted by \u003ca href=\"https://joelnitta.com\"\u003eJoel Nitta\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003epangoling\u003c/a\u003e, Access to Large Language Model Predictions. Submitted by \u003ca href=\"https://bnicenboim.github.io/\"\u003eBruno Nicenboim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/568\"\u003eohun\u003c/a\u003e, Optimizing Acoustic Signal Detection. Submitted by \u003ca href=\"https://marceloarayasalas.weebly.com/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003efwildclusterboot\u003c/a\u003e, Fast Wild Cluster Bootstrap Inference for Linear Models. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/590\"\u003emregions2\u003c/a\u003e, Access Data from Marineregions.org: The Marine Regions Gazetteer and the Marine Regions Data Products. Submitted by \u003ca href=\"https://github.com/salvafern\"\u003esalvafern\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"https://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/572\"\u003equaltdict\u003c/a\u003e, Generating Variable Dictionaries and Labelled Data Exports of Qualtrics. Submitted by \u003ca href=\"https://github.com/lyh970817\"\u003eYuhao Lin\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2023/05/19/ropensci-news-digest-may-2023\"\u003eCRediTas is Now Part of rOpenSci\u003c/a\u003e by Josep Pueyo-Ros. CRediTas is an R package for generating CrediT author statements for scientific publications.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"other-topics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-topics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOther topics\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/05/19/ropensci-news-digest-may-2023\"\u003erOpenSci Champions Program Teams: Meet Bilikisu Wunmi Olatunji and Christina Maimone\u003c/a\u003e by Bilikisu Wunmi Olatunji, and Christina Maimone.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/05/19/ropensci-news-digest-may-2023\"\u003erOpenSci Champions Program Teams: Meet Carolina Pradier and Athanasia Monika Mowinckel\u003c/a\u003e by Carolina Pradier, and Athanasia Monika Mowinckel.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/05/19/ropensci-news-digest-may-2023\"\u003erOpenSci Champions Program Teams: Meet Haydée Svab and Beatriz Milz\u003c/a\u003e by Haydée Svab, and Beatriz Milz.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/05/19/ropensci-news-digest-may-2023\"\u003erOpenSci Champions Program Teams: Meet Victor Ordu and Laura DeCicco\u003c/a\u003e by Victor Ordu, and Laura DeCicco.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/05/19/ropensci-news-digest-may-2023\"\u003erOpenSci Champions Program Teams: Meet César and Marc\u003c/a\u003e by Cesar Luis Aybar Camacho, and Marc Choisy.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2023/05/19/ropensci-news-digest-may-2023\"\u003eScheduling Mastodon Posts in R with rtoot and GitHub Actions\u003c/a\u003e by Steffi LaZerte. How to schedule Mastodon Posts using rtoot and GitHub Actions.\u003c/li\u003e\u003c/ul\u003e\u003c!-- ## Use cases`snakecase::to_sentence_case(english(length(usecases)))` use case` if (length(usecases) \u003e 1) \"s\"` of our packages and resources ha` if (length(usecases) \u003e 1) \"ve\" else \"s\"` been reported since we sent the last newsletter.Explore [other use cases](/usecases) and [report your own](https://discuss.ropensci.org/c/usecases/10)! --\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003ch3 id=\"call-for-maintainers-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e (or listening to its discussion on the \u003ca href=\"https://rweekly.fireside.fm/111\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas)!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/rvertnet/index.html\"\u003ervertnet\u003c/a\u003e\u003c/strong\u003e, Retrieve, map and summarize data from the VertNet.org archives (\u003ca href=\"https://vertnet.org/\"\u003ehttps://vertnet.org/\u003c/a\u003e). Functions allow searching by many parameters, including taxonomic names, places, and dates. In addition, there is an interface for conducting spatially delimited searches, and another for requesting large datasets via email. \u003ca href=\"https://github.com/ropensci-archive/rvertnet/issues/71\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/natserv/index.html\"\u003enatserv\u003c/a\u003e\u003c/strong\u003e. Interface to NatureServe (\u003ca href=\"https://www.natureserve.org/\"\u003ehttps://www.natureserve.org/\u003c/a\u003e). Includes methods to get data, image metadata, search taxonomic names, and make maps. \u003ca href=\"https://github.com/ropensci-archive/natserv/issues/29\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/geojsonlint/index.html\"\u003egeojsonlint\u003c/a\u003e\u003c/strong\u003e, Tools for linting GeoJSON. Includes tools for interacting with the online tool \u003ca href=\"https://geojsonlint.com\"\u003ehttps://geojsonlint.com\u003c/a\u003e, the Javascript library geojsonhint (\u003ca href=\"https://www.npmjs.com/package/geojsonhint\"\u003ehttps://www.npmjs.com/package/geojsonhint\u003c/a\u003e), and validating against a GeoJSON schema via the Javascript library (\u003ca href=\"https://www.npmjs.com/package/is-my-json-valid\"\u003ehttps://www.npmjs.com/package/is-my-json-valid\u003c/a\u003e). Some tools work locally while others require an internet connection. \u003ca href=\"https://github.com/ropensci-archive/geojsonlint/issues/22\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"call-for-comaintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-comaintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for comaintainers\u003c/h3\u003e\u003cp\u003eRefer to our somewhat \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/#packages-looking-for-co-maintainers\"\u003erecent blog post\u003c/a\u003e to identify other packages where help is especially wished for!See also our \u003ca href=\"/help-wanted/\"\u003ehelp wanted page\u003c/a\u003e \u0026ndash; before opening a PR, we recommend asking in the issue whether help is still needed.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"cool-new-experimental-packages-for-building-api-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#cool-new-experimental-packages-for-building-api-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCool new experimental packages for building API packages!\u003c/h3\u003e\u003cp\u003eAre you thinking about building an \u003ca href=\"/blog/2022/06/16/publicize-api-client-yes-no/\"\u003eAPI client\u003c/a\u003e?Check out the new project by Jon Harmon, recently funded by the R Consortium:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://jonthegeek.github.io/beekeeper/\"\u003ebeekeeper\u003c/a\u003e \u003cem\u003ewill allow users to automatically generate R package skeletons from APIs that follow the OpenAPI Specification (OAS) (and probably other specifications, such as swagger, the predecessor to OpenAPI). The skeletons will implement best practices to streamline package development.\u003c/em\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jonthegeek.github.io/nectar/\"\u003enectar\u003c/a\u003e is \u003cem\u003ean opinionated framework for use within api-wrapping R packages.\u003c/em\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExciting to follow!\u003c/p\u003e\u003ch3 id=\"upkeep-for-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#upkeep-for-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpkeep for packages\u003c/h3\u003e\u003cp\u003eDid you miss the recent coworking session on Spring/Fall cleaning of R packages?One nice function that was shared during that meeting, by Andy Teucher, R Package Developer Educator at Posit PBC is \u003ca href=\"https://usethis.r-lib.org/dev/reference/use_upkeep_issue.html\"\u003e\u003ccode\u003eusethis::use_upkeep_issue()\u003c/code\u003e\u003c/a\u003e in the development version of usethis.\u0026ldquo;This opens an issue in your package repository with a checklist of tasks for regular maintenance of your package.\u0026rdquo;Why not try it on one of your packages?\u003c/p\u003e\u003ch3 id=\"tidyverse-pr-guidance\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tidyverse-pr-guidance\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTidyverse PR guidance\u003c/h3\u003e\u003cp\u003eThe tidyverse team drafted a \u003ca href=\"https://tidyverse.github.io/code-review/\"\u003eguide about their code review process\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eOn the same topic, have you heard of \u003ca href=\"https://dmerej.info/blog/post/optimistic-merging/\"\u003eoptimistic merging\u003c/a\u003e?\u003c/p\u003e\u003ch3 id=\"xmls-and-rcurls-fate\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#xmls-and-rcurls-fate\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e{XML}\u0026rsquo;s and {RCurl}\u0026rsquo;s fate\u003c/h3\u003e\u003cp\u003eAt rOpenSci, we\u0026rsquo;ve \u003ca href=\"https://devguide.ropensci.org/building.html#recommended-scaffolding\"\u003erecommended\u003c/a\u003e using more actively maintained packages (like xml2 and crul or curl) rather than the unmaintained XML and RCurl packages for a long time.It seems the CRAN team is now \u003ca href=\"https://mastodon.social/@henrikbengtsson/110186925898457474\"\u003elooking for new maintainers for them\u003c/a\u003e.See also the \u003ca href=\"https://github.com/RConsortium/r-repositories-wg/issues/26\"\u003erelevant thread\u003c/a\u003e of the R Consortium\u0026rsquo;s repositories working group.This last item suggests that maintenance of these packages may be moving towards graceful deprecation, and is another reason to move your package away from XML and RCurl when you can!\u003c/p\u003e\u003ch3 id=\"reminder-about-spatial-packages-retirement-rgdal-maptools-and-rgeos\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#reminder-about-spatial-packages-retirement-rgdal-maptools-and-rgeos\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReminder about spatial packages\u0026rsquo; retirement (rgdal, maptools, and rgeos)\u003c/h3\u003e\u003cp\u003eAs stated in the \u003ca href=\"https://devguide.ropensci.org/building.html#recommended-scaffolding\"\u003edev guide\u003c/a\u003e\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eFor spatial data, the sp package should be considered deprecated in favor of sf, and the packages rgdal, maptools, and rgeos will be retired by the end of 2023. We recommend use of the spatial suites developed by the \u003ca href=\"https://github.com/r-spatial\"\u003er-spatial\u003c/a\u003e and \u003ca href=\"https://github.com/rspatial\"\u003erspatial\u003c/a\u003e communities. See \u003ca href=\"https://github.com/ropensci/software-review-meta/issues/47\"\u003ethis GitHub issue\u003c/a\u003e for relevant discussions.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003ePlease tell your friends!\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/05/19/ropensci-news-digest-may-2023/","date_published":"2023-05-19T00:00:00+00:00","date_modified":"2025-04-08T11:17:46+02:00"},{"id":"https://doi.org/10.59350/65508-xdy47 ","title":"rOpenSci Champions Program Teams: Meet César and Marc","language":"en","authors":[{"name":"Cesar Luis Aybar Camacho","url":"https://ropensci.org/author/cesar-luis-aybar-camacho/","avatar":"https://github.com/csaybar.png","_role":["author"]},{"name":"Marc Choisy","url":"https://orcid.org/0000-0002-5187-6390","avatar":"https://github.com/choisy.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["community","champions program"],"content_html":"\u003cp\u003e\u003cem\u003eWe designed the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e with a mentorship aspect. Mentoring plays a significant role in the growth and development of both mentors and mentees alike. In our program, each Champion has a mentor who accompanies them during their training and development of their project.\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cem\u003eIn this series of blog posts, we introduce you to the ten teams of this first cohort and what they will be working on in the program.\u003c/em\u003e\u003c/p\u003e\u003cp\u003eMeet \u003cstrong\u003eCesar Luis Aybar Camacho\u003c/strong\u003e from Perú and \u003cstrong\u003eMarc Choisy\u003c/strong\u003e from Vietnam!\u003c/p\u003e\u003ch2 id=\"cesar-luis-aybar-camacho---champion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#cesar-luis-aybar-camacho---champion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCesar Luis Aybar Camacho - Champion\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/cesar-luis-aybar-camacho-mentee.jpeg\"\t\t\talt=\"Profile photo of Cesar Luis Aybar Camacho\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eCesar Luis Aybar Camacho\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is Cesar Luis Aybar Camacho. I am a Peruvian PhD student at the University of Valencia\u0026rsquo;s Image Processing Laboratory. I am also the main maintainer of the \u003ca href=\"https://r-spatial.github.io/rgee/reference/rgee-package.html\"\u003ergee package\u003c/a\u003e, which allows the integration of R and Google Earth Engine (GEE) in the same workflow.\u003c/p\u003e\u003cp\u003eI applied to the rOpenSci Champions Program because I want to contribute to developing a robust and diverse R community in Latin America. Besides, this is an excellent opportunity to gain insights from experts in the R community.\u003c/p\u003e\u003cp\u003eAs part of the program, I plan to create the \u003cem\u003ergeeExtra\u003c/em\u003e package, which will make GEE syntax more accessible to R users.\u003c/p\u003e\u003cp\u003eFeel free to contact me after or during this program to assist or mentor your R package in Spanish or English. I will try my best.\u003c/p\u003e\u003c/br\u003e\u003ch2 id=\"marc-choisy---mentor\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#marc-choisy---mentor\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMarc Choisy - Mentor\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/marc-choisy-mentor.png\"\t\t\talt=\"Profile photo of Marc Choisy\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eMarc Choisy\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am French and have been working in Vietnam since 2012 and as the head of Mathematical Modelling at the Oxford University Clinical Research Unit. I hold MSc degrees in biology and mathematics and a PhD in biology and work mostly on the epidemiology of infectious diseases. One of my expectations in contributing to the Champions Program is to get more involved in the science reproducibility community.\u003c/p\u003e\u003cp\u003e\u003cem\u003eCésar and Marc are already working together on the project to develop this new package.  We look forward to seeing the results of this team. Stay-tuned for the next series of introductions.\u003c/em\u003e\u003c/p\u003e","url":"https://ropensci.org/blog/2023/05/18/ropensci-champions-program-teams-meet-c%C3%A9sar-and-marc/","date_published":"2023-05-18T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/as1ra-f9h57","title":"Scheduling Mastodon Posts in R with rtoot and GitHub Actions","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]}],"tags":["tech notes","Community","GitHub Actions","Community Manager Tools","social media","mastodon"],"content_html":"\u003cp\u003eA lot of what I do as rOpenSci\u0026rsquo;s community assistant is related to social media.I check for posts about rOpenSci packages, invite people to share \u003ca href=\"/usecases\"\u003eusecases\u003c/a\u003e,advertise \u003ca href=\"/events\"\u003eupcoming events\u003c/a\u003e, as well as promoting\u003ca href=\"/software-review\"\u003enew packages which completed software peer review\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eUp \u003ca href=\"/blog/2022/11/16/mastodon-en/\"\u003euntil this past year\u003c/a\u003e most of this work wasfocused on Twitter and because we want to reach an international audience,we used Tweetdeck to schedule posts for different timezones\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e.Being able to see when posts were queued was also important for us as a team tobetter plan our post timing.\u003c/p\u003e\u003cp\u003eHowever, we\u0026rsquo;re also now developing a \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003epresence on Mastodon\u003c/a\u003e.We\u0026rsquo;ve enjoyed exploring this new community, but unfortunately there aren\u0026rsquo;t as many tools for working withMastodon posts as there are for Twitter. There are some schedulers available,but we thought this might be an opportunity to develop one of our own;one that worked programatically and allowed us to design it the way we wanted it to work.\u003c/p\u003e\u003cp\u003eIn particular, we wanted a workflow that allowed us to\u0026hellip;\u003c/p\u003e\u003cul\u003e\u003cli\u003eschedule multiple posts at a time\u003c/li\u003e\u003cli\u003eeasily see and modify these posts\u003c/li\u003e\u003cli\u003ehave posts with images \u003cem\u003eand\u003c/em\u003e \u003ca href=\"https://axesslab.com/alt-texts/\"\u003ealternative text\u003c/a\u003e\u003c/li\u003e\u003cli\u003ehandle multiple timezones\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eand did not\u003c/p\u003e\u003cul\u003e\u003cli\u003erequire us to give Mastodon credentials to an unknown third party\u003c/li\u003e\u003cli\u003erequire a poster to have access to the main account credentials\u003c/li\u003e\u003cli\u003ehave a subscription cost\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThis led us to create a workflow for scheduling Mastodon posts using R,\u003ca href=\"https://schochastics.github.io/rtoot\"\u003ertoot\u003c/a\u003e, and GitHub actions 🎉!\u003c/p\u003e\u003cp\u003eYou can find an\u003ca href=\"https://github.com/ropensci-org/ro-cmtoolkit/tree/main/scheduled_socials_example\"\u003eexample of this workflow\u003c/a\u003ein our new\u003ca href=\"https://github.com/ropensci-org/ro-cmtoolkit/\"\u003e\u003ccode\u003ero-cmtools\u003c/code\u003e repository\u003c/a\u003ewhere we hope to continue sharing examples of our Community Management Tools.\u003c/p\u003e\u003ch3 id=\"what-does-this-workflow-entail\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-does-this-workflow-entail\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat does this workflow entail?\u003c/h3\u003e\u003cul\u003e\u003cli\u003eUsing a private repository on GitHub (Mastodon token is stored as a GitHub Secret)\u003c/li\u003e\u003cli\u003eIssues are Mastodon posts (which is why the repo needs to be private!) -\u0026gt; See the \u003ca href=\"https://github.com/ropensci-org/ro-cmtoolkit/blob/main/scheduled_socials_example/.github/ISSUE_TEMPLATE/schedule-post.md\"\u003eIssue Template\u003c/a\u003e\u003c/li\u003e\u003cli\u003eActions run hourly (or as needed) to run a script  -\u0026gt; See the \u003ca href=\"https://github.com/ropensci-org/ro-cmtoolkit/blob/main/scheduled_socials_example/.github/workflows/schedule_posts.yaml\"\u003eAction Workflow\u003c/a\u003e\u003c/li\u003e\u003cli\u003eR script posts issues to Mastodon  -\u0026gt; See the \u003ca href=\"https://github.com/ropensci-org/ro-cmtoolkit/blob/main/scheduled_socials_example/schedule_posts.R\"\u003eR script\u003c/a\u003e\u003cul\u003e\u003cli\u003eThe script uses \u003ca href=\"https://gh.r-lib.org/\"\u003egh\u003c/a\u003e to get the issue,and \u003ca href=\"https://schochastics.github.io/rtoot\"\u003ertoot\u003c/a\u003e to post it\u003c/li\u003e\u003cli\u003eThen the script closes the issue\u003c/li\u003e\u003cli\u003eMultiple posts are separated by 5 min\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"why-use-this-workflow\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-use-this-workflow\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy use this workflow?\u003c/h3\u003e\u003cp\u003eBy using this workflow we can\u003c/p\u003e\u003cul\u003e\u003cli\u003eSchedule posts in the future\u003c/li\u003e\u003cli\u003eAllow people to post without giving them admin access to the Mastodon account\u003c/li\u003e\u003cli\u003eHave a clear picture of queued posts (both future and past)\u003c/li\u003e\u003cli\u003eModify scheduled posts\u003c/li\u003e\u003cli\u003eUse issue templates to create post templates\u003c/li\u003e\u003cli\u003ePost from anywhere with an Internet connection (no R setup required)\u003c/li\u003e\u003cli\u003eSpecify different time zones to make posting across time zones simpler (\u003ca href=\"https://fosstodon.org/@ropensci/109458205543474658\"\u003ein theory at least\u003c/a\u003e)\u003c/li\u003e\u003cli\u003eEmbrace flexibility, we can add/change YAML keys to cue any specific behaviour required\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"why-not-use-this-workflow\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-not-use-this-workflow\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy not use this workflow?\u003c/h3\u003e\u003cp\u003eThis workflow does have some limitations\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eIt can be fragile\u003c/strong\u003e\u003cbr\u003eIf someone creates a post with the incorrect metadata it will fail,but only when run, not while writing the post, which can be frustrating.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eInteractions\u003c/strong\u003e\u003cbr\u003eWhile not impossible, it can be tricky or at least a bit clunky tointeract with existing posts using this workflow.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eIt can burn \u003ca href=\"https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions\"\u003eGitHub Action Minutes\u003c/a\u003e\u003c/strong\u003e\u003cbr\u003eIf you set the CRON to run every hour, this might burn through more GitHubAction minutes than you would like, even with caching. This is why we set itto run only on specific hours that we need.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"future-ideas\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#future-ideas\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFuture ideas\u003c/h3\u003e\u003cp\u003e\u003cstrong\u003eIncorporating the Mastodon API scheduler\u003c/strong\u003e\u003c/p\u003e\u003cp\u003eThe Mastodon API and \u003ccode\u003ertoot::post_toot()\u003c/code\u003e do have options to schedule posts,but I\u0026rsquo;m unclear how easy it is to see the queue. One thing I like about ourexisting workflow is that we can easily see and modify the queue as a team.\u003c/p\u003e\u003cp\u003eHowever, it might be a good idea to incorporate the scheduler API into this toolat least when posting multiple posts at the same time. Currently, we wait 5 min(using \u003ccode\u003eSys.sleep()\u003c/code\u003e) between posts in order to space things out a bit moregradually. But this still uses 5 GitHub Action minutes 🤔.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eInteracting with posts\u003c/strong\u003e\u003c/p\u003e\u003cp\u003eRight now our workflow doesn\u0026rsquo;t have the capability to interact with posts onMastodon. However, I\u0026rsquo;ve been toying with the idea of adding a YAML key for post id,so we could set up scheduled replies to existing posts.\u003c/p\u003e\u003cp\u003eBoosting and favouriting seem possible, but would probably require using\u003ccode\u003ertoot::rtoot()\u003c/code\u003e to create a custom\u003ca href=\"https://docs.joinmastodon.org/methods/statuses/\"\u003eAPI queries\u003c/a\u003e. For this workflowthat may be a bit too clunky, but it could be possible to set up a different typeof issue template where post ids to be boosted/favourited could be listed.\u003c/p\u003e\u003cp\u003eFinally, although post threads aren\u0026rsquo;t common on Mastodon (due to the generallysufficient character limit), it should be possible to use comments on an issue tocreate a threaded post. I don\u0026rsquo;t think we\u0026rsquo;ll implement this as we like to be ableto use the comments for notes to each other or to our future selves, butdepending on your workflow, this could be a useful feature to add!\u003c/p\u003e\u003cp\u003eAnd that\u0026rsquo;s that! There are definitely other options out there, but I have to admit thatI thoroughly enjoyed the experience of making our own system. Even if testing it was abit \u003ca href=\"https://fosstodon.org/@steffilazerte/109433645817562816\"\u003eterrifying\u003c/a\u003e 😉\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2023/05/17/scheduling-mastodon/toot_sm.png\"\t\t\talt=\"A screen shot of a Mastodon post by Steffi LaZerte with a photo of a cat in a canoe looking at trees in the a distance. The text states \u0026#39;Hi! Hopefully a final test of rtoot and this time scheduled via GitHub actions 😱 Oh the thrill of accidentally sending a million toots 😉 And because there are never enough kitties, a photo of Vivi canoe camping! #RStats\u0026#39;.\" width=\"500\"\u003e\u003c/figure\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eI already get up early for the European Central Coworking session and amnot excited about getting up even earlier just to tweet the 1-hr reminder!\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2023/05/17/scheduling-mastodon/","date_published":"2023-05-17T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/eyxmp-3md27","title":"CRediTas is Now Part of rOpenSci","language":"en","authors":[{"name":"Josep Pueyo-Ros","url":"https://orcid.org/0000-0002-1236-5651","avatar":"https://github.com/jospueyo.png","_role":["author"]}],"tags":["tech notes","R","contributors","scientific publications","Software Peer Review","CRediTas","community"],"content_html":"\u003cp\u003eI\u0026rsquo;m thrilled to share that \u003ca href=\"https://docs.ropensci.org/CRediTas/\"\u003eCRediTas\u003c/a\u003e has passed \u003ca href=\"https://github.com/ropensci/software-review/issues/576\"\u003epeer review\u003c/a\u003e and been accepted to rOpenSci as well as to \u003ca href=\"https://cran.r-project.org/web/packages/CRediTas/index.html\"\u003eCRAN\u003c/a\u003e. I am glad to acknowledge the editor \u003ca href=\"/author/emily-riederer/\"\u003eEmily Riedered\u003c/a\u003e and the two reviewers \u003ca href=\"/author/marcelo-s.-perlin/\"\u003eMarcelo S. Perlin\u003c/a\u003e and \u003ca href=\"https://zambujo.github.io/\"\u003eJoão Martins\u003c/a\u003e. Their comments and support were really insightful.\u003c/p\u003e\u003cp\u003eCRediTas is a tiny package to facilitate the tedious job of creating \u003ca href=\"https://credit.niso.org/\"\u003eCRediT authors statements\u003c/a\u003e for scientific publications. Normally, the first author of a scientific paper organizes a table in a spreadsheet where all the authors self-state their contributions. Often too, it is the first author\u0026rsquo;s responsibility to state the contributions of all co-authors. However, at the end, the information has to be translated to the CRediT statement format of “Author 1: roles Authors 2: roles …” which is prone to errors and tedious, especially if there are many co-authors. The CRediTas package aims to make this easier by providing a template to be filled in form of a table (csv) and then converting this table to CRediT statement format.\u003c/p\u003e\u003cp\u003eThe workflow is meant to work with three basic functions. First, we create a template table. It can be created as a \u003ccode\u003edata.frame\u003c/code\u003e and being populated in R. Or as a csv file and being populated in your preferred csv editor.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eCRediTas\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Save the template to a csv file\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etemplate_create\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eauthors\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Alexander Humboldt\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Carl Ritter\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003efile\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003etempfile\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Save the template as an R data.frame\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecras_table\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003etemplate_create\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eauthors\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Friedrich Ratzel\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                          \u003cspan class=\"s\"\u003e\u0026#34;Pau Vidal de la Blache\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                          \u003cspan class=\"s\"\u003e\u0026#34;Pau Vila\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                          \u003cspan class=\"s\"\u003e\u0026#34;Élisée Reclus\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe template contributions are empty. So you must provide the information of who did what. You can use the \u003ccode\u003efix()\u003c/code\u003e function to open and fill the template directly in R:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003efix\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecras_table\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eOr if you wrote the template to a file, once populated with the contributions, you can read it back to R as follows:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecras_table\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003etemplate_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epath_to_your_csv_file\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eOnce the \u003ccode\u003ecras_table\u003c/code\u003e is populated, for instance:\u003c/p\u003e\u003ctable\u003e\t\u003cthead\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003cth style=\"text-align: left\"\u003eAuthors\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003eConceptualization\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003eMethodology\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003eSoftware\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003eValidation\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003eFormal Analysis\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003eInvestigation\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003eResources\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003eData curation\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003eWriting - original draft\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003eWriting - review \u0026amp; editing\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003eVisualization\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003eSupervision\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003eProject administration\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003eFunding acquisition\u003c/th\u003e\t\t\t\u003c/tr\u003e\t\u003c/thead\u003e\t\u003ctbody\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eFriedrich Ratzel\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e1\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e1\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e1\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e1\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e1\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003ePau Vidal de la Blache\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e1\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e1\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e1\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e1\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003ePau Vila\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eÉlisée Reclus\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e1\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e1\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e1\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e1\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e1\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e0\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003eThen, a text file can be generated following the CRediT author statement format:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ecras_write\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecras_table\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;textfile.txt\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emarkdown\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003equiet\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eIf you open the text file, you will find this statement, all ready to go!\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eFriedrich Ratzel:\u003c/strong\u003e Formal Analysis, Resources, Writing - original draft, Visualization, Funding acquisition \u003cstrong\u003ePau Vidal de la Blache:\u003c/strong\u003e Formal Analysis, Resources, Writing - original draft, Supervision \u003cstrong\u003eÉlisée Reclus:\u003c/strong\u003e Conceptualization, Methodology, Validation, Visualization, Supervision\u003c/p\u003e\u003cp\u003eYou can also print the statement directly in a Rmarkdown file using an inline chunk: \u003ccode\u003e`r cras_write(cras_table, markdown = TRUE)`\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eMore information on \u003ca href=\"https://docs.ropensci.org/CRediTas/articles/get_started.html\"\u003ethe package vignette\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eHopefully, this simplifies your life as it simplified mine and allows you to spend more time on actually writing your articles. Also, to better manage your co-authors contributions. Please report any issues you have!\u003c/p\u003e","url":"https://ropensci.org/blog/2023/05/16/creditas-is-now-part/","date_published":"2023-05-16T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/6b3y2-phg48","title":"rOpenSci Champions Program Teams: Meet Victor Ordu and Laura DeCicco","language":"en","authors":[{"name":"Laura DeCicco","url":"https://ropensci.org/author/laura-decicco/","avatar":"https://github.com/ldecicco-usgs.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Victor Ordu","url":"https://ropensci.org/author/victor-ordu/","avatar":"https://github.com/BroVic.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["community","champions program"],"content_html":"\u003cp\u003e\u003cem\u003eWe designed the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e with a mentorship aspect. Mentoring plays a significant role in the growth and development of both mentors and mentees alike. In our program, each Champion has a mentor who accompanies them during their training and development of their project.\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cem\u003eIn this series of blog posts, we introduce you to the ten teams of this first cohort and what they will be working on in the program.\u003c/em\u003e\u003c/p\u003e\u003cp\u003eMeet \u003cstrong\u003eVictor Ordu\u003c/strong\u003e from Nigeria and \u003cstrong\u003eLaura DeCicco\u003c/strong\u003e from United States!\u003c/p\u003e\u003ch2 id=\"victor-ordu---champion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#victor-ordu---champion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eVictor Ordu - Champion\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/victor-ordu-mentee.jpg\"\t\t\talt=\"Profile photo of Victor Ordu\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eVictor Ordu\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eVictor Ordu is a medical doctor with many years of experience in the Nigerian healthcare space. Having spent the first ten years of his career in clinical medicine he found a niche in health policy and environmental health regulation when he switched to the public health domain.\u003c/p\u003e\u003cp\u003eVictor has worked in various capacities in both the public and private sectors including as a field consultant for the Global Polio Eradication Initiative in the WHO EMRO Region. Public health exposed him to the centrality of data management in determining health outcomes.  The quest for the right tooling for the job began with EpiInfo and SPSS until he discovered R and instantly fell in love with the language. Since then he has not looked back.\u003c/p\u003e\u003cp\u003eNow an independent consultant for the UN and international NGOs working in Nigeria, R has been the focus of much of his work. He also conducts R training programs for public and private organizations in Nigeria. Victor is an alumnus of the University of Nigeria and has also acquired certifications from the University of Heidelberg (Germany), the World Bank Institute, and Galilee Management Institute (Israel), to mention a few. He is an active member of the R community and has authored R packages, like \u003ca href=\"https://github.com/BroVic/naijR\"\u003enaijR\u003c/a\u003e that have found great use among R enthusiasts worldwide.\u003c/p\u003e\u003c/br\u003e\u003ch2 id=\"laura-decicco---mentor\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#laura-decicco---mentor\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLaura DeCicco - Mentor\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/laura-decicco.jpg\"\t\t\talt=\"Profile photo of Laura DeCicco\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eLaura DeCicco\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eLaura comes from Madison, WI USA. She works for the United States Geological Survey developing and maintaining several R packages. She is excited to be a mentor for the inaugural cohort of rOpenSci Champions.\u003c/p\u003e\u003cp\u003e\u003cem\u003eWe\u0026rsquo;re excited to have Victor in the Champions program and Laura as his mentor.  We can\u0026rsquo;t wait to see the results of the work of this team. Stay-tuned for the next team introduction\u003c/em\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/05/11/intro-champion-program-team-victor-laura/","date_published":"2023-05-11T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/qanjt-8gg36","title":"rOpenSci Champions Program Teams: Meet Haydée Svab and Beatriz Milz","language":"en","authors":[{"name":"Beatriz Milz","url":"https://orcid.org/0000-0002-3064-4486","avatar":"https://github.com/beatrizmilz.png","_role":["author"]},{"name":"Haydée Svab","url":"https://ropensci.org/author/hayd%C3%A9e-svab/","avatar":"https://github.com/hsvab.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["community","champions program"],"content_html":"\u003cp\u003e\u003cem\u003eWe designed the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e with a mentorship aspect. Mentoring plays a significant role in the growth and development of both mentors and mentees alike. In our program, each Champion has a mentor who accompanies them during their training and development of their project.\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cem\u003eIn this series of blog posts, we introduce you to the ten teams of this first cohort and what they will be working on in the program.\u003c/em\u003e\u003c/p\u003e\u003cp\u003eMeet \u003cstrong\u003eHaydée Svab\u003c/strong\u003e and \u003cstrong\u003eBeatriz Milz\u003c/strong\u003e both from Brazil!\u003c/p\u003e\u003ch2 id=\"haydée-svab---champion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#hayd%c3%a9e-svab---champion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHaydée Svab - Champion\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/haydee-svab-mentee.jpeg\"\t\t\talt=\"Profile photo of Haydée Svab\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eHaydée Svab\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI\u0026rsquo;m Haydée Svab, graduated in civil engineering, master of science - specialty transport and planning engineering. For the last few years I\u0026rsquo;ve been working as a researcher and consultant in my own company, ASK-AR. Our main projects deal with data analysis, smart cities, urban mobility and gender perspective. I was born and have always lived in Brazil, more specifically in São Paulo, where I founded the \u003ca href=\"https://www.meetup.com/rladies-sao-paulo/\"\u003elocal R-Ladies chapter\u003c/a\u003e together with other amazing women.\u003c/p\u003e\u003cp\u003eDespite loving and  professionally working with the R language, I don\u0026rsquo;t know how to make packages - and I always wanted to make one, with data and model derived from my master\u0026rsquo;s dissertation. So, I saw in the Champion Program the opportunity to make that wish come true.\u003c/p\u003e\u003cp\u003eAdditionally, within the context of rOpenSci community, I recognize that the technical ability to create packages and their daily use can induce and facilitate the reuse and diffusion of codes from other projects and initiatives that I am part of, be it R-Ladies or professional consultancy projects. Those will for sure benefit the R community, which will be able to leverage such packages.\u003c/p\u003e\u003cp\u003eFinally, I am super excited for the learning period we will have and to better get to know and contribute to the rOpenSci community.\u003c/p\u003e\u003c/br\u003e\u003ch2 id=\"beatriz-milz---mentor\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#beatriz-milz---mentor\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBeatriz Milz - Mentor\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/beatriz-milz-mentor.jpeg\"\t\t\talt=\"Profile photo of Beatriz Milz\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eBeatriz Milz\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is Beatriz Milz, and I am an R-Lady from São Paulo - Brazil. I am currently doing a Ph.D. in Environmental Science and also work as a Data Scientist and an R teacher at Curso-R.\u003c/p\u003e\u003cp\u003eI am a tidyverse instructor certified by Posit, and a co-organizer of communities and events, such as \u003ca href=\"https://rladies-sp.org/\"\u003eR-Ladies São Paulo\u003c/a\u003e, \u003ca href=\"https://latin-r.com/\"\u003eLatin-R\u003c/a\u003e, and \u003ca href=\"https://saopaulo2019.satrdays.org/\"\u003esatRday São Paulo\u003c/a\u003e. I also \u003ca href=\"https://beamilz.com/\"\u003ehave a blog\u003c/a\u003e where I write about R.\u003c/p\u003e\u003cp\u003eI will be a mentor in this edition of the Champions program, and I hope to helpparticipants to create R packages and also review them for rOpenSci!\u003c/p\u003e\u003cp\u003e\u003cem\u003eWe\u0026rsquo;re excited to have both Haydée and Bea be part of the Champions program. We are looking forward to seeing how this project progresses. Stay tuned for the next series of introductions.\u003c/em\u003e\u003c/p\u003e","url":"https://ropensci.org/blog/2023/05/09/ropensci-champions-program-teams-meet-haydee-svab-and-beatriz-milz/","date_published":"2023-05-09T00:00:00+00:00","date_modified":"2025-04-08T11:17:46+02:00"},{"id":"https://doi.org/10.59350/806eh-xpm14","title":"rOpenSci Champions Program Teams: Meet Carolina Pradier and Athanasia Monika Mowinckel","language":"en","authors":[{"name":"Athanasia Mo Mowinckel","url":"https://ropensci.org/author/athanasia-mo-mowinckel/","avatar":"https://github.com/drmowinckels.png","_role":["author"]},{"name":"Carolina Pradier","url":"https://ropensci.org/author/carolina-pradier/","avatar":"https://github.com/caropradier.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["community","champions program"],"content_html":"\u003cp\u003e\u003cem\u003eWe designed the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e with a mentorship aspect. Mentoring plays a significant role in the growth and development of both mentors and mentees alike. In our program, each Champion has a mentor who accompanies them during their training and development of their project.\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cem\u003eIn this series of blog posts, we introduce you to the ten teams of this first cohort and what they will be working on in the program.\u003c/em\u003e\u003c/p\u003e\u003cp\u003eMeet \u003cstrong\u003eCarolina Pradier\u003c/strong\u003e from Argentina and \u003cstrong\u003eAthanasia Monika Mowinckel\u003c/strong\u003e from Norway!\u003c/p\u003e\u003ch2 id=\"carolina-pradier---champion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#carolina-pradier---champion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCarolina Pradier - Champion\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/carolina-pradier-mentee.jpg\"\t\t\talt=\"Profile photo of Carolina Pradier\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eCarolina Pradier\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is Carolina Pradier, I am an economist and data scientist. I have a degree in Economics, and I am currently finishing my Master\u0026rsquo;s degree in Labour Studies, both at the University of Buenos Aires.\u003c/p\u003e\u003cp\u003eI work as a research and teaching assistant at \u003ca href=\"https://www.economicas.uba.ar/institutos_y_centros/ceped/\"\u003eCEPED-UBA\u003c/a\u003e and I\u0026rsquo;m also an active member of Ecofeminita\u0026rsquo;s economics and data team (\u003ca href=\"https://ecofeminita.com/ecofemidata\"\u003eecofemidata\u003c/a\u003e) and maintainer of the \u003ca href=\"https://github.com/holatam/eph\"\u003eeph\u003c/a\u003e R package.Throughout the rOpenSci Champions Program I intend to enhance the eph R package (reorganizing the package, reducing its dependencies, improving the package’s functions’ processing speed, upgrading the user experience, etc.).\u003c/p\u003e\u003cp\u003eI applied to the Program in order to improve my skills and bring new tools to the social scientists’ communities in which I am actively involved and thus strengthen our capacities to transform reality. Furthermore, I intend to bring researchers from my country closer to the R community and hope to meet new professionals I can collaborate with in the future. Needless to say, I am particularly excited about the prospect of participating in a program aimed at making the R community more inclusive.\u003c/p\u003e\u003c/br\u003e\u003ch2 id=\"athanasia-monika-mowinckel---mentor\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#athanasia-monika-mowinckel---mentor\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAthanasia Monika Mowinckel - Mentor\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/mo-mentor.png\"\t\t\talt=\"Profile photo of Athanasia Monika Mowinckel\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eAthanasia Monika Mowinckel\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name Athanasia (Mo) Mowinckel, and I hold a PhD in cognitive neuroscience, and am based in Oslo, Norway. I was born in Athens, Greece, of a Cypriot mother and a Norwegian father, and moved to Norway with my family when I was 4. Here, I now work as a staff scientist and Research Software Engineer at the \u003ca href=\"https://www.oslobrains.no/\"\u003eCenter for Lifespan Changes in Brain and Cognition\u003c/a\u003e at the \u003ca href=\"https://www.uio.no/english/\"\u003eUniversity of Oslo\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eA lot of my work centers around creating data pipelines and work flows for my colleagues. In this work, I often choose to create R packages, which is one of the main programming languages in my field. I also create JavaScript applications and Hugo websites depending on the need of the project. I have been a reviewer for an rOpenSci package as well as for several \u003ca href=\"https://joss.theoj.org/\"\u003eJOSS\u003c/a\u003e submissions of R packages. I am currently part of the \u003ca href=\"https://www.rladies.org/about-us/global-team/\"\u003eR-Ladies Global leadership\u003c/a\u003e, after 4 years in the R-Ladies Global team as part of website development, and 5 years as chapter organiser in Oslo.\u003c/p\u003e\u003cp\u003eI am a mentor in the rOpenSci Champions program and am looking forward to learning about mentor roles and to being inspired by new R users expanding their community roles. I\u0026rsquo;m hoping the Champions program will give me new insight into how another generation interacts with the community either as reviewers or as developers, and to learn with them about how we can open up and enable more users to take part in our activities. I also look forward to connecting and interacting with other mentors and learning about how to be a good counsellor to others.\u003c/p\u003e\u003cp\u003e\u003cem\u003eCarolina and Mo are already working on the eph package. We’re excited to see how it goes! Be sure to not miss the next series of introductions\u003c/em\u003e\u003c/p\u003e","url":"https://ropensci.org/blog/2023/05/05/ropensci-champions-program-teams-meet-carolina-pradier-and-athanasia-monika-mowinckel/","date_published":"2023-05-05T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/7mtbb-0mm25","title":"rOpenSci Champions Program Teams: Meet Bilikisu Wunmi Olatunji and Christina Maimone","language":"en","authors":[{"name":"Bilikisu Wunmi Olatunji","url":"https://ropensci.org/author/bilikisu-wunmi-olatunji/","avatar":"https://github.com/BWOlatunji.png","_role":["author"]},{"name":"Christina Maimone","url":"https://ropensci.org/author/christina-maimone/","avatar":"https://github.com/cmaimone.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["community","champions program"],"content_html":"\u003cp\u003e\u003cem\u003eWe designed the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e with a mentorship aspect. Mentoring plays a significant role in the growth and development of both mentors and mentees alike. In our program, each Champion has a mentor who accompanies them during their training and development of their project.\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cem\u003eIn this series of blog posts, we introduce you to the ten teams of this first cohort and what they will be working on in the program.\u003c/em\u003e\u003c/p\u003e\u003cp\u003eMeet \u003cstrong\u003eBilikisu Wunmi Olatunji\u003c/strong\u003e from Nigeria and \u003cstrong\u003eChristina Maimone\u003c/strong\u003e from United States!\u003c/p\u003e\u003ch2 id=\"bilikisu-wunmi-olatunji---champion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#bilikisu-wunmi-olatunji---champion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBilikisu Wunmi Olatunji - Champion\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/bilikisu-wunmi-olatunji-mentee.jpeg\"\t\t\talt=\"Profile photo of Bilikisu Wunmi Olatunji\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eBilikisu Wunmi Olatunji\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI\u0026rsquo;m a DataScientist and RShiny Developer from Nigeria based in the country\u0026rsquo;s capitalcity, Abuja. I\u0026rsquo;m a certified RStudio Instructor for Tidyverse and R Shiny and have a Master\u0026rsquo;s of Science from the University of Liverpool, UK.\u003c/p\u003e\u003cp\u003eI\u0026rsquo;m also the founder and co-organizer of \u003ca href=\"https://www.meetup.com/es/Abuja-R-User-Group-Meetup/\"\u003eAbuja R Users Group\u003c/a\u003e and\u003ca href=\"https://www.meetup.com/es/rladies-abuja/\"\u003eR-Ladies Abuja\u003c/a\u003e. My interest is in geospatial data science, and I have been working onseveral related projects using R.\u003c/p\u003e\u003cp\u003eI\u0026rsquo;ll be working on a package to ease theuse of geospatial data for Microplanning in public health. I\u0026rsquo;ll also be volunteering on other projects to strengthen the R open science community.\u003c/p\u003e\u003c/br\u003e\u003c/br\u003e\u003ch2 id=\"christina-maimone---mentor\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#christina-maimone---mentor\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChristina Maimone - Mentor\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/christina-maimone-mentor.jpg\"\t\t\talt=\"Profile photo of Christina Maimone\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eChristina Maimone\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am the associate director of research data services for Northwestern University\u0026rsquo;s Research Computing Services team (Chicago, USA). Our team provides data science, data visualization, software development, and data management support and training for researchers at the university. I also teach data visualization in the MS in Health Analytics program at Northwestern. I\u0026rsquo;m a founding member of the \u003ca href=\"https://us-rse.org/\"\u003eUS Research Software Engineer (US-RSE) Association\u003c/a\u003e steering committee, and I\u0026rsquo;m active in the research computing and data community with organizations including \u003ca href=\"https://carcc.org/\"\u003eCaRCC\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eI\u0026rsquo;ve been using and teaching R for over 20 years. My background is in computational social science. I have a PhD in political science and MS in statistics from Stanford University.\u003c/p\u003e\u003cp\u003eI\u0026rsquo;ve been a reviewer for \u003ca href=\"https://joss.theoj.org/\"\u003eJOSS\u003c/a\u003e, but not for any rOpenSci packages yet, so the Champions program is a way for me to help contribute to the community. Building and maintaining communities is hard, so I\u0026rsquo;m happy to support efforts that encourage more people to actively engage and become new leaders. I hope to see more R developers active in the research software engineering community as well.\u003c/p\u003e\u003cp\u003e\u003cem\u003eWe\u0026rsquo;re excited to have both Bilikisu and Christina as part of the Champions program and can\u0026rsquo;t wait to see what this partnership yields. Stay-tuned for the next series of introductions\u003c/em\u003e 😉 .\u003c/p\u003e","url":"https://ropensci.org/blog/2023/04/25/ropensci-champions-program-teams-meet-bilikisu-wunmi-olatunji-and-christina-maimone/","date_published":"2023-04-25T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/twge1-7f552","title":"rOpenSci News Digest, April 2023","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2023/04/21/ropensci-news-digest-april-2023\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"meeting-the-stars-of-the-r-universe-athanasia-monika-mowinckel\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#meeting-the-stars-of-the-r-universe-athanasia-monika-mowinckel\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMeeting the stars of the R-universe: Athanasia Monika Mowinckel\u003c/h3\u003e\u003cp\u003eKnowing our community\u0026rsquo;s stories helps us to learn about the people behind our software, brings us closer and offers us new opportunities. To share some of these community stories, we created the rOpenSci interview series \u003ca href=\"/tags/r-universe-stars/\"\u003e\u003cem\u003e\u0026ldquo;Meeting the stars of the R-Universe\u0026rdquo;\u003c/em\u003e\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWorking with the human brain requires specific software and complex developments. However R appears to be the natural way to collect and analyze the huge amount of data needed, and the R-Universe the most friendly place to share and invite collaborations. Our third stop brings us to Norway to talk with \u003ca href=\"/blog/2023/03/30/r-universe-stars-3-en/\"\u003eAthanasia Monika Mowinckel\u003c/a\u003e.You can also read the post in \u003ca href=\"/es/blog/2023/03/30/r-universe-stars-3-es/\"\u003eSpanish\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"multilingual-posts\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#multilingual-posts\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMultilingual posts\u003c/h3\u003e\u003cp\u003eHave you noticed several of our recent blog posts were translated to Spanish, and in one case, French?We\u0026rsquo;ve started adding actual multilingual infrastructure to our website.You can find all posts in Spanish in \u003ca href=\"https://ropensci.org/es/archive\"\u003ehttps://ropensci.org/es/archive\u003c/a\u003e (and the lone French post in \u003ca href=\"https://ropensci.org/fr/archive\"\u003ehttps://ropensci.org/fr/archive\u003c/a\u003e).From any post that has a translation, the sidebar on the right (or\u0026hellip; at the bottom if you\u0026rsquo;re reading on mobile!) has a link to translations of the post, see this \u003ca href=\"/blog/2023/02/28/r-universe-stars-2-en/\"\u003eexample\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eOver time we plan to further improve the multilingualism of our website.\u003c/p\u003e\u003ch3 id=\"18000-packages-tracked-on-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#18000-packages-tracked-on-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e18,000 packages tracked on R-Universe!\u003c/h3\u003e\u003cp\u003eCurrently R-Universe is tracking and indexing over 18,000 R packages! These are a mix of packages found on popular networks like \u003ca href=\"https://cran.r-project.org/\"\u003eCRAN\u003c/a\u003e or \u003ca href=\"https://www.bioconductor.org/\"\u003eBioconductor\u003c/a\u003e, and packages that were registered by users.\u003c/p\u003e\u003cp\u003eIn previous posts we explained \u003ca href=\"/blog/2021/06/22/setup-runiverse/\"\u003ehow to create your personal CRAN-like repository\u003c/a\u003e and publish packages on R-Universe yourself. A new post explains the other part: how the scraper \u003ca href=\"/blog/2023/04/03/cran-to-git/\"\u003eautomatically finds packages on CRAN and Bioconductor\u003c/a\u003e to include in the R-Universe.\u003c/p\u003e\u003cp\u003eAll in all, R-Universe provides a great way to \u003ca href=\"/blog/2023/02/27/runiverse-discovering/\"\u003ediscover and explore many packages\u003c/a\u003e!\u003c/p\u003e\u003ch3 id=\"help-us-put-together-the-ropensci-community-call-calendar-for-the-year\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#help-us-put-together-the-ropensci-community-call-calendar-for-the-year\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHelp us put together the rOpenSci Community Call calendar for the year!\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;ve had \u003ca href=\"https://ropensci.org/commcalls/oct2022-champions/\"\u003esome\u003c/a\u003e \u003ca href=\"https://ropensci.org/commcalls/jan2023-targets/\"\u003egreat\u003c/a\u003e community calls lately,  🎉\u003cbr\u003eand now we\u0026rsquo;d like to know what topics \u003cstrong\u003eyou\u003c/strong\u003e would like us to cover in the future!\u003c/p\u003e\u003cp\u003eWe hold \u003ca href=\"/commcalls/\"\u003eCommunity Calls\u003c/a\u003e about every 3 months to share knowledge that is relevant to our community and consistent with \u003ca href=\"/about/\"\u003eour vision and mission\u003c/a\u003e. These are free and open for anyone to attend and provide opportunities for us to connect with rOpenSci community members around the world.\u003c/p\u003e\u003cp\u003eWe’ve \u003ca href=\"https://github.com/ropensci-org/community-calls/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc\"\u003eopened an issue in this repository for each topic we’re considering\u003c/a\u003e. We\u0026rsquo;d like \u003cstrong\u003eyour input and \u0026ldquo;votes\u0026rdquo;\u003c/strong\u003e on these, and \u003cstrong\u003eyour suggestions for other topics\u003c/strong\u003e we haven\u0026rsquo;t thought of.\u003c/p\u003e\u003cp\u003eWe will also be very grateful if you suggest speakers, resources, or encourage others to weigh in by sharing the link to your favorite topic.\u003c/p\u003e\u003cp\u003eYou can \u003ca href=\"https://github.com/ropensci-org/community-calls\"\u003eread more details on our community calls repository\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe look forward to hearing your ideas. Let\u0026rsquo;s build the schedule together!\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday, May 2nd, 9:00 Americas Pacific / 16:00 UTC \u003ca href=\"/events/coworking-2023-05/\"\u003e\u0026ldquo;Spring Cleaning for R packages and scripts\u0026rdquo;\u003c/a\u003e \u003cem\u003eHosted by \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e\u003c/em\u003e\u003cul\u003e\u003cli\u003eExplore how other organizations keep their scripts/packages nice and clean\u003c/li\u003e\u003cli\u003eTake a look at your R packages and scripts and give them a good spring cleaning*\u003c/li\u003e\u003cli\u003eTalk to our community host and other attendees and discuss tips for keeping on top of it all.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e* in the northern hemisphere at least, otherwise, give them a good \u003cem\u003efall\u003c/em\u003e cleaning!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday, June 6th, 9:00 Australia Western / 01:00 UTC \u003ca href=\"/events/coworking-2023-06/\"\u003e\u0026ldquo;Integrating and merging datasets from different sources\u0026rdquo;\u003c/a\u003e \u003cem\u003eHosted by community host \u003ca href=\"/author/cynthia-huang\"\u003eCynthia Huang\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003cul\u003e\u003cli\u003eSpend time integrating datasets for your own work\u003c/li\u003e\u003cli\u003eExplore how others tackle the problem of merging datasets from different sources or different data versions\u003c/li\u003e\u003cli\u003eTalk to our community host and other attendees and discuss strategies for integrating datasets.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following three packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/concstats\"\u003econcstats\u003c/a\u003e, developed by Andreas Schneider: Based on individual market shares of all participants in a market or space, the package offers a set of different structural and concentration measures frequently - and not so frequently - used in research and in practice. Measures can be calculated in groups or individually. The calculated measure or the resulting vector in table format should help practitioners make more informed decisions. It is available on \u003ca href=\"https://CRAN.R-project.org/package=concstats\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/559\"\u003ereviewed\u003c/a\u003e by Sebastian Wojcik, and Christopher T. Kenny.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/CRediTas\"\u003eCRediTas\u003c/a\u003e, developed by Josep Pueyo-Ros: A tiny package to generate CRediT author statements (\u003ca href=\"https://credit.niso.org/\"\u003ehttps://credit.niso.org/\u003c/a\u003e). It provides three functions: create a template, read it back and generate the CRediT author statement in a text file.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=CRediTas\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/576\"\u003ereviewed\u003c/a\u003e by Marcelo S. Perlin, and João Martins.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/predictNMB\"\u003epredictNMB\u003c/a\u003e, developed by Rex Parsons together with Robin Blythe, and Adrian Barnett: Estimates when and where a model-guided treatment strategy may outperform a treat-all or treat-none approach by Monte Carlo simulation and evaluation of the Net Monetary Benefit. Details can be viewed in Parsons et al. (2023) \u003ca href=\"doi:10.21105/joss.05328\"\u003edoi:10.21105/joss.05328\u003c/a\u003e.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=predictNMB\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/566\"\u003ereviewed\u003c/a\u003e by Emi Tanaka, and Tinula Kariyawasam.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following nineteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/commonmark\" title=\"High Performance CommonMark and Github Markdown Rendering in R\"\u003ecommonmark\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/commonmark/releases/tag/v1.9.0\"\u003e\u003ccode\u003ev1.9.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/chromer\" title=\"Interface to Chromosome Counts Database API\"\u003echromer\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/chromer/releases/tag/v0.4\"\u003e\u003ccode\u003ev0.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ckanr\" title=\"Client for the Comprehensive Knowledge Archive Network (CKAN) API\"\u003eckanr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ckanr/releases/tag/v0.7.0\"\u003e\u003ccode\u003ev0.7.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/concstats\" title=\"Market Structure, Concentration and Inequality Measures\"\u003econcstats\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/concstats/releases/tag/v0.1.6\"\u003e\u003ccode\u003ev0.1.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/CRediTas\" title=\"Generate CRediT Author Statements\"\u003eCRediTas\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/CRediTas/releases/tag/Zenodo_v0.2.0\"\u003e\u003ccode\u003eZenodo_v0.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dbparser\" title=\"Drugs Databases Parser\"\u003edbparser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dbparser/releases/tag/v2.0.1\"\u003e\u003ccode\u003ev2.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dittodb\" title=\"A Test Environment for Database Requests\"\u003edittodb\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dittodb/releases/tag/v0.1.6\"\u003e\u003ccode\u003ev0.1.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/drake\" title=\"A Pipeline Toolkit for Reproducible Computation at Scale\"\u003edrake\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/drake/releases/tag/7.13.5\"\u003e\u003ccode\u003e7.13.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dynamite\" title=\"Bayesian Modeling and Causal Inference for MultivariateLongitudinal Data\"\u003edynamite\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dynamite/releases/tag/1.3.2\"\u003e\u003ccode\u003e1.3.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ezknitr\" title=\"Avoid the Typical Working Directory Pain When Using knitr\"\u003eezknitr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ezknitr/releases/tag/v0.6.2\"\u003e\u003ccode\u003ev0.6.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/git2r\" title=\"Provides Access to Git Repositories\"\u003egit2r\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/git2r/releases/tag/v0.32.0\"\u003e\u003ccode\u003ev0.32.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.9.2\"\u003e\u003ccode\u003ev0.9.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/predictNMB\" title=\"Evaluate Clinical Prediction Models by Net Monetary Benefit\"\u003epredictNMB\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/predictNMB/releases/tag/v0.1.0\"\u003e\u003ccode\u003ev0.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/qpdf\" title=\"Split, Combine and Compress PDF Files\"\u003eqpdf\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/qpdf/releases/tag/v1.3.2\"\u003e\u003ccode\u003ev1.3.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgbif\" title=\"Interface to the Global Biodiversity Information Facility API\"\u003ergbif\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgbif/releases/tag/v3.7.7\"\u003e\u003ccode\u003ev3.7.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rtweet\" title=\"Collecting Twitter Data\"\u003ertweet\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rtweet/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/taxizedb\" title=\"Tools for Working with Taxonomic Databases\"\u003etaxizedb\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/taxizedb/releases/tag/v0.3.1\"\u003e\u003ccode\u003ev0.3.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tinkr\" title=\"Cast (R)Markdown Files to XML and Back Again\"\u003etinkr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tinkr/releases/tag/0.2.0\"\u003e\u003ccode\u003e0.2.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/waywiser\" title=\"Ergonomic Methods for Assessing Spatial Models\"\u003ewaywiser\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/waywiser/releases/tag/v0.3.0\"\u003e\u003ccode\u003ev0.3.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are thirteen recently closed and active submissions and 2 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/576\"\u003eCRediTas\u003c/a\u003e, Generate CRediT Author Statements. Submitted by \u003ca href=\"https://github.com/jospueyo\"\u003eJosep Pueyo-Ros\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/566\"\u003epredictNMB\u003c/a\u003e, Evaluate Clinical Prediction Models by Net Monetary Benefit. Submitted by \u003ca href=\"https://rwparsons.github.io/\"\u003eRex Parsons\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/559\"\u003econcstats\u003c/a\u003e, Market Structure, Concentration and Inequality Measures. Submitted by \u003ca href=\"https://github.com/schneiderpy\"\u003eAndreas Schneider\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/577\"\u003ebirdsize\u003c/a\u003e, Estimate Avian Body Size Distributions. Submitted by \u003ca href=\"https://diazrenata.github.io/home/\"\u003eRenata Diaz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/574\"\u003edwctaxon\u003c/a\u003e, Tools for Working with Darwin Core Taxon Data. Submitted by \u003ca href=\"https://joelnitta.com\"\u003eJoel Nitta\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/568\"\u003eohun\u003c/a\u003e, Optimizing Acoustic Signal Detection. Submitted by \u003ca href=\"https://marceloarayasalas.weebly.com/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/546\"\u003eNA\u003c/a\u003e, NA. Submitted by \u003ca href=\"https://s3alfisc.github.io/blog/\"\u003eAlexander Fischer\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"https://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003epangoling\u003c/a\u003e, Access to Large Language Model Predictions. Submitted by \u003ca href=\"https://bnicenboim.github.io/\"\u003eBruno Nicenboim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/572\"\u003equaltdict\u003c/a\u003e, Generating Variable Dictionaries and Labelled Data Exports of Qualtrics. Submitted by \u003ca href=\"https://github.com/lyh970817\"\u003elyh970817\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2023/04/21/ropensci-news-digest-april-2023\"\u003ewaywiser is Now a Part of rOpenSci\u003c/a\u003e by Mike Mahoney. Plus version 0.3.0 now on CRAN, and a new preprint.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"other-topics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-topics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOther topics\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2023/04/21/ropensci-news-digest-april-2023\"\u003eMeeting the Stars of the R-Universe: Researching Our Brain with the Magic of the R-Universe\u003c/a\u003e by Yanina Bellini Saibene, Alejandra Bellini, Lucio Casalla, and Steffi LaZerte. Working with the human brain requires specific software and complex developments, however R appears as the natural way to collect hundreds of data that need to be analyzed and the R-Universe as the most friendly place to share and invite to collaborate. Our third stop bring us to \u003cstrong\u003eNorway\u003c/strong\u003e to talk with \u003cstrong\u003eAthanasia Monika Mowinckel\u003c/strong\u003e. Other languages: \u003ca href='/es/blog/2023/03/30/r-universe-stars-3-es' lang='es'\u003eConociendo a las estrellas del Universo R: Investigando nuestro cerebro con la magia del universo R (es)\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2023/04/21/ropensci-news-digest-april-2023\"\u003eHow r-universe searches for packages on CRAN / Bioconductor\u003c/a\u003e by Jeroen Ooms. How r-universe searches for, and includes, packages on CRAN / Bioconductor that are available on GitHub or GitLab or R-forge.\u003c/li\u003e\u003c/ul\u003e\u003c!-- ## Use cases`snakecase::to_sentence_case(english(length(usecases)))` use case` if (length(usecases) \u003e 1) \"s\"` of our packages and resources ha` if (length(usecases) \u003e 1) \"ve\" else \"s\"` been reported since we sent the last newsletter.Explore [other use cases](/usecases) and [report your own](https://discuss.ropensci.org/c/usecases/10)! --\u003e\u003ch2 id=\"call-for-comaintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-comaintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for (co)maintainers\u003c/h2\u003e\u003ch3 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e (or listening to its discussion on the \u003ca href=\"https://rweekly.fireside.fm/111\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas)!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/rvertnet/index.html\"\u003ervertnet\u003c/a\u003e\u003c/strong\u003e, Retrieve, map and summarize data from the VertNet.org archives (\u003ca href=\"https://vertnet.org/\"\u003ehttps://vertnet.org/\u003c/a\u003e). Functions allow searching by many parameters, including taxonomic names, places, and dates. In addition, there is an interface for conducting spatially delimited searches, and another for requesting large datasets via email. \u003ca href=\"https://github.com/ropensci-archive/rvertnet/issues/71\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/natserv/index.html\"\u003enatserv\u003c/a\u003e\u003c/strong\u003e. Interface to NatureServe (\u003ca href=\"https://www.natureserve.org/\"\u003ehttps://www.natureserve.org/\u003c/a\u003e). Includes methods to get data, image metadata, search taxonomic names, and make maps. \u003ca href=\"https://github.com/ropensci-archive/natserv/issues/29\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/geojsonlint/index.html\"\u003egeojsonlint\u003c/a\u003e\u003c/strong\u003e, Tools for linting GeoJSON. Includes tools for interacting with the online tool \u003ca href=\"https://geojsonlint.com\"\u003ehttps://geojsonlint.com\u003c/a\u003e, the Javascript library geojsonhint (\u003ca href=\"https://www.npmjs.com/package/geojsonhint\"\u003ehttps://www.npmjs.com/package/geojsonhint\u003c/a\u003e), and validating against a GeoJSON schema via the Javascript library (\u003ca href=\"https://www.npmjs.com/package/is-my-json-valid\"\u003ehttps://www.npmjs.com/package/is-my-json-valid\u003c/a\u003e). Some tools work locally while others require an internet connection. \u003ca href=\"https://github.com/ropensci-archive/geojsonlint/issues/22\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://docs.ropensci.org/citesdb/\"\u003ecitesdb\u003c/a\u003e\u003c/strong\u003e, a high-performance database of shipment-level CITES trade data. Provides convenient access to over 40 years and 20 million records ofendangered wildlife trade data from the Convention on International Tradein Endangered Species of Wild Fauna and Flora, stored on a local on-disk,out-of memory \u0026lsquo;DuckDB\u0026rsquo; database for bulk analysis. \u003ca href=\"https://github.com/ropensci/citesdb/issues/21\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"call-for-comaintainers-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-comaintainers-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for comaintainers\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/#packages-looking-for-co-maintainers\"\u003erecent blog post\u003c/a\u003e to identify other packages where help is especially wished for!\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"caching-the-results-of-functions-of-your-r-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#caching-the-results-of-functions-of-your-r-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCaching the results of functions of your R package\u003c/h3\u003e\u003cp\u003eThe R-hub blog has a post on \u003ca href=\"https://blog.r-hub.io/2021/07/30/cache/\"\u003eCaching the results of functions of your R package\u003c/a\u003e by Maëlle Salmon and Christophe Dervieux.It presents different approaches.A recent PR by Lukas Wallrich to rcrossref maintained by Najko Jahn illustrates the approach of \u003ca href=\"https://github.com/ropensci/rcrossref/pull/237\"\u003esaving results to an environment\u003c/a\u003e (and reminded us about the topic of caching!).\u003c/p\u003e\u003ch3 id=\"deprecated-data-in-a-package-with-delayedassign\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#deprecated-data-in-a-package-with-delayedassign\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDeprecated data in a package with \u003ccode\u003edelayedAssign()\u003c/code\u003e\u003c/h3\u003e\u003cp\u003eIf you need to change something like a function or function arguments in your package, you\u0026rsquo;ll find many resources in, say, the \u003ca href=\"https://devguide.ropensci.org/evolution.html\"\u003erOpenSci dev guide\u003c/a\u003e, or the \u003ca href=\"https://lifecycle.r-lib.org/\"\u003elifecycle package docs\u003c/a\u003e.Now what if you want to deprecate a \u003cstrong\u003edataset\u003c/strong\u003e?Read the \u003ca href=\"https://stackoverflow.com/questions/33304651/data-deprecation-in-r-package/75192818#75192818\"\u003esolution proposed by Matthijs Berends on Stack Overflow\u003c/a\u003e, linking to \u003ca href=\"https://contributions.bioconductor.org/deprecation.html#deprecate-dataset\"\u003ea 3-step method in Bioconductor guidance\u003c/a\u003e.Key is the usage of \u003ccode\u003edelayedAssign()\u003c/code\u003e to save a promise that will serve both a warning, and the data.We might mention this approach in a future version of our \u003ca href=\"https://github.com/ropensci/dev_guide/issues/649\"\u003edev guide\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eYou might remember \u003ccode\u003edelayedAssign()\u003c/code\u003e from a \u003ca href=\"/blog/2022/01/21/ropensci-news-digest-january-2022/#how-to-provide-tibbles-only-to-those-who-like-them\"\u003estrategy to provide data as tibble only when tibble is installed\u003c/a\u003e.Useful function!\u003c/p\u003e\u003ch3 id=\"important-change-for-cran-packages-with-compiled-code\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#important-change-for-cran-packages-with-compiled-code\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eImportant change for CRAN packages with compiled code\u003c/h3\u003e\u003cp\u003eAndy Teucher, R Package Developer Educator at Posit PBC, wrote a post about \u003ca href=\"https://www.tidyverse.org/blog/2023/03/cran-checks-compiled-code/\"\u003e\u0026ldquo;New CRAN requirements for packages with C and C++\u0026rdquo;\u003c/a\u003e.Good to know for packages on CRAN, or to be submitted to CRAN, with compiled code!\u003c/p\u003e\u003ch3 id=\"let-dependabot-monitor-updates-to-your-github-actions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#let-dependabot-monitor-updates-to-your-github-actions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLet dependabot monitor updates to your GitHub Actions\u003c/h3\u003e\u003cp\u003eA tip by Jacob Wujciak-Jens.Dependabot alerts are really easy to set up to monitor for updates to actions, like this \u003ca href=\"https://github.com/ropensci-review-tools/pkgcheck/blob/main/.github/dependabot.yml\"\u003eexample\u003c/a\u003e.See the \u003ca href=\"https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates#enabling-dependabot-version-updates\"\u003eFull GitHub docs\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/04/21/ropensci-news-digest-april-2023/","date_published":"2023-04-21T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/98hh8-dj265","title":"rOpenSci Champions Program Teams: Meet Marcos Prunello and Lukas Wallrich","language":"en","authors":[{"name":"Lukas Wallrich","url":"https://ropensci.org/author/lukas-wallrich/","avatar":"https://github.com/LukasWallrich.png","_role":["author"]},{"name":"Marcos Prunello","url":"https://ropensci.org/author/marcos-prunello/","avatar":"https://github.com/mpru.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["community","champions program"],"content_html":"\u003cp\u003e\u003cem\u003eWe designed the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e with a mentorship aspect. Mentoring plays a significant role in the growth and development of both mentors and mentees alike. In our program, each Champion has a mentor who accompanies them during their training and development of their project.\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cem\u003eIn this series of blog posts, we introduce you to the ten teams of this first cohort and what they will be working on in the program.\u003c/em\u003e\u003c/p\u003e\u003cp\u003eMeet \u003cstrong\u003eMarcos Prunello\u003c/strong\u003e from Argentina and \u003cstrong\u003eLukas Wallrich\u003c/strong\u003e from United Kingdom!\u003c/p\u003e\u003ch2 id=\"marcos-prunello---champion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#marcos-prunello---champion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMarcos Prunello - Champion\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/marcos-prunello-mentee.jpg\"\t\t\talt=\"Profile photo of Marcos Prunello\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eMarcos Prunello\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eMy name is Marcos Prunello and I’m from Argentina. I have a Bachelor of Science in Statistics from Universidad Nacional de Rosario (UNR) and an Academic Master of Science from Stanford University. I am currently working full time as a statistician and professor at UNR, where I have been teaching Statistics and Data Science for several years, training students in topics related to programming, exploratory data analysis, numerical methods and non-parametric statistics.  I am also a co-founder of the R User Group in my city \u0026ldquo;R in Rosario\u0026rdquo; and I am frequently invited to different places to offer workshops on the use of R.\u003c/p\u003e\u003cp\u003eIn my work, I have chosen to teach my classes and produce my study materials using R. In doing so I grew interested in being part of the community of developers that make data analysis tools available for everyone and developed some packages that are now in CRAN (\u003ca href=\"https://mpru.github.io/ggcleveland/\"\u003eggcleveland\u003c/a\u003e, \u003ca href=\"https://jangelini.github.io/geneticae/\"\u003egeneticae\u003c/a\u003e). However, I recently worked on a project that allowed me to combine my interest in teaching and software development: a bilingual package called \u003ca href=\"https://mpru.github.io/karel/\"\u003ekarel\u003c/a\u003e that aims to teach general notions of programming in R in an interactive way for people without any kind of knowledge. Considering that education is a pillar for the construction of reproducible and open research, I applied to rOpenSci’s Champions Program to submit this package for discussion and review. I consider that this will be a good opportunity to get involved in a community of practice as a continuation of the path I am following and with the certainty that the experience acquired will have a positive impact in my work environment.\u003c/p\u003e\u003c/br\u003e\u003ch2 id=\"lukas-wallrich---mentor\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#lukas-wallrich---mentor\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLukas Wallrich - Mentor\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/lukas-mentor.jpeg\"\t\t\talt=\"Profile photo of Lukas Wallrich\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eLukas Wallrich\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI am Lukas Wallrich - originally from Germany - and work as a lecturer (associate professor) in Organisational Psychology at Birkbeck, University of London, in the UK. My academic research focuses on the opportunities that come with workforce diversity, as well as on the adoption of Open Science practices - and these practices, together with my passion for R, have shaped much of my research methods teaching. In addition, I enjoy developing tools that support reproducible science. I have authored two R packages (\u003ca href=\"https://lukaswallrich.github.io/rsprite2/\"\u003ersprite2\u003c/a\u003e and \u003ca href=\"https://lukaswallrich.github.io/timesaveR/\"\u003etimesaveR\u003c/a\u003e) and contributed to several others. As a mentor in the Champion Program, I hope to pass on some of my knowledge and experience, get to know new members of the R community, and support the development of exciting new tools.\u003c/p\u003e\u003cp\u003eThis partnership is already hard at work on Marcos\u0026rsquo; project; we\u0026rsquo;re excited to see how it goes!  Be sure to not miss the next series of introductions 😉 .\u003c/p\u003e","url":"https://ropensci.org/blog/2023/04/18/ropensci-champions-program-teams-meet-marcos-prunello-and-lukas-wallrich/","date_published":"2023-04-18T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/zs8hq-dty79","title":"rOpenSci Champions Program Teams: Meet Pao Corrales and Adam Sparks","language":"en","authors":[{"name":"Adam Sparks","url":"https://ropensci.org/author/adam-sparks/","avatar":"https://github.com/adamhsparks.png","_role":["author"]},{"name":"Pao Corrales","url":"https://orcid.org/0000-0003-1923-9129","avatar":"https://ropensci.org/img/team/paola-corrales.png","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["editor"]}],"tags":["community","champions program"],"content_html":"\u003cp\u003e\u003cem\u003eWe designed the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e with a mentorship aspect. Mentoring plays a significant role in the growth and development of both mentors and mentees alike. In our program, each Champion has a mentor who accompanies them during their training and development of their project.\u003c/em\u003e\u003c/p\u003e\u003cp\u003e\u003cem\u003eIn this series of blog posts, we introduce you to the ten teams of this first cohort and what they will be working on in the program.\u003c/em\u003e\u003c/p\u003e\u003cp\u003eFirst, meet \u003cstrong\u003ePaola Corrales\u003c/strong\u003e from Argentina and \u003cstrong\u003eAdam Sparks\u003c/strong\u003e from Australia!\u003c/p\u003e\u003ch2 id=\"pao-corrales---champion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pao-corrales---champion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePao Corrales - Champion\u003c/h2\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/paola-corrales.png\"\t\t\talt=\"Profile photo of Paola Corrales\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003ePao Corrales\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eI’m a PhD student at the University of Buenos Aires. I study Atmospheric Sciences applying data assimilation techniques to improve short-term forecasts of severe events in Argentina. I love R and teaching science and programming using evidence-based practices centered on the students and their context.\u003c/p\u003e\u003cp\u003eAs a Champion, I would like to submit the \u003ca href=\"https://github.com/AgRoMeteorologiaINTA/agromet\"\u003e{agromet} R package\u003c/a\u003e to the peer review process and gain more experience as a developer. I hope that this package, designed for agrometeorological applications and thoroughly documented in Spanish, can be improved and used by many people.\u003c/p\u003e\u003cp\u003eI\u0026rsquo;m also looking forward to sharing experiences between Champions and learning from everyone during this process.\u003c/p\u003e\u003c/br\u003e\u003ch2 id=\"adam-sparks---mentor\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#adam-sparks---mentor\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAdam Sparks - Mentor\u003c/h2\u003e\u003cp\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/adam-sparks.jpg\"\t\t\talt=\"Profile photo of Adam Sparks\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eAdam Sparks\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003eI lead a research group for the Department of Primary Industries and Regional Development (DPIRD) of Western Australia in Perth, WA, Australia that conducts research in the areas of agricultural systems modelling and climate change, maintains a weather station network and provides biometry (statistical) support for the department.\u003c/p\u003e\u003cp\u003eI\u0026rsquo;m a co-founder of \u003ca href=\"https://openplantpathology.org/\"\u003eOpen Plant Pathology\u003c/a\u003e, and currently serve as an editor for rOpenSci.I have authored or co-authored more than seven R packages for CRAN and maintain one registered Julia package.\u003c/p\u003e\u003cp\u003eI was born in Indiana, USA and earned an undergraduate degree in agronomy from Purdue University, a graduate certificate in geographic information science (GIS) and my PhD in plant pathology on the epidemiology and ecology of plant pathogens from Kansas State University in the USA.Initially, when I moved to Australia I lived in Queensland for five years and more recently moved to Western Australia where I became a naturalized citizen, and I am now usually found in Perth, WA, Australia these days.\u003c/p\u003e\u003cp\u003eI\u0026rsquo;m excited for the Champions program because it\u0026rsquo;s a great way for me to contribute back to the broader R community and more specifically rOpenSci, which has been so supportive in my development as an R user and developer.\u003c/p\u003e\u003cp\u003e\u003cem\u003eWe\u0026rsquo;re excited to have both Pao and Adam be part of the Champions program and can\u0026rsquo;t wait to see what this partnership yields. Stay-tuned for the next series of introductions\u003c/em\u003e 😉 .\u003c/p\u003e","url":"https://ropensci.org/blog/2023/04/13/ropensci-champions-program-teams-meet-pao-corrales-and-adam-sparks/","date_published":"2023-04-13T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/882x3-k1122","title":"waywiser is Now a Part of rOpenSci","language":"en","authors":[{"name":"Mike Mahoney","url":"https://orcid.org/0000-0003-2402-304X","avatar":"https://github.com/mikemahoney218.png","_role":["author"]}],"tags":["Software Peer Review","packages","R","tech notes","geospatial","tidymodels","community"],"content_html":"\u003cp\u003eI\u0026rsquo;m thrilled to share that \u003ca href=\"https://docs.ropensci.org/waywiser/\"\u003ewaywiser\u003c/a\u003e, my R package focused on providing framework-agnostic (but \u003ca href=\"https://www.tidymodels.org/\"\u003etidymodels\u003c/a\u003e-friendly) methods for assessing models fit to spatial data\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e, has passed \u003ca href=\"/software-review/\"\u003epeer review\u003c/a\u003e and been accepted to \u003ca href=\"/\"\u003erOpenSci\u003c/a\u003e. As always, \u003ca href=\"https://github.com/ropensci/software-review/issues/571\"\u003ethe review process\u003c/a\u003e improved the package immensely, thanks to the thoughtful reviews of \u003ca href=\"https://becarioprecario.github.io/\"\u003eVirgilio Gómez-Rubio\u003c/a\u003e and \u003ca href=\"https://jakubnowosad.com/\"\u003eJakub Nowosad\u003c/a\u003e\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e, as well as the shepherding of \u003ca href=\"https://www.r-rse.eu/\"\u003eAnna Krystalli\u003c/a\u003e and \u003ca href=\"https://www.paulamoraga.com/\"\u003ePaula Moraga\u003c/a\u003e as editors.\u003c/p\u003e\u003cp\u003eAs of Monday, March 20th, the reviewed version has officially \u003ca href=\"https://cran.r-project.org/package=waywiser\"\u003emade its way to CRAN\u003c/a\u003e. This is a \u003ca href=\"https://docs.ropensci.org/waywiser/news/index.html#waywiser-030\"\u003ehuge update\u003c/a\u003e, bringing in a ton of new functions and improving consistency and speed across the package, and I\u0026rsquo;m excited to have it officially released.\u003c/p\u003e\u003cp\u003eI\u0026rsquo;m also very excited to have put out a \u003ca href=\"https://arxiv.org/abs/2303.11312\"\u003epreprint describing the package\u003c/a\u003e, which goes a bit deeper into the logic of why and how the package implements the features it does. This is my first solo-authored paper\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e, and by far and away the one with the most equations\u003csup id=\"fnref:4\"\u003e\u003ca href=\"#fn:4\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e4\u003c/a\u003e\u003c/sup\u003e. Despite both of those, I\u0026rsquo;m pretty pleased with how this paper turned out; I think it\u0026rsquo;s a useful addition to the package documentation for users who want a more thorough explication of the scholarly background of package features.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eI use this terminology in a number of places throughout the documentation to try and emphasize that nothing about the models themselves need to be spatial. The models don\u0026rsquo;t need to incorporate spatial information at all for these methods to be useful. I\u0026rsquo;ll admit that it\u0026rsquo;s a bit clunky, though, and have a habit of lapsing back to \u0026ldquo;spatial models\u0026rdquo;.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eOnly a little intimidating having my package reviewed by the authors of two of the best books on using R for spatial analysis!\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eAnd frankly, I don\u0026rsquo;t intend to make it a habit. I highly appreciate working with collaborators, particularly with my current research group, and know that my work is usually better for having gone through multiple rounds of revisions before being released. I really missed that process while working on this paper!\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:4\"\u003e\u003cp\u003e23 numbered equations! My undergraduate degree is in ecology, where \u003ca href=\"https://www.pnas.org/doi/abs/10.1073/pnas.1205259109\"\u003eeach additional equation per page is associated with 28% fewer citations\u003c/a\u003e; four years ago I\u0026rsquo;d never have expected I\u0026rsquo;d be writing a paper that looks like this.\u0026#160;\u003ca href=\"#fnref:4\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2023/04/04/waywiser-is-now-a-part-of-ropensci/","date_published":"2023-04-04T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/ca62f-rtm78","title":"How r-universe searches for packages on CRAN / Bioconductor","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","tech notes","registry","packages","dashboard"],"content_html":"\u003ch2 id=\"how-packages-appear-in-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-packages-appear-in-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow packages appear in r-universe\u003c/h2\u003e\u003cp\u003eLast month we explained how r-universe makes it easy to search and browse through the countless R packages, articles, and datasets to let you \u003ca href=\"/blog/2023/02/27/runiverse-discovering/\"\u003ediscover and learn\u003c/a\u003e new things. We are continuously growing this database by adding more R projects, to guide you through everything the R ecosystem has to offer.\u003c/p\u003e\u003cp\u003eCurrently r-universe is tracking and indexing of over 18.000 R packages. These are a mix of packages found on popular networks like \u003ca href=\"https://cran.r-project.org/\"\u003eCRAN\u003c/a\u003e or \u003ca href=\"https://www.bioconductor.org/\"\u003eBioconductor\u003c/a\u003e, and packages that were registered by users.\u003c/p\u003e\u003cp\u003eIn previous posts we already explained \u003ca href=\"/blog/2021/06/22/setup-runiverse/\"\u003ehow to create your personal CRAN-like repository\u003c/a\u003e and publish packages on r-universe yourself. This post explains the other part: how the scraper automatically finds packages on CRAN and Bioconductor that should be included in r-universe.\u003c/p\u003e\u003ch2 id=\"why-we-look-for-the-upstream-package-source\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-we-look-for-the-upstream-package-source\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy we look for the upstream package source\u003c/h2\u003e\u003cp\u003eFor R packages to be trackable by r-universe, the source has to be publicly accessible via Git\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e. Most packages in r-universe are found on GitHub, but in fact any Git server is allowed.\u003c/p\u003e\u003cp\u003eWe strongly prefer tracking projects from their official upstream Git source, where the authors commit changes and where users report bugs. The Git source provides a lot of useful information such as:\u003c/p\u003e\u003cul\u003e\u003cli\u003eThe latest changes\u003c/li\u003e\u003cli\u003eWho is the owner of the project\u003c/li\u003e\u003cli\u003eIf there is an active bug tracker\u003c/li\u003e\u003cli\u003eHistorical statistics on development activity and contributors\u003c/li\u003e\u003cli\u003eProject metadata, such as keywords\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eR-universe automatically analyses all this information, uses it to rank and classify packages, and presents the data via the \u003ca href=\"https://r-universe.dev\"\u003er-universe.dev\u003c/a\u003e web user interfaces and APIs. For this reason we really want to know the official Git url and owner, even when a copy of the package exists on CRAN or BioConductor.\u003c/p\u003e\u003ch2 id=\"how-we-determine-the-upstream-source\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-we-determine-the-upstream-source\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow we determine the upstream source\u003c/h2\u003e\u003cp\u003eFor all R packages on CRAN and BioConductor we perform the following steps to try to find the upstream git source url:\u003c/p\u003e\u003col\u003e\u003cli\u003eInspect the \u003ccode\u003eURL\u003c/code\u003e and \u003ccode\u003eBugReports\u003c/code\u003e field in the DESCRIPTION file to look for a github/gitlab/bitbucket/r-forge url. If the package can be found here, this is the preferred method.\u003c/li\u003e\u003cli\u003eIf this fails, but the maintainer has a GitHub account, we look for the package under this Github account. If the package is found and the version is equal or greater than the version on CRAN or Bioconductor, this is treated as the official source.\u003c/li\u003e\u003cli\u003eFinally if the maintainer has a Github account, but we could not find the package there either, we add a copy of the package from \u003ca href=\"https://github.com/cran\"\u003emetacran\u003c/a\u003e in the universe of the maintainer. As explained earlier, for this set of packages we do not have upstream metadata, so we can only index the package content and some maintainer information.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eThis list of package URLs is updated every night and published in \u003ca href=\"https://github.com/r-universe-org/cran-to-git/blob/master/crantogit.csv\"\u003ecrantogit\u003c/a\u003e. Today\u0026rsquo;s statistics are:\u003c/p\u003e\u003cul\u003e\u003cli\u003e10.805 CRAN/Bioc packages found at the Git url mentioned in the DESCRIPTION file (yay, you rule!)\u003c/li\u003e\u003cli\u003e1.983 packages found under the maintainer\u0026rsquo;s personal Github account\u003c/li\u003e\u003cli\u003e4.613 packages ingested from the CRAN/Bioc mirror in the maintainer\u0026rsquo;s universe\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eCurrently we do not process CRAN/Bioc packages that have no public Git source, and also the maintainer has no Github account, because we cannot determine the owner (and hence r-universe subdomain).\u003c/p\u003e\u003cp\u003eThis is roughly how it works, but there are some caveats. For example, the scraper may not be able to find a package if it is stored in an unusual subdirectory within a Git repository. Also, CRAN has an unusual practice of unpredictably archiving and unarchiving packages. Therefore, packages that get archived on CRAN and are also not part of any other registry, still remain on r-universe for 2 months.\u003c/p\u003e\u003ch2 id=\"tips-for-package-authors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tips-for-package-authors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTips for package authors\u003c/h2\u003e\u003cp\u003eIf you maintain an R package, regardless of where you publish it, I highly recommend these two things to let us (and others) identify the official source and maintainer of the project:\u003c/p\u003e\u003cul\u003e\u003cli\u003ePut the Github/Gitlab/R-forge/Bitbucket home of your project in the \u003ccode\u003eURL\u003c/code\u003e and/or \u003ccode\u003eBugReports\u003c/code\u003e fields in the package DESCRIPTION file when you publish on CRAN/BioConductor\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e. This makes it clear where to report bugs, and also prevents confusion about the official source if someone forks your package, or creates a package with the same name.\u003c/li\u003e\u003cli\u003eIf you have a GitHub account (even if you never use it!), do register your maintainer email address(es) in your \u003ca href=\"https://github.com/settings/emails\"\u003eGithub account settings\u003c/a\u003e (see also \u003ca href=\"https://github.com/r-universe-org/help#how-to-link-a-maintainer-email-addresses-to-a-username-on-r-universe\"\u003ethis faq\u003c/a\u003e). This way the maintainer can be linked to your github account/picture and systems like r-universe and metacran can correctly identify ownership and contributions.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFinally I want to emphasize again that packages do not need to be on CRAN or Bioconductor to be included in r-universe. It is super easy to \u003ca href=\"/blog/2021/06/22/setup-runiverse/\"\u003esetup your own universe\u003c/a\u003e and get the same benefits!\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eOne notable exception is \u003ca href=\"https://r-forge.r-project.org/\"\u003er-forge\u003c/a\u003e which uses SVN, but has a live Git mirror on \u003ca href=\"https://github.com/r-forge\"\u003egithub.com/r-forge\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eYou can do it manually or by running \u003ca href=\"https://usethis.r-lib.org/reference/use_github_links.html\"\u003e\u003ccode\u003eusethis::use_github_links()\u003c/code\u003e\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2023/04/03/cran-to-git/","date_published":"2023-04-03T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/hv949-h1b33","title":"Meeting the Stars of the R-Universe: Researching Our Brain with the Magic of the R-Universe","language":"en","authors":[{"name":"Alejandra Bellini","url":"https://ropensci.org/author/alejandra-bellini/","avatar":"https://ropensci.org/img/community/ale-bellini.jpeg","_role":["author"]},{"name":"Athanasia Mo Mowinckel","url":"https://ropensci.org/author/athanasia-mo-mowinckel/","avatar":"https://github.com/drmowinckels.png","_role":["interviewee"]},{"name":"Lucio Casalla","url":"https://ropensci.org/author/lucio-casalla/","avatar":"https://ropensci.org/img/community/lucio-casalla.JPG","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","r-universe","interviews","r-universe-stars"],"content_html":"\u003cp\u003eA new post of our interview series \u003ca href=\"/tags/r-universe-stars/\"\u003e“Meeting the stars of the R-universe”\u003c/a\u003e. We aim to introduce the teams and people behind the development of software and packages many of us use and which are available through the R-Universe. We want to highlight and explore different teams and projects around the world, the work they do, their processes and users. Our third stop is \u003cstrong\u003eNorway\u003c/strong\u003e to talk with \u003cstrong\u003eAthanasia Monika Mowinckel\u003c/strong\u003e. Be sure to watch the \u003ca href=\"/blog/2023/03/30/r-universe-stars-3-en/#video-of-the-interview\"\u003evideo\u003c/a\u003e at the end with excerpts from the interview.\u003c/p\u003e\u003cp\u003eWorking with the human brain requires specific software and complex developments. However R appears to be the natural way to collect and analyze the huge amount of data needed, and the R-Universe the most friendly place to share and invite collaborations.\u003c/p\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/team/mo-mentor.png\"\t\t\talt=\"Profile photo of Athanasia Monika Mowinckel.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eAthanasia Monika Mowinckel\u003c/strong\u003e\u003cbr\u003eResearcher and RSE\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eAthanasia Monika Mowinckel introduces herself simply as Mo, which is her nickname. But her CV is much more extensive and includes, among many other activities, her current work at the \u003ca href=\"https://www.sv.uio.no/psi/english/research/groups/lcbc/index.html\"\u003eCenter for Lifespan Changes in Brain and Cognition\u003c/a\u003e at the University of Oslo in Norway. She works there as a scientist and tells us that her work \u003cem\u003e\u0026ldquo;involves research software engineering or research data management\u0026rdquo;\u003c/em\u003e and because of that \u003cem\u003e\u0026ldquo;R is the default statistical program we use for our daily work at the center, and we generate results in the form of R packages.\u0026rdquo;\u003c/em\u003e\u003c/p\u003e\u003cp\u003eResearch at the center involves specialized software because of the information they need to process, such as brain images. Athanasia explains that at the end of the day all their statistics are in R, and because of that, \u003cem\u003e\u0026ldquo;having our R packages in our tool belt when we are working is super important for our staff.\u0026rdquo;\u003c/em\u003e\u003c/p\u003e\u003cp\u003eAthanasia is working on a project called \u003ca href=\"https://www.lifebrain.uio.no/\"\u003eLifeBrain\u003c/a\u003e, funded by the European Union, involving 13 European centers. Mo explains that they have developed a lot of research, written publications, and many results have been implemented in R packages. Asked about the project, with passion and great enthusiasm, Mo says:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eWe are trying to investigate how people are aging, what their brain aging is like, what their cognitive aging is like.\u003c/p\u003e\u003c/blockquote\u003e\u003ch2 id=\"r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-Universe\u003c/h2\u003e\u003cblockquote\u003e\u003cp\u003eThe R universe actually came at an extremely timely point for us,\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eAthanasia explains that this platform offered them a simple way to \u003ca href=\"https://lifebrain.r-universe.dev/\"\u003eshow all the software they were working on\u003c/a\u003e. In this research development, there are different types and sources of funding. Even though they have a collective organization in GitHub, they needed a clear way to show all the work that is distributed in different repositories in the personal accounts of the researchers or the accounts of the research centers. That is why Mo assures that in R-Universe \u0026ldquo;\u003cem\u003ewe can create a place for all our universes and thus show the packages.\u003c/em\u003e\u0026rdquo;\u003c/p\u003e\u003cp\u003eIn addition, Athanasia explains that an important part of using the R-Universe is that it is very clear who the developers or maintainers are, which means that everyone keeps their corresponding credits and contributions.\u003c/p\u003e\u003cp\u003eAnother interesting use of the R-Universe for sharing work that Mo showed us, is the possibility of accessing the data as well as some extra functions used in an analysis. For example, in the Lifebrain Global Brain Health Survey they obtained more than 27 thousand responses, produced articles and papers, \u003cem\u003eand\u003c/em\u003e provide all the data and code in the \u003ca href=\"https://lifebrain.r-universe.dev/gbhs\"\u003egbhs\u003c/a\u003e package (you can see more information about this work in the video below).\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2023/03/30/r-universe-stars-3-en/brain_plot_3.png\"\t\t\talt=\"A figure showing two line drawing outlines of a brain. On the left is a top-down image, on the right a side-on image. Both show patches of colour highlighting spots in the centre corresponding to different parts of the brain.\" width=\"600\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eSubcortical map plot with ggseg\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eAs we explore the packages in the \u003ca href=\"https://lifebrain.r-universe.dev/\"\u003eLifebrain R-Universe\u003c/a\u003e, Athanasia shows us her greatest pride: \u003ca href=\"https://ggseg.r-universe.dev/\"\u003eggseg\u003c/a\u003e, software to create images of the brain that have been analyzed with different functions. It was precisely with this work that Mo found in R-Universe the solution to a series of problems with the size of the data and the installation of the tools needed to work:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eWhen the data packages are too big and cannot be reduced, it is not possible to publish them in CRAN (\u0026hellip;) and failures appear when users want to install them in their development version that took us a long time to solve and with non-optimal results.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eIn this context is when R-Universe presents her with a definitive solution:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eThis is the real solution, to be able to have everything we work on the project with a working installation and not waste any more time troubleshooting our users.\u003c/p\u003e\u003c/blockquote\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2023/03/30/r-universe-stars-3-en/brain_plots.png\"\t\t\talt=\"A series of three examples plots of different brain atlases. Each row shows four brain outlines with patches of different colours.\" width=\"600\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eggseg in action: plotting brain atlases\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eIn Athanasia\u0026rsquo;s experience, R-Universe allowed them to publish all the packages in one place, with easy accessibility and the possibility to receive contributions, maintenance and no installation problems for the users. In her own words:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eR-Universe is magic for me.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eRemember that the R-Universe generates binaries for different operating systems for all packages that belong to the universe, with no limit on the package size. One of the platform’s objectives is to make it easier to publish and install R packages.\u003c/p\u003e\u003cp\u003eIn the following video, Athanasia explains in more detail the development of their Life Brain project, how they use R to organize and work with information, and how the R-Universe allowed them to organize and share all their packages.\u003c/p\u003e\u003ch2 id=\"video-of-the-interview\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#video-of-the-interview\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eVideo of the interview\u003c/h2\u003e\t\t\t\u003cdiv\t\t\t\t\tstyle=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\t\t\t\t\u003ciframe\t\t\t\t\tsrc=\"https://player.vimeo.com/video/807731911?dnt=0\"\t\t\t\t\t\tstyle=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;\" allow=\"fullscreen\" title=\"Meeting R-Universe Stars - Athanasia Monika Mowinckel\"\u003e\t\t\t\t\u003c/iframe\u003e\t\t\t\u003c/div\u003e","url":"https://ropensci.org/blog/2023/03/30/r-universe-stars-3-en/","date_published":"2023-03-30T00:00:00+00:00","date_modified":"2025-09-16T09:31:26+02:00"},{"id":"https://doi.org/10.59350/6yj3n-3n086","title":"rOpenSci News Digest, March 2023","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2023/03/17/ropensci-news-digest-march-2023\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"meeting-the-stars-of-the-r-universe-sébastien-rochette\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#meeting-the-stars-of-the-r-universe-s%c3%a9bastien-rochette\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMeeting the stars of the R-universe: Sébastien Rochette\u003c/h3\u003e\u003cp\u003eKnowing our community\u0026rsquo;s stories helps us to learn about the people behind our software, brings us closer and offers us new opportunities. To share some of these community stories, we created the rOpenSci interview series \u003ca href=\"/tags/r-universe-stars/\"\u003e\u003cem\u003e\u0026ldquo;Meeting the stars of the R-Universe\u0026rdquo;\u003c/em\u003e\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe latest interview with \u003ca href=\"/blog/2023/02/28/r-universe-stars-2-en/\"\u003eSébastien Rochette introduces ThinkR’s Approach to Contributing to a Growing and Friendly R Community\u003c/a\u003e.The post is available in \u003ca href=\"/blog/2023/02/28/r-universe-stars-2-es/\"\u003eSpanish\u003c/a\u003e and \u003ca href=\"/blog/2023/02/28/r-universe-stars-2-fr/\"\u003eFrench\u003c/a\u003e too!Don\u0026rsquo;t miss the trilingual post and the video.\u003c/p\u003e\u003ch3 id=\"discovering-and-learning-everything-there-is-to-know-about-r-packages-using-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#discovering-and-learning-everything-there-is-to-know-about-r-packages-using-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDiscovering and learning everything there is to know about R packages using R-universe\u003c/h3\u003e\u003cp\u003eJeroen Ooms explains \u003ca href=\"/blog/2023/02/27/runiverse-discovering/\"\u003ehow to use R-universe to discover and assess new packages\u003c/a\u003e.He wrote that we can distinguish three levels of navigation in the R-universe when you go shopping for R packages:\u003c/p\u003e\u003col\u003e\u003cli\u003eSearch the global ecosystem: find packages, by topic, keyword, ranking, etc.\u003c/li\u003e\u003cli\u003eBrowse by maintainer/organization: explore all work from a given group or developer.\u003c/li\u003e\u003cli\u003eThe individual package: get detailed information on everything there is to know about a project and instructions for how to start using it.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eThat post was also discussed on the \u003ca href=\"https://rweekly.fireside.fm/114?t=576\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas!\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2023-04/\"\u003eTuesday, Apr 4th, 14:00 European Central / 12:00 UTC\u003c/a\u003e \u0026ldquo;Working with taxonomic lists in R\u0026rdquo; \u003cem\u003eHosted by community host \u003ca href=\"/author/miguel-alvarez/\"\u003eMiguel Alvarez\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003cul\u003e\u003cli\u003eExplore R packages for working with lists (such as \u003ca href=\"https://docs.ropensci.org/taxlist/\"\u003etaxlist\u003c/a\u003e),\u003c/li\u003e\u003cli\u003eOrganize some taxonomy in your data using taxlist,\u003c/li\u003e\u003cli\u003eTalk to \u003ca href=\"/author/miguel-alvarez/\"\u003eMiguel\u003c/a\u003e and discuss tips for working with taxonomic lists.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003cul\u003e\u003cli\u003eTuesday, May 2nd, 9:00 Americas Pacific / 16:00 UTC Tentative theme: \u0026ldquo;Spring Cleaning for R packages and scripts\u0026rdquo; \u003cem\u003eHosted by community host TBD and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003cul\u003e\u003cli\u003eExplore how other organizations keep their scripts/packages nice and clean\u003c/li\u003e\u003cli\u003eTake a look at your R packages and scripts and give them a good spring cleaning*\u003c/li\u003e\u003cli\u003eTalk to our community host and other attendees and discuss tips for keeping on top of it all.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e* in the northern hemisphere at least, otherwise, give them a good \u003cem\u003efall\u003c/em\u003e cleaning!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following four packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/openalexR\"\u003eopenalexR\u003c/a\u003e, developed by Massimo Aria together with Trang Le: A set of tools to extract bibliographic content from OpenAlex database using API \u003ca href=\"https://docs.openalex.org\"\u003ehttps://docs.openalex.org\u003c/a\u003e.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=openalexR\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/560\"\u003ereviewed\u003c/a\u003e by Brianna Lind and Pachá (aka Mauricio Vargas Sepúlveda).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/rb3\"\u003erb3\u003c/a\u003e, developed by Wilson Freitas together with Marcelo Perlin: Download and parse public files released by B3 and convert them into useful formats and data structures common to data analysis practitioners.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=rb3\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/534\"\u003ereviewed\u003c/a\u003e by Mario Gavidia Calderón and Pachá (aka Mauricio Vargas Sepúlveda).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/tsbox\"\u003etsbox\u003c/a\u003e, developed by Christoph Sax: Time series toolkit with identical behavior for all time series classes: ts,xts, data.frame, data.table, tibble, zoo, timeSeries, tsibble, tis or irts. Also converts reliably between these classes.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=tsbox\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003ereviewed\u003c/a\u003e by Cathy Chamberlin, and Nunes Matt.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/waywiser\"\u003ewaywiser\u003c/a\u003e, developed by Michael Mahoney: Assessing predictive models of spatial data can be challenging, both because these models are typically built for extrapolating outside the original region represented by training data and due to potential spatially structured errors, with “hot spots” of higher than expected error clustered geographically due to spatial structure in the underlying data. Methods are provided for assessing models fit to spatial data, including approaches for measuring the spatial structure of model errors, assessing model predictions at multiple spatial scales, and evaluating where predictions can be made safely. Methods are particularly useful for models fit using the tidymodels framework.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=waywiser\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/571\"\u003ereviewed\u003c/a\u003e by Virgilio Gómez-Rubio, and Jakub Nowosad.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following fifteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/c14bazAAR\" title=\"Download and Prepare C14 Dates from Different Source Databases\"\u003ec14bazAAR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/c14bazAAR/releases/tag/3.4.1\"\u003e\u003ccode\u003e3.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dynamite\" title=\"Bayesian Modeling and Causal Inference for MultivariateLongitudinal Data\"\u003edynamite\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dynamite/releases/tag/1.2.0\"\u003e\u003ccode\u003e1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/FedData\" title=\"Functions to Automate Downloading Geospatial Data Available fromSeveral Federated Data Sources\"\u003eFedData\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/FedData/releases/tag/v3.0.3\"\u003e\u003ccode\u003ev3.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/geojsonio\" title=\"Convert Data from and to GeoJSON or TopoJSON\"\u003egeojsonio\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/geojsonio/releases/tag/v0.11.0\"\u003e\u003ccode\u003ev0.11.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lingtypology\" title=\"Linguistic Typology and Mapping\"\u003elingtypology\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lingtypology/releases/tag/v1.1.12\"\u003e\u003ccode\u003ev1.1.12\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/mctq\" title=\"Tools to Process the Munich ChronoType Questionnaire (MCTQ)\"\u003emctq\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/mctq/releases/tag/v0.3.2\"\u003e\u003ccode\u003ev0.3.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmdata\" title=\"Import OpenStreetMap Data as Simple Features or Spatial Objects\"\u003eosmdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmdata/releases/tag/v0.2.1\"\u003e\u003ccode\u003ev0.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pathviewr\" title=\"Wrangle, Analyze, and Visualize Animal Movement Data\"\u003epathviewr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/pathviewr/releases/tag/v1.1.7\"\u003e\u003ccode\u003ev1.1.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/qualR\" title=\"An R package to download São Paulo and Rio de Janeiro air pollution data\"\u003equalR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/qualR/releases/tag/v0.9.7\"\u003e\u003ccode\u003ev0.9.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rredlist\" title=\"IUCN Red List Client\"\u003erredlist\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rredlist/releases/tag/v0.7.1\"\u003e\u003ccode\u003ev0.7.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spocc\" title=\"Interface to Species Occurrence Data Sources\"\u003espocc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spocc/releases/tag/v1.2.1\"\u003e\u003ccode\u003ev1.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.7.5\"\u003e\u003ccode\u003e0.7.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/0.14.3\"\u003e\u003ccode\u003e0.14.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/webmockr\" title=\"Stubbing and Setting Expectations on HTTP Requests\"\u003ewebmockr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/webmockr/releases/tag/v0.9.0\"\u003e\u003ccode\u003ev0.9.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/xslt\" title=\"Extensible Style-Sheet Language Transformations\"\u003exslt\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/xslt/releases/tag/v1.4.4\"\u003e\u003ccode\u003ev1.4.4\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are fifteen recently closed and active submissions and 2 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/560\"\u003eopenalexR\u003c/a\u003e, Getting Bibliographic Records from OpenAlex Database Using DSL. Submitted by \u003ca href=\"https://trang.page/\"\u003eTrang Le\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/559\"\u003econcstats\u003c/a\u003e, Market Structure, Concentration and Inequality Measures. Submitted by \u003ca href=\"https://github.com/schneiderpy\"\u003eAndreas Schneider\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/576\"\u003ecredit\u003c/a\u003e, Generate CRediT Author Statements. Submitted by \u003ca href=\"https://github.com/jospueyo\"\u003eJosep Pueyo-Ros\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/566\"\u003epredictNMB\u003c/a\u003e, Evaluate Clinical Prediction Models by Net Monetary Benefit. Submitted by \u003ca href=\"https://rwparsons.github.io/\"\u003eRex Parsons\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/571\"\u003ewaywiser\u003c/a\u003e, Ergonomic Methods for Assessing Spatial Models. Submitted by \u003ca href=\"https://mm218.dev/\"\u003eMichael Mahoney\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/577\"\u003ebirdsize\u003c/a\u003e, Estimate Avian Body Size Distributions. Submitted by \u003ca href=\"https://diazrenata.github.io/home/\"\u003eRenata Diaz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/574\"\u003edwctaxon\u003c/a\u003e, Tools for Working with Darwin Core Taxon Data. Submitted by \u003ca href=\"https://joelnitta.com\"\u003eJoel Nitta\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/568\"\u003eohun\u003c/a\u003e, Optimizing Acoustic Signal Detection. Submitted by \u003ca href=\"https://marceloarayasalas.weebly.com/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"https://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/575\"\u003epangoling\u003c/a\u003e, Access to Large Language Model Predictions. Submitted by \u003ca href=\"https://bnicenboim.github.io/\"\u003eBruno Nicenboim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/572\"\u003equaltdict\u003c/a\u003e, Generating Variable Dictionaries and Labelled Data Exports of Qualtrics. Submitted by \u003ca href=\"https://github.com/lyh970817\"\u003elyh970817\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"other-topics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-topics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOther topics\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/02/21/champions-program-kick-off\"\u003erOpenSci Champions Program Kick off\u003c/a\u003e by Yanina Bellini Saibene. The champions program has already started the first activities of 2023. Read where the participants are from and what they will be doing.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/02/21/champions-program-kick-off-es\"\u003ePuntapié inicial de nuestro programa de campeonas y campeones\u003c/a\u003e by Yanina Bellini Saibene. El programa de campeones y campeonas ya inició las primeras actividades de este 2023. Lee de donde son los y las participantes y que van a estar haciendo.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/02/28/r-universe-stars-2-en\"\u003eMeeting the Stars of the R-universe: ThinkR\u0026rsquo;s Approach to Contributing to a Growing and Friendly R Community\u003c/a\u003e by Yanina Bellini Saibene, Sébastien Rochette, Alejandra Bellini, Lucio Casalla, and Steffi LaZerte. A new installment of our interview series \u003cstrong\u003e\u0026ldquo;Meeting the stars of the R-Universe\u0026rdquo;\u003c/strong\u003e. We go to France to get a closer look at the work of the people at ThinkR.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/02/28/r-universe-stars-2-es\"\u003eAprender, ayudar y compartir. El método de ThinkR para crear una comunidad cada vez más grande y amigable de R\u003c/a\u003e by Yanina Bellini Saibene, Sébastien Rochette, Alejandra Bellini, Lucio Casalla, and Steffi LaZerte. Una nueva entrega de nuestra serie de entrevistas \u003cstrong\u003e\u0026ldquo;Conociendo a las estrellas del universo R\u0026rdquo;\u003c/strong\u003e. Nos vamos a Francia para conocer más de cerca el trabajo que hace la gente de ThinkR.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/02/28/r-universe-stars-2-fr\"\u003eEnseigner, aider et partager. L\u0026rsquo;approche de ThinkR pour contribuer à la croissance d’une communauté R conviviale\u003c/a\u003e by Yanina Bellini Saibene, Sébastien Rochette, Alejandra Bellini, Lucio Casalla, and Steffi LaZerte. Un nouvel entretien de notre série \u003cstrong\u003e\u0026ldquo;Meeting the stars of the R-Universe\u0026rdquo;\u003c/strong\u003e. Nous allons en France voir de plus près le travail de ThinkR.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/02/27/runiverse-discovering\"\u003eDiscovering and learning everything there is to know about R packages using r-universe\u003c/a\u003e by Jeroen Ooms. The goal of r-universe is to provide a central place for browsing through the R ecosystem to discover what is out there, get a sense of the purpose and quality of individual packages, and help you get started in seconds.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/02/27/runiverse-discovering-es\"\u003eDescubrir y aprender todo lo que hay que saber sobre los paquetes de R utilizando r-universe\u003c/a\u003e by Jeroen Ooms. El objetivo de r-universe es proporcionar un lugar central para navegar por el ecosistema de R y descubrir lo que existe; hacerse una idea de la finalidad y la calidad de cada paquete, y ayudar a empezar en cuestión de segundos.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c!-- ## Use cases`snakecase::to_sentence_case(english(length(usecases)))` use case` if (length(usecases) \u003e 1) \"s\"` of our packages and resources ha` if (length(usecases) \u003e 1) \"ve\" else \"s\"` been reported since we sent the last newsletter.Explore [other use cases](/usecases) and [report your own](https://discuss.ropensci.org/c/usecases/10)! --\u003e\u003ch2 id=\"call-for-comaintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-comaintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for (co)maintainers\u003c/h2\u003e\u003ch3 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e (or listening to its discussion on the \u003ca href=\"https://rweekly.fireside.fm/111\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas)!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/rvertnet/index.html\"\u003ervertnet\u003c/a\u003e\u003c/strong\u003e, Retrieve, map and summarize data from the VertNet.org archives (\u003ca href=\"http://vertnet.org/\"\u003ehttp://vertnet.org/\u003c/a\u003e). Functions allow searching by many parameters, including taxonomic names, places, and dates. In addition, there is an interface for conducting spatially delimited searches, and another for requesting large datasets via email. \u003ca href=\"https://github.com/ropensci-archive/rvertnet/issues/71\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/natserv/index.html\"\u003enatserv\u003c/a\u003e\u003c/strong\u003e. Interface to NatureServe (\u003ca href=\"https://www.natureserve.org/\"\u003ehttps://www.natureserve.org/\u003c/a\u003e). Includes methods to get data, image metadata, search taxonomic names, and make maps. \u003ca href=\"https://github.com/ropensci-archive/natserv/issues/29\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/sofa/index.html\"\u003esofa\u003c/a\u003e\u003c/strong\u003e. Provides an interface to the NoSQL database CouchDB (\u003ca href=\"http://couchdb.apache.org\"\u003ehttp://couchdb.apache.org\u003c/a\u003e). Methods are provided for managing databases within CouchDB, including creating/deleting/updating/transferring, and managing documents within databases. One can connect with a local CouchDB instance, or a remote \u0026lsquo;CouchDB\u0026rsquo; databases such as Cloudant. Documents can be inserted directly from vectors, lists, data.frames, and JSON. Targeted at CouchDB v2 or greater. \u003ca href=\"https://github.com/ropensci-archive/sofa/issues/81\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://cran.r-project.org/web/packages/geojsonlint/index.html\"\u003egeojsonlint\u003c/a\u003e\u003c/strong\u003e, Tools for linting GeoJSON. Includes tools for interacting with the online tool \u003ca href=\"http://geojsonlint.com\"\u003ehttp://geojsonlint.com\u003c/a\u003e, the Javascript library geojsonhint (\u003ca href=\"https://www.npmjs.com/package/geojsonhint\"\u003ehttps://www.npmjs.com/package/geojsonhint\u003c/a\u003e), and validating against a GeoJSON schema via the Javascript library (\u003ca href=\"https://www.npmjs.com/package/is-my-json-valid\"\u003ehttps://www.npmjs.com/package/is-my-json-valid\u003c/a\u003e). Some tools work locally while others require an internet connection. \u003ca href=\"https://github.com/ropensci-archive/geojsonlint/issues/22\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://docs.ropensci.org/citesdb/\"\u003ecitesdb\u003c/a\u003e\u003c/strong\u003e, a high-performance database of shipment-level CITES trade data. Provides convenient access to over 40 years and 20 million records ofendangered wildlife trade data from the Convention on International Tradein Endangered Species of Wild Fauna and Flora, stored on a local on-disk,out-of memory \u0026lsquo;DuckDB\u0026rsquo; database for bulk analysis. \u003ca href=\"https://github.com/ropensci/citesdb/issues/21\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"call-for-comaintainers-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-comaintainers-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for comaintainers\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://docs.ropensci.org/rtweet\"\u003ertweet\u003c/a\u003e\u003c/strong\u003e, that interfaces Twitter API, is looking for a \u003ca href=\"https://github.com/ropensci/rtweet/issues/763\"\u003eco-maintainer\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eRefer to our \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/#packages-looking-for-co-maintainers\"\u003erecent blog post\u003c/a\u003e to identify other packages where help is especially wished for!\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"r-consortiums-call-for-proposals\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-consortiums-call-for-proposals\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR Consortium\u0026rsquo;s call for proposals!\u003c/h3\u003e\u003cp\u003eThe R Consortium\u0026rsquo;s Internal Steering Committee has a \u003ca href=\"https://www.r-consortium.org/all-projects/call-for-proposals\"\u003ecall for proposals\u003c/a\u003e open until April 1st.\u003c/p\u003e\u003cul\u003e\u003cli\u003eThe funds can be used for different sizes of projects. The project must have a software development component.\u003c/li\u003e\u003cli\u003eProofs of concept are not funded. No scientific publications or equipment.\u003c/li\u003e\u003cli\u003eThe idea is that the funds can cover people\u0026rsquo;s time to develop software.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThis might be relevant for your R package work so make sure to read the call, and good luck if you send a proposal! \u0026#x1f680;\u003c/p\u003e\u003ch3 id=\"to-cache-or-not-to-cache-testthat-results\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#to-cache-or-not-to-cache-testthat-results\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTo cache, or not to cache testthat results?\u003c/h3\u003e\u003cp\u003eHave you ever wished you could cache testthat results?You\u0026rsquo;ll find arguments both in favor of and against that idea in this \u003ca href=\"https://github.com/r-lib/testthat/issues/1703\"\u003etestthat issue\u003c/a\u003e \u0026ndash; testthat maintainer Hadley Wickham being against the idea.\u003c/p\u003e\u003cp\u003eYou might be interested in Kirill Müller\u0026rsquo;s experimental package \u003ca href=\"https://krlmlr.github.io/lazytest/\"\u003elazytest\u003c/a\u003e that helps you rerun only the tests that have failed during the last run.\u003c/p\u003e\u003ch3 id=\"check-if-an-r-package-name-is-available\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#check-if-an-r-package-name-is-available\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCheck if an R package name is available\u003c/h3\u003e\u003cp\u003eThe function \u003ca href=\"https://pak.r-lib.org/reference/pkg_name_check.html\"\u003e\u003ccode\u003epak::pkg_name_check()\u003c/code\u003e\u003c/a\u003e by Gábor Csárdi can be viewed as a replacement for the available package. It has a very nice output.(Also keep in mind that our \u003ca href=\"https://docs.ropensci.org/pkgcheck\"\u003epkgcheck::pkgcheck()\u003c/a\u003e function reports on potentially duplicated function names.)\u003c/p\u003e\u003ch3 id=\"what-if-your-httptest-mock-files-are-suddenly-ignored\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-if-your-httptest-mock-files-are-suddenly-ignored\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat if your httptest mock files are suddenly ignored?\u003c/h3\u003e\u003cp\u003eImagine you\u0026rsquo;ve set up \u003ca href=\"https://books.ropensci.org/http-testing/index.html\"\u003eHTTP testing\u003c/a\u003e in your package with \u003ca href=\"https://books.ropensci.org/http-testing/httptest.html\"\u003ehttptest\u003c/a\u003e and all goes well until one day, where the httptest mock files are \u003cem\u003eignored\u003c/em\u003e.Don\u0026rsquo;t panic!Check whether the calls that are mocked are still made with httr.Maybe one of your package\u0026rsquo;s dependencies upgraded their \u003ca href=\"https://books.ropensci.org/http-testing/http-in-r-101.html#http-requests-in-r-what-package\"\u003estack\u003c/a\u003e?If the calls are made with httr2, the tests need to be updated to \u003ca href=\"https://books.ropensci.org/http-testing/httptest2.html\"\u003ehttptest2\u003c/a\u003e which thankfully isn\u0026rsquo;t too hard.\u003c/p\u003e\u003ch3 id=\"updates-to-package-checks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#updates-to-package-checks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdates to package checks\u003c/h3\u003e\u003cp\u003eWe added one new check this month to \u003ca href=\"https://docs.ropensci.org/pkgcheck\"\u003eour pkgcheck system\u003c/a\u003e, specifically for statistics packages.Standards are expected to be documented with \u003ca href=\"https://docs.ropensci.org/srr\"\u003ethe srr package\u003c/a\u003e throughout the entire code of a package, including within all or most files in the /R and /tests directories.Having documentation distributed throughout code is particularly important to enable reviewers to judge compliance with standards at the relevant locations within the code.Packages which leave a large portion of standards documentation in a default location within a single file now produce an error when checked with pkgcheck, as well as with the srr function, \u003ca href=\"https://docs.ropensci.org/srr/reference/srr_stats_pre_submit.html\"\u003esrr_stats_pre_submit\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/03/17/ropensci-news-digest-march-2023/","date_published":"2023-03-17T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/jtkey-daa93","title":"Meeting the Stars of the R-universe: ThinkR's Approach to Contributing to a Growing and Friendly R Community","language":"en","authors":[{"name":"Alejandra Bellini","url":"https://ropensci.org/author/alejandra-bellini/","avatar":"https://ropensci.org/img/community/ale-bellini.jpeg","_role":["author"]},{"name":"Lucio Casalla","url":"https://ropensci.org/author/lucio-casalla/","avatar":"https://ropensci.org/img/community/lucio-casalla.JPG","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Sébastien Rochette","url":"https://orcid.org/0000-0002-1565-9313","avatar":"https://ropensci.org/img/community/sebastien-rochette.jpeg","_role":["interviewee"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","r-universe","interviews","r-universe-stars"],"content_html":"\u003cp\u003eThis is the second post of our interview series \u003ca href=\"/tags/r-universe-stars/\"\u003e“Meeting the stars of the R-universe”\u003c/a\u003e. We aim to introduce the working groups and people behind the development of software and packages many of us use and which are available through the R-universe. We want to highlight and explore different teams and projects around the world, the work they do, their processes and users.\u003c/p\u003e\u003cp\u003eWe continue our journey in France with Sébastien Rochette, R Expert at \u003ca href=\"https://rtask.thinkr.fr\"\u003eThinkR\u003c/a\u003e, a company focused on teaching and training as well as developing open source R packages. Be sure to watch the \u003ca href=\"2023/02/23/r-universe-stars-2-en/#video-of-the-interview\"\u003evideo\u003c/a\u003e at the end with excerpts from the interview.\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/img/community/sebastien-rochette.jpeg\"\t\t\talt=\"Profile photo of Sébastien Rochette.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eSébastien Rochette\u003c/strong\u003e\u003cbr\u003eHead of Production at ThinkR\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ca href=\"https://rtask.thinkr.fr\"\u003eThinkR\u003c/a\u003e is a team of experts and leaders in R training. They are passionate about open source and contributing to the community. And this is how you can introduce Sébastien Rochette, as someone passionate about their work.\u003c/p\u003e\u003cp\u003eFor the past 5 years, Sébastien has been working in this French company by teaching, developing and also advising clients about R. The work is divided in two, half to teach and half to develop R tools:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eWhat we like to do is learn as much as we can about R so that we can help our clients continue to work with R and go further in their business missions.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThinkR is certified by the French state to be able to deliver official R certifications.  This requires a rigorous audit to ensure the quality of the teaching and of the support of the learners. Sébastien explains that they have \u003ca href=\"https://rtask.thinkr.fr/remote-trainings-and-certification/\"\u003ethree levels of R training\u003c/a\u003e:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eThe first level is for beginners where they explain what R is and how to build reproducible and documented data analyses with R, so you can quickly get all essential tools to work with your own data. The second level is how to develop R packages because we are convinced that the best way to share and cooperate on a sustainable work is through packages. And the third level is to learn how to build production-ready Shiny applications, for which, you will need to know how to build packages.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eAll courses are given remotely, in small groups, on a pre-installed web platform they developed, called \u003ca href=\"https://thinkr.fr/what-is-bakacode.pdf\"\u003eBakacode\u003c/a\u003e, which ensures course material, R and all necessary packages are already installed and available when attendees connect.\u003c/p\u003e\u003cp\u003eIn a summarized explanation of his work, Sébastien explains in a simple way the purpose of the organization:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eTo help more people to get the skills to work with R, to spread and share that learning, and help expand a welcoming and friendly R community.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThinkR wants their clients to be independent at the end of each service, whether it be training or tailored development. This way, clients can continue the development by themselves. \u003cem\u003e\u0026ldquo;If customers want to come back, we welcome them with open doors\u0026rdquo;\u003c/em\u003e Sébastien explains and adds, \u003cem\u003e\u0026ldquo;but if they consider them autonomous enough to continue by themselves, we are happy too as we mainly seek a bigger and friendlier R community.\u0026rdquo;\u003c/em\u003e Clients\u0026rsquo; ability to work autonomously is an important value within the company.\u003c/p\u003e\u003ch2 id=\"the-value-of-teaching\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-value-of-teaching\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe value of teaching\u003c/h2\u003e\u003cp\u003eSébastien explains that at ThinkR they apply a work logic that links teaching with consulting: \u003cem\u003e\u0026ldquo;To be a good teacher, you have to get your hands in the code and thus know your clients\u0026rsquo; challenges (\u0026hellip;) and to be a good consultant you have to teach to be able to explain clearly and simply what you do, how and why you do it\u0026rdquo;\u003c/em\u003e. This is why the company tries to spend time in both places: teaching and consulting.\u003c/p\u003e\u003cp\u003eThis also involves sharing their knowledge through \u003ca href=\"https://rtask.thinkr.fr/blog/\"\u003eblog posts\u003c/a\u003e and \u003ca href=\"https://thinkr.fr/blog/\"\u003etutorials\u003c/a\u003e, a \u003ca href=\"https://engineering-shiny.org/\"\u003ebook\u003c/a\u003e, their presence and funding of conferences, and other remote or on-site community events.\u003c/p\u003e\u003ch2 id=\"open-source\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#open-source\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOpen source\u003c/h2\u003e\u003cp\u003eThe third part Sébastien talks about is open source. He explains that in the company they dedicate at least one day a week to open-source developments. They understand that the whole company works on open source and that it is important to give back to the community through the development and contribution of R packages.\u003c/p\u003e\u003cp\u003eThinkR develops multiple packages for their own needs, and the vast majority of them are open-source. If it is useful for them, it can be useful for others. Indeed, among these packages, you will find tools to help develop documented, tested and maintainable R products: \u003ca href=\"https://thinkr-open.r-universe.dev/fusen#\"\u003e{fusen}\u003c/a\u003e to ease the build and the share of prod-ready R packages while staying in a Rmarkdown environment, \u003ca href=\"https://thinkr-open.r-universe.dev/golem#\"\u003e{golem}\u003c/a\u003e to structure the build of prod-ready shiny apps, \u003ca href=\"https://thinkr-open.r-universe.dev/attachment\"\u003e{attachment}\u003c/a\u003e to help deal with package dependencies or \u003ca href=\"https://thinkr-open.r-universe.dev/checkhelper#\"\u003e{checkhelper}\u003c/a\u003e to automate some extra checks before CRAN submission.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2023/02/28/r-universe-stars-2-en/R-universe%20thinkr-open.png\"\t\t\talt=\"Screenshot of the ThinkR R-universe landing page featuring packages \u0026#39;checkhelper\u0026#39;, \u0026#39;fusen\u0026#39;, \u0026#39;covrpage\u0026#39;, and \u0026#39;gitlabr\u0026#39;\" width=\"600\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eThinkR R-universe\u003c/strong\u003e\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eThere are other tools in the \u003ca href=\"https://thinkr-open.r-universe.dev/\"\u003eThinkR r-universe\u003c/a\u003e. It all comes down to providing tools that allow more and more people to build robust, sustainable and maintainable foundations to work with their data, analyze it and share it in an easier way.\u003c/p\u003e\u003ch2 id=\"the-r-universe-experience\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-r-universe-experience\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe R-universe experience\u003c/h2\u003e\u003cp\u003eIn order to meet the objective of helping their clients in the simplest way possible, ThinkR uses the R-universe to list each of the tools they have developed in an orderly manner and with useful information. In the video interview included in this article you can see an example of how Sébastien and ThinkR see themselves in the R-universe.\u003c/p\u003e\u003cp\u003eThinkR found in the R-universe a flexible platform to publish and generate the installers of all their packages. This functionality makes it easier for their clients and others to access and use the latest package versions. Package origins are transparent and they have avoided the limitations of direct GitHub installations.\u003c/p\u003e\u003cp\u003eIt also facilitates the update and availability of these packages because R-universe does not have strict and time-bound change and update policies.\u003c/p\u003e\u003cp\u003eFinally, they find the ability to generate vignettes and make them available in the R-universe useful.\u003c/p\u003e\u003ch2 id=\"video-of-the-interview\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#video-of-the-interview\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eVideo of the interview\u003c/h2\u003e\u003cp\u003eIf you want to hear more details about his experience, be sure to watch Sébastien in the video with excerpts from the interview. You can activate the subtitles.\u003c/p\u003e\t\t\t\u003cdiv\t\t\t\t\tstyle=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\t\t\t\t\u003ciframe\t\t\t\t\tsrc=\"https://player.vimeo.com/video/800166375?dnt=0\"\t\t\t\t\t\tstyle=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;\" allow=\"fullscreen\" title=\"Meeting R-Universe Stars - ThinkR\"\u003e\t\t\t\t\u003c/iframe\u003e\t\t\t\u003c/div\u003e","url":"https://ropensci.org/blog/2023/02/28/r-universe-stars-2-en/","date_published":"2023-02-28T00:00:00+00:00","date_modified":"2025-09-16T09:31:26+02:00"},{"id":"https://doi.org/10.59350/5kgqa-kbd57","title":"Discovering and learning everything there is to know about R packages using r-universe","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","tech notes","registry","search","packages","dashboard"],"content_html":"\u003ch2 id=\"finding-the-right-tool-for-the-job\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#finding-the-right-tool-for-the-job\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFinding the right tool for the job\u003c/h2\u003e\u003cp\u003eThe hardest part about effectively using R is finding the best packages for the problem you are trying to solve. I think this is even more important than being fluent in the language itself, which you will pick up along the way as you start using R more frequently. However, building your code on reliable foundations is essential for good results, and difficult to fix later on in a project.\u003c/p\u003e\u003cp\u003eThere are about 20.000 packages on CRAN, and more on other networks such as BioConductor and GitHub. New packages are released every day. The developers are a mix of volunteers, ranging from professional software engineers to students and hobbyists. The quality and scope of packages varies enormously, which can make it difficult to judge which tools are the best choice for a given task.\u003c/p\u003e\u003cp\u003eThe ultimate goal of \u003ca href=\"https://r-universe.dev\"\u003er-universe\u003c/a\u003e is to help you effectively navigate the R ecosystem to discover what is out there, get a sense of the purpose and quality of individual packages, their developers, and get started using packages immediately and without any hassle.\u003c/p\u003e\u003ch2 id=\"three-levels-of-navigation-in-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#three-levels-of-navigation-in-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThree levels of navigation in r-universe\u003c/h2\u003e\u003cp\u003eWe can distinguish three levels of navigation in r-universe when you go shopping for R packages:\u003c/p\u003e\u003col\u003e\u003cli\u003eSearch the global ecosystem: find packages, by topic, keyword, ranking, etc.\u003c/li\u003e\u003cli\u003eBrowse by maintainer/organization: explore all work from a given group or researcher.\u003c/li\u003e\u003cli\u003eThe individual package: get detailed information on everything there is to know about a project and instructions to start using it.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eIf you are new to R or are exploring packages for a certain task, you may start by searching everything that is out there using the r-universe search engine. Once you become more familiar with the ecosystem, you may get interested to zoom in to a specific suite of packages from a given maintainer or organization, and eventually learn more about the details of particular packages.\u003c/p\u003e\u003ch2 id=\"level-1-searching-the-entire-r-ecosystem\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#level-1-searching-the-entire-r-ecosystem\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLevel 1: searching the entire R ecosystem\u003c/h2\u003e\u003cp\u003eThe landing page on \u003ca href=\"https://r-universe.dev\"\u003ehttps://r-universe.dev\u003c/a\u003e takes you directly to the global search engine. Here you can perform free-text search for a keyword, which is matched against package names, descriptions, topics, and titles of manual pages, vignettes, and so on. Results are ordered using a combination of a matching score (how often and where the search term appears), and a quality ranking\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/search1.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/search1.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cp\u003eThe right side of the search box contains an expand button which reveals powersearch filters. Here you can enter advanced search criteria, in order to specifically match specific fields. For example you can search for packages from a given author, or have a specific function or dependency.\u003c/p\u003e\u003cdiv class=\"gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition\" itemscope itemtype=\"http://schema.org/ImageGallery\"\u003e\t  \u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/02/27/runiverse-discovering/search2.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/search2.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/search2.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/02/27/runiverse-discovering/search3.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/search3.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/search3.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/02/27/runiverse-discovering/search4.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/search4.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/search4.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003eThe search page also shows a shuffling list of organizations that publish R packages (sorted by recent activity) which is a fun way to discover what is currently being developed in the R ecosystem.\u003c/p\u003e\u003ch2 id=\"level-2-browsing-work-from-a-maintainer-or-organization\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#level-2-browsing-work-from-a-maintainer-or-organization\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLevel 2: browsing work from a maintainer or organization\u003c/h2\u003e\u003cp\u003eEach user and organization in r-universe has a unique subdomain under \u003ccode\u003er-universe.dev\u003c/code\u003e with a personal cran-like package repository from where packages can directly be installed. For example, the packages and information from rOpenSci can be found on \u003ca href=\"https://ropensci.r-universe.dev\"\u003ehttps://ropensci.r-universe.dev\u003c/a\u003e, and packages maintained by me are listed at \u003ca href=\"https://jeroen.r-universe.dev\"\u003ehttps://jeroen.r-universe.dev\u003c/a\u003e (note how these two sets overlap).\u003c/p\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/user1.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/user1.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cp\u003eThe top tabs allow you to explore different resources within universe. The \u003cstrong\u003ebuilds\u003c/strong\u003e tab shows  the current state of the repository: a table with the name and version of each package, including the commit date, author, and build status. Clicking on the package name in the table sends you to the homepage of the package (more on this below), and the maintainer name links to the subdomain of that maintainer, listing other projects maintained by this person.\u003c/p\u003e\u003cp\u003eThe \u003cstrong\u003epackages\u003c/strong\u003e tab lists descriptive information from all packages in the repository, and the \u003cstrong\u003earticles\u003c/strong\u003e tab shows all documents (e.g. vignettes). The \u003cstrong\u003econtributors\u003c/strong\u003e tab shows a chart with contributor statistics for the organization or maintainer. Clicking on the a bar in the chart sends you to this other universe where you can explore more work by this person.\u003c/p\u003e\u003cdiv class=\"gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition\" itemscope itemtype=\"http://schema.org/ImageGallery\"\u003e\t  \u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/02/27/runiverse-discovering/user2.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/user2.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/user2.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/02/27/runiverse-discovering/user3.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/user3.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/user3.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/02/27/runiverse-discovering/user4.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/user4.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/user4.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003eThe same subdomain hosts the actual cran-like package repository for this user or organization. Hence in order to list or install packages from rOpenSci in R, you would use:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# List available packages\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eavailable.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;https://ropensci.r-universe.dev\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Install a package\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003einstall.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;magick\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;https://ropensci.r-universe.dev\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"level-3-individual-package-information\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#level-3-individual-package-information\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLevel 3: individual package information\u003c/h2\u003e\u003cp\u003eFinally we arrive at the individual package level. Clicking on a package in search results or in a universe overview will lead you to homepage for that package. You can also link to this page directly via the url \u003ccode\u003ehttps://{owner}.r-universe.dev/{package}\u003c/code\u003e for example \u003ca href=\"https://r-spatial.r-universe.dev/sf\"\u003ehttps://r-spatial.r-universe.dev/sf\u003c/a\u003e.\u003c/p\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/package1.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/package1.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cp\u003eThese package pages are generated automatically and provide detailed information about each project, and all the information and resources to quickly install and try the package locally in R.\u003c/p\u003e\u003ch3 id=\"package-information\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-information\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage information\u003c/h3\u003e\u003cp\u003eThe initial section of the homepage shows descriptive data and links to resources from this package, such as source/binary files, the package manual and NEWS file. Further down we show installation instructions to install the package in R. Installation is quick and easy because we provide pre-compiled binaries for Windows and MacOS, so no special tools or setup is required on the user machine.\u003c/p\u003e\u003cdiv class=\"gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition\" itemscope itemtype=\"http://schema.org/ImageGallery\"\u003e\t  \u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/02/27/runiverse-discovering/package2.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/package2.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/package2.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/02/27/runiverse-discovering/package21.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/package21.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/package21.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/02/27/runiverse-discovering/package4.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/package4.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/package4.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003eHere you can also find more information derived by the build system, such as which system libraries the package builds on, topics, and if the package is on CRAN. The badges underneath show statistics about the package, such as dependencies, reverse dependencies, and GitHub stars. Clicking on the \u0026rsquo;exports\u0026rsquo; badge will show all functions and datasets exported by the package, which link to the respective sections in the manual page. If specified, we also show how the package should be cited in papers.\u003c/p\u003e\u003ch3 id=\"all-the-documentation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#all-the-documentation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAll the documentation\u003c/h3\u003e\u003cp\u003eTo let you start using packages as quickly as possible, r-universe renders all available documentation and presents this as clear and concisely as possible on the homepage.\u003c/p\u003e\u003cp\u003eMost R packages have 3 forms of documentation: a readme file, a reference manual (help pages), and a number of articles (vignettes). These articles are often a good place to get started, and are listed on the package homepage right under the descriptives. From here you can view both the rendered html/pdf document, as well as the rmarkdown source file used to (re)produce the article.\u003c/p\u003e\u003cdiv class=\"gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition\" itemscope itemtype=\"http://schema.org/ImageGallery\"\u003e\t  \u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/02/27/runiverse-discovering/package3.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/package3.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/package3.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/02/27/runiverse-discovering/package5.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/package5.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/package5.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\" style=\"background-image: url('/blog/2023/02/27/runiverse-discovering/package6.png');\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/package6.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/package6.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003eFurther down the page you can see the content from the package readme. Most packages these days include a README.md file which can nicely be rendered into HTML.\u003c/p\u003e\u003cp\u003eAfter the readme follows a section named \u0026ldquo;reference manual\u0026rdquo; containing a table with all the help pages. These link to the respective chapters in the html reference manual\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e, which provide the most extensive documentation for each function in the package, including descriptions, parameters, examples, etc.\u003c/p\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/refman.png\" alt=\"Screenshot of a chapter in the HTML reference manual for a package, showing descriptions, parameters, and examples for a function.\"/\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/refman.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003ch3 id=\"usage-and-development-activity\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#usage-and-development-activity\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUsage and development activity\u003c/h3\u003e\u003cp\u003eBesides familiarizing yourself with what the package does, you may be interested in who is working on it, who else is using it, and if it is still actively developed.\u003c/p\u003e\u003cp\u003eThe \u0026ldquo;development and contributors\u0026rdquo; section shows a bar chart with the number of commits per week for the last year, and who the main contributors are. Finally the section \u0026ldquo;usage by other packages\u0026rdquo; shows other packages on r-universe depending on this package, grouped by owner. This gives you some indication on how active the project is, and who are involved.\u003c/p\u003e\u003cdiv class=\"box\" \u003e  \u003cfigure  itemprop=\"associatedMedia\" itemscope itemtype=\"http://schema.org/ImageObject\"\u003e    \u003cdiv class=\"img\"\u003e      \u003cimg itemprop=\"thumbnail\" src=\"/blog/2023/02/27/runiverse-discovering/package7.png\" /\u003e    \u003c/div\u003e    \u003ca href=\"/blog/2023/02/27/runiverse-discovering/package7.png\" itemprop=\"contentUrl\" aria-disabled=\"true\"\u003e\u003c/a\u003e  \u003c/figure\u003e\u003c/div\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eThis post explained different ways in which you can use \u003ca href=\"https://r-universe.dev\"\u003er-universe\u003c/a\u003e to explore R packages. The \u003ca href=\"https://r-universe.dev/search\"\u003esearch engine\u003c/a\u003e lets you find packages from anywhere in the ecosystem matching certain keywords or specific criteria. This is a good place to get stated and get a sense of what is available in a given domain.\u003c/p\u003e\u003cp\u003eOnce you become more familiar with the ecosystem, you may get interested to zoom in to a specific suite of packages from a given group or researcher. The r-universe domain structure lets you browse packages and articles by organization, and discover related work with similar maintainers, contributors, or users.\u003c/p\u003e\u003cp\u003eFinally, for each R package, r-universe provides a beautiful homepage containing a wealth of information at: \u003ccode\u003ehttps://{owner}.r-universe.dev/{package}\u003c/code\u003e. This page shows exactly what a package is about, who is developing it, the status of the project, and also provides all nicely rendered documentation and installation instructions to start using the package immediately, without hassle.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eMore information about this ranking: \u003ca href=\"https://github.com/r-universe-org/help#how-is-the-package-rank-score-calculated\"\u003ehow is the package-rank score calculated\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eBlog post: \u003ca href=\"/blog/2022/11/29/postdoc-docs/\"\u003epostdoc 1.0: minimal and uncluttered HTML package manuals\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2023/02/27/runiverse-discovering/","date_published":"2023-02-27T00:00:00+00:00","date_modified":"2025-09-15T08:32:13+02:00"},{"id":"https://doi.org/10.59350/n09na-q8684","title":"rOpenSci Champions Program Kick off","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["editor"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","champions program"],"content_html":"\u003ch2 id=\"the-champions-program-got-off-to-a-great-start-in-2023\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-champions-program-got-off-to-a-great-start-in-2023\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe Champions Program got off to a great start in 2023!\u003c/h2\u003e\u003cp\u003eWe\u0026rsquo;re happy to report on the first couple of months in our first run of the \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e. In September 2022, we launched the program, advertising for both mentors and mentees to apply.\u003c/p\u003e\u003cp\u003eWe received a total of \u003cstrong\u003e102\u003c/strong\u003e applications from \u003cstrong\u003e31\u003c/strong\u003e different countries. Seventy-four applications were for champions and twenty eight for mentors. We are very grateful to everyone who took the time to apply to our program.\u003c/p\u003e\u003cp\u003eChampions could select one of three project options: \u003cstrong\u003e51%\u003c/strong\u003e chose to \u003cstrong\u003edevelop a new package\u003c/strong\u003e, \u003cstrong\u003e25%\u003c/strong\u003e to be part of our \u003cstrong\u003ereview process\u003c/strong\u003e, and \u003cstrong\u003e24%\u003c/strong\u003e to \u003cstrong\u003esubmit a package to our peer review\u003c/strong\u003e process.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/02/21/champions-program-kick-off/countriesApplications.png\"\t\t\talt=\"Map of the world with the countries colored according to the number of applications. Applications are shown in America, Europe, Oceania, Asia and Africa (in that order with respect to the number of applications).\"\u003e\u003c/figure\u003e\u003cp\u003eAfter carefully reviewing each application, we selected ten champions and ten mentors for this first cohort.  \u003cstrong\u003eThree\u003c/strong\u003e of our champions will \u003cstrong\u003edevelop a new package\u003c/strong\u003e, \u003cstrong\u003efour\u003c/strong\u003e will \u003cstrong\u003eprepare and submit their package to the review process\u003c/strong\u003e, and \u003cstrong\u003ethree\u003c/strong\u003e will \u003cstrong\u003ebecome rOpenSci reviewers\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eThe mentors will accompany their mentees throughout the process of executing their projects.\u003c/p\u003e\u003cp\u003eThese first participants are from \u003cstrong\u003eArgentina, Brazil, Peru, Nigeria, Turkey, Australia, France, Norway, Saudi Arabia, the United States, and the United Kingdom\u003c/strong\u003e.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/02/21/champions-program-kick-off/ourteam.png\"\t\t\talt=\"Collage of headshot of all champions and mentors.\"\u003e\u003c/figure\u003e\u003ch2 id=\"kick-off-meetings\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#kick-off-meetings\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eKick-off meetings\u003c/h2\u003e\u003cp\u003eDuring January, we held the kick-off meetings for the program. Because we our Champions and Mentors have such a wide geographic spread, we had (and will be having) at least two different time for all planned activities to accommodate the breadth of timezones.\u003c/p\u003e\u003cp\u003eDuring these meetings, mentors and champions introduced themselves, shared where they are from, what their project is about, and something that excited them about the program. We also went over logistics, the potential agenda, and scheduled activities.  We were excited to see the participants\u0026rsquo; enthusiasm to learn, share, execute their projects, and give back to the community!\u003c/p\u003e\u003ch2 id=\"training\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#training\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTraining\u003c/h2\u003e\u003cp\u003eDuring February and March, champions and mentors will receive training in different topics that will provide them with useful tools to carry out their projects.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;re also happy to note that in April and May, we will conduct workshops for those not selected to be champions. These workshops will provide an opportunity for all applicants to develop skills in open-source software development for supporting career opportunities as well as future applications to this or other similar programs.  We will be publishing details about these workshops in March.\u003c/p\u003e\u003cp\u003eStay tuned for more information about our mentors, champions, and their projects!\u003c/p\u003e","url":"https://ropensci.org/blog/2023/02/21/champions-program-kick-off/","date_published":"2023-02-21T00:00:01-06:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/50cke-c6a42","title":"rOpenSci News Digest, February 2023","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2023/02/17/ropensci-news-digest-february-2023\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"r-universe-improvements\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-improvements\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-universe improvements!\u003c/h3\u003e\u003cp\u003eWe have changed the preferred git repo name where you host your \u003ccode\u003epackages.json\u003c/code\u003e registry for R-universe, see our post \u003ca href=\"/blog/2023/02/07/runiverse-registry-repo/\"\u003eNew preferred repo name for r-universe registries\u003c/a\u003e.We now recommend to use the full lowercase name of your R-universe domain as the repo name, for instance \u003ccode\u003eTileDB-Inc/tiledb-inc.r-universe.dev\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eSpeaking of domains and URLs, we have \u003ca href=\"/blog/2023/01/30/runiverse-permanent-urls/\"\u003eimproved the URL schema for the r-universe.dev front-end\u003c/a\u003e to make it even easier to find and share a link to an R package, article, API, or other resource.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2023-03/\"\u003eTuesday, Mar 7th, 9:00 Australian Western / 01:00 UTC\u003c/a\u003e \u0026ldquo;Checking data with naniar, visdat, assertr, and skimr\u0026rdquo; \u003cem\u003eHosted by community host \u003ca href=\"/author/nicholas-tierney/\"\u003eNick Tierney\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore documentation, use cases and tutorials on these packages, or check your data!\u003c/li\u003e\u003cli\u003eTalk to \u003ca href=\"/author/nicholas-tierney/\"\u003eNick\u003c/a\u003e and discuss how to use these packages in your workflow.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2023-04/\"\u003eTuesday, Apr 4th, 14:00 European Central / 12:00 UTC\u003c/a\u003e \u0026ldquo;Working with taxonomic lists in R\u0026rdquo; \u003cem\u003eHosted by community host \u003ca href=\"/author/miguel-alvarez/\"\u003eMiguel Alvarez\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eExplore R packages for working with lists (such as \u003ca href=\"https://docs.ropensci.org/taxlist/\"\u003etaxlist\u003c/a\u003e),\u003c/li\u003e\u003cli\u003eOrganize some taxonomy in your data using taxlist,\u003c/li\u003e\u003cli\u003eTalk to \u003ca href=\"/author/miguel-alvarez/\"\u003eMiguel\u003c/a\u003e and discuss tips for working with taxonomic lists.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch3 id=\"community-call-targets-in-action\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call-targets-in-action\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity Call {targets} in Action\u003c/h3\u003e\u003cp\u003eOn January 31 we enjoyed a Community Call about the \u003ca href=\"https://books.ropensci.org/targets/\"\u003etargets package\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eAs the name of the call indicates, we had three presentations where the speakers shared their experiences putting targets into action.\u003c/p\u003e\u003cp\u003eEric Scott started the panel, sharing his \u003ca href=\"https://cct-datascience.quarto.pub/harnessing-hpc-power-with-targets/\"\u003eattempt to make it easy to set up targets to harness the power of HPC from the comfort of an RStudio window\u003c/a\u003e.  Next, Joel Nitta talked about \u003ca href=\"https://joelnitta.github.io/comm-call-bioinfo-targets/\"\u003eusing targets for bioinformatics pipelines\u003c/a\u003e, and finally Will Landau demonstrated \u003ca href=\"https://wlandau.github.io/targets-debug/\"\u003ehow to debug {targets} pipelines\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eYou can see \u003ca href=\"https://vimeo.com/795053980\"\u003ethe video\u003c/a\u003e and access to all the material (slides, code, and shared notes with transcription and Q\u0026amp;A) on the \u003ca href=\"/commcalls/jan2023-targets/\"\u003ecommunity call webpage\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003cem\u003eWhat would YOU like to hear about in an rOpenSci Community Call?\u003c/em\u003e, \u003ca href=\"https://github.com/ropensci-org/community-calls\"\u003elet us know\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"the-champions-program-is-off-to-a-great-start-in-2023\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-champions-program-is-off-to-a-great-start-in-2023\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe Champions Program is off to a great start in 2023!\u003c/h3\u003e\u003cp\u003eWe started the 2023 activities of our champions program with two kick-off meetings.\u003c/p\u003e\u003cp\u003eDuring these meetings, \u003ca href=\"/champions/\"\u003ementors and champions\u003c/a\u003e introduced themselves, shared where they are from, what their project is about, and something that excites them about the program. We also went over the logistics of the program, the potential agenda, and scheduled activities.\u003c/p\u003e\u003cp\u003eWe have a diverse group of people from Argentina, Brazil, Peru, Nigeria, Turkey, Australia, France, Norway, Saudi Arabia, the United States, and the United Kingdom.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;re excited to share that \u003cstrong\u003ethree\u003c/strong\u003e of our champions will \u003cstrong\u003edevelop a new package\u003c/strong\u003e, \u003cstrong\u003efour\u003c/strong\u003e will \u003cstrong\u003eprepare and submit their package to the review process\u003c/strong\u003e, and \u003cstrong\u003ethree\u003c/strong\u003e will \u003cstrong\u003ebecome rOpenSci reviewers\u003c/strong\u003e. Mentors will work with their mentees throughout the process of executing their projects.\u003c/p\u003e\u003cp\u003eIt was lovely to see the participants\u0026rsquo; enthusiasm to learn, share, execute their projects, and give back to the community!\u003c/p\u003e\u003cp\u003eStay tuned for more information about our mentors, champions, and their projects!\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew package\u003c/h3\u003e\u003cp\u003eThe following  package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/rb3\"\u003erb3\u003c/a\u003e, developed by Wilson Freitas together with Marcelo Perlin: Download and parse public files released by B3 and convert them into useful formats and data structures common to data analysis practitioners.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=rb3\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/534\"\u003ereviewed\u003c/a\u003e by Pachá (aka Mauricio Vargas Sepúlveda) and Mario Gavidia Calderón.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following sixteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (cff) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v0.4.1\"\u003e\u003ccode\u003ev0.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/datefixR\" title=\"Standardize Dates in Different Formats or with Missing Data\"\u003edatefixR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/datefixR/releases/tag/v1.4.1\"\u003e\u003ccode\u003ev1.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dynamite\" title=\"Bayesian Modeling and Causal Inference for MultivariateLongitudinal Data\"\u003edynamite\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dynamite/releases/tag/1.2.0\"\u003e\u003ccode\u003e1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/excluder\" title=\"Checks for Exclusion Criteria in Online Data\"\u003eexcluder\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/excluder/releases/tag/v0.5.0\"\u003e\u003ccode\u003ev0.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/fingertipsR\" title=\"Fingertips Data for Public Health\"\u003efingertipsR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/fingertipsR/releases/tag/v1.0.10\"\u003e\u003ccode\u003ev1.0.10\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gittargets\" title=\"Data Version Control for the Targets Package\"\u003egittargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gittargets/releases/tag/0.0.6\"\u003e\u003ccode\u003e0.0.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/hoardr\" title=\"Manage Cached Files\"\u003ehoardr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/hoardr/releases/tag/v0.5.3\"\u003e\u003ccode\u003ev0.5.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ijtiff\" title=\"Comprehensive TIFF I/O with Full Support for ImageJ TIFF Files\"\u003eijtiff\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ijtiff/releases/tag/v2.3.0\"\u003e\u003ccode\u003ev2.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/opentripplanner\" title=\"Setup and connect to OpenTripPlanner\"\u003eopentripplanner\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/opentripplanner/releases/tag/v0.5.1\"\u003e\u003ccode\u003ev0.5.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmdata\" title=\"Import OpenStreetMap Data as Simple Features or Spatial Objects\"\u003eosmdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmdata/releases/tag/v0.2.0\"\u003e\u003ccode\u003ev0.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/readODS\" title=\"Read and Write ODS Files\"\u003ereadODS\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/readODS/releases/tag/cran_v1.8\"\u003e\u003ccode\u003ecran_v1.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ReLTER\" title=\"An Interface for the eLTER Community\"\u003eReLTER\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ReLTER/releases/tag/2.1.1\"\u003e\u003ccode\u003e2.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rerddap\" title=\"General Purpose Client for ERDDAP Servers\"\u003ererddap\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rerddap/releases/tag/v1.0.2\"\u003e\u003ccode\u003ev1.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ruODK\" title=\"An R Client for the ODK Central API\"\u003eruODK\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ruODK/releases/tag/v1.4.0\"\u003e\u003ccode\u003ev1.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/terrainr\" title=\"Landscape Visualizations in R and Unity\"\u003eterrainr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/terrainr/releases/tag/v0.7.4\"\u003e\u003ccode\u003ev0.7.4\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/visdat\" title=\"Preliminary Visualisation of Data\"\u003evisdat\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/visdat/releases/tag/v0.6.0\"\u003e\u003ccode\u003ev0.6.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are fourteen recently closed and active submissions and 2 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/551\"\u003estochLAB\u003c/a\u003e, Stochastic Collision Risk Model. Submitted by \u003ca href=\"https://www.blackbawks.net\"\u003eGrant\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/534\"\u003erb3\u003c/a\u003e, Download and Parse Public Data Released by B3 Exchange. Submitted by \u003ca href=\"https://www.msperlin.com/\"\u003eMarcelo S. Perlin\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/560\"\u003eopenalexR\u003c/a\u003e, Getting Bibliographic Records from OpenAlex Database Using DSL. Submitted by \u003ca href=\"https://trang.page/\"\u003eTrang Le\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"https://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"https://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/571\"\u003ewaywiser\u003c/a\u003e, Ergonomic Methods for Assessing Spatial Models. Submitted by \u003ca href=\"https://mm218.dev/\"\u003eMichael Mahoney\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/566\"\u003epredictNMB\u003c/a\u003e, Evaluate Clinical Prediction Models by Net Monetary Benefit. Submitted by \u003ca href=\"https://rwparsons.github.io/\"\u003eRex Parsons\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/559\"\u003econcstats\u003c/a\u003e, Market Structure, Concentration and Inequality Measures. Submitted by \u003ca href=\"https://github.com/schneiderpy\"\u003eAndreas Schneider\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/568\"\u003eohun\u003c/a\u003e, Optimizing Acoustic Signal Detection. Submitted by \u003ca href=\"https://marceloarayasalas.weebly.com/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"https://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/572\"\u003equaltdict\u003c/a\u003e, Generating Variable Dictionaries and Labelled Data Exports of Qualtrics. Submitted by \u003ca href=\"https://github.com/lyh970817\"\u003elyh970817\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2023/01/31/dynamite-r-package\"\u003eDynamite for Causal Inference from Panel Data using Dynamic Multivariate Panel Models\u003c/a\u003e by Jouni Helske. Dynamite is a new R package for Bayesian modelling of complex panel data using dynamic multivariate panel models.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"other-topics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-topics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOther topics\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e by Maëlle Salmon. An attempt to define what package maintenance entails, with a few tips. This post was discussed on the \u003ca href=\"https://rweekly.fireside.fm/111\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/01/30/runiverse-permanent-urls\"\u003eImproved permanent URL schema for r-universe.dev\u003c/a\u003e by Jeroen Ooms. We have improved the URL schema for the r-universe.dev front-end to make it even easier to find and share a link to an R package, article, API, or other resource.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/02/07/runiverse-registry-repo\"\u003eNew preferred repo name for r-universe registries\u003c/a\u003e by Jeroen Ooms. We have changed the preferred git repo name where you host your \u003ccode\u003epackages.json\u003c/code\u003e registry for r-universe.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003ch3 id=\"call-for-maintainers-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;re interested in maintaining any of the R packages below, you might enjoy reading our blog post \u003ca href=\"/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/\"\u003eWhat Does It Mean to Maintain a Package?\u003c/a\u003e (or listening to its discussion on the \u003ca href=\"https://rweekly.fireside.fm/111\"\u003eR Weekly highlights podcast\u003c/a\u003e hosted by Eric Nantz and Mike Thomas)!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://docs.ropensci.org/citesdb/\"\u003ecitesdb\u003c/a\u003e\u003c/strong\u003e, a high-performance database of shipment-level CITES trade data. Provides convenient access to over 40 years and 20 million records ofendangered wildlife trade data from the Convention on International Tradein Endangered Species of Wild Fauna and Flora, stored on a local on-disk,out-of memory \u0026lsquo;DuckDB\u0026rsquo; database for bulk analysis. \u003ca href=\"https://github.com/ropensci/citesdb/issues/21\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"call-for-comaintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-comaintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for comaintainers\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003ertweet, that interfaces Twitter API, is looking for a \u003ca href=\"https://github.com/ropensci/rtweet/issues/763\"\u003eco-maintainer\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eRefer to our \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/#packages-looking-for-co-maintainers\"\u003erecent blog post\u003c/a\u003e to identify other packages where help is especially wished for!\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"new-cran-guideline-on-citation-file\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-cran-guideline-on-citation-file\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew CRAN guideline on CITATION file\u003c/h3\u003e\u003cp\u003eCRAN requires CITATION files to be declared as \u003ca href=\"https://stat.ethz.ch/R-manual/R-devel/library/utils/html/bibentry.html\"\u003e\u003ccode\u003ebibentry\u003c/code\u003e items\u003c/a\u003e, and not in the previously-accepted form of \u003ca href=\"https://stat.ethz.ch/R-manual/R-devel/library/utils/html/citEntry.html\"\u003e\u003ccode\u003ecitEntry()\u003c/code\u003e\u003c/a\u003e.As an example see \u003ca href=\"https://github.com/ropensci/dynamite/blob/main/inst/CITATION\"\u003ethe dynamite CITATION file\u003c/a\u003e which refers to the R manual as well as other associated publications.\u003c/p\u003e\u003ch3 id=\"reference-organization-the-family-tag\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#reference-organization-the-family-tag\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReference organization: the \u003ccode\u003e@family\u003c/code\u003e tag\u003c/h3\u003e\u003cp\u003eIn a package with more than a few help topics, reference organization is key to the user\u0026rsquo;s experience.Alphabetical order is rarely informative. \u0026#x1f609;A powerful tool for organizing both the local and pkgdown reference is the \u003ca href=\"https://roxygen2.r-lib.org/articles/index-crossref.html#family\"\u003e\u003ccode\u003e@family\u003c/code\u003e tag\u003c/a\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @family datawrangling\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003eLocally it populates the \u0026ldquo;See also\u0026rdquo; section. You can tweak the title of the See also section for it not to be, say, \u0026ldquo;Other datawrangling\u0026rdquo; but rather \u0026ldquo;Data wrangling functionality\u0026rdquo;, by having in \u003ccode\u003eman/roxygen/meta.R\u003c/code\u003e:\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003erd_family_title\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edatawrangling\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Data wrangling functionality\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003eIn the pkgdown configuration for the reference index you can use \u003ca href=\"https://pkgdown.r-lib.org/reference/build_reference.html#topic-matching\"\u003etopic matching helpers\u003c/a\u003e such as \u003ccode\u003ehas_concept()\u003c/code\u003e and \u003ccode\u003elacks_concepts()\u003c/code\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"gotcha-invisible-needs-return\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#gotcha-invisible-needs-return\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGotcha: \u003ccode\u003einvisible()\u003c/code\u003e needs \u003ccode\u003ereturn()\u003c/code\u003e\u003c/h3\u003e\u003cp\u003eThe official man entry for \u003ccode\u003einvisible()\u003c/code\u003e \u003ca href=\"https://stat.ethz.ch/R-manual/R-devel/library/base/html/invisible.html\"\u003esays that it\u003c/a\u003e:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eReturn[s] a (temporarily) invisible copy of an object\u0026quot;\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThis might make it sound like \u003ccode\u003einvisible()\u003c/code\u003e directly implements an active \u003cstrong\u003ereturn\u003c/strong\u003e function, which it does not. While not strictly wrong, this statement is potentially misleading, especially followed as it is by the \u003cem\u003eDetails\u003c/em\u003e:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eThis function can be useful when it is desired to have functions return values which can be assigned, but which do not print when they are not assigned.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003e\u003ccode\u003einvisible()\u003c/code\u003e will only directly \u003cem\u003ereturn\u003c/em\u003e from a function when it is wrapped in an active \u003ccode\u003ereturn()\u003c/code\u003e statement: \u003ccode\u003ereturn(invisible())\u003c/code\u003e; or when it\u0026rsquo;s the very last line of the function code.\u003c/p\u003e\u003cp\u003eThis is all very nicely explained by \u003ca href=\"https://stackoverflow.com/a/38905341\"\u003ePeter Meissner on Stack Overflow\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"a-testing-pattern-adding-switches-to-your-code\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-testing-pattern-adding-switches-to-your-code\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA testing pattern: adding switches to your code\u003c/h3\u003e\u003cp\u003eA recent R-hub blog post \u003ca href=\"https://blog.r-hub.io/2023/01/23/code-switch-escape-hatch-test/\"\u003eexplains a pattern for testing your package\u0026rsquo;s behavior in for instance the absence of an internet connection, without turning off wifi\u003c/a\u003e.It consists in using an early return in a helper function based on the presence of a specifically named environment variable (\u003ccode\u003eMYPKG.TEST.NOINTERNET\u003c/code\u003e) and on setting that environment variable locally in a test through \u003ccode\u003ewithr::local_envvar()\u003c/code\u003e.\u003c/p\u003e\u003ch3 id=\"code-comments-tips\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#code-comments-tips\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCode comments tips\u003c/h3\u003e\u003cp\u003eAnother R-hub blog post \u003ca href=\"https://blog.r-hub.io/2023/01/26/code-comments-self-explaining-code/\"\u003epresents tips for writing as few comments as possible, while making the code as readable as possible\u003c/a\u003e.\u003c/p\u003e\u003c!-- To be curated by hand --\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/02/17/ropensci-news-digest-february-2023/","date_published":"2023-02-17T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/gqfs6-xwy52","title":"New preferred repo name for r-universe registries","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","tech notes","registry","packages","dashboard"],"content_html":"\u003ch2 id=\"running-your-own-package-registry\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#running-your-own-package-registry\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRunning your own package registry\u003c/h2\u003e\u003cp\u003eTiny update for \u003ca href=\"https://r-universe.dev\"\u003er-universe\u003c/a\u003e users whos run their own package registry: we have changed the preferred git repo name where you host your \u003ccode\u003epackages.json\u003c/code\u003e registry file.\u003c/p\u003e\u003cp\u003ePreviously the git repository was simply called \u003ccode\u003euniverse\u003c/code\u003e, i.e. the registry for \u003ca href=\"https://tiledb-inc.r-universe.dev\"\u003etiledb-inc.r-universe.dev\u003c/a\u003e was in the GitHub repository \u003ccode\u003etiledb-inc/universe\u003c/code\u003e. We now recommend to instead use the full lowercase name of your r-universe domain as the repo name, i.e \u003ca href=\"https://github.com/tiledb-inc/tiledb-inc.r-universe.dev\"\u003e\u003ccode\u003etiledb-inc/tiledb-inc.r-universe.dev\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eFor now the old name \u003ccode\u003euniverse\u003c/code\u003e will keep working as well, but this will be deprecated in 2024 so we recommend renaming it now.\u003c/p\u003e\u003ch2 id=\"why-the-change\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-the-change\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy the change\u003c/h2\u003e\u003cp\u003eWhy the change? First of all, the old name \u003ccode\u003euniverse\u003c/code\u003e was too generic, which made its purpose sometimes unclear for larger GitHub organizations.\u003c/p\u003e\u003cp\u003eBut there was also a potential bug: if you would fork somebody \u003ccode\u003euniverse\u003c/code\u003e repo in order to send them a PR, you would automatically have a git repo named \u003ccode\u003euniverse\u003c/code\u003e under your own GitHub account, and unintentionally start a CRAN-like repo under your own name, but with their packages.\u003c/p\u003e\u003cp\u003eHence the obvious solution was to use the same format as github-pages, where the name of the repo is simply the full domain name at which your universe is hosted.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/02/07/runiverse-registry-repo/","date_published":"2023-02-07T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/vv6xb-53139","title":"What Does It Mean to Maintain a Package?","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]}],"tags":["package","maintenance"],"content_html":"\u003cp\u003ePart of what we aim to do at rOpenSci is nurture a community of package maintainers who help each other.In addition to support during package maintenance, we also want to support maintainers who wish to move on. Situations can change, and there may come a time when a maintainer is looking to pass maintenance on to another. If a maintainer finds themself in this situation and would like to transfer maintainership, we help by \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/\"\u003eadvertising\u003c/a\u003e, and also help the new maintainer(s) with advice, generally à la \u0026ldquo;look around to see if anything needs fixing, then do routine maintenance\u0026rdquo;.But what is routine maintenance? This post is an attempt to define what package maintenance entails, with a few tips.\u003c/p\u003e\u003ch2 id=\"package-maintenance-as-ownership\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-maintenance-as-ownership\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage maintenance as ownership\u003c/h2\u003e\u003cp\u003eAs a package maintainer (or maintainer team),\u003c/p\u003e\u003cul\u003e\u003cli\u003eyou are responsible for the scope of the package: Want to add a feature? Your call!\u003c/li\u003e\u003cli\u003eyou are in charge of planning work on the codebase: Think of improvements and organize them into milestones.\u003c/li\u003e\u003cli\u003eyou are in control of code quality: Want to spend more time on this pull request? Or will you accept and accrue a bit of \u003ca href=\"https://en.wikipedia.org/wiki/Technical_debt\"\u003etechnical debt\u003c/a\u003e? Again, your call!\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eHowever you do not own only these technical and productivity aspects.In our past community call about \u003ca href=\"/commcalls/2020-03-18/\"\u003eMaintaining an R Package\u003c/a\u003e, Erin Grand defined maintaining a package as \u0026ldquo;ownership around package community\u0026rdquo;.What a great way to recognize the \u003cem\u003epeople\u003c/em\u003e creating and using a piece of software!As a package maintainer, one of your roles is to support and encourage a thriving community of users and contributors\u0026hellip; Also the topic of a former community call: \u003ca href=\"/commcalls/apr2021-pkg-community/\"\u003eSet Up Your Package to Foster a Community\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"package-maintenance-as-responsiveness\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-maintenance-as-responsiveness\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage maintenance as responsiveness\u003c/h2\u003e\u003cp\u003eNow, unfortunately, you do not own the whole agenda of package maintenance. \u0026#x1f605;Unless your package has no visible users, your maintenance work will likely some sort of user support and issue triage.You might also get requests from the maintainers of dependencies of your package, or from the repository you publish your package with (CRAN, Bioconductor).\u003c/p\u003e\u003cp\u003eUser support in particular can be a source of joy, seeing your package used, helping people get through hurdles, problem solving.However, all these external demands can be exhausting and even stressful.How can we prevent this?Well, unfortunately, this is a common situation. However, while there is no magical solution, here are things that might help.\u003c/p\u003e\u003cul\u003e\u003cli\u003eMaintaining the package as a team can help share the load, and can also provide a back channel to let off some steam. If you\u0026rsquo;re feeling like you could use some hands-on support, consider inviting some co-maintainers to the project.\u003c/li\u003e\u003cli\u003eIf you want support, but not necessarily the hands-on type, consider chatting with other maintainers. You can discuss specific bugs or coding problems, or general tips for community management or engagement. You can even just share some woes and get sympathy 😁. rOpenSci has a #package-maintenance channel in its \u003ca href=\"https://contributing.ropensci.org/resources.html#channels\"\u003esemi-open slack\u003c/a\u003e, which all rOpenSci package maintainers should have access to (please email us if not).\u003c/li\u003e\u003cli\u003eYou don\u0026rsquo;t need to address all issues as soon as they pop up (apart from CRAN\u0026rsquo;s strict deadlines, that is). You can plan periods of activity and inactivity in your repository, potentially indicating this clearly in a pinned issue or in the documentation. The targets manual explains \u003ca href=\"https://books.ropensci.org/targets/help.html#out-of-office\"\u003eout of office periods\u003c/a\u003e but out of office could also very well be your package\u0026rsquo;s more usual state, with activity in bursts. Your package, your choice!\u003c/li\u003e\u003cli\u003eYou can adjust your contributing guidelines over time. There is no shame in asking a user to provide a reprex versus spending hours guessing the meaning of their issue text. Through contributing guidelines and gentle explanations, you can shift general questions about your package to a place where it\u0026rsquo;s easier for you, for instance GitHub Discussions as opposed to Issues.\u003c/li\u003e\u003cli\u003eMake sure you catch notifications (is your right email address listed, do you watch your own repository?). You don\u0026rsquo;t need to read or act on them immediately but it\u0026rsquo;s nice to not lose them.\u003c/li\u003e\u003cli\u003eYou can choose where your package is published. If the rules of a publication repository are a source of too much pain compared to the ease of distribution, you can choose to leave it.\u003c/li\u003e\u003cli\u003eYou might also try to find funding for your work. See for instance the \u003ca href=\"https://www.r-consortium.org/all-projects/call-for-proposals\"\u003eR Consortium call for proposals\u003c/a\u003e (twice a year).\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"package-maintenance-as-housekeeping\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-maintenance-as-housekeeping\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage maintenance as housekeeping\u003c/h2\u003e\u003cp\u003eBeside exciting feature requests, package maintenance often warrants more \u0026ldquo;routine\u0026rdquo; work.\u003c/p\u003e\u003cp\u003eYou might want to try to keep up to date with package development best practice (and external guidelines \u0026#x1f605;) through package development channels.Remember \u003ca href=\"/news\"\u003erOpenSci newsletter\u003c/a\u003e has a Package Development Corner. \u0026#x1f609;Following questions on, say, the \u003ca href=\"https://discuss.ropensci.org/\"\u003erOpenSci forum\u003c/a\u003e or Posit community forum \u003ca href=\"https://community.rstudio.com/c/package-development/11\"\u003ePackage Development category\u003c/a\u003e can be a form of news monitoring and deliberate practice.With such reading/following, you might reach a new understanding of a testing method, you might discover a dependency is best switched for another, etc.\u003c/p\u003e\u003cp\u003eNow, when and how do you improve your package?You might try and repay some technical debt each time you plan some work on a feature.You might imitate the \u003ca href=\"/blog/2022/03/18/ropensci-news-digest-march-2022/#get-inspired-by-the-tidyverse-spring-cleaning\"\u003etidyverse spring cleaning\u003c/a\u003e, both the idea of it and the actual items listed in the public checklist, like updating continuous integration setups.If such work does not sound fun, again doing it as a team might help, or you might join an \u003ca href=\"/events\"\u003erOpenSci co-working event\u003c/a\u003e to give yourself a dedicated time for working on regular package maintenance in a fun environment.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we tried giving an overview of what maintaining a package entails: ownership of the scope, code and community; self-controlled responsiveness to external requests; regular housekeeping.All of this can be a lot of work, and needs to be balanced against the rewards one gets as a package developer (depending on your situation these might entail: personal satisfaction of creating an useful tool; joy of collaborating with others; income; developing coding experience; demonstrating your skills; getting recognition for your work).\u003c/p\u003e\u003cp\u003eIf the balance feels off, consider your needs. It might be time to try and recruit co-maintainers or join a community of other developers, or even to find a new maintainer or retire the package.For rOpenSci packages, we can help by advertising your package\u0026rsquo;s need for help, so feel free to contact us.Last but not least, we at rOpenSci would like to thank all package maintainers, past, present and future! The work you do, have done, or will do, is valuable and awesome, and we really appreciate it 🙏🏼 !\u003c/p\u003e\u003cp\u003eWe are always trying to think about ways to support package maintainers. Please feel free to add a comment below with any suggestions you might have.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/02/07/what-does-it-mean-to-maintain-a-package/","date_published":"2023-02-07T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/fxxjw-1f295","title":"Dynamite for Causal Inference from Panel Data using Dynamic Multivariate Panel Models","language":"en","authors":[{"name":"Jouni Helske","url":"https://orcid.org/0000-0001-7130-793X","avatar":"https://github.com/helske.png","_role":["author"]}],"tags":["dynamite","Bayesian","panel data","causal inference","tech notes","Software Peer Review","packages","R","community"],"content_html":"\u003ch2 id=\"introduction\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#introduction\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIntroduction\u003c/h2\u003e\u003cp\u003ePanel data contains measurements from multiple subjects measured over multiple time points.Such data can be encountered in many social science applications such as when analysing register data or cohort studies (for example).Often the aim is to perform causal inference based on such observational data (instead of randomized control trials).\u003c/p\u003e\u003cp\u003eA new \u003ca href=\"https://github.com/ropensci/software-review/issues/554\"\u003erOpensci-reviewed\u003c/a\u003e R package \u003ca href=\"https://docs.ropensci.org/dynamite\"\u003edynamite\u003c/a\u003e available on CRAN implements a new class of panel models called the Bayesian dynamic multivariate panel model (DMPM) which supports\u003c/p\u003e\u003cul\u003e\u003cli\u003eJoint modelling of multiple response variables potentially from mixed distributions (e.g. Gaussian and categorical responses)\u003c/li\u003e\u003cli\u003eTime-varying regression coefficients modelled as splines\u003c/li\u003e\u003cli\u003eGroup-level random effects (coming soon)\u003c/li\u003e\u003cli\u003eProbabilistic posterior predictive simulations for long-term causal effect estimation, including not only the average causal effects but the full interventional distributions of interest (i.e. the distribution of the response variable after an intervention).\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe theory regarding the model and the subsequent causal effect estimation for panel data, with some examples, can be found in the \u003ca href=\"https://osf.io/preprints/socarxiv/mdwu5/\"\u003eSocArxiv preprint\u003c/a\u003e\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e and the package \u003ca href=\"https://docs.ropensci.org/dynamite/articles/dynamite.html\"\u003evignette\u003c/a\u003e.In this post, I will illustrate the use of dynamite for causal inference in a non-panel setting (i.e. we have time series data on only a single “individual”).\u003c/p\u003e\u003cp\u003eThe idea of the following example is similar to a synthetic control approach for time series causal inference, originally suggested by Abadie et al.\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e, and further extended and popularized by Brodersen et al.\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e and their \u003ca href=\"https://CRAN.R-project.org/package=CausalImpact\"\u003eCausalImpact\u003c/a\u003e package.\u003c/p\u003e\u003cp\u003eThe basic idea of the synthetic control method is that you have a time series of interest \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/msub\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmo\u003e…\u003c/mo\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmi\u003eT\u003c/mi\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey_1,\\ldots,y_T\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"minner\"\u003e…\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3283em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\" style=\"margin-right:0.13889em;\"\u003eT\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e, for example daily sales of some product, and an intervention was made at some time point \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e\u0026lt;\u003c/mo\u003e\u003cmi\u003eT\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003et\u0026lt;T\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6542em;vertical-align:-0.0391em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003et\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6833em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.13889em;\"\u003eT\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e (e.g., change in the value-added tax, VAT).You would then like to know what was the effect of the intervention on \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmo\u003e…\u003c/mo\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmi\u003eT\u003c/mi\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey_{t},\\ldots,y_{T}\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"minner\"\u003e…\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3283em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\" style=\"margin-right:0.13889em;\"\u003eT\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e. For example, by how much did the sales increase due to the decrease or removal of the VAT?Typically you also have one or more “control times series” \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ex\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ex\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.4306em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e which predict the behaviour of \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ey\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e but for which the intervention has no affect (e.g. some time-varying properties of the product, the demographic variables of the market, or sales of the product in some other markets).You then build a statistical model for \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/msub\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmo\u003e…\u003c/mo\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e−\u003c/mo\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/mrow\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey_1,\\ldots, y_{t-1}\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6389em;vertical-align:-0.2083em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"minner\"\u003e…\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003cspan class=\"mbin mtight\"\u003e−\u003c/span\u003e\u003cspan class=\"mord mtight\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2083em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e using the control series for the same time points, use your estimated model to predict the values of \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ey\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e in the intervention period \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmo\u003e…\u003c/mo\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmi\u003eT\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003et, \\ldots, T\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.8778em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003et\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"minner\"\u003e…\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.13889em;\"\u003eT\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e using the observed control series and compare these predictions to the observed values of \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmo\u003e…\u003c/mo\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmi\u003eT\u003c/mi\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey_t,\\ldots, y_T\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"minner\"\u003e…\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3283em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\" style=\"margin-right:0.13889em;\"\u003eT\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e (which experienced the intervention).\u003c/p\u003e\u003cp\u003eIn the synthetic control approach one of the key assumptions is that the control series itself is not affected by the intervention.In the sales example above, using sales data of some distant market could be suitable control, but the change in VAT might have an effect on the sales in the neighboring markets as well, so using such a time series for the control would then violate this assumption.While applicable to valid synthetic control cases, the dynamite package can also be used in cases where not only the main response variable of interest (i.e. sales in the above example) but also the control series (sales of neighboring markets) are affected by the intervention. This is done by jointly modelling both the main response variable as well as the control time series (although it could be argued that they should not be called a ‘control’ series in this case).\u003c/p\u003e\u003ch2 id=\"data-generation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#data-generation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eData generation\u003c/h2\u003e\u003cp\u003eLoad some packages:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edynamite\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e     \u003cspan class=\"c1\"\u003e# Data manipulation\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eggplot2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e   \u003cspan class=\"c1\"\u003e# Figures\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epatchwork\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# Combining Figures\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eI will consider the following true data generating process (DGP):\u003c/p\u003e\u003cp\u003e\u003cspan class=\"katex-display\"\u003e\u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"\u003e\u003csemantics\u003e\u003cmtable rowspacing=\"0.25em\" columnalign=\"right left\" columnspacing=\"0em\"\u003e\u003cmtr\u003e\u003cmtd\u003e\u003cmstyle scriptlevel=\"0\" displaystyle=\"true\"\u003e\u003cmsub\u003e\u003cmi\u003ex\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003c/mstyle\u003e\u003c/mtd\u003e\u003cmtd\u003e\u003cmstyle scriptlevel=\"0\" displaystyle=\"true\"\u003e\u003cmrow\u003e\u003cmrow\u003e\u003c/mrow\u003e\u003cmo\u003e∼\u003c/mo\u003e\u003cmi\u003eN\u003c/mi\u003e\u003cmo stretchy=\"false\"\u003e(\u003c/mo\u003e\u003cmo\u003e−\u003c/mo\u003e\u003cmn\u003e0.5\u003c/mn\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e−\u003c/mo\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/mrow\u003e\u003c/msub\u003e\u003cmo\u003e+\u003c/mo\u003e\u003cmsub\u003e\u003cmi\u003ex\u003c/mi\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e−\u003c/mo\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/mrow\u003e\u003c/msub\u003e\u003cmo\u003e+\u003c/mo\u003e\u003cmsub\u003e\u003cmi\u003ez\u003c/mi\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e−\u003c/mo\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/mrow\u003e\u003c/msub\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmn\u003e0.\u003c/mn\u003e\u003cmsup\u003e\u003cmn\u003e3\u003c/mn\u003e\u003cmn\u003e2\u003c/mn\u003e\u003c/msup\u003e\u003cmo stretchy=\"false\"\u003e)\u003c/mo\u003e\u003c/mrow\u003e\u003c/mstyle\u003e\u003c/mtd\u003e\u003c/mtr\u003e\u003cmtr\u003e\u003cmtd\u003e\u003cmstyle scriptlevel=\"0\" displaystyle=\"true\"\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003c/mstyle\u003e\u003c/mtd\u003e\u003cmtd\u003e\u003cmstyle scriptlevel=\"0\" displaystyle=\"true\"\u003e\u003cmrow\u003e\u003cmrow\u003e\u003c/mrow\u003e\u003cmo\u003e∼\u003c/mo\u003e\u003cmi\u003eN\u003c/mi\u003e\u003cmo stretchy=\"false\"\u003e(\u003c/mo\u003e\u003cmn\u003e0.7\u003c/mn\u003e\u003cmsub\u003e\u003cmi\u003ex\u003c/mi\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e−\u003c/mo\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/mrow\u003e\u003c/msub\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmn\u003e0.\u003c/mn\u003e\u003cmsup\u003e\u003cmn\u003e3\u003c/mn\u003e\u003cmn\u003e2\u003c/mn\u003e\u003c/msup\u003e\u003cmo stretchy=\"false\"\u003e)\u003c/mo\u003e\u003c/mrow\u003e\u003c/mstyle\u003e\u003c/mtd\u003e\u003c/mtr\u003e\u003c/mtable\u003e\u003cannotation encoding=\"application/x-tex\"\u003e\\begin{aligned}x_t \u0026amp; \\sim N(-0.5 y_{t-1} + x_{t-1} + z_{t-1}, 0.3^2)\\y_t \u0026amp; \\sim N(0.7x_{t-1}, 0.3^2)\\\\end{aligned}\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:3.0482em;vertical-align:-1.2741em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mtable\"\u003e\u003cspan class=\"col-align-r\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:1.7741em;\"\u003e\u003cspan style=\"top:-3.91em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:3em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"top:-2.3859em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:3em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:1.2741em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"col-align-l\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:1.7741em;\"\u003e\u003cspan style=\"top:-3.91em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:3em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord\"\u003e\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e∼\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.10903em;\"\u003eN\u003c/span\u003e\u003cspan class=\"mopen\"\u003e(\u003c/span\u003e\u003cspan class=\"mord\"\u003e−\u003c/span\u003e\u003cspan class=\"mord\"\u003e0.5\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003cspan class=\"mbin mtight\"\u003e−\u003c/span\u003e\u003cspan class=\"mord mtight\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2083em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2222em;\"\u003e\u003c/span\u003e\u003cspan class=\"mbin\"\u003e+\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2222em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003cspan class=\"mbin mtight\"\u003e−\u003c/span\u003e\u003cspan class=\"mord mtight\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2083em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2222em;\"\u003e\u003c/span\u003e\u003cspan class=\"mbin\"\u003e+\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2222em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.04398em;\"\u003ez\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.044em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003cspan class=\"mbin mtight\"\u003e−\u003c/span\u003e\u003cspan class=\"mord mtight\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2083em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e0.\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord\"\u003e3\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.8641em;\"\u003e\u003cspan style=\"top:-3.113em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e2\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mclose\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"top:-2.3859em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:3em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord\"\u003e\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e∼\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.10903em;\"\u003eN\u003c/span\u003e\u003cspan class=\"mopen\"\u003e(\u003c/span\u003e\u003cspan class=\"mord\"\u003e0.7\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003cspan class=\"mbin mtight\"\u003e−\u003c/span\u003e\u003cspan class=\"mord mtight\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2083em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e0.\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord\"\u003e3\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.8641em;\"\u003e\u003cspan style=\"top:-3.113em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e2\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mclose\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:1.2741em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\u003cp\u003efor \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e=\u003c/mo\u003e\u003cmn\u003e2\u003c/mn\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmo\u003e…\u003c/mo\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmn\u003e100\u003c/mn\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003et=2, \\ldots, 100\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6151em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003et\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e=\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.8389em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e2\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"minner\"\u003e…\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e100\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e, where the initial values \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ex\u003c/mi\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ex_1\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.5806em;vertical-align:-0.15em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e and \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey_1\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e are drawn from the standard normal distribution (in subsequent modelling we condition on these first observations, i.e. they are treated as fixed data).\u003c/p\u003e\u003cp\u003eVariable \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ez\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ez_t\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.5806em;vertical-align:-0.15em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.04398em;\"\u003ez\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.044em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e is our intervention variable, which I fixed to zero for the first 80 time points, and to one for the the last 20 time points, i.e. the intervention starts at time \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e=\u003c/mo\u003e\u003cmn\u003e81\u003c/mn\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003et=81\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6151em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003et\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e=\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6444em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e81\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e.Following the terminology in our \u003ca href=\"https://osf.io/preprints/socarxiv/mdwu5/\"\u003eDMPM paper\u003c/a\u003e\u003csup id=\"fnref1:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e, this is a recurring intervention, in contrast to an atomic intervention where \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ez\u003c/mi\u003e\u003cmn\u003e81\u003c/mn\u003e\u003c/msub\u003e\u003cmo\u003e=\u003c/mo\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ez_{81}=1\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.5806em;vertical-align:-0.15em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.04398em;\"\u003ez\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.044em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e81\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e=\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6444em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e and zero otherwise.Naturally it would be possible to also consider interventions such as \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ez\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003cmo\u003e=\u003c/mo\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ez_t=1\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.5806em;vertical-align:-0.15em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.04398em;\"\u003ez\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.044em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e=\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6444em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e for \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmn\u003e80\u003c/mn\u003e\u003cmo\u003e\u0026lt;\u003c/mo\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e\u0026lt;\u003c/mo\u003e\u003cmn\u003e90\u003c/mn\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003e80\u0026lt;t\u0026lt;90\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6835em;vertical-align:-0.0391em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e80\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6542em;vertical-align:-0.0391em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003et\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6444em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e90\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e and \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ez\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003cmo\u003e=\u003c/mo\u003e\u003cmn\u003e0\u003c/mn\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ez_t=0\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.5806em;vertical-align:-0.15em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.04398em;\"\u003ez\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.044em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e=\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6444em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e0\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e otherwise (e.g. an ad campaign starts at time 81 and ends at time 89).\u003c/p\u003e\u003cp\u003eOur hypothetical research question is how does \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ez\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ez\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.4306em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.04398em;\"\u003ez\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e affect \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ey\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e?Looking at our data generating process it is clear that \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ez\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ez_t\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.5806em;vertical-align:-0.15em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.04398em;\"\u003ez\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.044em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e does not affect \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey_t\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e, but it still affects \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e+\u003c/mo\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/mrow\u003e\u003c/msub\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e+\u003c/mo\u003e\u003cmn\u003e2\u003c/mn\u003e\u003c/mrow\u003e\u003c/msub\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmo\u003e…\u003c/mo\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey_{t+1},y_{t+2},\\ldots\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6389em;vertical-align:-0.2083em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003cspan class=\"mbin mtight\"\u003e+\u003c/span\u003e\u003cspan class=\"mord mtight\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2083em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003cspan class=\"mbin mtight\"\u003e+\u003c/span\u003e\u003cspan class=\"mord mtight\"\u003e2\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2083em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"minner\"\u003e…\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e via \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ex\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmsub\u003e\u003cmi\u003ex\u003c/mi\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e+\u003c/mo\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/mrow\u003e\u003c/msub\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmo\u003e…\u003c/mo\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ex_t,x_{t+1},\\ldots\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6389em;vertical-align:-0.2083em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003cspan class=\"mbin mtight\"\u003e+\u003c/span\u003e\u003cspan class=\"mord mtight\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2083em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"minner\"\u003e…\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003eNote that I chose this model just to exemplify the modelling, and these coefficients clearly do not reflect the sales example in the introduction.\u003c/p\u003e\u003cp\u003eI will first simulate some data according to our true model:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eset.seed\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"m\"\u003e100\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003enumeric\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ez\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003erep\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etimes\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e80\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e20\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ex[1]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ernorm\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ey[1]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ernorm\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003efor\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e \u003cspan class=\"kr\"\u003ein\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ex[i]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ernorm\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e-0.5\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003ey[i\u003c/span\u003e\u003cspan class=\"m\"\u003e-1\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003ex[i\u003c/span\u003e\u003cspan class=\"m\"\u003e-1\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003ez[i]\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ey[i]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ernorm\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.7\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e \u003cspan class=\"n\"\u003ex[i\u003c/span\u003e\u003cspan class=\"m\"\u003e-1\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ed\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003edata.frame\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ez\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ez\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etime\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ed\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecolour\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;y\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecolour\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;x\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003escale_colour_discrete\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Series\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003eylab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"nf\"\u003exlab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Time\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etheme_bw\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/01/31/dynamite-r-package/data-1.png\"\t\t\talt=\"Line plot with a pink line labelled x and a blue line labelled y. The axes are Value on the Y and Time on the X. The two lines follow each other fluctuating around zero, and both jump to fluctuating around 2.5 after time 80.\"\u003e\u003c/figure\u003e\u003ch2 id=\"causal-inference-based-on-synthetic-control-with-dynamite\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#causal-inference-based-on-synthetic-control-with-dynamite\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCausal inference based on synthetic control with dynamite\u003c/h2\u003e\u003cp\u003eWhile in the data generation the \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey_t\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e variable did not depend on the lagged value \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e−\u003c/mo\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/mrow\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey_{t-1}\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6389em;vertical-align:-0.2083em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003cspan class=\"mbin mtight\"\u003e−\u003c/span\u003e\u003cspan class=\"mord mtight\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2083em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e and \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ez\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ez_t\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.5806em;vertical-align:-0.15em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.04398em;\"\u003ez\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.044em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e, I will nevertheless estimate a model where both \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ex\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ex_t\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.5806em;vertical-align:-0.15em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e and \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey_t\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e depend on the \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ex\u003c/mi\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e−\u003c/mo\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/mrow\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ex_{t-1}\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6389em;vertical-align:-0.2083em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:0em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003cspan class=\"mbin mtight\"\u003e−\u003c/span\u003e\u003cspan class=\"mord mtight\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2083em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e and \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e−\u003c/mo\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/mrow\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey_{t-1}\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6389em;vertical-align:-0.2083em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003cspan class=\"mbin mtight\"\u003e−\u003c/span\u003e\u003cspan class=\"mord mtight\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2083em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e, as well as \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ez\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ez\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.4306em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.04398em;\"\u003ez\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e, mimicking the fact that I’m not sure about the true causal graph (structure of DGP).The model formula for the main function of the package, \u003ca href=\"https://docs.ropensci.org/dynamite/reference/dynamite.html\"\u003e\u003ccode\u003edynamite()\u003c/code\u003e\u003c/a\u003e, is defined by calling a special function \u003ca href=\"https://docs.ropensci.org/dynamite/reference/dynamiteformula.html\"\u003e\u003ccode\u003eobs()\u003c/code\u003e\u003c/a\u003e once for each “channel”, i.e. response variable.The lagged variables can be defined in the formula as \u003ccode\u003elag(y)\u003c/code\u003e, but here I use a special function \u003ca href=\"https://docs.ropensci.org/dynamite/reference/lags.html\"\u003e\u003ccode\u003elags()\u003c/code\u003e\u003c/a\u003e which by default adds lagged values of all channels to each channel:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ef\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eobs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"n\"\u003ez\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efamily\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;gaussian\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"nf\"\u003eobs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"n\"\u003ez\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efamily\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;gaussian\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"nf\"\u003elags\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## same as \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# f \u0026lt;- obs(y ~ z + lag(y) + lag(x), \u0026#34;gaussian) + \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#   obs(x ~ z + lag(y) + lag(x), \u0026#34;gaussian)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWe can now estimate our model with \u003ccode\u003edynamite()\u003c/code\u003e for which we need to define the data, the variable in the data defining the time index (argument \u003ccode\u003etime\u003c/code\u003e), and the grouping variable (argument \u003ccode\u003egroup\u003c/code\u003e), which can be ignored in this univariate case:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efit\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003edynamite\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ef\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ed\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etime\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;time\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003echains\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecores\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erefresh\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eseed\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003eCompiling Stan model.\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe actual estimation is delegated to \u003ca href=\"https://mc-stan.org\"\u003eStan\u003c/a\u003e using either \u003ca href=\"https://cran.r-project.org/package=rstan\"\u003erstan\u003c/a\u003e (default) or \u003ca href=\"https://github.com/stan-dev/cmdstanr\"\u003ecmdstanr\u003c/a\u003e backends.The last arguments are passed to \u003ccode\u003erstan::sampling()\u003c/code\u003e which runs the Markov chain Monte Carlo for us.While rstan is the default backend as it is available at CRAN, we recommend the often more efficient cmdstanr or the latest development version of rstan, available at \u003ca href=\"https://mc-stan.org/r-packages/\"\u003eStan’s repo for R packages\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eLet’s see some results:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eoptions\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ewidth\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e90\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# expand the width so that the column names are not cut off\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efit\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003eModel:  Family   Formulay gaussian y ~ z  x gaussian x ~ z  Lagged responses added as predictors with: k = 1Data: d (Number of observations: 198)Grouping variable: .group (Number of groups: 1)Time index variable: time (Number of time points: 100)Smallest bulk-ESS: 2259 (beta_y_x_lag1)Smallest tail-ESS: 2353 (beta_y_x_lag1)Largest Rhat: 1.003 (beta_x_z)Elapsed time (seconds):        warmup samplechain:1  5.544  5.377chain:2  4.979  4.286chain:3  5.295  5.501chain:4  4.693  5.600Summary statistics of the time-invariant parameters:# A tibble: 10 × 10   variable          mean   median     sd    mad      q5     q95  rhat ess_bulk ess_tail   \u0026lt;chr\u0026gt;            \u0026lt;dbl\u0026gt;    \u0026lt;dbl\u0026gt;  \u0026lt;dbl\u0026gt;  \u0026lt;dbl\u0026gt;   \u0026lt;dbl\u0026gt;   \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt;    \u0026lt;dbl\u0026gt;    \u0026lt;dbl\u0026gt; 1 alpha_x        0.0115   0.0114  0.0320 0.0325 -0.0416  0.0652  1.00    5866.    2920. 2 alpha_y       -0.00536 -0.00514 0.0322 0.0317 -0.0574  0.0483  1.00    5476.    2733. 3 beta_x_x_lag1  0.989    0.988   0.0573 0.0557  0.897   1.08    1.00    2362.    2566. 4 beta_x_y_lag1 -0.572   -0.572   0.0683 0.0682 -0.685  -0.458   1.00    3211.    3189. 5 beta_x_z       1.22     1.22    0.141  0.139   0.991   1.46    1.00    3166.    3016. 6 beta_y_x_lag1  0.656    0.657   0.0614 0.0637  0.556   0.757   1.00    2259.    2353. 7 beta_y_y_lag1  0.0837   0.0839  0.0706 0.0690 -0.0341  0.197   1.00    2682.    2559. 8 beta_y_z      -0.0115  -0.0120  0.148  0.144  -0.253   0.236   1.00    3186.    2381. 9 sigma_x        0.278    0.277   0.0201 0.0202  0.247   0.313   1.00    3508.    2605.10 sigma_y        0.290    0.289   0.0209 0.0205  0.258   0.326   1.00    3874.    3218.\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe coefficient estimates are pretty much in line with the data generation, but notice the relatively large posterior standard errors of the coefficients related to \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ez\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ez\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.4306em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.04398em;\"\u003ez\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e; this is due to the fact that we have only a single series and single changepoint at time \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e=\u003c/mo\u003e\u003cmn\u003e81\u003c/mn\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003et=81\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6151em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003et\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e=\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6444em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e81\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e.\u003c/p\u003e\u003cp\u003eWe can now perform some posterior predictive checks. First, we can check how well the posterior samples of our one-step-ahead predictions match with the observations by using the \u003ca href=\"https://docs.ropensci.org/dynamite/reference/fitted.dynamitefit.html\"\u003e\u003ccode\u003efitted()\u003c/code\u003e\u003c/a\u003e method and visualizing these posterior predictive distributions (I’ll one plot the estimates for the variable \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ey\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e for simplicity):\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003efitted\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efit\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003esummarise\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emean\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_fitted\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elwr80\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_fitted\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ena.rm\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"c1\"\u003e# na.rm as t = 1 is fixed\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupr80\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_fitted\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.9\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ena.rm\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elwr95\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_fitted\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.025\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ena.rm\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupr95\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_fitted\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.975\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ena.rm\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eout\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_ribbon\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eymin\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003elwr95\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eymax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eupr95\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_ribbon\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eymin\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003elwr80\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eymax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eupr80\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecolour\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ed\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ecolour\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;black\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003exlab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Time\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"nf\"\u003eylab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etheme_bw\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003eWarning: Removed 1 row(s) containing missing values (geom_path).\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/01/31/dynamite-r-package/unnamed-chunk-6-1.png\"\t\t\talt=\"Line plot with a black line and a red line with a pink ribbon. The axes are Value on the Y and Time on the X. The two lines follow each other fluctuating around zero, and both jump to fluctuating around 2.5 after time 80.\"\u003e\u003c/figure\u003e\u003cp\u003eNote that these are not real out-of-sample predictions as the posterior samples of model parameters used for these predictions are based on all our observations, which would be especially problematic for a model containing time-varying components (e.g., splines). A more “honest” (and time consuming) approach would be to use approximate leave-future-out cross-validation via dynamite’s \u003ca href=\"https://docs.ropensci.org/dynamite/reference/lfo.html\"\u003e\u003ccode\u003elfo()\u003c/code\u003e\u003c/a\u003e function.\u003c/p\u003e\u003cp\u003eGiven the posterior samples of the model parameters, I can also make some counterfactual predictions (how \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmn\u003e81\u003c/mn\u003e\u003c/msub\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmo\u003e…\u003c/mo\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmsub\u003e\u003cmi\u003ey\u003c/mi\u003e\u003cmn\u003e100\u003c/mn\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey_{81},\\ldots,y_{100}\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e81\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"minner\"\u003e…\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.3011em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e\u003cspan class=\"mord mtight\"\u003e100\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e would have looked like if no intervention was made, i.e. if \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ez\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ez_t\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.5806em;vertical-align:-0.15em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.04398em;\"\u003ez\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.044em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e was zero for all \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003et\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6151em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e).First I create a new data frame where \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ez\u003c/mi\u003e\u003cmo\u003e=\u003c/mo\u003e\u003cmn\u003e0\u003c/mn\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ez=0\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.4306em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.04398em;\"\u003ez\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e=\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6444em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e0\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e for all time points, and where \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ey\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e and \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ex\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ex\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.4306em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e are set to missing values starting from \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e=\u003c/mo\u003e\u003cmn\u003e81\u003c/mn\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003et=81\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6151em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003et\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e=\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6444em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e81\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e (the time point where started our intervention \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ez\u003c/mi\u003e\u003cmo\u003e=\u003c/mo\u003e\u003cmn\u003e1\u003c/mn\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ez=1\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.4306em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.04398em;\"\u003ez\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e=\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6444em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e):\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003enewdata\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ed\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003enewdata\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ez\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003enewdata\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ey[81\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e100\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kc\"\u003eNA\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003enewdata\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ex[81\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e100\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kc\"\u003eNA\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eI then input this new data to the \u003ca href=\"https://docs.ropensci.org/dynamite/reference/predict.dynamitefit.html\"\u003e\u003ccode\u003epredict()\u003c/code\u003e\u003c/a\u003e method and define that I want posterior samples of expected values instead of new observations by using \u003ccode\u003etype = \u0026quot;mean\u0026quot;\u003c/code\u003e (new observations are still simulated behind the scenes in order to move forward in time):\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epred\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003epredict\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efit\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003enewdata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003enewdata\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;mean\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"m\"\u003e80\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epred\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e       y_mean      x_mean .group time .draw z  y  x1  0.04691573 -0.40116363      1   81     1 0 NA NA2 -0.44723418 -0.87026782      1   82     1 0 NA NA3 -0.28467017 -0.38001229      1   83     1 0 NA NA4 -0.36577537 -0.45640698      1   84     1 0 NA NA5  0.01759079  0.01213885      1   85     1 0 NA NA6  0.10382535  0.12547867      1   86     1 0 NA NA\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eFrom these I compute the posterior mean, 80% and 95% intervals for each time point:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esumr\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003epred\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003esummarise\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emean\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_mean\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elwr80\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_mean\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.1\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupr80\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_mean\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.9\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elwr95\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_mean\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.025\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupr95\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_mean\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.975\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAnd some figures, following similar visualization style as popularized by the CausalImpact package, consisting of the actual predictions, difference compared to observed values, and cumulative differences of these:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep1\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esumr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_ribbon\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eymin\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003elwr95\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eymax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eupr95\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_ribbon\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eymin\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003elwr80\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eymax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eupr80\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecolour\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ed\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ecolour\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;black\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003exlab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Time\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"nf\"\u003eylab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etheme_bw\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esumr\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ey_obs\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ey[81\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e100\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep2\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003esumr\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ey_obs_diff\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey_obs\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elwr_diff80\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey_obs\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003elwr80\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupr_diff80\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey_obs\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003eupr80\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elwr_diff95\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey_obs\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003elwr95\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupr_diff95\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey_obs\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003eupr95\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ey_obs_diff\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_ribbon\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eymin\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003elwr_diff95\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eymax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eupr_diff95\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_ribbon\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eymin\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003elwr_diff80\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eymax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eupr_diff80\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecolour\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003exlab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Time\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"nf\"\u003eylab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Predicted value - observed value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etheme_bw\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecs_sumr\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003epred\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e.draw\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003esummarise\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecs\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ecumsum\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ed\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ey[81\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003en]\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003ey_mean\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"nf\"\u003eacross\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003esummarise\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emean\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecs\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elwr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.025\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ena.rm\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.975\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ena.rm\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e`summarise()` has grouped output by '.draw'. You can override using the `.groups`argument.\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep3\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecs_sumr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_ribbon\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eymin\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003elwr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eymax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eupr\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecolour\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003exlab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Time\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eylab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Cumulative difference\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etheme_bw\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep1\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003ep2\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003ep3\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"nf\"\u003eplot_layout\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003encol\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/01/31/dynamite-r-package/preds-1.png\"\t\t\talt=\"Three stacked line plots, each with time as the x axis. From top to bottom, the y-axes are Value, Predicted minus Observed value, and Cumulative differences. The top figure shows a pink ribbon deviating from a black line in the 80-100 time range. The middle figure shows a fluctuating pink ribbon. The bottom figure shows an increasing ribbon.\"\u003e\u003c/figure\u003e\u003cp\u003eIn the top figure, we see the predictions for the counterfactual case where no intervention was done (\u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmsub\u003e\u003cmi\u003ez\u003c/mi\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/msub\u003e\u003cmo\u003e=\u003c/mo\u003e\u003cmn\u003e0\u003c/mn\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ez_t=0\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.5806em;vertical-align:-0.15em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.04398em;\"\u003ez\u003c/span\u003e\u003cspan class=\"msupsub\"\u003e\u003cspan class=\"vlist-t vlist-t2\"\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.2806em;\"\u003e\u003cspan style=\"top:-2.55em;margin-left:-0.044em;margin-right:0.05em;\"\u003e\u003cspan class=\"pstrut\" style=\"height:2.7em;\"\u003e\u003c/span\u003e\u003cspan class=\"sizing reset-size6 size3 mtight\"\u003e\u003cspan class=\"mord mathnormal mtight\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-s\"\u003e​\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"vlist-r\"\u003e\u003cspan class=\"vlist\" style=\"height:0.15em;\"\u003e\u003cspan\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e=\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6444em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e0\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e for all \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003et\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6151em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e; pink ribbon/red line), whereas in the middle figure I have drawn the difference between predicted values and the actual observations for times \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003cmo\u003e=\u003c/mo\u003e\u003cmn\u003e81\u003c/mn\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmo\u003e…\u003c/mo\u003e\u003cmo separator=\"true\"\u003e,\u003c/mo\u003e\u003cmn\u003e100\u003c/mn\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003et=81,\\ldots,100\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6151em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003et\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003cspan class=\"mrel\"\u003e=\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.2778em;\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.8389em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e81\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"minner\"\u003e…\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mpunct\"\u003e,\u003c/span\u003e\u003cspan class=\"mspace\" style=\"margin-right:0.1667em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord\"\u003e100\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e, which show clear effect of intervention (the difference between between observations and predictions do not fluctuate around zero).In the bottom figure we see the cumulative difference between observations and our predictions, which emphasizes how the cumulative effect keeps increasing during the whole study period instead of tapering off or disappearing completely.\u003c/p\u003e\u003cp\u003eFinally we can consider a case where we assume that the intervention affects only a single response variable, \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ey\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e, and \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ex\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ex\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.4306em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e does not depend on \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ey\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e, Which, since we created this data, we know would be incorrect.This is essentially same as treating \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ex\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ex\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.4306em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e as exogenous and estimating a single-response model for \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ey\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e.But in our case we can also proceed with our original model, and just modify the previous simulation so that the variable \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ex\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ex\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.4306em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e is fixed to its observed values:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003enewdata\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ed\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003enewdata\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ez\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003enewdata\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ey[81\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e100\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kc\"\u003eNA\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epred_fixed_x\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003epredict\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efit\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003enewdata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003enewdata\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;mean\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"m\"\u003e80\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esumr_fixed_x\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003epred_fixed_x\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003esummarise\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emean\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_mean\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elwr80\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_mean\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.1\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupr80\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_mean\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.9\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elwr95\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_mean\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.025\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupr95\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey_mean\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.975\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep1\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esumr_fixed_x\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_ribbon\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eymin\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003elwr95\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eymax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eupr95\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_ribbon\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eymin\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003elwr80\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eymax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eupr80\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecolour\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ed\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ecolour\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;black\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003exlab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Time\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"nf\"\u003eylab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etheme_bw\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esumr_fixed_x\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ey_obs\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ey[81\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e100\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep2\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003esumr_fixed_x\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ey_obs_diff\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey_obs\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elwr_diff80\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey_obs\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003elwr80\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupr_diff80\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey_obs\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003eupr80\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elwr_diff95\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey_obs\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003elwr95\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupr_diff95\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ey_obs\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003eupr95\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ey_obs_diff\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_ribbon\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eymin\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003elwr_diff95\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eymax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eupr_diff95\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_ribbon\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eymin\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003elwr_diff80\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eymax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eupr_diff80\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecolour\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003exlab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Time\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"nf\"\u003eylab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Predicted value - observed value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etheme_bw\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecs_sumr_fixed_x\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003epred_fixed_x\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e.draw\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003esummarise\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecs\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ecumsum\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ed\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ey[81\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003en]\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"n\"\u003ey_mean\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"nf\"\u003eacross\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003esummarise\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emean\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecs\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003elwr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.025\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ena.rm\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003equantile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.975\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ena.rm\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e`summarise()` has grouped output by '.draw'. You can override using the `.groups`argument.\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep3\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecs_sumr_fixed_x\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etime\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_ribbon\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eymin\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003elwr\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eymax\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eupr\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ealpha\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecolour\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;#ED3535\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003exlab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Time\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eylab\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Cumulative difference\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etheme_bw\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep1\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003ep2\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003ep3\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"nf\"\u003eplot_layout\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003encol\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2023/01/31/dynamite-r-package/fixed_x-1.png\"\t\t\talt=\"Three stacked line plots, each with time as the x axis. From top to bottom, the y-axes are Value, Predicted minus Observed value, and Cumulative differences. The top figure shows a pink ribbon matching a black line in the 80-100 time range. The middle figure shows a fluctuating pink ribbon. The bottom figure shows a ribbon funnelling wider around zero.\"\u003e\u003c/figure\u003e\u003cp\u003eAs expected, because we treated variable \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ex\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ex\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.4306em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e as fixed, and the intervention only affects \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ey\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e only via \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ex\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ex\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.4306em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003ex\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e, we see that the counterfactual predictions and the observed series are very similar and would (incorrecly) conclude that our original intervention did not affect \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003ey\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003ey\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.625em;vertical-align:-0.1944em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\" style=\"margin-right:0.03588em;\"\u003ey\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e.Therefore, by using the dynamite package to model multiple response variables we are able to capture patterns we would have otherwise missed.\u003c/p\u003e\u003ch2 id=\"future-directions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#future-directions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFuture directions\u003c/h2\u003e\u003cp\u003eIn future, we plan to add more distributions such as Weibull, multinomial, and \u003cspan class=\"katex\"\u003e\u003cspan class=\"katex-mathml\"\u003e\u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\"\u003e\u003csemantics\u003e\u003cmrow\u003e\u003cmi\u003et\u003c/mi\u003e\u003c/mrow\u003e\u003cannotation encoding=\"application/x-tex\"\u003et\u003c/annotation\u003e\u003c/semantics\u003e\u003c/math\u003e\u003c/span\u003e\u003cspan class=\"katex-html\" aria-hidden=\"true\"\u003e\u003cspan class=\"base\"\u003e\u003cspan class=\"strut\" style=\"height:0.6151em;\"\u003e\u003c/span\u003e\u003cspan class=\"mord mathnormal\"\u003et\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e-distribution for the response variables and improve the tools for visualization of the model parameters and predictions.We would also be very interested in hearing how the package is used in various applications, especially if you can share your data openly.\u003ca href=\"https://github.com/ropensci/dynamite\"\u003ePull requests\u003c/a\u003e and other contributions are very welcome.\u003c/p\u003e\u003ch2 id=\"acknowledgements\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#acknowledgements\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAcknowledgements\u003c/h2\u003e\u003cp\u003eThe package was created by \u003ca href=\"https://github.com/santikka\"\u003eSanttu Tikka\u003c/a\u003e and \u003ca href=\"https://github.com/helske\"\u003eJouni Helske\u003c/a\u003e as part of \u003ca href=\"https://sites.utu.fi/predlife/en/\"\u003ePREDLIFE\u003c/a\u003e project, funded by the Academy of Finland.The package was \u003ca href=\"https://github.com/ropensci/software-review/issues/554\"\u003ereviewed\u003c/a\u003e by \u003ca href=\"https://github.com/nicholasjclark\"\u003eNicholas Clark\u003c/a\u003e and \u003ca href=\"https://github.com/LucyMcGowan\"\u003eLucy D’Agostino McGowan\u003c/a\u003e.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eHelske J, Tikka S (2022). Estimating Causal Effects from Panel Data with Dynamic Multivariate PanelModels. SocArxiv Preprint. doi.org/10.31235/osf.io/mdwu5.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref1:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eAbadie, A, Gardeazabal, J (2003). The Economic Costs of Conflict: A Case Study of the Basque Country. The American Economic Review, 93(1), 113–132. doi.org/10.1257/000282803321455188\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eBrodersen KH, Gallusser F, Koehler J, Remy N, and Scott SL (2015). Annals of Applied Statistics. Inferring causal impact using Bayesian structural time-series models. doi.org/10.1214/14-AOAS788\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2023/01/31/dynamite-r-package/","date_published":"2023-01-31T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/t21tr-3jm94","title":"Improved permanent URL schema for r-universe.dev","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","tech notes","front-end","documentation","dashboard"],"content_html":"\u003cstyle\u003eul a:hover{text-decoration: underline;}\u003c/style\u003e\u003ch2 id=\"pretty-permanent-urls\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pretty-permanent-urls\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePretty permanent URLs!\u003c/h2\u003e\u003cp\u003eWe have improved the URL schema for the \u003ca href=\"https://r-universe.dev\"\u003er-universe.dev\u003c/a\u003e front-end to make it even easier to find and share a link to an R package, article, API, or other resource.\u003c/p\u003e\u003cp\u003eThe old URLs will now automatically be redirected to the new locations, so this should be a non-breaking change. But of course we recommend updating your references to link to the new permanent URLs.\u003c/p\u003e\u003ch3 id=\"package-homepages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-homepages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage homepages\u003c/h3\u003e\u003cp\u003eThe new URLs have the same form as github pages, where the homepage for a package can be found under the root directory of your universe url, i.e. \u003ccode\u003ehttps://{owner}.r-universe.dev/{pkg}\u003c/code\u003e. For example the landing packages for some packages look like this:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/targets\"\u003ehttps://ropensci.r-universe.dev\u003cb\u003e/targets\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://tidyverse.r-universe.dev/ggplot2\"\u003ehttps://tidyverse.r-universe.dev\u003cb\u003e/ggplot2\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd so on. The URLs above return package information in html format. Simply append \u003ccode\u003e/json\u003c/code\u003e to retrieve the same information (and more) in api format:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite/json\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite/json\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/targets/json\"\u003ehttps://ropensci.r-universe.dev\u003cb\u003e/targets/json\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://tidyverse.r-universe.dev/ggplot2/json\"\u003ehttps://tidyverse.r-universe.dev\u003cb\u003e/ggplot2/json\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eA few exemptions are the following root paths, which are reserved names for the r-universe front-end sections and cranlike-server, and hence do not refer to a package:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/builds\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/builds\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/contributors\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/contributors\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/packages\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/packages\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/articles\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/articles\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/badges\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/badges\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/src\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/src\u003c/b\u003e\u003c/a\u003e (cranlike-server)\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/bin\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/bin\u003c/b\u003e\u003c/a\u003e (cranlike-server)\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/stats\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/stats\u003c/b\u003e\u003c/a\u003e (stream apis)\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"resources-within-a-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#resources-within-a-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eResources within a package\u003c/h3\u003e\u003cp\u003eResources that are part of a package, such as the pdf/html manual, news file, and preferred citation, can now be found under that package URL. Some examples:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite/DESCRIPTION\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite/DESCRIPTION\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite/NEWS\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite/NEWS\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite/NEWS.txt\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite/NEWS.txt\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite/jsonlite.pdf\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite/jsonlite.pdf\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite/citation\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite/citation\u003c/b\u003e\u003c/a\u003e (if available)\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite/citation.cff\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite/citation.cff\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite/citation.txt\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite/citation.txt\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite/citation.json\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite/citation.json\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite/doc/\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite/doc/\u003c/b\u003e\u003c/a\u003e (html manual and vignettes)\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite/doc/manual.html\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite/doc/manual.html\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite/doc/json-mapping.pdf\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite/doc/json-mapping.pdf\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe URLs for these resources are, where possible, consistent with the CRAN website and/or the R local dynamic help server.\u003c/p\u003e\u003ch3 id=\"link-to-sections-of-a-package-homepage\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#link-to-sections-of-a-package-homepage\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLink to sections of a package homepage\u003c/h3\u003e\u003cp\u003eOne benefit of the new schema is that you can link directly to sections within a package homepage. You can also find these links by clicking on the header of the section on the page.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite#readme\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite#readme\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite#reference\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite#reference\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite#citation\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite#citation\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite#development\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite#development\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite#users\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite#users\u003c/b\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"feeds-and-sitemaps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#feeds-and-sitemaps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFeeds and sitemaps\u003c/h3\u003e\u003cp\u003eFinally there are some meta APIs that are mainly for non-human consumption:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/feed.xml\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/feed.xml\u003c/b\u003e\u003c/a\u003e (RSS feed)\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/sitemap_index.xml\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/sitemap_index.xml\u003c/b\u003e\u003c/a\u003e (Universe sitemap index)\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/jsonlite/sitemap.xml\"\u003ehttps://jeroen.r-universe.dev\u003cb\u003e/jsonlite/sitemap.xml\u003c/b\u003e\u003c/a\u003e (package sitemap)\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThat\u0026rsquo;s it for now. As said, in order to not break any existing links, we have created automatic redirects from the old URLs to the new location where possible. If you run into any problems, please open an issue in \u003ca href=\"https://github.com/r-universe-org/help\"\u003er-universe-org/help\u003c/a\u003e or send a message on the \u003ccode\u003e#r-universe\u003c/code\u003e channel in the ropensci slack.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/01/30/runiverse-permanent-urls/","date_published":"2023-01-30T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/8dvy6-zh709","title":"rOpenSci News Digest, January 2023","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2023/01/20/ropensci-news-digest-january-2023\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"targets-in-action-community-call\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#targets-in-action-community-call\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e{targets} in Action Community Call\u003c/h3\u003e\u003cp\u003eTuesday, 31 January 2023 20:00 UTC / Tuesday, 31 January 2023 15:00 EST / Wednesday, 1st February 07:00 AEDT.\u003c/p\u003e\u003cp\u003eThe \u003ca href=\"https://docs.ropensci.org/targets/\"\u003e{targets}\u003c/a\u003e package is a pipeline tool for Statistics and data science in R. With {targets}, you can maintain a reproducible workflow without repeating yourself. {targets} learns how your pipeline fits together, skips costly runtime for tasks that are already up to date, runs only the necessary computation, supports implicit parallel computing, abstracts files as R objects, and shows tangible evidence that the results match the underlying code and data.\u003c/p\u003e\u003cp\u003eOn this call Will, Eric and Joel will share their experience putting \u003cstrong\u003e{targets} into action\u003c/strong\u003e. Eric will share with us \u003cem\u003eUsing {targets} with HPC\u003c/em\u003e and Joel will talk about \u003cem\u003eUsing {targets} for bioinformatics pipelines\u003c/em\u003e, then Will will demonstrate \u003cem\u003eDebugging {targets} pipelines\u003c/em\u003e.\u003c/p\u003e\u003cp\u003eMore info on the \u003ca href=\"/commcalls/jan2023-targets/\"\u003eevent page\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2023-02/\"\u003eTuesday, Feb 7th, 9:00 Americas Pacific / 17:00 UTC\u003c/a\u003e \u0026ldquo;Setting up Continuous Integration\u0026rdquo; \u003cem\u003eHosted by community host \u003ca href=\"/author/hugo-gruson/\"\u003eHugo Gruson\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003cul\u003e\u003cli\u003eDo some reading to learn about Continuous Integration; Setup Continuous Integration on one (or more) of your projects;\u003c/li\u003e\u003cli\u003eTalk to \u003ca href=\"/author/hugo-gruson/\"\u003eHugo\u003c/a\u003e and discuss how Continuous Integration can simplify your development process and how to get set up.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2023-03/\"\u003eTuesday, Mar 7th, 9:00 Australian Western / 01:00 UTC\u003c/a\u003e \u0026ldquo;Checking data with naniar, visdat, assertr, and skimr\u0026rdquo; \u003cem\u003eHosted by community host \u003ca href=\"/author/nicholas-tierney/\"\u003eNick Tierney\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003cul\u003e\u003cli\u003eExplore documentation, use cases and tutorials on these packages, or check your data!\u003c/li\u003e\u003cli\u003eTalk to \u003ca href=\"/author/nicholas-tierney//\"\u003eNick\u003c/a\u003e and discuss how to use these packages in your workflow.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch3 id=\"code-of-conduct-annual-review-and-transparency-report\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#code-of-conduct-annual-review-and-transparency-report\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCode of Conduct annual review and transparency report\u003c/h3\u003e\u003cp\u003eFind \u003ca href=\"/blog/2023/01/06/conduct2023/\"\u003eour annual review of the rOpenSci Code of Conduct, reporting process, and internal guidelines for handling reports and enforcement\u003c/a\u003e as well as our \u003ca href=\"/blog/2023/01/06/transparency2022/\"\u003etransparency report\u003c/a\u003e.We thank our two independent community members \u003ca href=\"https://www.esipfed.org/about/people/megan-carter\"\u003eMegan Carter\u003c/a\u003e (until June 2022) and \u003ca href=\"https://karawoo.com/\"\u003eKara Woo\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following two packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hoardr\"\u003ehoardr\u003c/a\u003e, developed by Tamás Stirling together with Scott Chamberlain: Suite of tools for managing cached files, targeting use in other R packages. Uses rappdirs for cross-platform paths. Provides utilities to manage cache directories, including targeting files by path or by key; cached directories can be compressed and uncompressed easily to save disk space.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=hoardr\"\u003eCRAN\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/phruta\"\u003ephruta\u003c/a\u003e, developed by Cristian Roman Palacios: The phruta R package is designed to simplify the basic phylogenetic pipeline. Specifically, all code is run within the same program and data from intermediate steps are saved in independent folders. Furthermore, all code is run within the same environment which increases the reproducibility of your analysis. phruta retrieves gene sequences, combines newly downloaded and local gene sequences, and performs sequence alignments. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ereviewed\u003c/a\u003e by Anna Krystalli, Rayna Harris, and Frederick Boehm.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following fifteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/datefixR\" title=\"Standardize Dates in Different Formats or with Missing Data\"\u003edatefixR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/datefixR/releases/tag/v1.4.0\"\u003e\u003ccode\u003ev1.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/GSODR\" title=\"Global Surface Summary of the Day (GSOD) Weather Data Client\"\u003eGSODR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/GSODR/releases/tag/v3.1.7\"\u003e\u003ccode\u003ev3.1.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ijtiff\" title=\"Comprehensive TIFF I/O with Full Support for ImageJ TIFF Files\"\u003eijtiff\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ijtiff/releases/tag/v2.3.0\"\u003e\u003ccode\u003ev2.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/jagstargets\" title=\"Targets for JAGS Pipelines\"\u003ejagstargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/jagstargets/releases/tag/1.1.0\"\u003e\u003ccode\u003e1.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nasapower\" title=\"NASA POWER API Client\"\u003enasapower\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nasapower/releases/tag/v4.0.9\"\u003e\u003ccode\u003ev4.0.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/opentripplanner\" title=\"Setup and connect to OpenTripPlanner\"\u003eopentripplanner\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/opentripplanner/releases/tag/0.5.0\"\u003e\u003ccode\u003e0.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ReLTER\" title=\"An Interface for the eLTER Community\"\u003eReLTER\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ReLTER/releases/tag/2.0.0\"\u003e\u003ccode\u003e2.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgbif\" title=\"Interface to the Global Biodiversity Information Facility API\"\u003ergbif\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgbif/releases/tag/v3.7.5\"\u003e\u003ccode\u003ev3.7.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rtweet\" title=\"Collecting Twitter Data\"\u003ertweet\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rtweet/releases/tag/v1.1.0\"\u003e\u003ccode\u003ev1.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/skimr\" title=\"Compact and Flexible Summaries of Data\"\u003eskimr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/skimr/releases/tag/v2.1.5\"\u003e\u003ccode\u003ev2.1.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stantargets\" title=\"Targets for Stan Workflows\"\u003estantargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stantargets/releases/tag/0.1.0\"\u003e\u003ccode\u003e0.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.7.4\"\u003e\u003ccode\u003e0.7.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Pipelines\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/0.14.2\"\u003e\u003ccode\u003e0.14.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tidytags\" title=\"Importing and Analyzing Twitter Data Collected with Twitter Archiving Google Sheets\"\u003etidytags\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidytags/releases/tag/v1.1.1\"\u003e\u003ccode\u003ev1.1.1\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/writexl\" title=\"Export Data Frames to Excel xlsx Format\"\u003ewritexl\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/writexl/releases/tag/v1.4.2\"\u003e\u003ccode\u003ev1.4.2\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are twelve recently closed and active submissions and 2 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román Palacios\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/551\"\u003estochLAB\u003c/a\u003e, Stochastic Collision Risk Model. Submitted by \u003ca href=\"http://www.blackbawks.net\"\u003eGrant\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/534\"\u003erb3\u003c/a\u003e, Download and Parse Public Data Released by B3 Exchange. Submitted by \u003ca href=\"https://www.msperlin.com/\"\u003eMarcelo S. Perlin\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/571\"\u003ewaywiser\u003c/a\u003e, Ergonomic Methods for Assessing Spatial Models. Submitted by \u003ca href=\"https://mm218.dev/\"\u003eMichael Mahoney\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/560\"\u003eopenalexR\u003c/a\u003e, Getting Bibliographic Records from OpenAlex Database Using DSL. Submitted by \u003ca href=\"http://trang.page\"\u003eTrang Le\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"http://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/568\"\u003eohun\u003c/a\u003e, Optimizing Acoustic Signal Detection. Submitted by \u003ca href=\"http://marceloarayasalas.weebly.com/\"\u003eMarcelo Araya-Salas\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/01/06/conduct2023\"\u003erOpenSci Code of Conduct Annual Review\u003c/a\u003e by Yanina Bellini Saibene, Mark Padgham, Kara Woo, and Megan Carter. Updates for version 2.4 of rOpenSci\u0026rsquo;s Code of Conduct.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/01/06/transparency2022\"\u003erOpenSci 2022 Code of Conduct Transparency Report\u003c/a\u003e by Yanina Bellini Saibene, Mark Padgham, and Kara Woo. rOpenSci 2022 Code of Conduct Transparency Report.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/01/12/multilingual-publishing-en\"\u003eExpanding our Community through Multilingual Publishing\u003c/a\u003e by Yanina Bellini Saibene, Pao Corrales, Elio Campitelli, and Maëlle Salmon. We are translating rOpenSci\u0026rsquo;s materials on best practices for software development, code review, and contribution to open source projects into Spanish! We are also developing guidelines and tools for translating open source resources to reach a wider audience. Learn about the project in this blog post.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2023/01/12/multilingual-publishing-es\"\u003eAgrandando nuestra comunidad con publicaciones multi-idioma\u003c/a\u003e by Yanina Bellini Saibene, Pao Corrales, Elio Campitelli, and Maëlle Salmon. Estamos traduciendo los materiales de rOpenSci sobre buenas prácticas de desarrollo de software, revisión de código y contribución a proyectos de código abierto al español! También estamos desarrollando guías y herramientas para traducir recursos de código abierto y alcanzar una mayor audiencia. Entérate de este proyecto en este artículo.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2023/01/13/curl5-release\"\u003ecurl 5.0.0: massive concurrent downloads and HTTP/2\u003c/a\u003e by Jeroen Ooms. A new major version of the curl package has been released to CRAN. This release both brings major big internal improvements as well as new user-facing functionality, in particular with respect to concurrent downloads.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://docs.ropensci.org/RSelenium\"\u003eRSelenium\u003c/a\u003e, R Bindings for \u0026lsquo;Selenium WebDriver\u0026rsquo;\u003c/strong\u003e. Provides a set of R bindings for the \u003ca href=\"https://www.selenium.dev/documentation/\"\u003e\u0026lsquo;Selenium 2.0 WebDriver\u0026rsquo;\u003c/a\u003e using the \u003ca href=\"https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol\"\u003e\u0026lsquo;JsonWireProtocol\u0026rsquo;\u003c/a\u003e. \u0026lsquo;Selenium 2.0 WebDriver\u0026rsquo; allows driving a web browser natively as a user would either locally or on a remote machine using the Selenium server it marks a leap forward in terms of web browser automation. \u003ca href=\"https://github.com/ropensci/RSelenium/issues/261\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://docs.ropensci.org/elastic\"\u003eelastic\u003c/a\u003e, General Purpose Interface to \u0026lsquo;Elasticsearch\u0026rsquo;\u003c/strong\u003e. Connect to \u0026lsquo;Elasticsearch\u0026rsquo;, a \u0026lsquo;NoSQL\u0026rsquo; database built on the \u0026lsquo;Java\u0026rsquo; Virtual Machine. Interacts with the \u003ca href=\"https://www.elastic.co/elasticsearch/\"\u003e\u0026lsquo;Elasticsearch\u0026rsquo; \u0026lsquo;HTTP\u0026rsquo; API\u003c/a\u003e, including functions for setting connection details to \u0026lsquo;Elasticsearch\u0026rsquo; instances, loading bulk data, searching for documents with both \u0026lsquo;HTTP\u0026rsquo; query variables and \u0026lsquo;JSON\u0026rsquo; based body requests. \u003ca href=\"https://github.com/ropensci/elastic/issues/292\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://docs.ropensci.org/citesdb/\"\u003ecitesdb\u003c/a\u003e\u003c/strong\u003e,a high-performance database of shipment-level CITES trade data. Provides convenient access to over 40 years and 20 million records ofendangered wildlife trade data from the Convention on International Tradein Endangered Species of Wild Fauna and Flora, stored on a local on-disk,out-of memory \u0026lsquo;DuckDB\u0026rsquo; database for bulk analysis. \u003ca href=\"https://github.com/ropensci/citesdb/issues/21\"\u003eIssue for volunteering\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"call-for-comaintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-comaintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for comaintainers\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/#packages-looking-for-co-maintainers\"\u003erecent blog post\u003c/a\u003e to identify packages where help is especially wished for!\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"bad-code-good-code\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#bad-code-good-code\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBad code? Good code?\u003c/h3\u003e\u003cp\u003eWhy not feel code shame when looking at older, less good code of yours?In case you might ignore it, this 2015 blog post by David Robinson underlines how important it is to not code shame anyone lest they lose the courage to keep coding and improving: \u003ca href=\"http://varianceexplained.org/programming/bad-code/\"\u003e\u0026ldquo;A Million Lines of Bad Code\u0026rdquo;\u003c/a\u003e.And remember \u003ca href=\"https://github.com/r-lib/testthat/blob/9cd6e01be008376b1f7f2d8d528d725b87c0d01e/R/praise.R#L50-L57\"\u003etestthat always believes in you\u003c/a\u003e. \u0026#x1f609;\u003c/p\u003e\u003ch3 id=\"write-an-r-package-from-r-markdown\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#write-an-r-package-from-r-markdown\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWrite an R Package from R Markdown?\u003c/h3\u003e\u003cp\u003eIf you ever dreamed of \u003ca href=\"https://yihui.org/en/2023/01/litr-package/\"\u003ewriting an R package from R Markdown\u003c/a\u003e, check out the \u003ca href=\"https://thinkr-open.github.io/fusen/\"\u003efusen\u003c/a\u003e package by Sébastien Rochette or the \u003ca href=\"https://faculty.marshall.usc.edu/jacob-bien/litr/docs/\"\u003elitr\u003c/a\u003e package by Jacob Bien and Patrick Vossler.\u003c/p\u003e\u003ch3 id=\"example-of-help-guidance\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#example-of-help-guidance\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExample of help guidance\u003c/h3\u003e\u003cp\u003eThe targets manual (by targets maintainer Will Landau) has an interesting chapter on \u003ca href=\"https://books.ropensci.org/targets/help.html\"\u003ehow to ask for help\u003c/a\u003e that might inspire other contributing guides!Note the explanation of \u003ca href=\"https://books.ropensci.org/targets/help.html#out-of-office\"\u003e\u0026ldquo;out of office\u0026rdquo; periods\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"external-libraries-and-the-ropensci-build-system\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#external-libraries-and-the-ropensci-build-system\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExternal libraries and the rOpenSci build system\u003c/h3\u003e\u003cp\u003ePackages needing external system libraries should specify those libraries in the \u003ca href=\"https://r-pkgs.org/description.html#other-fields\"\u003e\u0026ldquo;SystemRequirements\u0026rdquo; field of the \u0026ldquo;DESCRIPTION\u0026rdquo; file\u003c/a\u003e.Most package installation systems will parse \u0026ldquo;SystemRequirements\u0026rdquo; entries using the rules provided at \u003ca href=\"https://github.com/rstudio/r-system-requirements\"\u003erstudio/r-system-requirements\u003c/a\u003e.Any packages not listed in the \u0026ldquo;rules\u0026rdquo; sub-folder of that repository will generally not be automatically installed.It is nevertheless still useful to list all external dependencies, to at least aid manual installation.Our rOpenSci build system includes libraries listed in the \u003ca href=\"https://github.com/r-universe-org/base-image/blob/master/Dockerfile\"\u003er-universe-org/base-image\u003c/a\u003e.That list of libraries can easily be extended, so please contact us, or submit a pull request, if you\u0026rsquo;d like our system to include any additional system libraries.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/01/20/ropensci-news-digest-january-2023/","date_published":"2023-01-20T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/ds03k-21r84","title":"curl 5.0.0: massive concurrent downloads and HTTP/2","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["curl","http","tech notes"],"content_html":"\u003ch2 id=\"curl-500-is-on-cran\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#curl-500-is-on-cran\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ecurl 5.0.0 is on CRAN\u003c/h2\u003e\u003cp\u003eA new major version of the \u003ca href=\"https://cran.r-project.org/web/packages/curl/index.html\"\u003ecurl\u003c/a\u003e package has been released to CRAN. This release both brings internal improvements as well as new user-facing functionality, in particular with respect to concurrent downloads. From the \u003ca href=\"https://cran.r-project.org/web/packages/curl/NEWS\"\u003eNEWS\u003c/a\u003e file:\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ecurl 5.0.0 - New function multi_download() which supports concurrent downloads and resuming   download for large files, while giving detailed progress information. - Windows: updated libcurl to 7.84.0 + nghttp2 - Windows: default to CURLSSLOPT_NATIVE_CA when using openssl unless an ennvar   with CURL_CA_BUNDLE is set. - Use the new optiontype API for type checking if available (libcurl 7.73.0)\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe curl package is used by most other R packages for performing HTTP requests. Over 60% of rOpenSci packages directly or indirectly depend on curl for network interaction, hence improvements and bugs in curl have a big impact on the entire ecosystem.\u003c/p\u003e\u003ch2 id=\"new-advanced-download-function\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-advanced-download-function\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew advanced download function\u003c/h2\u003e\u003cp\u003eThe most exciting new feature is \u003ccode\u003emulti_download()\u003c/code\u003e: an advanced alternative to \u003ccode\u003ecurl_download()\u003c/code\u003e. It can perform many requests concurrently, with nice progress updates and support for interrupting and resuming large files. This function does not error in case any of the individual requests fail; it returns a data frame with information about the status of each request.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epkg\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;curl\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emirror\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;https://cloud.r-project.org\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edb\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eavailable.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emirror\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epackages\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epkg\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etools\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epackage_dependencies\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epkg\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edb\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edb\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ereverse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"n\"\u003e[[pkg]]\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eversions\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003edb[packages\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;Version\u0026#39;\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eurls\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esprintf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;%s/src/contrib/%s_%s.tar.gz\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emirror\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epackages\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e  \u003cspan class=\"n\"\u003eversions\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eres\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ecurl\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003emulti_download\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eurls\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eres\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# A tibble: 316 × 10\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#   success status_…¹ resum…² url   destf…³ error type  modified             time\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#   \u0026lt;lgl\u0026gt;       \u0026lt;int\u0026gt;   \u0026lt;dbl\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;chr\u0026gt;   \u0026lt;chr\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;dttm\u0026gt;              \u0026lt;dbl\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 1 TRUE          200       0 http… curl_5… NA    appl… 2023-01-12 18:10:03 0.260\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 2 TRUE          200       0 http… abbyyR… NA    appl… 2019-06-25 04:30:07 0.713\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 3 TRUE          200       0 http… addins… NA    appl… 2021-01-10 18:50:12 0.214\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 4 TRUE          200       0 http… alfred… NA    appl… 2021-07-26 10:20:03 0.225\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 5 TRUE          200       0 http… allcon… NA    appl… 2022-08-11 10:00:07 0.226\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 6 TRUE          200       0 http… AMAPVo… NA    appl… 2022-12-05 09:22:33 0.266\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 7 TRUE          200       0 http… AnnoPr… NA    appl… 2022-11-14 08:30:13 0.891\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 8 TRUE          200       0 http… anyfli… NA    appl… 2022-08-12 15:40:03 0.394\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 9 TRUE          200       0 http… anyLib… NA    appl… 2018-11-05 15:00:04 0.282\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#10 TRUE          200       0 http… aopdat… NA    appl… 2022-08-31 13:10:04 0.237\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# … with 306 more rows, 1 more variable: headers \u0026lt;list\u0026gt;, and abbreviated\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#   variable names ¹status_code, ²resumefrom, ³destfile\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eall.equal\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eunname\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etools\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003emd5sum\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eres\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003edestfile\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e \u003cspan class=\"nf\"\u003eunname\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edb[packages\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;MD5sum\u0026#39;\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# TRUE\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAbove a small example from the \u003ccode\u003e?multi_download\u003c/code\u003e manual, which downloads all reverse dependencies for a given CRAN package. It downloads 316 files, total 261.41 Mb. On a fast server, the \u003ccode\u003emulti_download()\u003c/code\u003e part takes about 1 or 2 seconds.\u003c/p\u003e\u003cp\u003eThe function scales well in terms of the number of requests. Below is an example, which downloads the DESCRIPTION file for the first 3000 CRAN packages. On a fast server (with HTTP/2 support) this again takes about 2 or 3 seconds.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emirror\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;https://cloud.r-project.org\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epkgs\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003erow.names\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eavailable.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emirror\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003cspan class=\"n\"\u003e[1\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"m\"\u003e3000\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eurls\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esprintf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;%s/web/packages/%s/DESCRIPTION\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emirror\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epkgs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efiles\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esprintf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;descriptions/%s.txt\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epkgs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003edir.create\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;descriptions\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eshowWarnings\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eres\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ecurl\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003emulti_download\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eurls\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efiles\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThis second example will especially from HTTP/2 support because there are many small files that can be multiplexed, whereas with HTTP/1.1 these need to be requested one after another.\u003c/p\u003e\u003ch2 id=\"updated-libcurl-and-http2-on-windows\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#updated-libcurl-and-http2-on-windows\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdated libcurl and HTTP/2 on Windows\u003c/h2\u003e\u003cp\u003eThe Windows binaries are now using \u003ca href=\"https://curl.se/changes.html#7_84_0\"\u003e\u003ccode\u003elibcurl 7.84.0\u003c/code\u003e\u003c/a\u003e with \u003ca href=\"https://github.com/nghttp2/nghttp2/releases/tag/v1.51.0\"\u003e\u003ccode\u003enghttp 1.51.0\u003c/code\u003e\u003c/a\u003e. The latter brings support for HTTP/2, but only when using the OpenSSL TLS backend, which is not (yet) the default. You can change this by setting the \u003ccode\u003eCURL_SSL_BACKEND\u003c/code\u003e environment variable in your \u003ccode\u003e~/.Renviron\u003c/code\u003e file and then restart R. The \u003ca href=\"https://cran.r-project.org/web/packages/curl/vignettes/windows.html\"\u003eWindows vignette\u003c/a\u003e explains this in more detail.\u003c/p\u003e\u003cp\u003eTo test if HTTP/2 is working you can perform a verbose request:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecurl\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003emulti_download\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;https://httpbin.org/get\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003etempfile\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"n\"\u003everbose\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAnd the output will show \u003ccode\u003eHTTP/2 200\u003c/code\u003e somewhere in the response:\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e...* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!\u0026lt; HTTP/2 200...\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eRight now OpenSSL is not the default, because Windows Native TLS back-end may be more robust, which has to do with the next topic.\u003c/p\u003e\u003ch2 id=\"openssl-now-uses-the-windows-certificate-store\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#openssl-now-uses-the-windows-certificate-store\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOpenSSL now uses the Windows certificate store\u003c/h2\u003e\u003cp\u003eAs mentioned above, libcurl on Windows can use one of two SSL back-ends (for https): SecureChannel (the native Windows TLS implementation) or OpenSSL. OpenSSL is also used by most other operating systems and is therefore better tested and moreover it supports HTTP/2. However there was always a big limitation with OpenSSL Windows: it required us to ship \u003ca href=\"https://curl.se/docs/sslcerts.html\"\u003ea ca-bundle with root certificates\u003c/a\u003e, which gets outdated quickly and may not work well on corporate networks that use custom SSL certificates.\u003c/p\u003e\u003cp\u003eThis has now changed because libcurl has gained a new experimental option \u003ca href=\"https://curl.se/libcurl/c/CURLOPT_SSL_OPTIONS.html\"\u003e\u003ccode\u003eCURLSSLOPT_NATIVE_CA\u003c/code\u003e\u003c/a\u003e which lets OpenSSL import the root certificates from the native Windows certificate store, instead of a custom ca-bundle. The R package now enables this option by default when using the OpenSSL back-end. Thereby curl in R should support the same TLS connections, regardless of which SSL back-end is in use. This might make OpenSSL once again the preferable option, and if this works well we may make it the default in a future version of the R package.\u003c/p\u003e\u003ch2 id=\"better-internal-type-checking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#better-internal-type-checking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBetter internal type checking\u003c/h2\u003e\u003cp\u003eThe final topic is mostly an internal change, but I\u0026rsquo;m pretty proud of it because it is based on functionality in libcurl that I proposed myself, and is now finally widely available.\u003c/p\u003e\u003cp\u003eAt the curl-up 2020 conference I gave a presentation \u003ca href=\"https://www.youtube.com/watch?v=jGv5pugYpN0\"\u003e5 years of libcurl bindings for R\u003c/a\u003e, after which we had a discussion on potential improvements for language bindings, such as in the R package. Eventually this led to the \u003ca href=\"https://github.com/curl/curl/pull/5365\"\u003eproposal of a new API\u003c/a\u003e that exposes a list of supported libcurl options and their types, to the language binding. This is important such that when users in R set an option in \u003ccode\u003enew_handle()\u003c/code\u003e, it can be verified that the option is valid and has the correct type (e.g. string, number, vector), because passing invalid types to libcurl will result in a crash.\u003c/p\u003e\u003cp\u003eThe proposal was merged later in 2020, and is now (2 years later) available in the stable versions of most operating systems. Version 5.0.0 of the R package (conditionally) use this API if available, which makes the type bindings safer to use.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/01/13/curl5-release/","date_published":"2023-01-13T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/t6bpr-g4874","title":"Expanding our Community through Multilingual Publishing","language":"en","authors":[{"name":"Elio Campitelli","url":"https://ropensci.org/author/elio-campitelli/","avatar":"https://ropensci.org/img/team/elio-campitelli.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Pao Corrales","url":"https://orcid.org/0000-0003-1923-9129","avatar":"https://ropensci.org/img/team/paola-corrales.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","multilingual"],"content_html":"\u003cp\u003eWe are excited to announce that, with the support of the Chan Zuckerberg Initiative, NumFOCUS, and the R Consortium, we have begun the process of translating rOpenSci\u0026rsquo;s materials on best practices for software development, code review, and contribution to open source projects into Spanish.As part of this effort, we are also developing guidelines and tools for translating open source resources to reach a wider audience.\u003c/p\u003e\u003cp\u003eAccording to a \u003ca href=\"https://www.linuxfoundation.org/research/the-2021-linux-foundation-report-on-diversity-equity-and-inclusion-in-open-source\"\u003erecent report\u003c/a\u003e from The Linux Foundation, \u003cem\u003elanguage access\u003c/em\u003e is one of the \u003cem\u003eenvironmental barriers to equity in open source\u003c/em\u003e. The report states that\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eThe predominant language of open source is English—in code, content, and community interactions—and English proficiency is a metric by which performance and personality can be judged\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThis might remind some readers of the famous \u003ca href=\"https://www.imdb.com/title/tt4166966/characters/nm0005527\"\u003equote\u003c/a\u003e from \u003ca href=\"https://www.tiktok.com/@primevideouk/video/6899066588121713921\"\u003eModern Family\u003c/a\u003e, where a character called Gloria exclaims:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eDo you even know how smart I am in Spanish?\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eBy publishing multilingual resources, we can lower these barriers by increasing access to knowledge and democratizing access to quality resources, thereby increasing the potential for individuals to contribute to software and open science projects.\u003c/p\u003e\u003ch2 id=\"language-representation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#language-representation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLanguage representation\u003c/h2\u003e\u003cp\u003eThe Spanish-speaking R community has been very active and growing in recent years, and has undertaken various translation activities for technical materials such as books, cheatsheets, guides, and datasets.\u003c/p\u003e\u003cp\u003eIn 2017, several Latin American R-Ladies began translating the R-Ladies\u0026rsquo; \u003ca href=\"https://github.com/rladies/starter-kit/wiki/Code-of-Conduct#spanish\"\u003eCode of Conduct\u003c/a\u003e and their Rules and Guidelines into Spanish.\u003c/p\u003e\u003cp\u003eIn 2018, the \u003ca href=\"https://youtu.be/kuHjpdgkSxg\"\u003eR community in Latin America collectively translated\u003c/a\u003e the \u003ca href=\"https://es.r4ds.hadley.nz/\"\u003eR for Data Science\u003c/a\u003e book into Spanish. This included the translation of all the data sets used in the book, which were compiled in the \u003ca href=\"https://github.com/cienciadedatos/datos\"\u003edatos\u003c/a\u003e package, making it an excellent tool for teaching.\u003c/p\u003e\u003cp\u003eThe community continued with the translation of \u003ca href=\"https://teachtogether.tech/es/index.html\"\u003eTeaching Tech Together\u003c/a\u003e and contributed to the translations into Spanish of the \u003ca href=\"https://posit.co/resources/cheatsheets/?type=translations/#translation-12\"\u003ePosit Cheatsheets\u003c/a\u003e,\u003ca href=\"https://software-carpentry.org/lessons/\"\u003eThe Carpentries\u003c/a\u003e’and \u003ca href=\"https://programminghistorian.org/es/\"\u003eThe Programming Historian\u003c/a\u003e lessons.\u003c/p\u003e\u003cp\u003eDriven by this active and growing Spanish-speaking community, rOpenSci \u003ca href=\"/blog/2021/07/27/censo2017/\"\u003esuccessfully piloted\u003c/a\u003e our first \u003ca href=\"/commcalls/2019-06-28/\"\u003eSpanish-language peer review\u003c/a\u003e, where the submission itself, as well as all reviews and editorial responses, were in Spanish.\u003c/p\u003e\u003cp\u003eAll of this work and previous experience created the right conditions for us to start our multilingual publishing in Spanish!Spanish is the second most-spoken native language in the world and is one of the most geographically widespread languages, being an official language in many countries\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003ch2 id=\"technical-materials-technical-solutions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#technical-materials-technical-solutions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTechnical materials, technical solutions\u003c/h2\u003e\u003cp\u003erOpenSci provides community support, standards, and infrastructure for scientists and research software engineers working in R to develop, maintain, and publish high-quality open-source scientific software.In addition, we develop and maintain high-quality documentation and \u003ca href=\"/resources/\"\u003eresources\u003c/a\u003e to support these activities.\u003c/p\u003e\u003cp\u003eMultilingual publishing of documentation and resources involves two aspects:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThe \u003cem\u003einternationalization\u003c/em\u003e refers to the technological solution allowing the software to adapt to different regions without requiring engineering changes to the source code. It is what enables us to localize our content\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe \u003cem\u003elocalization\u003c/em\u003e is the process of taking a piece of content in its original form and converting it into something more accessible and suitable for another region, country, or audience\u003csup id=\"fnref1:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e. This includes language, date formats, currency, measurement units, and support for different character sets.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIn addition, technical translations of living documents have two well-defined stages that involve different resources:\u003c/p\u003e\u003col\u003e\u003cli\u003e\u003cp\u003eachieving a first version of the translated material, and\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003ekeeping the material updated and synchronized between the supported languages.\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eThere are many solutions for internationalizing and localizing content and software. \u003cem\u003eTranslation\u003c/em\u003e is typically the most time-consuming component of these efforts\u003csup id=\"fnref2:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eBased on our previous experiences and using the characteristics of our community, this project aims to complete Stage 1 by creating initial Spanish translations of rOpenSci materials, and testing a technical workflow for performing translations.\u003c/p\u003e\u003cp\u003eOur approach will test and develop a workflow using the automatic translator \u003ca href=\"https://www.deepl.com\"\u003eDeepL\u003c/a\u003e API to generate an initial translated version of the documents, which will be later reviewed by professional bilingual developers using GitHub as a platform.\u003c/p\u003e\u003cp\u003eThe advantage of this workflow is that it reduces the time it takes to produce a quality translation.Reviewers will focus on linguistic tasks such as the use of inclusive language, the localization of examples, and the correct translation of phrases, metaphors, or analogies.They will also look for reference material in the language of the translation.In addition, if the workflow proves feasible and useful, it could be incorporated into the pipeline to keep the texts in different languages synchronized, contributing to solve challenges we may encounter in Stage 2.\u003c/p\u003e\u003cp\u003eBesides systematizing the experiences, other products of the project will be:\u003c/p\u003e\u003cul\u003e\u003cli\u003ea general guide of rules to follow when translating technical documents,\u003c/li\u003e\u003cli\u003ea specific guide for the Spanish language,\u003c/li\u003e\u003cli\u003ea list of technical terms which will be translated into Spanish and a list of those that will not be,\u003c/li\u003e\u003cli\u003ean R package with our workflow for translating technical documents.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"building-community\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#building-community\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBuilding community\u003c/h2\u003e\u003cp\u003eMultilingual publishing will help democratize access to quality resources for learning and teaching the necessary digital skills to become contributors to open source projects and to have a workflow for performing computationally reproducible open science.\u003c/p\u003e\u003cp\u003eAt rOpenSci, we understand review as a way of building community.Developing the material for our review process in Spanish will allow rOpenSci to continue building the community in Spanish-speaking regions (such as Latin America), to increase the number of contributors, and to get feedback on how our tools and processes can be improved to better serve these community members.\u003c/p\u003e\u003cp\u003eIn addition to learning how to be a developer, maintainer, reviewer, or editor, people can also contribute through translation.This type of contribution is often a good first step and is recognized as valuable by the community.\u003c/p\u003e\u003cp\u003eWe also expect that the project\u0026rsquo;s documentation and tooling will be useful for extending this effort to other languages and for other communities and projects with translation efforts.\u003c/p\u003e\u003ch3 id=\"sources\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#sources\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSources\u003c/h3\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eHilary Carter and Jessica Groopman, “Diversity, Equity, and Inclusion in Open Source: Exploring the Challenges and Opportunities to Create Equity and Agency Across Open Source Ecosystems”, foreword by Jim Zemlin, The Linux Foundation, December, 2021, \u003ca href=\"https://www.linuxfoundation.org/research/the-2021-linux-foundation-report-on-diversity-equity-and-inclusion-in-open-source\"\u003ehttps://www.linuxfoundation.org/research/the-2021-linux-foundation-report-on-diversity-equity-and-inclusion-in-open-source\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eList of languages by number of native speakers. Accessed on December 1, 2022. \u003ca href=\"https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers\"\u003ehttps://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eInternationalization and localization. Accessed on December 1, 2022. \u003ca href=\"https://en.wikipedia.org/wiki/Internationalization_and_localization\"\u003ehttps://en.wikipedia.org/wiki/Internationalization_and_localization\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref1:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref2:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2023/01/12/multilingual-publishing-en/","date_published":"2023-01-12T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/hzw64-c3f51","title":"rOpenSci 2022 Code of Conduct Transparency Report","language":"en","authors":[{"name":"Kara Woo","url":"https://ropensci.org/author/kara-woo/","avatar":"https://github.com/karawoo.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","code of conduct","governance"],"content_html":"\u003cp\u003eThe rOpenSci community is supported by our \u003ca href=\"/code-of-conduct\"\u003eCode of Conduct\u003c/a\u003e with a clear description of unacceptable behaviors,instructions on how to make a report, and information on how reports are handled. We, the Code of Conduct Committee,are responsible for receiving, investigating, deciding, enforcing and reporting on all reports of potentialviolations of our Code. We are committed to transparency with our community while upholding the privacyof people who experience or report incidents.\u003c/p\u003e\u003cp\u003eIn 2022, we received one Code of Conduct incident report.\u003c/p\u003e\u003ch3 id=\"summary-of-reported-incident\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#summary-of-reported-incident\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSummary of reported incident\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003eDescription of the incident:\u003c/em\u003e During a package review process, a reviewer was extremely negative on a publicchannel and posted messages publicly shaming the package\u0026rsquo;s authors with non-constructive feedback and comments.\u003c/li\u003e\u003cli\u003e\u003cem\u003eUnacceptable behavior:\u003c/em\u003e public shaming and not complying with \u0026ldquo;be considerate in speech and actions.\u0026rdquo;\u003c/li\u003e\u003cli\u003e\u003cem\u003eCommunity space:\u003c/em\u003e GitHub\u003c/li\u003e\u003cli\u003e\u003cem\u003eActions:\u003c/em\u003e  We followed our protocols to investigate the incident and informed the reported and reporter of our decision and the outcome.We reinforced in communications that such comments are not acceptable under our CoC. We also changed thetext of the CoC to include more examples from online spaces and suggested a change in the review guide to bemore explicit about non-constructive feedback.\u003c/li\u003e\u003cli\u003e\u003cem\u003eObservations:\u003c/em\u003e the reporter relayed that the reported apologized and that they do not require further actions.The reporter also suggested changes to the review guide and the CoC, which we have taken into account through changes described above.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThis code of conduct belongs to the community. We welcome your feedback at any time by emailing \u003ca href=\"mailto:conduct@ropensci.org\"\u003econduct@ropensci.org\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/01/06/transparency2022/","date_published":"2023-01-06T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/4q7xe-11e63","title":"rOpenSci Code of Conduct Annual Review","language":"en","authors":[{"name":"Kara Woo","url":"https://ropensci.org/author/kara-woo/","avatar":"https://github.com/karawoo.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Megan Carter","url":"https://ropensci.org/author/megan-carter/","avatar":"https://ropensci.org/img/community/megan-carter.jpg","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["code of conduct","governance","community"],"content_html":"\u003cp\u003eThis report presents our annual review of the rOpenSci Code of Conduct, reporting process, and internal guidelines for handling reports and enforcement.\u003c/p\u003e\u003ch3 id=\"updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdates\u003c/h3\u003e\u003cul\u003e\u003cli\u003eChanges to the text, including addition of greater detail about acceptable and unacceptable behaviors in online settings.\u003c/li\u003e\u003cli\u003eAdded a new language, through doing the first translation of the text to Spanish.\u003c/li\u003e\u003cli\u003eChanges to the committee. We thank \u003ca href=\"https://www.esipfed.org/about/people/megan-carter\"\u003eMegan Carter\u003c/a\u003e for serving as independent community member until June 2022and welcome back \u003ca href=\"https://karawoo.com/\"\u003eKara Woo\u003c/a\u003e to serve in this role. \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e joins thecommittee as the new rOpenSci Community Manager.\u003c/li\u003e\u003cli\u003eReview of our processes. We reviewed our onboarding and offboarding process for the code of conduct committee and generated templates for incident management.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThese changes were released July 7, 2022 as version 2.4.\u003c/p\u003e\u003cp\u003eYou can explore the \u003ca href=\"/code-of-conduct/\"\u003eEnglish\u003c/a\u003e and/or \u003ca href=\"/es/codigo-de-conducta/\"\u003eSpanish\u003c/a\u003e Code of Conducts, as well as the \u003ca href=\"/blog/2022/07/12/coc-update/\"\u003eoriginal blog post\u003c/a\u003e regarding this release.\u003c/p\u003e\u003cp\u003eWe welcome your feedback by email to \u003ca href=\"mailto:conduct@ropensci.org\"\u003econduct@ropensci.org\u003c/a\u003e, and we thank you for continuing to work with us to make rOpenScia safe, enjoyable, friendly and enriching environment for everyone who participates.\u003c/p\u003e","url":"https://ropensci.org/blog/2023/01/06/conduct2023/","date_published":"2023-01-06T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/zw3bh-xx723","title":"rOpenSci News Digest, December 2022","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2022/12/16/ropensci-news-digest-december-2022\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003c!-- to be curated manually --\u003e\u003ch3 id=\"one-page-html-package-manuals-on-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#one-page-html-package-manuals-on-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOne-page HTML package manuals on R-universe!\u003c/h3\u003e\u003cp\u003eWe have recently started building HTML reference manuals for each package in the R-universe! For packages that have had an update in the past 3 weeks, the reference manual is now linked from the package homepage on \u003ca href=\"https://r-universe.dev\"\u003eR-universe.dev\u003c/a\u003e. All packages in the R-universe are rebuilt at least once per month, so soon all packages should have an online HTML manual.You can also find \u003ca href=\"https://r-universe.dev/manuals/\"\u003ereference manuals for base-R packages\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe released the three packages used to create these manuals: \u003ca href=\"https://docs.ropensci.org/postdoc/\"\u003epostdoc\u003c/a\u003e, \u003ca href=\"https://docs.ropensci.org/katex/\"\u003ekatex\u003c/a\u003e and \u003ca href=\"https://docs.ropensci.org/prismjs/\"\u003eprismjs\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eFind more information in our \u003ca href=\"/blog/2022/11/18/ropensci-news-digest-november-2022/\"\u003etech note\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"meeting-the-stars-of-the-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#meeting-the-stars-of-the-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMeeting the stars of the R-universe\u003c/h3\u003e\u003cp\u003eKnowing our community\u0026rsquo;s stories helps us to learn about the people behind our software, brings us closer and offers us new opportunities. To share some of these community stories, we introduce you to the rOpenSci interview series \u003ca href=\"/tags/r-universe-stars/\"\u003e\u003cem\u003e\u0026ldquo;Meeting the stars of the R-Universe\u0026rdquo;\u003c/em\u003e\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe first interview showcases a bilingual (Spanish \u0026amp; English) story from Latin America: The experience of working with R packages in the Argentinian State.\u003c/p\u003e\u003cp\u003eDon\u0026rsquo;t miss the \u003ca href=\"/blog/2022/11/23/r-universe-stars-1-en/\"\u003eblog post and the video\u003c/a\u003e (with subtitles in English and Spanish).\u003c/p\u003e\u003ch3 id=\"community-call-recap-mentoring--training-program-for-scientific-open-source-champions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call-recap-mentoring--training-program-for-scientific-open-source-champions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity Call recap: \u0026ldquo;Mentoring \u0026amp; training program for Scientific Open Source Champions\u0026rdquo;\u003c/h3\u003e\u003cp\u003eAfter a brief hiatus, we returned to community calls with a session dedicated to our Champions Program.\u003cbr\u003eWe invited open source software Champions from other spaces and communities to share their experiences, to help us learn more about what it is to be a Champion, the benefit of applying to these programs, and how being a Champion can benefit not only us, but also our communities.\u003c/p\u003e\u003cp\u003eIn this call, moderated by rOpenSci Community Manager \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYani Bellini Saibene\u003c/a\u003e, \u003ca href=\"/author/santosh-yadav/\"\u003eSantosh Yadav\u003c/a\u003e and \u003ca href=\"/author/emanuele-bartolesi/\"\u003eEmanuele Bartolesi\u003c/a\u003e shared their experiences of being Champions in their communities and gave advice on how to create a path to becoming a Champion in open source software communities.\u003c/p\u003e\u003cp\u003eYou can \u003ca href=\"/commcalls/oct2022-champions/\"\u003ewatch the video\u003c/a\u003e and \u003ca href=\"/commcalls/oct2022-champions/\"\u003eaccess all the materials\u003c/a\u003e  on our website.\u003c/p\u003e\u003ch3 id=\"coworking-sessions-continue\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking-sessions-continue\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking sessions continue!\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2023-01/\"\u003eTuesday, Jan 10th*, 14:00 European Central / 13:00 UTC\u003c/a\u003e \u0026ldquo;Working with new R users\u0026rdquo; \u003cem\u003eHosted by community host \u003ca href=\"https://alexkoiter.ca\"\u003eAlex Koiter\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eBrainstorm ideas for supporting and encouraging new R users; Annotate a script for a friend or colleague to help them learn;\u003c/li\u003e\u003cli\u003eTalk to \u003ca href=\"https://alexkoiter.ca\"\u003eAlex\u003c/a\u003e and discuss how to share the love of R with new R users.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2023-02/\"\u003eTuesday, Feb 7th, 9:00 Americas Pacific / 17:00 UTC\u003c/a\u003e \u0026ldquo;Setting up Continuous Integration\u0026rdquo; \u003cem\u003eHosted by community host \u003ca href=\"/author/hugo-gruson/\"\u003eHugo Gruson\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eDo some reading to learn about Continuous Integration; Setup Continuous Integration on one (or more) of your projects;\u003c/li\u003e\u003cli\u003eTalk to \u003ca href=\"/author/hugo-gruson/\"\u003eHugo\u003c/a\u003e and discuss how Continuous Integration can simplify your development process and how to get set up.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003cp\u003e* Note that the January Co-working session is on the \u003cem\u003esecond\u003c/em\u003e Tuesday in January.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following three packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/dynamite\"\u003edynamite\u003c/a\u003e, developed by Santtu Tikka together with Jouni Helske: Easy-to-use and efficient interface for Bayesian inference of complex panel (time series) data. The package supports joint modeling of multiple measurements per individual, time-varying and time-invariant effects, and a wide range of discrete and continuous distributions. Estimation of these dynamic multivariate panel models is carried out via Stan. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/554\"\u003ereviewed\u003c/a\u003e by Nicholas Clark, and Lucy McGowan.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/postdoc\"\u003epostdoc\u003c/a\u003e, developed by Jeroen Ooms: Generates simple and beautiful one-page HTML reference manuals with package documentation. Math rendering and syntax highlighting are done server-side in R such that no JavaScript libraries are needed in the browser, which makes the documentation portable and fast to load.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=postdoc\"\u003eCRAN\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/prismjs\"\u003eprismjs\u003c/a\u003e, developed by Jeroen Ooms: Prism \u003ca href=\"https://prismjs.com/\"\u003ehttps://prismjs.com/\u003c/a\u003e is a lightweight, extensible syntax highlighter, built with modern web standards in mind. This package provides server-side rendering in R using V8 such that no JavaScript library is required in the resulting HTML documents. Over 400 languages are supported.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=prismjs\"\u003eCRAN\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following twenty packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/gert\" title=\"Simple Git Client for R\"\u003egert\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/gert/releases/tag/v1.9.2\"\u003e\u003ccode\u003ev1.9.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pkgstats\" title=\"Metrics of R Packages\"\u003epkgstats\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/pkgstats/releases/tag/v0.1.2\"\u003e\u003ccode\u003ev0.1.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (cff) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v0.4.0\"\u003e\u003ccode\u003ev0.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/crul\" title=\"HTTP Client\"\u003ecrul\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/crul/releases/tag/v1.3\"\u003e\u003ccode\u003ev1.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/daiquiri\" title=\"Data Quality Reporting for Temporal Datasets\"\u003edaiquiri\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/daiquiri/releases/tag/v1.0.3\"\u003e\u003ccode\u003ev1.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gutenbergr\" title=\"Download and Process Public Domain Works from Project Gutenberg\"\u003egutenbergr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gutenbergr/releases/tag/v0.2.3\"\u003e\u003ccode\u003ev0.2.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/katex\" title=\"Rendering Math to HTML, MathML, or R-Documentation Format\"\u003ekatex\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/katex/releases/tag/v1.4.1\"\u003e\u003ccode\u003ev1.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.9.1\"\u003e\u003ccode\u003ev0.9.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/phylocomr\" title=\"Interface to Phylocom\"\u003ephylocomr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/phylocomr/releases/tag/v0.3.3\"\u003e\u003ccode\u003ev0.3.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/postdoc\" title=\"Minimal and Uncluttered Package Documentation\"\u003epostdoc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/postdoc/releases/tag/v1.1.0\"\u003e\u003ccode\u003ev1.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/prismjs\" title=\"Server-Side Syntax Highlighting\"\u003eprismjs\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/prismjs/releases/tag/v1.1.0\"\u003e\u003ccode\u003ev1.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/qualtRics\" title=\"Download Qualtrics Survey Data\"\u003equaltRics\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/qualtRics/releases/tag/v3.1.7\"\u003e\u003ccode\u003ev3.1.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rerddap\" title=\"General Purpose Client for ERDDAP Servers\"\u003ererddap\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rerddap/releases/tag/v1.0.1\"\u003e\u003ccode\u003ev1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgbif\" title=\"Interface to the Global Biodiversity Information Facility API\"\u003ergbif\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgbif/releases/tag/v3.7.4\"\u003e\u003ccode\u003ev3.7.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.7.3\"\u003e\u003ccode\u003e0.7.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Workflows\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/0.14.1\"\u003e\u003ccode\u003e0.14.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/terrainr\" title=\"Landscape Visualizations in R and Unity\"\u003eterrainr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/terrainr/releases/tag/v0.7.2\"\u003e\u003ccode\u003ev0.7.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tic\" title=\"CI-Agnostic Workflow Definitions\"\u003etic\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tic/releases/tag/v0.13.2\"\u003e\u003ccode\u003ev0.13.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tidytags\" title=\"Importing and Analyzing Twitter Data Collected with Twitter Archiving Google Sheets\"\u003etidytags\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidytags/releases/tag/v1.1\"\u003e\u003ccode\u003ev1.1\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/unifir\" title=\"A Unifying API for Calling the Unity 3D Video Game Engine\"\u003eunifir\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/unifir/releases/tag/v0.2.3\"\u003e\u003ccode\u003ev0.2.3\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are twelve recently closed and active submissions and 2 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/554\"\u003edynamite\u003c/a\u003e, Bayesian Modeling and Causal Inference for Multivariate. Submitted by \u003ca href=\"http://users.jyu.fi/~santikka/\"\u003eSanttu Tikka\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román Palacios\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSix at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/551\"\u003estochLAB\u003c/a\u003e, Stochastic Collision Risk Model. Submitted by \u003ca href=\"http://www.blackbawks.net\"\u003eGrant\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/524\"\u003ehudr\u003c/a\u003e, A R interface for accessing HUD (US Department of Housing and Urban Development) APIs. Submitted by \u003ca href=\"https://github.com/etam4260/etam4260\"\u003eEmmet Tam\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/551\"\u003estochLAB\u003c/a\u003e, Stochastic Collision Risk Model. Submitted by \u003ca href=\"http://www.blackbawks.net\"\u003eGrant\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/560\"\u003eopenalexR\u003c/a\u003e, Getting Bibliographic Records from OpenAlex Database Using DSL. Submitted by \u003ca href=\"http://trang.page\"\u003eTrang Le\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"http://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2022/11/30/first-peer-reviewed-stats-packages\"\u003eOur First Peer-Reviewed Statistical R Packages!\u003c/a\u003e by Noam Ross, and Mark Padgham.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"other-topics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-topics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOther topics\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/11/23/r-universe-stars-1-en\"\u003eMeeting the stars of the R-universe: R Community, Exchange and Learn\u003c/a\u003e by Yanina Bellini Saibene, Alejandra Bellini, Lucio Casalla, and Steffi LaZerte. This is the first post of our interview series \u003cstrong\u003e\u0026ldquo;Meeting the stars of the R-universe\u0026rdquo;\u003c/strong\u003e. We begin our journey in \u003cem\u003eArgentina\u003c/em\u003e with a team that uses R and develops R packages in the Argentinean State.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/11/23/r-universe-stars-1-es\"\u003eConociendo a las estrellas del universo R: comunidad R, intercambiar y aprender\u003c/a\u003e by Yanina Bellini Saibene, Alejandra Bellini, Lucio Casalla, and Steffi LaZerte. Esta es la primera entrega de nuestra serie de entrevistas \u003cstrong\u003e\u0026ldquo;Conociendo a las estrellas del universo R\u0026rdquo;\u003c/strong\u003e. Iniciamos nuestro recorrido en \u003cem\u003eArgentina\u003c/em\u003e y con un equipo que utiliza R y desarrolla paquetes de R en el estado Argentino.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/11/29/postdoc-docs\"\u003epostdoc 1.0: minimal and uncluttered HTML package manuals\u003c/a\u003e by Jeroen Ooms. We released two new packages that we are using in R-universe to render package documentation: postdoc and prismjs.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/12/06/save-ggplot2-targets\"\u003eHow to Save ggplot2 Plots in a targets Workflow?\u003c/a\u003e by Matthias Grenié. A short exploration of how to save ggplot2 objects in targets workflow.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eOne use case of our packages and resources has been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://discuss.ropensci.org/t/delete-all-your-tweets-using-rtweet/3217\"\u003eDelete all your tweets using rtweet\u003c/a\u003e. Reported by Julia Silge.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-package-co-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-package-co-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for package (co-)maintainers\u003c/h2\u003e\u003ch3 id=\"calls-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#calls-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCalls for maintainers\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003e\u003ca href=\"https://docs.ropensci.org/onekp\"\u003eonekp\u003c/a\u003e, Access sequences from the 1000 Plant Initiative (1KP)\u003c/strong\u003e. The 1000 Plants Initiative (\u003ca href=\"https://www.onekp.com\"\u003ewww.onekp.com\u003c/a\u003e) has sequenced the transcriptomes of over 1000 plant species. This package allows these sequences and metadata to be retrieved and filtered by code, species or recursively by clade. Scientific names and NCBI taxonomy IDs are both supported. \u003ca href=\"https://github.com/ropensci/onekp/issues/9\"\u003eIssue for volunteering\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://docs.ropensci.org/RSelenium\"\u003eRSelenium\u003c/a\u003e, R Bindings for \u0026lsquo;Selenium WebDriver\u0026rsquo;\u003c/strong\u003e. Provides a set of R bindings for the \u003ca href=\"https://www.selenium.dev/documentation/\"\u003e\u0026lsquo;Selenium 2.0 WebDriver\u0026rsquo;\u003c/a\u003e using the \u003ca href=\"https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol\"\u003e\u0026lsquo;JsonWireProtocol\u0026rsquo;\u003c/a\u003e. \u0026lsquo;Selenium 2.0 WebDriver\u0026rsquo; allows driving a web browser natively as a user would either locally or on a remote machine using the Selenium server it marks a leap forward in terms of web browser automation. \u003ca href=\"https://github.com/ropensci/RSelenium/issues/261\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://docs.ropensci.org/elastic\"\u003eelastic\u003c/a\u003e, General Purpose Interface to \u0026lsquo;Elasticsearch\u0026rsquo;\u003c/strong\u003e. Connect to \u0026lsquo;Elasticsearch\u0026rsquo;, a \u0026lsquo;NoSQL\u0026rsquo; database built on the \u0026lsquo;Java\u0026rsquo; Virtual Machine. Interacts with the \u003ca href=\"https://www.elastic.co/elasticsearch/\"\u003e\u0026lsquo;Elasticsearch\u0026rsquo; \u0026lsquo;HTTP\u0026rsquo; API\u003c/a\u003e, including functions for setting connection details to \u0026lsquo;Elasticsearch\u0026rsquo; instances, loading bulk data, searching for documents with both \u0026lsquo;HTTP\u0026rsquo; query variables and \u0026lsquo;JSON\u0026rsquo; based body requests. \u003ca href=\"https://github.com/ropensci/elastic/issues/292\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"call-for-comaintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-comaintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for comaintainers\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/#packages-looking-for-co-maintainers\"\u003erecent blog post\u003c/a\u003e to identify packages where help is especially wished for!\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"what-is-a-reproducible-example-for-package-development-problems\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-a-reproducible-example-for-package-development-problems\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is a reproducible example for package development problems?\u003c/h3\u003e\u003cp\u003eYou might have heard of the \u003ca href=\"https://reprex.tidyverse.org/\"\u003ereprex\u003c/a\u003e package, which we\u0026rsquo;d recommend using.However, it\u0026rsquo;s not necessarily adapted to \u003cem\u003epackage development problems\u003c/em\u003e.To illustrate a problem you are having when developing a package, a reproducible example might consist in\u003c/p\u003e\u003cul\u003e\u003cli\u003eCreating an empty package, potentially with \u003ca href=\"https://usethis.r-lib.org/reference/create_package.html\"\u003e\u003ccode\u003eusethis::create_package()\u003c/code\u003e\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eAdding as few elements as possible to it until you can illustrate the problem you have;\u003c/li\u003e\u003cli\u003eSharing it on a public platform (or a platform accessible to your target helper), potentially on GitHub with \u003ca href=\"https://usethis.r-lib.org/reference/use_github.html\"\u003e\u003ccode\u003eusethis::use_github()\u003c/code\u003e\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eOptionally, adding GitHub Actions workflows to it to have a log to show. See \u003ca href=\"https://usethis.r-lib.org/reference/github_actions.html\"\u003e\u003ccode\u003eusethis::use_github_actions()\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eYou do not need to use the usethis package.However, it is crucial you find a way to quickly create the package skeleton and to quickly share it, as it will lessen the energy needed to get started, and leave you more time for the trickier reproducible example creation!\u003c/p\u003e\u003cp\u003eThat\u0026rsquo;s the kind of workflow recommended in \u003ca href=\"https://pkgdown.r-lib.org/CONTRIBUTING.html#package-reprexes\"\u003epkgdown contributing guide\u003c/a\u003e.It will also serve you well in any package development Q\u0026amp;A channel.Alternatively, if you can\u0026rsquo;t reduce your problem to a minimal example, hopefully you can show your actual package to someone, as opposed to describing it with words.\u003c/p\u003e\u003ch3 id=\"how-to-distribute-data-with-your-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-distribute-data-with-your-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to distribute data with your package?\u003c/h3\u003e\u003cp\u003eBecause of size limitations on CRAN for instance, it might seem tricky to distribute data with your package.You could publish it on \u003ca href=\"https://ggseg.r-universe.dev/ui#packages\"\u003eR-universe\u003c/a\u003e, and also explore solutions presented in a \u003ca href=\"https://blog.r-hub.io/2020/05/29/distribute-data/\"\u003eR-hub blog post\u003c/a\u003e and in a \u003ca href=\"https://community.rstudio.com/t/distributing-data-with-a-package/152848\"\u003eposit community forum answer by Gábor Csárdi\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/12/16/ropensci-news-digest-december-2022/","date_published":"2022-12-16T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/80sds-6kd54","title":"How to Save ggplot2 Plots in a targets Workflow?","language":"en","authors":[{"name":"Matthias Grenié","url":"https://orcid.org/0000-0002-4659-7522","avatar":"https://github.com/Rekyt.png","_role":["author"]}],"tags":["targets","ggplot2","workflow","tech notes","community"],"content_html":"\u003cp\u003eI really enjoy using \u003ca href=\"https://docs.ropensci.org/targets\"\u003etargets\u003c/a\u003e for all of my data analysis projects, especially because it helps me structure all of the projects nicely in the same folder.For targets projects, I often produce several figures using ggplot2.However, there are no formal recommendations for saving ggplot2 objects (as opposed to static images) in a targets workflow.\u003c/p\u003e\u003cp\u003eI want to keep my plots accessible to be able to revisit them any time and to assemble them with \u003ca href=\"https://patchwork.data-imaginist.com/\"\u003epatchwork\u003c/a\u003e into more complex figures for a potential paper.In a regular project I generate 10 to 20 figures, some only diagnostic ones and some polished ones for the finished manuscript.I do revisit the list of figures often, as co-authors or reviewers ask me for more detailed analyses and visualizations.\u003c/p\u003e\u003cp\u003eIn most cases, I don\u0026rsquo;t know before hand the sizes of the figures nor their formats, so I like to save the ggplot2 plots as R objects and not images in my targets workflow.I sometimes edit them for a presentation, a paper, or a poster, so I like  the flexibility of saving them as R objects.This allows me to change their aspect ratio or their style on the fly without having to re-create them.\u003c/p\u003e\u003cp\u003eHowever, how the plot objects are saved can have different consequences for the size of stored cache, the loading time, the flexibility, and ease of use of the plots.In this blog post I explore the different possible options for saving plots in a targets workflow and discuss their pros and cons, with some insights from both ggplot2 and targets communities.I will show the consequences of using each one of them through a simple workflow making a plot with the \u003ccode\u003emtcars\u003c/code\u003e dataset.\u003c/p\u003e\u003ch2 id=\"first-solution-saving-the-entire-ggplot2-objects-without-worrying\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#first-solution-saving-the-entire-ggplot2-objects-without-worrying\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFirst solution: saving the entire ggplot2 objects without worrying\u003c/h2\u003e\u003cp\u003eMy first solution was to not worry about the plots and leverage the very clever system from targets that saves objects.\u003c/p\u003e\u003cp\u003eLet\u0026rsquo;s say our workflow loads the data and makes a simple plot:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;targets\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;ggplot2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create a simple demo workflow\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_script\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;ggplot2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;targets\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003esimple_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecyl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003empg\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e \u003cspan class=\"n\"\u003eask\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Run the workflow\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_make\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e• start target mtcars_df• built target mtcars_df [0 seconds]• start target simple_plot• built target simple_plot [0.02 seconds]• end pipeline [0.18 seconds]\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThen if you want to access the plot you can use \u003ccode\u003etar_read()\u003c/code\u003e or \u003ccode\u003etar_load()\u003c/code\u003e and you\u0026rsquo;ll get back a modifiable ggplot2 object\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esimple_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/12/06/save-ggplot2-targets/first-load-plot-1.png\"\t\t\talt=\"Scatterplot of the mtcars dataset showing miles per gallon as a function of number of cylinders.\"\u003e\u003c/figure\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# It\u0026#39;s modifiable (we can add a theme after the fact)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esimple_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etheme_bw\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/12/06/save-ggplot2-targets/first-mod-plot-1.png\"\t\t\talt=\"Same scatterplot as before but styled differently with a white background instead of grey background.\"\u003e\u003c/figure\u003e\u003cp\u003eFor now, the plot is pretty simple and lightweight.Throughout the blog post, we\u0026rsquo;ll be using the \u003ccode\u003eobj_size()\u003c/code\u003e function from  \u003ca href=\"https://lobstr.r-lib.org/\"\u003elobstr\u003c/a\u003e package to evaluate the object size.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elobstr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eobj_size\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etar_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esimple_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e880.76 kB\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe problem arises when you start having plots with a lot going on in the plot function.If we retake the same targets workflow but have a more busy plot function we\u0026rsquo;ll be able to measure the size of the plot object again:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_script\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;ggplot2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;targets\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003esimple_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecyl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003empg\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003ecomplex_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Add many useless manipulations here to mimic object creation\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df2\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003erbind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df4\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003erbind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Note how the code of the plot hasn\u0026#39;t changed\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecyl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003empg\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e \u003cspan class=\"n\"\u003eask\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Run the workflow\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_make\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e✔ skip target mtcars_df✔ skip target simple_plot• start target complex_plot• built target complex_plot [0.02 seconds]• end pipeline [0.17 seconds]\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWe now have two plot targets, the \u003ccode\u003esimple_plot\u003c/code\u003e target which is the same as previously, and \u003ccode\u003ecomplex_plot\u003c/code\u003e which differs from \u003ccode\u003esimple_plot\u003c/code\u003e only by having data manipulation and object creation prior to the plotting, \u003cstrong\u003ewhich does not affect the plot in itself\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eIf we compare their sizes:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# The \u0026#39;simple_plot\u0026#39; object hasn\u0026#39;t changed size\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elobstr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eobj_size\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etar_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esimple_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e880.76 kB\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# The \u0026#39;complex_plot\u0026#39; object is actually larger\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elobstr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eobj_size\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etar_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecomplex_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e912.54 kB\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWe observe that the \u003ccode\u003ecomplex_plot\u003c/code\u003e is larger in size than \u003ccode\u003esimple_plot\u003c/code\u003e! This seems very surprising as we haven\u0026rsquo;t changed a line of the plotting code \u003cem\u003eper se\u003c/em\u003e.So what is happening here?Well the issue comes from the way ggplot2 works: it doesn\u0026rsquo;t save the graphical plots in themselves, it saves their \u003cstrong\u003eenvironments\u003c/strong\u003e and generates the plots only when called from this saved environment (see \u003ca href=\"https://github.com/tidyverse/ggplot2/issues/4056\"\u003ethis GitHub issue\u003c/a\u003e for example).If you\u0026rsquo;re not familiar with the concept of environment, don\u0026rsquo;t worry!It\u0026rsquo;s a rather hard concept to grasp (and I\u0026rsquo;m not even sure I do understand it).If you want to know more about it you can read the \u003ca href=\"https://adv-r.hadley.nz/environments.html\"\u003ededicated chapter\u003c/a\u003e in \u003ca href=\"https://adv-r.hadley.nz/\"\u003eAdvanced R\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf we simplify the concept, the \u003ccode\u003eggplot()\u003c/code\u003e function saves the plotting functions themselves \u003cstrong\u003eplus\u003c/strong\u003e all of the objects lying around where it\u0026rsquo;s called, because they may be useful for the plot (which ones are actually useful, ggplot2 doesn\u0026rsquo;t know yet; remember that the plot is only really rendered when called).Because targets saves the entire object it also saves its entire environment.This problem was \u003ca href=\"https://github.com/ropensci/drake/issues/882\"\u003ealso\u003c/a\u003e \u003ca href=\"https://github.com/ropensci/drake/issues/1258\"\u003eknown\u003c/a\u003e with targets\u0026rsquo; predecessor \u003ca href=\"https://docs.ropensci.org/drake\"\u003edrake\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIn our workflow example above, the size difference between both objects isn\u0026rsquo;t much, so it does not change the performance of the plot nor the total size taken by the saved targets workflow.However, with a real life example including many complex objects and several intermediate computations in the plotting function, it can increase loading and plotting times dramatically.So we need to think about solutions to circumvent the issue.\u003c/p\u003e\u003ch3 id=\"pros\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pros\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePros\u003c/h3\u003e\u003cul\u003e\u003cli\u003eWorks out of the box\u003c/li\u003e\u003cli\u003eHave nothing to worry about\u003c/li\u003e\u003cli\u003eFlexible with the size of the plots\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"cons\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#cons\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCons\u003c/h3\u003e\u003cul\u003e\u003cli\u003eIncreased saved object size (and thus workflow size)\u003c/li\u003e\u003cli\u003eIf object is big, then slow to load\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"second-partial-solution-transform-ggplot2-objects-into-grobs-using-target-hooks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#second-partial-solution-transform-ggplot2-objects-into-grobs-using-target-hooks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSecond (partial) solution: transform ggplot2 objects into \u003ccode\u003egrobs\u003c/code\u003e using target hooks\u003c/h2\u003e\u003cp\u003eMy workflows started to grow big and the plots were slow, so I asked around the targets community for a solution.While it was proposed at one point to create \u003ca href=\"https://github.com/ropensci/drake/issues/882#issuecomment-580053751\"\u003ea specific storage for ggplot2 objects\u003c/a\u003e in drake (the predecessor of targets), the reliance of the objects on environments made this problem impossible to solve.These objects simply had to be stored with their environment.\u003c/p\u003e\u003cp\u003eggplot2 needs to render the plots when they are shown.This transformation relies on the framework of the grid package and the transformation of ggplot2 objects into \u003ccode\u003eGrob\u003c/code\u003e objects (short for \u003cstrong\u003eGr\u003c/strong\u003eaphical \u003cstrong\u003eob\u003c/strong\u003ejects).The plots then are purely graphical and do not contain the initial data nor the plotting environment.These objects are thus much lighter.\u003c/p\u003e\u003cp\u003eSo a natural idea would be to save, within the targets workflow, the ggplot2 plots as \u003ccode\u003eGrobs\u003c/code\u003e to keep only the information to the plots themselves and not the initial data.This can be done using the \u003ccode\u003eggplot2::ggplotGrob()\u003c/code\u003e function.\u003c/p\u003e\u003cp\u003eWe can compare the size of the stored objects using our previous workflow and adding conversion to Grobs:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_script\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;ggplot2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;targets\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003esimple_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecyl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003empg\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003ecomplex_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Add many useless manipulations here to mimic object creation\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df2\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003erbind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df4\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003erbind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Note how the code of the plot hasn\u0026#39;t changed\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecyl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003empg\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esimple_grob\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eggplotGrob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esimple_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecomplex_grob\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eggplotGrob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecomplex_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e \u003cspan class=\"n\"\u003eask\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Run the workflow\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_make\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e✔ skip target mtcars_df✔ skip target simple_plot✔ skip target complex_plot• start target simple_grob• built target simple_grob [0.15 seconds]• start target complex_grob• built target complex_grob [0.07 seconds]• end pipeline [0.37 seconds]\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWe added 2 new targets \u003ccode\u003esimple_grob\u003c/code\u003e and \u003ccode\u003ecomplex_grob\u003c/code\u003e that transform the previous plots into Grobs.\u003c/p\u003e\u003cp\u003eIf we compare their sizes now:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elobstr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eobj_size\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etar_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esimple_grob\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e339.66 kB\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elobstr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eobj_size\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etar_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecomplex_grob\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e339.66 kB\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eBoth objects are more than twice as small as the original plot object, and now they are both almost the same size!So this may seem like a solution to us.\u003c/p\u003e\u003cp\u003eLet\u0026rsquo;s check if we still can display them:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esimple_grob\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eTableGrob (12 x 9) \u0026#34;layout\u0026#34;: 18 grobs    z         cells       name                                         grob1   0 ( 1-12, 1- 9) background               rect[plot.background..rect.40]2   5 ( 6- 6, 4- 4)     spacer                               zeroGrob[NULL]3   7 ( 7- 7, 4- 4)     axis-l           absoluteGrob[GRID.absoluteGrob.27]4   3 ( 8- 8, 4- 4)     spacer                               zeroGrob[NULL]5   6 ( 6- 6, 5- 5)     axis-t                               zeroGrob[NULL]6   1 ( 7- 7, 5- 5)      panel                      gTree[panel-1.gTree.17]7   9 ( 8- 8, 5- 5)     axis-b           absoluteGrob[GRID.absoluteGrob.22]8   4 ( 6- 6, 6- 6)     spacer                               zeroGrob[NULL]9   8 ( 7- 7, 6- 6)     axis-r                               zeroGrob[NULL]10  2 ( 8- 8, 6- 6)     spacer                               zeroGrob[NULL]11 10 ( 5- 5, 5- 5)     xlab-t                               zeroGrob[NULL]12 11 ( 9- 9, 5- 5)     xlab-b titleGrob[axis.title.x.bottom..titleGrob.31]13 12 ( 7- 7, 3- 3)     ylab-l   titleGrob[axis.title.y.left..titleGrob.34]14 13 ( 7- 7, 7- 7)     ylab-r                               zeroGrob[NULL]15 14 ( 4- 4, 5- 5)   subtitle         zeroGrob[plot.subtitle..zeroGrob.36]16 15 ( 3- 3, 5- 5)      title            zeroGrob[plot.title..zeroGrob.35]17 16 (10-10, 5- 5)    caption          zeroGrob[plot.caption..zeroGrob.38]18 17 ( 2- 2, 2- 2)        tag              zeroGrob[plot.tag..zeroGrob.37]\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis doesn\u0026rsquo;t display a plot but shows us how the plot is stored as a \u003ccode\u003eGrob\u003c/code\u003e in the grid package system (it\u0026rsquo;s included as a base package in R).To display it we need to use a function that transforms this object into an actual plot.For example, with the \u003ccode\u003egrid::grid.draw()\u003c/code\u003e function:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egrid\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egrid.draw\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etar_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esimple_grob\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/12/06/save-ggplot2-targets/second-grob-plot-1.png\"\t\t\talt=\"Scatterplot of the mtcars dataset showing miles per gallon as a function of number of cylinders.\"\u003e\u003c/figure\u003e\u003cp\u003eWe got our plot back!It is still resizable, can still be exported as a file through RStudio or graphical devices.However, as it\u0026rsquo;s not a ggplot2 object anymore, we cannot tweak its theme nor use the \u003ccode\u003eggsave()\u003c/code\u003e function to save it with custom dimensions.\u003c/p\u003e\u003cp\u003eIf you have tens of plots, it maybe quite cumbersome to call \u003ccode\u003eggplot2::ggplotGrob()\u003c/code\u003e at the end of all your plot functions.That\u0026rsquo;s where someone in the community (it was \u003ca href=\"/author/miles-mcbain/\"\u003eMiles McBain\u003c/a\u003e on rOpenSci Slack space 🎉) suggested using \u003ca href=\"https://docs.ropensci.org/tarchetypes\"\u003etarchetypes\u003c/a\u003e \u003ca href=\"https://docs.ropensci.org/tarchetypes/reference/index.html#hooks\"\u003ehooks\u003c/a\u003e.I wasn\u0026rsquo;t aware at the time, but tarchetypes, which is an extension of targets to more easily generate a list of targets, has a system of \u003ca href=\"https://docs.ropensci.org/tarchetypes/reference/index.html#hooks\"\u003e\u0026ldquo;hooks\u0026rdquo;\u003c/a\u003e that can apply functions to your targets automatically (to all or to a subset based on their names).These are accessible through the functions \u003ccode\u003etar_hook_before()\u003c/code\u003e, \u003ccode\u003etar_hook_inner()\u003c/code\u003e, and \u003ccode\u003etar_hook_outer()\u003c/code\u003e in tarchetypes.They will respectively, transform the target to execute a function \u003cem\u003ebefore\u003c/em\u003e, wrap the dependencies of given target in a function call, or call a function around each target.We have to indicate with \u003ccode\u003e.x\u003c/code\u003e where the previous command should be executed.This means that if using \u003ccode\u003etar_hook_outer()\u003c/code\u003e we would be able to automatically execute \u003ccode\u003eggplotGrob()\u003c/code\u003e on all our plot targets like so:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_script\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;ggplot2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;targets\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003esimple_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecyl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003empg\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003ecomplex_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Add many useless manipulations here to mimic object creation\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df2\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003erbind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df4\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003erbind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Note how the code of the plot hasn\u0026#39;t changed\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecyl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003empg\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"c1\"\u003e# The hook from tarchetypes\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etarchetypes\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003etar_hook_outer\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eggplot2\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eggplotGrob\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003e.x\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003enames\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eends_with\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;plot\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e \u003cspan class=\"n\"\u003eask\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Run the workflow\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_make\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e✔ skip target mtcars_df• start target simple_plot• built target simple_plot [0.15 seconds]• start target complex_plot• built target complex_plot [0.06 seconds]• end pipeline [0.36 seconds]\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWe can check our plot objects:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esimple_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eTableGrob (12 x 9) \u0026#34;layout\u0026#34;: 18 grobs    z         cells       name                                         grob1   0 ( 1-12, 1- 9) background               rect[plot.background..rect.40]2   5 ( 6- 6, 4- 4)     spacer                               zeroGrob[NULL]3   7 ( 7- 7, 4- 4)     axis-l           absoluteGrob[GRID.absoluteGrob.27]4   3 ( 8- 8, 4- 4)     spacer                               zeroGrob[NULL]5   6 ( 6- 6, 5- 5)     axis-t                               zeroGrob[NULL]6   1 ( 7- 7, 5- 5)      panel                      gTree[panel-1.gTree.17]7   9 ( 8- 8, 5- 5)     axis-b           absoluteGrob[GRID.absoluteGrob.22]8   4 ( 6- 6, 6- 6)     spacer                               zeroGrob[NULL]9   8 ( 7- 7, 6- 6)     axis-r                               zeroGrob[NULL]10  2 ( 8- 8, 6- 6)     spacer                               zeroGrob[NULL]11 10 ( 5- 5, 5- 5)     xlab-t                               zeroGrob[NULL]12 11 ( 9- 9, 5- 5)     xlab-b titleGrob[axis.title.x.bottom..titleGrob.31]13 12 ( 7- 7, 3- 3)     ylab-l   titleGrob[axis.title.y.left..titleGrob.34]14 13 ( 7- 7, 7- 7)     ylab-r                               zeroGrob[NULL]15 14 ( 4- 4, 5- 5)   subtitle         zeroGrob[plot.subtitle..zeroGrob.36]16 15 ( 3- 3, 5- 5)      title            zeroGrob[plot.title..zeroGrob.35]17 16 (10-10, 5- 5)    caption          zeroGrob[plot.caption..zeroGrob.38]18 17 ( 2- 2, 2- 2)        tag              zeroGrob[plot.tag..zeroGrob.37]\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecomplex_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eTableGrob (12 x 9) \u0026#34;layout\u0026#34;: 18 grobs    z         cells       name                                         grob1   0 ( 1-12, 1- 9) background               rect[plot.background..rect.77]2   5 ( 6- 6, 4- 4)     spacer                               zeroGrob[NULL]3   7 ( 7- 7, 4- 4)     axis-l           absoluteGrob[GRID.absoluteGrob.65]4   3 ( 8- 8, 4- 4)     spacer                               zeroGrob[NULL]5   6 ( 6- 6, 5- 5)     axis-t                               zeroGrob[NULL]6   1 ( 7- 7, 5- 5)      panel                      gTree[panel-1.gTree.57]7   9 ( 8- 8, 5- 5)     axis-b           absoluteGrob[GRID.absoluteGrob.61]8   4 ( 6- 6, 6- 6)     spacer                               zeroGrob[NULL]9   8 ( 7- 7, 6- 6)     axis-r                               zeroGrob[NULL]10  2 ( 8- 8, 6- 6)     spacer                               zeroGrob[NULL]11 10 ( 5- 5, 5- 5)     xlab-t                               zeroGrob[NULL]12 11 ( 9- 9, 5- 5)     xlab-b titleGrob[axis.title.x.bottom..titleGrob.68]13 12 ( 7- 7, 3- 3)     ylab-l   titleGrob[axis.title.y.left..titleGrob.71]14 13 ( 7- 7, 7- 7)     ylab-r                               zeroGrob[NULL]15 14 ( 4- 4, 5- 5)   subtitle         zeroGrob[plot.subtitle..zeroGrob.73]16 15 ( 3- 3, 5- 5)      title            zeroGrob[plot.title..zeroGrob.72]17 16 (10-10, 5- 5)    caption          zeroGrob[plot.caption..zeroGrob.75]18 17 ( 2- 2, 2- 2)        tag              zeroGrob[plot.tag..zeroGrob.74]\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eBoth our plot objects were indeed transformed intro \u003ccode\u003eGrob\u003c/code\u003e objects! And with the smaller sizes.With the hooks, we could easily transform all of the figures of a workflow into \u003ccode\u003eGrobs\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eIf this solution seems to solve all of our problems (though not as flexible), then why does this post continue?\u003c/p\u003e\u003cp\u003eWell, ggplot2 maintainers officially \u003ca href=\"https://github.com/tidyverse/ggplot2/issues/4649#issuecomment-952029317\"\u003ediscourage users from saving \u003ccode\u003eggplotGrobs\u003c/code\u003e\u003c/a\u003e.This is because they are not guaranteed to be reloadable.So this presents quite a big concern for the reusability of objects in the future.\u003c/p\u003e\u003cp\u003eSo, let\u0026rsquo;s continue to explore other options in the next sections.However, we still learned what happens in ggplot2 to generate an actual plot and how to transform it into a \u003ccode\u003egrob\u003c/code\u003e, and we have learned about tarchetypes hooks.\u003c/p\u003e\u003ch3 id=\"pros-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pros-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePros\u003c/h3\u003e\u003cul\u003e\u003cli\u003eVery lightweight\u003c/li\u003e\u003cli\u003eFlexible final image size and format\u003c/li\u003e\u003cli\u003eLeverages the amazing (and not so known) hooks in a targets workflow\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"cons-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#cons-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCons\u003c/h3\u003e\u003cul\u003e\u003cli\u003eCan\u0026rsquo;t edit the ggplot2 object after the fact\u003c/li\u003e\u003cli\u003eMay need to add a hook to the targets workflow\u003c/li\u003e\u003cli\u003e\u003ccode\u003egrid\u003c/code\u003e objects can be strange to work with\u003c/li\u003e\u003cli\u003eOfficially not recommended by ggplot2 maintainers\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"third-solution-save-the-plots-as-images\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#third-solution-save-the-plots-as-images\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThird solution: save the plots as images\u003c/h2\u003e\u003cp\u003eA third solution would be to save all of the plots as images.This can be done through the use of the target hooks we learned about in the last section, or by invoking \u003ccode\u003eggsave()\u003c/code\u003e as a new target.\u003c/p\u003e\u003cp\u003eWe thus have to fix an image size and a file location in advance but at least the saved object would be clear: an actual image.\u003c/p\u003e\u003cp\u003eHere\u0026rsquo;s how we could proceed with our previous workflow (and without the targets hooks):\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_script\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;ggplot2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;targets\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003esimple_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003egiven_plot\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecyl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003empg\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nf\"\u003eggsave\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;simple_plot.png\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003egiven_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e},\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eformat\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;file\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003ecomplex_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df2\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003erbind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df4\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003erbind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003egiven_plot\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecyl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003empg\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nf\"\u003eggsave\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;complex_plot.png\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003egiven_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e},\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003eformat\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;file\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e \u003cspan class=\"n\"\u003eask\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Run the workflow\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_make\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e✔ skip target mtcars_df• start target simple_plotSaving 7 x 7 in image• built target simple_plot [0.6 seconds]• start target complex_plotSaving 7 x 7 in image• built target complex_plot [0.41 seconds]• end pipeline [1.12 seconds]\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNote that because \u003ccode\u003eggsave()\u003c/code\u003e returns a file path, we had to indicate to \u003ccode\u003etar_target()\u003c/code\u003e that the target was a file using the argument \u003ccode\u003eformat = \u0026quot;file\u0026quot;\u003c/code\u003e (to learn more about file targets refer to the \u003ca href=\"https://books.ropensci.org/targets/data.html#external-files\"\u003ededicated section\u003c/a\u003e of the targets manual).We can now check our saved targets:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esimple_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e[1] \u0026#34;simple_plot.png\u0026#34;\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWe only got \u003ccode\u003e\u0026quot;simple_plot.png\u0026quot;\u003c/code\u003e because the target in itself only stores the file path to the actual saved file.So to visualize it, we need to go into the folder and open the file:\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/12/06/save-ggplot2-targets/simple_plot.png\"\t\t\talt=\"Scatterplot of the mtcars dataset showing miles per gallon as a function of number of cylinders.\"\u003e\u003c/figure\u003e\u003cp\u003eAnd our plots were saved! I will leave adapting this workflow to use tarchetypes hooks as an exercise to the reader 😉\u003c/p\u003e\u003cp\u003eI generally dislike saving my plots as images because I don\u0026rsquo;t know their final size beforehand, and I like to be able to tweak them after the fact, to tailor them to the context where they are going to be displayed.So that\u0026rsquo;s why I\u0026rsquo;m going to add my final solution.\u003c/p\u003e\u003ch3 id=\"pros-2\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pros-2\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePros\u003c/h3\u003e\u003cul\u003e\u003cli\u003eLightweight\u003c/li\u003e\u003cli\u003eEasy file type\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"cons-2\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#cons-2\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCons\u003c/h3\u003e\u003cul\u003e\u003cli\u003eFixed size a priori\u003c/li\u003e\u003cli\u003eCan\u0026rsquo;t edit easily the object after the fact (unless using external software)\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"fourth--final-solution-save-ggplot2-objects-but-thin-the-plotting-environment\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#fourth--final-solution-save-ggplot2-objects-but-thin-the-plotting-environment\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFourth (\u0026amp; final) solution: save ggplot2 objects but thin the plotting environment\u003c/h2\u003e\u003cp\u003eAs you may have guessed, the solution was in front of our eyes all this time: instead of trying to bypass the ggplot2 limitations by saving plots into intermediate objects, we could embrace ggplot2 specificity and tackle the problem at its source, by limiting the environment to only what is strictly needed for the plot.\u003c/p\u003e\u003cp\u003eOne way to do it is to use \u003ccode\u003erm()\u003c/code\u003e before calling \u003ccode\u003eggplot()\u003c/code\u003e in the plotting functions to remove any objects lying around in the function environment.With our workflow example it would mean:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_script\u003c/span\u003e\u003cspan class=\"p\"\u003e({\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;ggplot2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;targets\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003esimple_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecyl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003empg\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003ecomplex_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df2\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003erbind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df4\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003erbind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecyl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003empg\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etar_target\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"n\"\u003ecomplex_but_slim_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Add many useless manipulations here to mimic object creation\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df2\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003erbind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003emtcars_df4\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003erbind\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# Remove all unnecessary objects\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nf\"\u003erm\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df4\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df2\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emtcars_df3\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emtcars_df\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecyl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003empg\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e},\u003c/span\u003e \u003cspan class=\"n\"\u003eask\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Run the workflow\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etar_make\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e✔ skip target mtcars_df• start target simple_plot• built target simple_plot [0 seconds]• start target complex_but_slim_plot• built target complex_but_slim_plot [0 seconds]• start target complex_plot• built target complex_plot [0 seconds]• end pipeline [0.25 seconds]\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow we added a new target \u003ccode\u003ecomplex_but_slim_plot\u003c/code\u003e that still plot the same thing as \u003ccode\u003ecomplex_plot\u003c/code\u003e but has a specific line where it removes all intermediate objects lying around.We can compare their sizes:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elobstr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eobj_size\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etar_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecomplex_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e912.54 kB\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elobstr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eobj_size\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etar_read\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecomplex_but_slim_plot\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e880.76 kB\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIndeed, the second plot takes less size on the disk! So this strategy works by using the strength (and weakness) of ggplot2 objects and tidying up the local environments before generating the plot.Of course our toy example only shows a reduction of around 20 kB, but as I said above, if your plotting function requires a lot of data wrangling, this gain can be substantial.With this trick you can reduce the file size of your targets workflow and the speed at which your saved plot objects load.\u003c/p\u003e\u003ch3 id=\"pros-3\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pros-3\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePros\u003c/h3\u003e\u003cul\u003e\u003cli\u003eWorks out of the box\u003c/li\u003e\u003cli\u003eNo need to fiddle with the workflow\u003c/li\u003e\u003cli\u003eLighter file size\u003c/li\u003e\u003cli\u003eFlexible image size\u003c/li\u003e\u003cli\u003eCan edit object after the fact\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"cons-3\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#cons-3\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCons\u003c/h3\u003e\u003cul\u003e\u003cli\u003eHave to edit carefully what\u0026rsquo;s happening in the plotting functions\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"summary\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#summary\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSummary\u003c/h2\u003e\u003cp\u003eIn this blog post, we explored solutions to save ggplot2 objects in targets workflows:\u003c/p\u003e\u003cul\u003e\u003cli\u003eThe first solution is to use ggplot2 objects directly without consideration, which may accidentally save bigger objects because it saves the entire plot environment.\u003c/li\u003e\u003cli\u003eThe second solution is to convert ggplot2 objects into \u003ccode\u003eGrobs\u003c/code\u003e, which are much lighter, this can be painlessly implemented through targets hooks, however, saving the ggplot2 grobs is \u003cstrong\u003eofficially discouraged by the ggplot2 maintainers\u003c/strong\u003e as it could break anytime.\u003c/li\u003e\u003cli\u003eThe third solution is to save images directly (with or without targets hooks) through \u003ccode\u003eggsave\u003c/code\u003e, this makes sure that only the images are saved (and not the plot environments), but is much less flexible regarding the re-styling of the plot after the fact.\u003c/li\u003e\u003cli\u003eThe fourth (and my recommended) solution is to use ggplot2 while paying great attention to what objects are present in the plot environment.By thinning any object that may be staying in the environment, the size of the final object can decrease dramatically (and as such the size of the saved targets).This is only a concern if your plotting functions contain a lot of data wrangling with many intermediate objects.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eFrom my simple problem of finding the \u0026ldquo;best\u0026rdquo; way of saving ggplot2 objects in targets workflows, I\u0026rsquo;ve learned a ton about both targets and ggplot2 internals.I hope you liked the journey as much as I enjoyed writing about it.For sure, writing this tech note led me to dive into the details of what\u0026rsquo;s happening on both the targets and ggplot2 side.\u003c/p\u003e\u003ch2 id=\"going-further\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#going-further\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGoing Further\u003c/h2\u003e\u003cul\u003e\u003cli\u003eTo learn more about R environments, read \u003ca href=\"https://adv-r.hadley.nz/environments.html\"\u003eChapter 7 of Advanced R\u003c/a\u003e, it carefully examines the properties of environments and builds up your understanding progressively.\u003c/li\u003e\u003cli\u003eTo better understand the grid package which is the base upon which ggplot2 is built, you can read the tutorial \u003ca href=\"https://doi.org/10.1080/10691898.2010.11889587\"\u003e\u0026ldquo;Fun with the R Grid Package\u0026rdquo;\u003c/a\u003e by Lutong Zhou \u0026amp; W.John Braun.\u003c/li\u003e\u003cli\u003eTo understand the interaction between the grid package and ggplot2, Roger D.Peng provides \u003ca href=\"https://bookdown.org/rdpeng/RProgDA/the-grid-package.html\"\u003ea great tutorial\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eTo go even deeper into the understanding of ggplot2, the \u003ca href=\"https://ggplot2-book.org/index.html\"\u003e3rd version of \u0026ldquo;ggplot2: elegant graphics for data analysis\u0026rdquo;\u003c/a\u003e has \u003ca href=\"https://ggplot2-book.org/internals.html\"\u003ea full chapter on \u0026ldquo;ggplot2 internals\u0026rdquo;\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eTo learn more about targets hooks, read \u003ca href=\"https://ggplot2-book.org/index.html\"\u003ethe dedicated section in the targets manual\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"acknowledgments\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#acknowledgments\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAcknowledgments\u003c/h2\u003e\u003cp\u003eThanks to \u003ca href=\"/author/will-landau/\"\u003eWill Landau\u003c/a\u003e for creating targets and always answering the silly questions I may ask in the dedicated channel of the rOpenSci slack.Thanks as well to \u003ca href=\"/author/noam-ross/\"\u003eNoam Ross\u003c/a\u003e \u0026amp; \u003ca href=\"/author/miles-mcbain/\"\u003eMiles McBain\u003c/a\u003e who both wrote first about that issue that I also experienced and inspired me to dive deeper into the solutions.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/12/06/save-ggplot2-targets/","date_published":"2022-12-06T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/56pyd-a0t11","title":"Our First Peer-Reviewed Statistical R Packages!","language":"en","authors":[{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["author"]}],"tags":["community","Software Peer Review","editor","statistics"],"content_html":"\u003cp\u003erOpenSci is \u003cem\u003every\u003c/em\u003e excited to announce our first peer-reviewed statistical Rpackages!\u003c/p\u003e\u003cp\u003eOne of rOpenSci\u0026rsquo;s core programs is software peer-review, where we use \u003ca href=\"https://www.youtube.com/watch?v=o_WEhg6sSSQ\"\u003ebestpractices from software engineering and academic peer-review to improvescientific software\u003c/a\u003e. Through this, we aim to make scientific software morerobust, usable, and trustworthy, and build a supportive community of practitioners.\u003c/p\u003e\u003cp\u003eHistorically, we have focused on R packages that managethe \u003ca href=\"https://devguide.ropensci.org/policies.html#aims-and-scope\"\u003eresearch data lifecycle\u003c/a\u003e. Now, thanksto work over the past two years \u003ca href=\"/blog/2019/07/15/expanding-software-review/\"\u003esupported by the SloanFoundation\u003c/a\u003e wealso facilitate peer-review of packages that implement statistical algorithms. The firststatistical packages to pass peer review are:\u003c/p\u003e\u003c!-- Note, I excluded package authors here that were listed as data providers, thesis advisors, etc. Should I include them? Probably... --\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/aorsf\"\u003e\u003cstrong\u003eaorsf: Accelerated Oblique Random SurvivalForests\u003c/strong\u003e\u003c/a\u003e \u003ca href=\"https://github.com/ropensci/software-review/issues/532/\"\u003e\u003cimg src=\"https://badges.ropensci.org/532_status.svg\" alt=\"Gold Statistical Software Peer Reviewbadge\"\u003e\u003c/a\u003e,by Byron Jaeger, Nicholas Pajewski, and Sawyer Welden, reviewed by LukasBurk, Marvin N. Wright, edited by Toby Dylan Hocking\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/melt\"\u003e\u003cstrong\u003emelt: Multiple Empirical LikelihoodTests\u003c/strong\u003e\u003c/a\u003e \u003ca href=\"https://github.com/ropensci/software-review/issues/550\"\u003e\u003cimg src=\"https://badges.ropensci.org/550_status.svg\" alt=\"Silver Statistical Software Peer Reviewbadge\"\u003e\u003c/a\u003eby Eunseop Kim, reviewed by Alex Stringer and Pierre Chausse, edited byPaula Moraga\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/canaper\"\u003e\u003cstrong\u003ecanaper: Categorical Analysis of Neo- And Paleo-Endemism inR\u003c/strong\u003e\u003c/a\u003e \u003ca href=\"https://github.com/ropensci/software-review/issues/475\"\u003e\u003cimg src=\"https://badges.ropensci.org/475_status.svg\" alt=\"Silver Statistical Software Peer Reviewbadge\"\u003e\u003c/a\u003e,by Joel H. Nitta, reviewed by Luis Osorio and Klaus Schliep, edited by TobyDylan Hocking\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThese packages were peer-reviewed by statisticians and developers to conform to aset of \u003ca href=\"https://stats-devguide.ropensci.org/standards.html\"\u003estandards\u003c/a\u003e we\u0026rsquo;ve developedwith community input. These standards cover areas such as documentation, testing, algorithmdesign and interoperability.  As part of the review process, authors have also\u003ca href=\"https://ropensci-review-tools.github.io/srr/\"\u003eannotated their source code\u003c/a\u003e todocument how and where they comply with these standards.\u003c/p\u003e\u003cp\u003eEvaluating and reviewing statistical packages is a complex and difficult taskfor editors and reviewers. To help them we\u0026rsquo;ve also built\u003ca href=\"/commcalls/dec2021-automation/\"\u003eautomated infrastructure\u003c/a\u003e for checking submissions for compliance and producing metricsand diagnostics that help both authors and reviewers navigate the review.\u003c/p\u003e\u003cp\u003eWe extend an enormous thank-you to the authors, editors, and reviewers who volunteeredtheir time and helped pilot this new system! Also to our \u003ca href=\"https://stats-devguide.ropensci.org/\"\u003estatistical advisoryboard\u003c/a\u003e and all the community members whohave provided input on our standards and processes.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;re currently accepting packages in Bayesian statistics, exploratory data analysis, machine-learning, regression, supervised learning, spatial and time-series statistics, dimensionality reduction, clustering, and unsupervised learning. We will be expanding our standards to cover other areas such as network analysis in the the near future.\u003c/p\u003e\u003cp\u003eIf you are interested in participating in statistical software peer review at rOpenSci here are some ways to get involved:\u003c/p\u003e\u003cul\u003e\u003cli\u003eRead about our process and standards (and suggest changes!) in the \u003ca href=\"https://stats-devguide.ropensci.org/\"\u003erOpenSci Statistical Software Development Guide!\u003c/a\u003e\u003c/li\u003e\u003cli\u003eWatch or listen to some of our recent \u003ca href=\"/commcalls/\"\u003ecommunity Calls\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/new/choose\"\u003eSubmit your own package for review or make a pre-submission inquiry\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://airtable.com/shrnfDI2S9uuyxtDw\"\u003eVolunteer to be a peer-reviewer\u003c/a\u003e\u003c/li\u003e\u003cli\u003eDuring the next call for applications, apply to our \u003ca href=\"https://ropensci.org/champions/\"\u003eCommunity Champions program\u003c/a\u003e to get support and training in package development and review.\u003c/li\u003e\u003c/ul\u003e","url":"https://ropensci.org/blog/2022/11/30/first-peer-reviewed-stats-packages/","date_published":"2022-11-30T00:00:01-07:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/7wqra-q0y98","title":"postdoc 1.0: minimal and uncluttered HTML package manuals","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","tech notes","documentation","syntax highlighting","postdoc"],"content_html":"\u003ch2 id=\"two-new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#two-new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTwo new packages!\u003c/h2\u003e\u003cp\u003eWe released two new packages that we are using in \u003ca href=\"https://r-universe.dev\"\u003er-universe\u003c/a\u003e to render package documentation: \u003ca href=\"https://docs.ropensci.org/postdoc/\"\u003epostdoc\u003c/a\u003e and \u003ca href=\"https://docs.ropensci.org/prismjs/\"\u003eprismjs\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe goal of postdoc is very simple: generate beautiful single-page package manuals in HTML format. Postdoc uses our \u003ca href=\"https://docs.ropensci.org/prismjs/\"\u003eprismjs\u003c/a\u003e and \u003ca href=\"https://docs.ropensci.org/katex/\"\u003ekatex\u003c/a\u003e packages for server-side highlighting and math. Try it yourself:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Download and install postdoc in R\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003einstall.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;postdoc\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;https://ropensci.r-universe.dev\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;https://cloud.r-project.org\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Generate a manual for \u0026#39;jsonlite\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ehtml\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003epostdoc\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003erender_package_manual\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;jsonlite\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;.\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eutils\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ebrowseURL\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ehtml\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWe have recently started building the reference manuals for each package r-universe: for packages that have had an update in the past 10 days, the reference manual is now linked from the package homepage on \u003ca href=\"https://r-universe.dev\"\u003er-universe.dev\u003c/a\u003e. All packages in in r-universe gets rebuilt at least once per month, so soon all packages should have the manual. Postdoc reference manuals for base-R packages can be found \u003ca href=\"https://r-universe.dev/manuals/\"\u003ehere\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://ropensci.r-universe.dev/ui#package:targets\"\u003e\u003cimg src=\"/blog/2022/11/29/postdoc-docs/targets.png\" alt=\"screenshot from the targets webpage on r-universe\"\u003e\u003c/a\u003eBelow some random examples of refence manuals from popular packages to get an impression:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/manual/targets.html\"\u003e\u003ccode\u003ehttps://ropensci.r-universe.dev/manual/targets.html\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://tidyverse.r-universe.dev/manual/dplyr.html\"\u003e\u003ccode\u003ehttps://tidyverse.r-universe.dev/manual/dplyr.html\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/manual/jsonlite.html\"\u003e\u003ccode\u003ehttps://jeroen.r-universe.dev/manual/jsonlite.html\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://rstudio.r-universe.dev/manual/shiny.html\"\u003e\u003ccode\u003ehttps://rstudio.r-universe.dev/manual/shiny.html\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://r-universe.dev/manuals/MASS.html\"\u003e\u003ccode\u003ehttps://r-universe.dev/manuals/MASS.html\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://r-universe.dev/manuals/Matrix.html\"\u003e\u003ccode\u003ehttps://r-universe.dev/manuals/Matrix.html\u003c/code\u003e\u003c/a\u003e (lots of math)\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"what-is-nice-about-a-reference-manual\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-nice-about-a-reference-manual\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is nice about a reference manual\u003c/h2\u003e\u003cp\u003eThere are many ways to browse R package documentation, such as a pkgdown site or the \u003ccode\u003e?\u003c/code\u003e command in R. But one of the simplest ways, that is available for all packages, is viewing the PDF reference manual in your browser from CRAN or r-universe.\u003c/p\u003e\u003cp\u003eThe reference manual gives an overview of everything in the package, nicely indexed and searchable within a single document. Because it is just one file, it is easy to share and archive a particular version of the manual that belongs with a given version of the package. This makes a reference manual a useful resource, even for packages that have e.g. a pkgdown site.\u003c/p\u003e\u003cp\u003eUnfortunately, base-R can only generate reference manuals in PDF format. This is a long standing issue: Jonathan Godfrey published an article in the R journal 10 years ago called \u003ca href=\"https://journal.r-project.org/archive/2013-1/godfrey.pdf\"\u003e\u003cem\u003eStatistical Software from a Blind Person’s Perspective\u003c/em\u003e\u003c/a\u003e in which he explains that the PDF format is terrible for him because it is not machine readable and hence does not work well with screen readers. Earlier this year he \u003ca href=\"https://stat.ethz.ch/pipermail/r-package-devel/2022q2/007953.html\"\u003ereiterated\u003c/a\u003e some of these points on the mailing list, suggesting to switch to HTML where possible.\u003c/p\u003e\u003ch2 id=\"benefits-of-postdoc-html-manuals\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#benefits-of-postdoc-html-manuals\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBenefits of postdoc HTML manuals:\u003c/h2\u003e\u003cp\u003eBesides accessibility, there are many other reasons HTML is a far superior format these days. Because it is text-based, it does not require special tooling to generate (such as latex) or a special viewer (e.g. mobile devices often don\u0026rsquo;t have a pdf reader). With some CSS we can apply custom styling, without cluttering the content.In summary, some benefits of postdoc HTML reference manuals:\u003c/p\u003e\u003cul\u003e\u003cli\u003eBeautiful server-side math and syntax highlighting\u003c/li\u003e\u003cli\u003eAccessibility: works with screenreaders\u003c/li\u003e\u003cli\u003eSearch simply with CTRL+F\u003c/li\u003e\u003cli\u003ePossible to link to a topic within the document\u003c/li\u003e\u003cli\u003eLink to HTML manuals of other packages\u003c/li\u003e\u003cli\u003eReadable by search engines\u003c/li\u003e\u003cli\u003eOpens in any browser, without PDF reader\u003c/li\u003e\u003cli\u003eCan be generate in R without LaTeX\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eMath rendering in HTML with katex or mathjax is these days on-par with LaTeX, and syntax highlighting far superior. Generally HTML documents are much more readable both for humans and machines. The latter will not only help screen-readers, but also make the documentation visible to search engines.\u003c/p\u003e\u003ch2 id=\"server-side-syntax-highlighting-and-math\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#server-side-syntax-highlighting-and-math\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eServer-side syntax highlighting and math\u003c/h2\u003e\u003cp\u003eThis is the initial release of postdoc. The technical details are subject to change, and not very interesting to most people, but I want to emphasize one important feature: math rendering and syntax highlighting are done \u003ca href=\"blog/2021/07/13/katex-release/\"\u003eserver-side in R\u003c/a\u003e such that no JavaScript libraries are needed in the html document. This makes the html portable and faster to load, which is nice because some manuals are quite large.\u003c/p\u003e\u003cp\u003eHow does this work? Most other documentation systems insert JavaScript libraries in the HTML document which have to render/style math and code every time a page is loaded in the browser. However these libraries can be large and the rendering is expensive for documents with many equations/codeblocks. As a result a page can take long to load, especially with limited bandwidth/cpu, such as on mobile devices.\u003c/p\u003e\u003cp\u003eThe postdoc package uses our \u003ca href=\"https://docs.ropensci.org/prismjs/\"\u003eprismjs\u003c/a\u003e and \u003ca href=\"https://docs.ropensci.org/katex/\"\u003ekatex\u003c/a\u003e R packages to render the code and math respectively. These packages are based on the same JavaScript libraries, however instead of running in the browser, they run in R using \u003ca href=\"https://jeroen.r-universe.dev/ui#package:V8\"\u003eV8\u003c/a\u003e. As a result, the heavy lifting is taken care of when the manual is generated, and the HTML contains the pre-rendered math figures and codeblocks. The only thing that remains to be needed in the HTML document is some small CSS files, which define e.g. the color theme for the code blocks, but do not require heavy computation.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/11/29/postdoc-docs/","date_published":"2022-11-29T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/vkxy1-yaq85","title":"Meeting the stars of the R-universe: R Community, Exchange and Learn","language":"en","authors":[{"name":"Alejandra Bellini","url":"https://ropensci.org/author/alejandra-bellini/","avatar":"https://ropensci.org/img/community/ale-bellini.jpeg","_role":["author"]},{"name":"Juan Pablo Ruiz Nicolini","url":"https://orcid.org/0000-0002-3138-6343","avatar":"https://ropensci.org/img/community/ruiz-nicolini.jpg","_role":["author"]},{"name":"Lucio Casalla","url":"https://ropensci.org/author/lucio-casalla/","avatar":"https://ropensci.org/img/community/lucio-casalla.JPG","_role":["author"]},{"name":"Pablo Tiscornia","url":"https://ropensci.org/author/pablo-tiscornia/","avatar":"https://ropensci.org/img/community/pablo-tiscornia.jpeg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","r-universe","interviews","r-universe-stars"],"content_html":"\u003cp\u003eThis is the first post of our interview series \u003cstrong\u003e\u0026ldquo;Meeting the stars of the R-universe\u0026rdquo;\u003c/strong\u003e. We aim to introduce the working groups and people behind the development of software and packages many of us use and which are available through the \u003cem\u003eR-Universe\u003c/em\u003e.  We want to highlight and explore different teams and projects around the world, the work they do, their processes and users. We begin our journey in \u003cem\u003eArgentina\u003c/em\u003e  with a team that uses R and develops R packages for the Argentinean State. Be sure to watch the \u003ca href=\"#video-of-the-interview\"\u003evideo\u003c/a\u003e at the end with excerpts from the interview.\u003c/p\u003e\u003ch2 id=\"working-with-r-packages-in-the-argentinian-state\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#working-with-r-packages-in-the-argentinian-state\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWorking with R packages in the Argentinian state\u003c/h2\u003e\u003cp\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/blog/2022/11/23/r-universe-stars-1-en/tq-picture.jpg\"\t\t\talt=\"Profile photo of Juan Pablo Ruiz Nicolini.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003eJuan Pablo Ruiz Nicolini\u003c/strong\u003e\u003cbr\u003eNational Director of Markets and Statistics\u003cbr\u003eof the vicesecretary of Strategic Development \u003cbr\u003eof the Ministry of Tourism and Sports of the Nation\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003eTwo years ago, \u003ca href=\"https://twitter.com/TuQmano\"\u003eJuan Pablo Ruiz Nicolini\u003c/a\u003e (also known as \u003cem\u003eTucu\u003c/em\u003e) was invited to join the Markets and Statistics Department of the National Ministry of Sports and Tourism, headed by Matías Lammens. As part of this work, Juan Pablo leads a team that handles large volumes of data and the possibility of using it for multiple purposes. For these reasons, Juan Pablo and his team rely heavily on R and the R community for their work.\u003c/p\u003e\u003cp\u003eThe team is large in comparison with other similar government agencies and with permanent large-scale projects such as those developed in conjunction with INDEC (National Institute of Statistics and Census of Argentina).\u003c/p\u003e\u003cp\u003e\u003cem\u003e“There is a large amount of work and information available and when we started our review we found that there was a lot of great stuff, a lot of data, a lot of processes(\u0026hellip;) there was a lot of room to take advantage of all the information that was living inside the computers of the teams working in our office.”\u003c/em\u003e This is how Juan Pablo explains the challenge and the opportunity that joining this office represented. Their goals were to collect this information and also to be able to share it externally and accessibly with different audiences.\u003c/p\u003e\u003cp\u003eFrom the beginning, the process involved several steps. First they made the decision that R packages and open source software were the way to go. Then came the internal training stage.\u003c/p\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2022/11/23/r-universe-stars-1-en/pablo-picture.jpeg\"\t\t\talt=\"Profile picture of Pablo Tiscornia.\" width=\"300\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003e\u003ccenter\u003e\u003cstrong\u003ePablo Tiscornia\u003c/strong\u003e\u003cbr\u003eProcess coordinator.\u003cbr\u003eMinistry of Tourism and Sports of the Nation. \u003cbr\u003eNational Office of Markets and Statistics\u003c/center\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003e\u003ca href=\"https://twitter.com/pabblo_h\"\u003ePablo Tiscornia\u003c/a\u003e is part of \u003cem\u003eTucu\u003c/em\u003e\u0026rsquo;s team, and explains that the starting point of the work, in an office that until recently combined manual processes and almost everything was in proprietary software, was the free software philosophy added to all that the R community had been offering in the region.  Until now, the work in the office combined manual processes and almost everything used proprietary software. Pablo and Tucu met with a team of approximately 17 people who worked in some way with data processing and who were all very involved with the processes: \u003cem\u003e“first we needed to solve an internal work dynamic (\u0026hellip;) there was a lot to do. Today I think out of those 17 people 15, 14 all of them know how to open R, they know how to put together a script and they know how they want to be involved in the process we define. From the moment you have a piece of data until you communicate at the end.”\u003c/em\u003e\u003c/p\u003e\u003cp\u003eAt this stage, their objective was achieved: the team learned the tool and the work dynamics that they had defined as the most appropriate.\u003c/p\u003e\u003cp\u003eThe second step was to \u003cem\u003e\u0026ldquo;open the process\u0026rdquo;\u003c/em\u003e as well as to \u003cem\u003e\u0026ldquo;improve the workflow\u0026rdquo;\u003c/em\u003e. Pablo explains that they also incorporated the \u003cem\u003e\u0026ldquo;dynamics of an open State\u0026rdquo;\u003c/em\u003e by \u003cem\u003e\u0026quot;[opening] our process, not hiding how we do our work.\u0026quot;\u003c/em\u003e It is hoped that the future will also include the opportunity to receive contributions from the community and for their code to be reviewed by others.\u003c/p\u003e\u003cp\u003eAll processes are complex and many of them involve simultaneous and even \u0026ldquo;chaotic\u0026rdquo; steps, as \u003cem\u003eTucu\u003c/em\u003e describes. These involve different people with diverse knowledge contributing to the design of the projects that are currently under development.\u003c/p\u003e\u003cp\u003eTo integrate these different elements, \u003cem\u003eTucu\u003c/em\u003e gives as an example the \u003cem\u003eThursday meeting\u003c/em\u003e. There, they show and share their code so that others can use them in different parts of the process. \u003cem\u003e\u0026ldquo;We do live coding where we raise doubts and do exercises (\u0026hellip;) we try to generate a dynamic in which we share, sometimes even in a playful way, showing each part and what they are doing to be shared with others.\u0026rdquo;\u003c/em\u003e\u003c/p\u003e\u003ch2 id=\"free-software-and-in-our-language\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#free-software-and-in-our-language\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFree software and in our language\u003c/h2\u003e\u003cp\u003eIn addition to the free nature of open source software and the importance of resource management for a State, Pablo Tiscornia explains what appears almost as a declaration of principles: \u003cem\u003e“It is a work philosophy, and an idea about how we develop and promote knowledge. I think what we can give, today to the State, is thanks to free software. So, it would be almost irresponsible not to promote what formed us.”\u003c/em\u003e\u003c/p\u003e\u003cp\u003eJuan Pablo reinforces the idea with his personal experience: \u003cem\u003e“I was a master\u0026rsquo;s thesis student in political science and seven years ago I forced myself to do my thesis in R in order to learn (\u0026hellip;) and what I quickly found, luckily, was the R community.”\u003c/em\u003e\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eand what I quickly found, luckily, was the R community\u0026quot;\u003cstrong\u003eExchange with the R community and learn from the R community\u0026quot; seems to be the main mantra that both \u003cem\u003eTucu\u003c/em\u003e and Pablo share with the team.\u003c/strong\u003e\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThey also add two important objectives to the whole process: to present the R language in a way that is accessible to all people, even those who do not necessarily come from programming backgrounds, and to \u003cem\u003e\u0026ldquo;develop the packages in Spanish as much as possible”\u003c/em\u003e. This helped reduce barriers for the team: \u003cem\u003e\u0026ldquo;We couldn\u0026rsquo;t get into thinking whether we know English, if we don\u0026rsquo;t know English, or even how much English we know. We wanted to get that barrier out of the way.\u0026rdquo;\u003c/em\u003e\u003c/p\u003e\u003ch2 id=\"a-work-for-the-community\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-work-for-the-community\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA work for the community\u003c/h2\u003e\u003cp\u003eThe work developed by this office serves a many different audiences.\u003c/p\u003e\u003cfigure class=\"pull-left\"\u003e\u003cimg src=\"/blog/2022/11/23/r-universe-stars-1-en/sinta.png\"\t\t\talt=\"Screenshot of the SINTA system home page showing access to its open datasets.\" width=\"380\"\u003e\u003c/figure\u003e\u003cp\u003eToday they have a site called \u003ca href=\"https://www.yvera.tur.ar/sinta/\"\u003eSINTA (Sistema de Información Turístico de la Argentina \u0026ndash; Argentina\u0026rsquo;s Tourist Information System)\u003c/a\u003e where the \u003cem\u003e\u0026ldquo;different ways of accessing information\u0026rdquo;\u003c/em\u003e are present in an organized fashion. Juan Pablo explains that \u003cem\u003e\u0026ldquo;the work was to develop tools. R has much to do with this, bringing the information closer to different audiences.\u0026rdquo;\u003c/em\u003e\u003c/p\u003e\u003cp\u003eThose audiences include academics (people who research and teach) and government. For example, offices at different levels of the State can use the information for decision-making and setting public policy. As this is an open data portal, the information is also available to anyone else who wants to interact with it.\u003c/p\u003e\u003c/br\u003e\u003c/br\u003e\u003ch2 id=\"the-r-universe-experience\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-r-universe-experience\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe R-Universe experience\u003c/h2\u003e\u003cp\u003eThe concept of community is closely related to social and communication networks, and it was precisely Twitter that first brought Juan Pablo closer to the \u003ca href=\"https://r-universe.dev/search/\"\u003eR-Universe\u003c/a\u003e where he discovered \u003ca href=\"/blog/2021/09/21/creando-tu-r-universe/\"\u003estep-by-step instructions on how to build his own R universe\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003cem\u003e“It is the logical next place to share the things that we\u0026rsquo;re doing openly, to make the packages in our GitHub available. It is possible to open up our little marketplace, our mini CRAN, in R-Universe, to share the libraries that we\u0026rsquo;re starting to develop”\u003c/em\u003e, this is how \u003cem\u003eTucu\u003c/em\u003e explains the first use of the platform and adds, \u003cem\u003e“to me it looks spectacular, as I see how it is changing over time, how comprehensive it is, the way one can visualize all the development that one is sharing in the R-Universe.”\u003c/em\u003e\u003c/p\u003e\u003cp\u003ePablo adds that developing packages was the logical next step of the process after incorporating the R language and training: \u003cem\u003e“we put together, on the one hand, the tools with which we improve our workflow, the package \u003ca href=\"https://dnme-minturdep.r-universe.dev/ui#package:herramientas\"\u003e{Herramientas}\u003c/a\u003e, and on the other hand, the package \u003ca href=\"https://dnme-minturdep.r-universe.dev/ui#package:comunicacion\"\u003e{Comunicación}\u003c/a\u003e, that the idea was mainly, and still is today, to improve the workflow of our team, our day-to-day work.”\u003c/em\u003e\u003c/p\u003e\u003cfigure class=\"pull-right\"\u003e\u003cimg src=\"/blog/2022/11/23/r-universe-stars-1-en/dnme-r-universe.png\"\t\t\talt=\"Screenshot of an R-Universe profile showing SINTA\u0026#39;s packages\" width=\"500\"\u003e\u003c/figure\u003e\u003cp\u003eBoth Pablo and Juan Pablo agree that the main benefit of the R-Universe to their office is being able to host all the packages they have under development. Pablo describes the R-Universe as \u003cem\u003e\u0026ldquo;a great place where we can put all of our toolboxes and we can even show our packages as well. We have a \u003ca href=\"https://dnme-minturdep.r-universe.dev/ui#packages\"\u003eplace\u003c/a\u003e with our tools that are consistent with each other, that have a common philosophy of work.”\u003c/em\u003e\u003c/p\u003e\u003cp\u003eThe work of Juan Pablo and Pablo as well as that of the R-Universe are in a world that has changed how programming is used. In Pablo\u0026rsquo;s words: \u003cem\u003e“We are in a world where programming is no longer for programmers in terms of who studied for it, we are in a world where there are many people who collaborate and want to collaborate even with only one little piece.”\u003c/em\u003e\u003c/p\u003e\u003cp\u003eJuan Pablo concludes by saying: \u003cem\u003e“There are more barriers that can be lowered, especially for those of us who do not come from programming, we come from the social sciences and began to program and started using tools that made our work easier\u0026rdquo;\u003c/em\u003e  and importantly, \u003cem\u003e\u0026ldquo;we can also do it in Spanish.\u0026rdquo;\u003c/em\u003e\u003c/p\u003e\u003ch2 id=\"video-of-the-interview\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#video-of-the-interview\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eVideo of the interview\u003c/h2\u003e\u003cp\u003eIf you want to hear more details about the experience, be sure to watch the protagonists in the video with excerpts from the interview. You can activate the subtitles in English and Spanish.\u003c/p\u003e\t\t\t\u003cdiv\t\t\t\t\tstyle=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\t\t\t\t\u003ciframe\t\t\t\t\tsrc=\"https://player.vimeo.com/video/759138370?dnt=0\"\t\t\t\t\t\tstyle=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;\" allow=\"fullscreen\" title=\"Entrevista a Juan Pablo y Pablo\"\u003e\t\t\t\t\u003c/iframe\u003e\t\t\t\u003c/div\u003e","url":"https://ropensci.org/blog/2022/11/23/r-universe-stars-1-en/","date_published":"2022-11-23T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/3qkj4-9hm14","title":"rOpenSci News Digest, November 2022","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it’s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2022/11/18/ropensci-news-digest-november-2022\"\u003eon our blog\u003c/a\u003e.Now let’s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"multilingual-publishing\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#multilingual-publishing\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMultilingual Publishing\u003c/h3\u003e\u003cp\u003eOpen Source and Open Science are global movements, but most of their material and resources are published in English, meaning non-English speakers face a significant barrier to being part of these movements.\u003cbr\u003ePublishing multilingual resources can lower these barriers by increasing access to knowledge, which helps democratize access to quality resources, and therefore increases the potential for contributing to software and open science projects.\u003c/p\u003e\u003cp\u003eWe’re excited to announce that with the support of the \u003ca href=\"/blog/2021/12/20/inclusive-leadership-program/\"\u003eChan-Zuckerberg Initiative\u003c/a\u003e, \u003ca href=\"https://numfocus.org/\"\u003eNumFOCUS\u003c/a\u003e and the \u003ca href=\"https://www.r-consortium.org/\"\u003eR Consortium\u003c/a\u003e, we have started translating rOpenSci’s material on best practices for software development, code review, and contribution to open source projects into Spanish.As part of this effort we are also developing guidelines for translating open source resources to a wider audience.\u003c/p\u003e\u003cp\u003eLearn more about our \u003ca href=\"/multilingual-publishing/\"\u003eMultilingual Publishing project\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"champions-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#champions-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChampions Program\u003c/h3\u003e\u003cp\u003eThe application period for our champions program is now closed.\u003c/p\u003e\u003cp\u003eWe are very excited about the response from the community! We received 74 applications for Champions and 28 for mentors from 31 countries.\u003c/p\u003e\u003cp\u003eWe are very grateful to those who took the time to apply and to all who helped us spread the word about these calls.\u003c/p\u003e\u003cp\u003eOver the next few weeks, we will review the proposals and select the nominees. All applicants will receive feedback on their applications.\u003c/p\u003e\u003cp\u003eLearn more about our \u003ca href=\"/champions/\"\u003eChampions Program\u003c/a\u003e.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/11/18/ropensci-news-digest-november-2022/map.png\"\t\t\talt=\"World Maps with the applicant\u0026#39;s countries colored. The map shows America almost all painted and then some few countries from Asia, Africa, Europe and Oceania.\"\u003e\u003c/figure\u003e\u003ch3 id=\"coworking-sessions-continue\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking-sessions-continue\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking sessions continue!\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2022-12/\"\u003eTuesday, December 6th, 9:00 Australian Western / 1:00 UTC\u003c/a\u003e “Getting started with targets!” \u003cem\u003eHosted by community host \u003ca href=\"/author/nicholas-tierney/\"\u003eNick Tierney\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003cul\u003e\u003cli\u003eDive into the world of targets! Do some studying; Start setting it up for some of your projects;\u003c/li\u003e\u003cli\u003eAsk \u003ca href=\"/author/nicholas-tierney/\"\u003eNick\u003c/a\u003e for suggestions how how to get started or tips and tricks.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2023-01/\"\u003eTuesday, Jan 10th, 14:00 European Central / 13:00 UTC\u003c/a\u003e “Working with new R users” \u003cem\u003eHosted by community host \u003ca href=\"https://alexkoiter.ca\"\u003eAlex Koiter\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003cul\u003e\u003cli\u003eBrainstorm ideas for supporting and encouraging new R users; Annotate a script for a friend or colleague to help them learn;\u003c/li\u003e\u003cli\u003eTalk to \u003ca href=\"https://alexkoiter.ca\"\u003eAlex\u003c/a\u003e and discuss how to share the love of R with new R users.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2023-02/\"\u003eTuesday, Feb 7th, 9:00 Americas Pacific / 17:00 UTC\u003c/a\u003e “Setting up Continuous Integration” \u003cem\u003eHosted by community host \u003ca href=\"/author/hugo-gruson/\"\u003eHugo Gruson\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003cul\u003e\u003cli\u003eDo some reading to learn about Continuous Integration; Setup Continuous Integration on one (or more) of your projects;\u003c/li\u003e\u003cli\u003eTalk to \u003ca href=\"/author/hugo-gruson/\"\u003eHugo\u003c/a\u003e and discuss how Continuous Integration can simplify your development process and how to get set up.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd remember, you can always cowork independently on work related to R, work on packages that tend to be neglected, or work on what ever you need to get done!\u003c/p\u003e\u003ch3 id=\"ropensci-communication-channels-as-an-alternative-to-twitter\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-communication-channels-as-an-alternative-to-twitter\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci communication channels as an alternative to Twitter\u003c/h3\u003e\u003cp\u003eOur Twitter account is still active for now but here are alternatives:\u003c/p\u003e\u003cp\u003e🐘 \u003ca href=\"https://fosstodon.org/@ropensci\"\u003eMastodon account\u003c/a\u003e (if you like social media)\u003c/p\u003e\u003cp\u003e💬 \u003ca href=\"https://discuss.ropensci.org/\"\u003eDiscussion forum\u003c/a\u003e\u003c/p\u003e\u003cp\u003e🗞️ \u003ca href=\"/news\"\u003eNewsletter\u003c/a\u003e\u003c/p\u003e\u003cp\u003e✍️ \u003ca href=\"/blog\"\u003eBlog\u003c/a\u003e\u003c/p\u003e\u003cp\u003eYou can read more in our \u003ca href=\"/blog/2022/11/16/mastodon-en/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following two packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/daiquiri\"\u003edaiquiri\u003c/a\u003e, developed by T. Phuong Quan: Generate reports that enable quick visual review of temporal shifts in record-level data. Time series plots showing aggregated values are automatically created for each data field (column) depending on its contents (e.g. min/max/mean values for numeric data, no. of distinct values for categorical data), as well as overviews for missing values, non-conformant values, and duplicated rows. The resulting reports are shareable and can contribute to forming a transparent record of the entire analysis process. It is designed with Electronic Health Records in mind, but can be used for any type of record-level temporal data (i.e. tabular data where each row represents a single “event”, one column contains the “event date”, and other columns contain any associated values for the event). It is available on \u003ca href=\"https://CRAN.R-project.org/package=daiquiri\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/535\"\u003ereviewed\u003c/a\u003e by Brad Cannell, and Mauro Lepore.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/npi\"\u003enpi\u003c/a\u003e, developed by Frank Farach: Access the United States National Provider Identifier Registry API \u003ca href=\"https://npiregistry.cms.hhs.gov/api/\"\u003ehttps://npiregistry.cms.hhs.gov/api/\u003c/a\u003e. Obtain and transform administrative data linked to a specific individual or organizational healthcare provider, or perform advanced searches based on provider name, location, type of service, credentials, and other attributes exposed by the API. It is available on \u003ca href=\"https://CRAN.R-project.org/package=npi\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/505\"\u003ereviewed\u003c/a\u003e by Matthias Grenié, and Emily C. Zabor.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following twenty packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/frictionless\" title=\"Read and Write Frictionless Data Packages\"\u003efrictionless\u003c/a\u003e (\u003ca href=\"https://github.com/frictionlessdata/frictionless-r/releases/tag/v1.0.2\"\u003e\u003ccode\u003ev1.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/aorsf\" title=\"Accelerated Oblique Random Survival Forests\"\u003eaorsf\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/aorsf/releases/tag/v0.0.4\"\u003e\u003ccode\u003ev0.0.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/assertr\" title=\"Assertive Programming for R Analysis Pipelines\"\u003eassertr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/assertr/releases/tag/v3.0.0\"\u003e\u003ccode\u003ev3.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/chromer\" title=\"Interface to Chromosome Counts Database API\"\u003echromer\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/chromer/releases/tag/v0.3\"\u003e\u003ccode\u003ev0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/daiquiri\" title=\"Data Quality Reporting for Temporal Datasets\"\u003edaiquiri\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/daiquiri/releases/tag/v1.0.1\"\u003e\u003ccode\u003ev1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/jagstargets\" title=\"Targets for JAGS Workflows\"\u003ejagstargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/jagstargets/releases/tag/1.0.4\"\u003e\u003ccode\u003e1.0.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/mctq\" title=\"Tools to Process the Munich ChronoType Questionnaire (MCTQ)\"\u003emctq\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/mctq/releases/tag/v0.3.1\"\u003e\u003ccode\u003ev0.3.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.9.0\"\u003e\u003ccode\u003ev0.9.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/npi\" title=\"Access the U.S. National Provider Identifier Registry API\"\u003enpi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/npi/releases/tag/v0.2.0\"\u003e\u003ccode\u003ev0.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/oai\" title=\"General Purpose Oai-PMH Services Client\"\u003eoai\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/oai/releases/tag/v0.4.0\"\u003e\u003ccode\u003ev0.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rcrossref\" title=\"Client for Various CrossRef APIs\"\u003ercrossref\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rcrossref/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/restez\" title=\"Create and Query a Local Copy of GenBank in R\"\u003erestez\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/restez/releases/tag/v2.1.3\"\u003e\u003ccode\u003ev2.1.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spiro\" title=\"Manage Data from Cardiopulmonary Exercise Testing\"\u003espiro\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spiro/releases/tag/v0.1.2\"\u003e\u003ccode\u003ev0.1.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stantargets\" title=\"Targets for Stan Workflows\"\u003estantargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stantargets/releases/tag/0.0.6\"\u003e\u003ccode\u003e0.0.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stats19\" title=\"Work with Open Road Traffic Casualty Data from Great Britain\"\u003estats19\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stats19/releases/tag/v2.0.1\"\u003e\u003ccode\u003ev2.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stplanr\" title=\"Sustainable Transport Planning\"\u003estplanr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stplanr/releases/tag/v1.0.2\"\u003e\u003ccode\u003ev1.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.7.2\"\u003e\u003ccode\u003e0.7.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Workflows\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/0.14.0\"\u003e\u003ccode\u003e0.14.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/vcr\" title=\"Record HTTP Calls to Disk\"\u003evcr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/vcr/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/webchem\" title=\"Chemical Information from the Web\"\u003ewebchem\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/webchem/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are thirteen recently closed and active submissions and 2 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e‘6/approved’\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/535\"\u003edaiquiri\u003c/a\u003e, Data Quality Reporting for Temporal Datasets. Submitted by \u003ca href=\"https://github.com/phuongquan\"\u003ePhuong Quan\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/505\"\u003enpi\u003c/a\u003e, Access the U.S. National Provider Identifier Registry API. Submitted by \u003ca href=\"https://frankfarach.com\"\u003eFrank Farach\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e‘5/awaiting-reviewer(s)-response’\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román Palacios\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e‘4/review(s)-in-awaiting-changes’\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/524\"\u003ehudr\u003c/a\u003e, A R interface for accessing HUD (US Department of Housing and Urban Development) APIs. Submitted by \u003ca href=\"https://github.com/etam4260/etam4260\"\u003eEmmet Tam\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e‘3/reviewer(s)-assigned’\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/554\"\u003edynamite\u003c/a\u003e, Bayesian Modeling and Causal Inference for Multivariate. Submitted by \u003ca href=\"http://users.jyu.fi/~santikka/\"\u003eSanttu Tikka\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/551\"\u003estochLAB\u003c/a\u003e, Stochastic Collision Risk Model. Submitted by \u003ca href=\"http://www.blackbawks.net\"\u003eGrant\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e‘2/seeking-reviewer(s)’\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"http://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e. (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e‘1/editor-checks’\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/560\"\u003eopenalexR\u003c/a\u003e, Getting Bibliographic Records from OpenAlex Database Using DSL. Submitted by \u003ca href=\"http://trang.page\"\u003eTrang Le\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/10/20/mentors-champions-program\"\u003eBecome a Mentor for rOpenSci Champions!\u003c/a\u003e by Yanina Bellini Saibene. rOpenSci is seeking mentors to support our inaugural cohort of rOpenSci Champions. Could you offer insight and advice to our selected Champions? Learn the details and express your interest.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/11/16/mastodon-en\"\u003erOpenSci’s Communication Channels: Twitter\u003c/a\u003e by Yanina Bellini Saibene, and Steffi LaZerte. We announce our actions on rOpenSci’s communication channels as alternatives to Twitter.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/11/16/mastodon-es\"\u003eCanales de comunicación de rOpenSci: Twitter\u003c/a\u003e by Yanina Bellini Saibene, and Steffi LaZerte. Anunciamos nuestras acciones en los canales de comunicación de rOpenSci como alternativas a Twitter.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eOne use case of our packages and resources has been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://discuss.ropensci.org/t/adding-missing-exif-data-to-wildlife-trail-camera-images/3203\"\u003eAdding missing EXIF data to wildlife trail camera images\u003c/a\u003e. Reported by Neil Saunders.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-package-co-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-package-co-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for package (co-)maintainers\u003c/h2\u003e\u003ch3 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h3\u003e\u003cp\u003eThere are still a few packages to adopt \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/\"\u003efrom our recent blog post\u003c/a\u003e. To volunteer, comment in the corresponding volunteering issue. Thank you!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003ewikitaxa, Taxonomic Information from ‘Wikipedia’\u003c/strong\u003e. ‘Taxonomic’ information from ‘Wikipedia’, ‘Wikicommons’, ‘Wikispecies’, and ‘Wikidata’. Functions included for getting taxonomic information from each of the sources just listed, as well performing taxonomic search. \u003ca href=\"https://github.com/ropensci/wikitaxa/issues/20\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003ergnparser, Parse Scientific Names\u003c/strong\u003e. Parse scientific names using \u003ca href=\"https://github.com/gnames/gnparser\"\u003e‘gnparser’\u003c/a\u003e, written in Go. ‘gnparser’ parses scientific names into their component parts; it utilizes a Parsing Expression Grammar specifically for scientific names. \u003ca href=\"https://github.com/ropensci/rgnparser/issues/14\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eRSelenium, R Bindings for ‘Selenium WebDriver’\u003c/strong\u003e. Provides a set of R bindings for the \u003ca href=\"https://www.selenium.dev/documentation/\"\u003e‘Selenium 2.0 WebDriver’\u003c/a\u003e using the \u003ca href=\"https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol\"\u003e‘JsonWireProtocol’\u003c/a\u003e. ‘Selenium 2.0 WebDriver’ allows driving a web browser natively as a user would either locally or on a remote machine using the Selenium server it marks a leap forward in terms of web browser automation. \u003ca href=\"https://github.com/ropensci/RSelenium/issues/261\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eelastic, General Purpose Interface to ‘Elasticsearch’\u003c/strong\u003e. Connect to ‘Elasticsearch’, a ‘NoSQL’ database built on the ‘Java’ Virtual Machine. Interacts with the \u003ca href=\"https://www.elastic.co/elasticsearch/\"\u003e‘Elasticsearch’ ‘HTTP’ API\u003c/a\u003e, including functions for setting connection details to ‘Elasticsearch’ instances, loading bulk data, searching for documents with both ‘HTTP’ query variables and ‘JSON’ based body requests. \u003ca href=\"https://github.com/ropensci/elastic/issues/292\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eRclean, A Tool for Writing Cleaner, More Transparent Code\u003c/strong\u003e. To create clearer, more concise code provides this toolbox helps coders to isolate the essential parts of a script that produces a chosen result, such as an object, tables and figures written to disk. \u003ca href=\"https://github.com/ropensci/Rclean/issues/213\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"call-for-comaintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-comaintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for comaintainers\u003c/h3\u003e\u003cp\u003eRefer to our \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/#packages-looking-for-co-maintainers\"\u003erecent blog post\u003c/a\u003e to identify packages where help is especially wished for!\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"tired-of-typing--before-function-examples\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tired-of-typing--before-function-examples\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTired of typing #’ before function examples?\u003c/h3\u003e\u003cp\u003eYou can write your \u003ca href=\"https://blog.r-hub.io/2020/01/27/examples\"\u003efunction examples\u003c/a\u003e in separate scripts and then refer to them using the \u003ca href=\"https://roxygen2.r-lib.org/articles/rd.html#examples\"\u003eroxygen2 \u003ccode\u003e@example\u003c/code\u003e (no s!) tag\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eYou’d write\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026#39; @example man/examples/foo.R\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eand in \u003ccode\u003eman/examples/foo.R\u003c/code\u003e\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# basic usage of foo\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ebasic\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# elaborate usage of foo\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ebasic\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eDownsides of using this are that it might surprise contributors, and that someone who’d look for the source of the example through, say, the link indicated on a pkgdown reference page, would not get to the example source directly.\u003c/p\u003e\u003cp\u003eThanks to Hugo Gruson for reminding this in the \u003ca href=\"https://contributing.ropensci.org/resources.html#channels\"\u003erOpenSci semi-open slack\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"display-a-message-or-warning-only-once-per-session\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#display-a-message-or-warning-only-once-per-session\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDisplay a message or warning only once per session?\u003c/h3\u003e\u003cp\u003eIf that’s your need, know that \u003ca href=\"https://rlang.r-lib.org/reference/abort.html\"\u003e\u003ccode\u003erlang::warn()\u003c/code\u003e and \u003ccode\u003erlang::inform()\u003c/code\u003e\u003c/a\u003e have a handy \u003ccode\u003e.frequency\u003c/code\u003e argument, as reported by \u003ca href=\"https://community.rstudio.com/t/how-to-print-a-once-only-package-startup-message/151468/3\"\u003eJon Harmon on Posit Community forum\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"run-some-tests-on-continuous-integration-only\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#run-some-tests-on-continuous-integration-only\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRun some tests on continuous integration only?\u003c/h3\u003e\u003cp\u003eSay you have some slow and fragile \u003ca href=\"https://books.ropensci.org/http-testing/\"\u003etests querying an API\u003c/a\u003e.If you want to run them on continuous integration only,refer to \u003ca href=\"https://brycemecum.com/2020/08/05/testing-r-api-packages/\"\u003eBryce Mecum’s blog post\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"how-to-use-additional-packages-for-the-pkgdown-website-only\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-use-additional-packages-for-the-pkgdown-website-only\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to use additional packages for the pkgdown website only\u003c/h3\u003e\u003cp\u003eSay a package is needed for a pkgdown article of your package (but not a vignette), or for nicer autolinking of a reference to a function (for instance if you recommend \u003ccode\u003eusethis::create_package()\u003c/code\u003e).Assuming you’re building your website with GitHub Actions from \u003ca href=\"https://github.com/r-lib/actions/tree/v2-branch/examples\"\u003er-lib/actions\u003c/a\u003e (that you might have gotten via \u003ca href=\"https://usethis.r-lib.org/reference/github_actions.html\"\u003eusethis\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eIf so, you can use the \u003ccode\u003eConfig/Needs/website\u003c/code\u003e field in \u003ccode\u003eDESCRIPTION\u003c/code\u003e.Here is an example, in \u003ca href=\"https://github.com/r-lib/pkgdown/blob/7fe9e802df2964d483d0267f1d5a59aa7b3c685d/DESCRIPTION#L64\"\u003epkgdown itself\u003c/a\u003e\u003c/p\u003e\u003cpre\u003e\u003ccode\u003eConfig/Needs/website: usethis, servr\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe idea of custom fields is mentioned in the second edition of the \u003ca href=\"https://r-pkgs.org/Metadata.html#custom-fields\"\u003eR packages book\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eNote that it works for rOpenSci packages, whose documentation websites are \u003ca href=\"/blog/2021/09/03/runiverse-docs/\"\u003ebuilt with R-universe\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven’t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it’s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/11/18/ropensci-news-digest-november-2022/","date_published":"2022-11-18T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/3evd4-ehh48","title":"rOpenSci's Communication Channels: Twitter","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community"],"content_html":"\u003cp\u003eTwitter is one of the preferred social media platforms and networks for the R community and for the data, open science and research communities. Since the beginning of rOpenSci we have used Twitter to connect with our community and other parallel communities, to share what we do, and to be part of conversations around the topics important to our \u003ca href=\"/about/\"\u003emission\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe aim to provide a safe and friendly space for everyone in our community, and this influences how we choose which  spaces we use to interact with our community members.\u003c/p\u003e\u003cp\u003eWe’re therefore concerned about recent changes announced by Twitter (such as a reduction or loss of content moderation, among other things) which may lead to it becoming a less safe and accessible place for our community.\u003c/p\u003e\u003cp\u003eFor the moment, based on internal discussions and \u003ca href=\"https://carpentries.org/blog/2022/11/community-statement-twitter/\"\u003einspired by other communities measures\u003c/a\u003e, we will:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eContinue to post on Twitter to ensure that we connect with as many people in our community as possible.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eContinue to develop our \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003epresence on Mastodon\u003c/a\u003e, the platform to which many of our community members have migrated.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eExplore alternative instances of Mastodon which would allow us to communicate in multiple languages (not only English) and collaborate with sister communities.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFocus more of our communication efforts on our other platforms such as our \u003ca href=\"/news\"\u003enewsletter\u003c/a\u003e, our \u003ca href=\"https://discuss.ropensci.org\"\u003ediscussion forum\u003c/a\u003e and our \u003ca href=\"/blog\"\u003eblog\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eContinue to monitor changes to Twitter to determine whether or not we will continue to use this platform.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eOpen and reproducible science is our passion, and we strongly believe that one of the best ways of promoting these concepts is to ensure our community spaces are safe, accessible, and open; places where discussions and development are diverse and friendly and where many opinions can come together.\u003c/p\u003e\u003cp\u003eIf you have questions, concerns or comments, please contact us by email at \u003cem\u003e\u003ca href=\"mailto:info@ropensci.org\"\u003einfo@ropensci.org\u003c/a\u003e\u003c/em\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/11/16/mastodon-en/","date_published":"2022-11-16T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/7t4w5-nys15","title":"rOpenSci News Digest, October 2022","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2022/10/21/ropensci-news-digest-october-2022\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"ropensci-champions-program-call-for-champions-and-call-for-mentors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-champions-program-call-for-champions-and-call-for-mentors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci Champions Program: call for Champions and call for Mentors\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e is part of a series of activities and projects we are carrying out to ensure our research software serves everyone in our communities.That is why this program focuses on \u003cstrong\u003epeople who belong to groups that are historically and systematically excluded\u003c/strong\u003e from the open software and research software communities and who are interested in contributing to rOpenSci and the broader open source and research software communities.\u003c/p\u003e\u003ch4 id=\"call-for-champions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-champions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for Champions\u003c/h4\u003e\u003cp\u003eIf you are selected as a Champion, over the course of a year you will develop a project, get training, and be mentored. You will also receive a small stipend.\u003c/p\u003e\u003cp\u003eYou can apply until \u003cstrong\u003eNovember 7, 2022\u003c/strong\u003e with this \u003ca href=\"/champions/#how-to-apply\"\u003eform\u003c/a\u003e.  You can read more details in this \u003ca href=\"/blog/2022/09/22/launch-champions-program/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\u003ch4 id=\"call-for-mentors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-mentors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for Mentors\u003c/h4\u003e\u003cp\u003eWe are seeking \u003cstrong\u003ementors\u003c/strong\u003e to support our inaugural cohort of rOpenSci Champions.\u003c/p\u003e\u003cp\u003eMentors will play a vital role in the rOpenSci Champions Program by helping select the first cohort of Champions and advising and inspiring their mentees. Mentors will also \u003cstrong\u003econnect\u003c/strong\u003e their mentees to people, programs, and organizations; \u003cstrong\u003erecommend\u003c/strong\u003e, resources, readings, training, and experiences; and provide \u003cstrong\u003efeedback\u003c/strong\u003e on the mentee\u0026rsquo;s project.\u003c/p\u003e\u003cp\u003e\u003ca href=\"/blog/2022/10/20/mentors-champions-program/\"\u003eLearn the details\u003c/a\u003e and \u003ca href=\"https://airtable.com/shrlrLdQbb4wphosK\"\u003eexpress your interest\u003c/a\u003e by \u003cstrong\u003eMonday November 7, 2022\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eIf you have any questions, please contact our Community Manager by \u003ca href=\"mailto:yabellini@ropensci.org\"\u003eemail\u003c/a\u003e or \u003ca href=\"https://calendly.com/yabellini-ropensci/15min\"\u003ebook a 15 minutes meeting with her\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe will have a \u003ca href=\"/commcalls/oct2022-champions/\"\u003eCommunity Call on October 24th\u003c/a\u003e to explain and explore the benefits of Champions Programs and a \u003ca href=\"/events/coworking-2022-11/\"\u003eCoworking slot on November 1st\u003c/a\u003e to answer any questions you might have about mentoring in this program.\u003c/p\u003e\u003ch3 id=\"introducing-r-universe-power-search\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#introducing-r-universe-power-search\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIntroducing R-universe power search\u003c/h3\u003e\u003cp\u003eEarlier this year we announced \u003ca href=\"https://ropensci.org/blog/2022/03/23/runiverse-search/\"\u003eR-universe search\u003c/a\u003e which lets you easily browse and discover R packages across the various R ecosystems. We have now upgraded the search system to support advanced search queries, to search for particular properties of an R package.\u003c/p\u003e\u003cp\u003eAdvanced search lets you query packages that specifially match a particular author, maintainer, keyword, or topic. But you can also filter based on metadata derived by the build system, for example packages that contain a particular function or dataset, or packages with a particular contributor or dependency.\u003c/p\u003e\u003cp\u003eTo give it a try, simply go to \u003ca href=\"https://r-universe.dev\"\u003ehttps://r-universe.dev\u003c/a\u003e and click the advanced search icon:\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://r-universe.dev/search\"\u003e\u003cimg src=\"/blog/2022/10/21/ropensci-news-digest-october-2022/advanced.png\" alt=\"screenshot of the advanced search box\"\u003e\u003c/a\u003e\u003c/p\u003e\u003ch3 id=\"coworking-sessions-continue\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking-sessions-continue\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking sessions continue!\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2022-11/\"\u003eTuesday, November 1st 9 AM North American Pacific / 16:00 UTC \u003c/a\u003e \u0026ldquo;Champions Program Application Clinic\u0026rdquo; \u003cem\u003eHosted by rOpenSci community manager \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003ePrepare your application for the Champions Program.\u003c/li\u003e\u003cli\u003eTalk to \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina\u003c/a\u003e about the application process.\u003c/li\u003e\u003cli\u003eCowork independently on work related to R. Work on packages that tend to be neglected; What ever you need to get done!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2022-12/\"\u003eTuesday, December 6th, 9 AM Australian Western / 1:00 UTC\u003c/a\u003e \u0026ldquo;Getting started with targets!\u0026rdquo; \u003cem\u003eHosted by community host \u003ca href=\"/author/nicholas-tierney/\"\u003eNick Tierney\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eDive into the world of targets! Do some studying; Start setting it up for some of your projects;\u003c/li\u003e\u003cli\u003eAsk \u003ca href=\"/author/nicholas-tierney/\"\u003eNick\u003c/a\u003e for suggestions how how to get started or tips and tricks;\u003c/li\u003e\u003cli\u003eCowork independently on work related to R. Work on packages that tend to be neglected; What ever you need to get done!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"we-reboot-our-community-calls-\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#we-reboot-our-community-calls-\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWe reboot our Community Calls !\u003c/h3\u003e\u003cp\u003eand we do it with a \u003ca href=\"/commcalls/oct2022-champions/\"\u003emeeting to talk about Mentoring \u0026amp; training program for Scientific Open Source Champions\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eOn this call \u003cem\u003eSantosh Yadav\u003c/em\u003e and \u003cem\u003eEmanuele Bartolesi\u003c/em\u003e will share their experience of being champions in their communities. We will highlight the benefits of being part of a champions program for you and for your community, and what kind of learning, activities, and opportunities an open source community champions program provides. \u003cem\u003eYani\u003c/em\u003e will present the details of our Champion Program and answer all your questions about it.\u003c/p\u003e\u003cp\u003eYou can access all the \u003ca href=\"(/commcalls/oct2022-champions/)\"\u003emeeting details\u003c/a\u003e. We look forward to seeing you!\u003c/p\u003e\u003ch3 id=\"check-out-our-calls-for-new-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#check-out-our-calls-for-new-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCheck out our Calls for new maintainers!\u003c/h3\u003e\u003cp\u003eSome of our packages are looking for new maintainers or co-maintainers, read the \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/\"\u003eblog post presenting them\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following sixteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/gert\" title=\"Simple Git Client for R\"\u003egert\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/gert/releases/tag/v1.9.1\"\u003e\u003ccode\u003ev1.9.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/aorsf\" title=\"Accelerated Oblique Random Survival Forests\"\u003eaorsf\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/aorsf/releases/tag/v0.0.3\"\u003e\u003ccode\u003ev0.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/bibtex\" title=\"Bibtex Parser\"\u003ebibtex\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/bibtex/releases/tag/v0.5.0\"\u003e\u003ccode\u003ev0.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/canaper\" title=\"Categorical Analysis of Neo- And Paleo-Endemism\"\u003ecanaper\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/canaper/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (cff) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v0.3.0\"\u003e\u003ccode\u003ev0.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/datefixR\" title=\"Standardize Dates in Different Formats or with Missing Data\"\u003edatefixR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/datefixR/releases/tag/v1.3.0\"\u003e\u003ccode\u003ev1.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/FedData\" title=\"Functions to Automate Downloading Geospatial Data Available fromSeveral Federated Data Sources\"\u003eFedData\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/FedData/releases/tag/v3.0.0\"\u003e\u003ccode\u003ev3.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/geojsonio\" title=\"Convert Data from and to GeoJSON or TopoJSON\"\u003egeojsonio\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/geojsonio/releases/tag/v0.10.0\"\u003e\u003ccode\u003ev0.10.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osfr\" title=\"Interface to the Open Science Framework (OSF)\"\u003eosfr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osfr/releases/tag/v0.2.9\"\u003e\u003ccode\u003ev0.2.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pdftools\" title=\"Text Extraction, Rendering and Converting of PDF Documents\"\u003epdftools\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/pdftools/releases/tag/v3.2.1\"\u003e\u003ccode\u003ev3.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/qpdf\" title=\"Split, Combine and Compress PDF Files\"\u003eqpdf\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/qpdf/releases/tag/v1.3.0\"\u003e\u003ccode\u003ev1.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/RefManageR\" title=\"Straightforward BibTeX and BibLaTeX Bibliography Management\"\u003eRefManageR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/RefManageR/releases/tag/new\"\u003e\u003ccode\u003enew\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rerddap\" title=\"General Purpose Client for ERDDAP Servers\"\u003ererddap\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rerddap/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Workflows\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/0.13.5\"\u003e\u003ccode\u003e0.13.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tidyhydat\" title=\"Extract and Tidy Canadian Hydrometric Data\"\u003etidyhydat\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidyhydat/releases/tag/0.5.7\"\u003e\u003ccode\u003e0.5.7\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/tidytags\" title=\"Importing and Analyzing Twitter Data Collected with Twitter Archiving Google Sheets\"\u003etidytags\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidytags/releases/tag/v1.0.3\"\u003e\u003ccode\u003ev1.0.3\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are twelve recently closed and active submissions and 3 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román Palacios\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSix at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/535\"\u003edaiquiri\u003c/a\u003e, Data Quality Reporting for Temporal Datasets. Submitted by \u003ca href=\"https://github.com/phuongquan\"\u003ePhuong Quan\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/524\"\u003ehudr\u003c/a\u003e, A R interface for accessing HUD (US Department of Housing and Urban Development) APIs. Submitted by \u003ca href=\"https://github.com/etam4260/etam4260\"\u003eEmmet Tam\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/535\"\u003edaiquiri\u003c/a\u003e, Data Quality Reporting for Temporal Datasets. Submitted by \u003ca href=\"https://github.com/phuongquan\"\u003ePhuong Quan\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/554\"\u003edynamite\u003c/a\u003e, Bayesian Modeling and Causal Inference for Multivariate. Submitted by \u003ca href=\"http://users.jyu.fi/~santikka/\"\u003eSanttu Tikka\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/551\"\u003estochLAB\u003c/a\u003e, Stochastic Collision Risk Model. Submitted by \u003ca href=\"http://www.blackbawks.net\"\u003eGrant\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"http://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/556\"\u003edfms\u003c/a\u003e, Dynamic Factor Models. Submitted by \u003ca href=\"https://github.com/SebKrantz\"\u003eSebastian Krantz\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/09/22/launch-champions-program\"\u003eAnnouncing the rOpenSci Champions Program!\u003c/a\u003e by Yanina Bellini Saibene. We are thrilled to launch our Champions Program pilot.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/09/22/launch-champions-program-es\"\u003e¡Anunciamos el programa de Campeones y Campeonas de rOpenSci!\u003c/a\u003e by Yanina Bellini Saibene. ¡Estamos muy felices de realizar el lanzamiento nuestro programa de Campeones y Campeonas.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package\"\u003eMaintain or Co-Maintain an rOpenSci Package!\u003c/a\u003e by Maëlle Salmon, and Steffi LaZerte. A list of packages who need your help, and a list of reasons why to help.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/10/19/censo2017-one-year-after\"\u003eInteresting Uses of censo2017 a Year After Publishing\u003c/a\u003e by Pachá (aka Mauricio Vargas Sepúlveda). Chilean census tables at a glance.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/10/19/censo2017-one-year-after-es\"\u003eUsos interesantes de censo2017 un año después de su publicación\u003c/a\u003e by Pachá (aka Mauricio Vargas Sepúlveda). Tablas del censo chileno al instante.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/10/20/mentors-champions-program\"\u003eBecome a Mentor for rOpenSci Champions!\u003c/a\u003e by Yanina Bellini Saibene. rOpenSci is seeking mentors to support our inaugural cohort of rOpenSci Champions. Could you offer insight and advice to our selected Champions? Learn the details and express your interest.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eTwo use cases of our packages and resources have been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/using-a-targets-pipeline-to-query-data-from-the-water-quality-portal/3140\"\u003eUsing a targets pipeline to query data from the Water Quality Portal\u003c/a\u003e. Reported by Julie.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/backing-up-github-organisation-with-gitcellar/3153\"\u003eBacking up GitHub organisation with gitcellar\u003c/a\u003e. Reported by Hugo Gruson.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eFollowing our annual maintainer survey, we identified packages in need of a new maintainer or of co-maintainer.Read more about them, and why to maintain or co-maintain a package, in our dedicated blog post \u003ca href=\"/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/\"\u003e\u0026ldquo;Maintain or Co-Maintain an rOpenSci Package!\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"are-you-ready-to-develop-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#are-you-ready-to-develop-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAre you ready to develop packages?\u003c/h3\u003e\u003cp\u003eIf the question applies to \u003cem\u003eyou\u003c/em\u003e as an R user, know that in \u003ca href=\"https://github.com/susjoh/fibonacci\"\u003eSusan Johnston’s wise words\u003c/a\u003e, if you can open R, if you can install a package, if you can write functions or learn how to write functions, you can write an R package! If you\u0026rsquo;re still not sure please refer to the resources listed in our \u003ca href=\"https://devguide.ropensci.org/building.html#learning-about-package-development\"\u003edev guide\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eOn the other hand, if this question applies to \u003cem\u003eyour machine\u003c/em\u003e, you might use the following functions to find out:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://devtools.r-lib.org/reference/dev_sitrep.html\"\u003e\u003ccode\u003edevtools::dev_sitrep()\u003c/code\u003e\u003c/a\u003e;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://r-lib.github.io/pkgbuild/reference/has_compiler.html\"\u003e\u003ccode\u003edevtools::has_devel()\u003c/code\u003e\u003c/a\u003e;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://usethis.r-lib.org/reference/git_sitrep.html\"\u003e\u003ccode\u003eusethis::git_sitrep()\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThese functions can also be run at any point during your package development work, even once you\u0026rsquo;re used to such work, as they might help you understand why something \u0026ldquo;weird\u0026rdquo; is happening.\u003c/p\u003e\u003ch3 id=\"how-to-run-code-during-package-installation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-run-code-during-package-installation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to run code during package installation?\u003c/h3\u003e\u003cp\u003eIf for any reason you ever need to run code during the installation of your package, know that it is possible as \u003ca href=\"https://community.rstudio.com/t/is-it-possible-to-run-a-command-during-package-install/147192/4\"\u003enoted by Gábor Csárdi on the RStudio community forum\u003c/a\u003e.The example given, from \u003ca href=\"https://github.com/tidyverse/purrr/blob/f67f77134cd258fced27834595c4091f49be62e1/configure\"\u003epurrr\u003c/a\u003e, consists in adding a \u003ca href=\"https://github.com/tidyverse/purrr/blob/f67f77134cd258fced27834595c4091f49be62e1/inst/tools/examples.R\"\u003enote before examples for older versions of R\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eNow if your goal is to install an external software, as noted in the forum answer it might be better to provide a function for the users to install the software.Then you could also provide a sitrep function for checking the installation, like the sitrep functions mentioned in the previous tip!\u003c/p\u003e\u003ch3 id=\"optional-suggests-dependency-that-has-been-archived-on-cran\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#optional-suggests-dependency-that-has-been-archived-on-cran\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOptional (Suggests) dependency that has been archived on CRAN\u003c/h3\u003e\u003cp\u003eAn interesting challenge reported on the \u003ca href=\"https://discuss.ropensci.org/t/optional-suggests-dependency-that-has-been-archived-on-cran/3071\"\u003erOpenSci forum\u003c/a\u003e: can a package on CRAN depend on a package that has been archived on CRAN?\u003ca href=\"https://jeffrey-hanson.com/\"\u003eJeffrey Hanson\u003c/a\u003e wrote, after successfully updating the \u003ca href=\"https://cran.r-project.org/web/packages/prioritizr/index.html\"\u003eprioritizr\u003c/a\u003e package on CRAN despite its (Suggests) depending on \u003ca href=\"https://cran.r-project.org/web/packages/cplexAPI/index.html\"\u003ecplexAPI\u003c/a\u003e,\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eJust to follow up in case this helps anyone else, it would appear that it’s fine to have archived packages listed as Suggests for CRAN submission - as long as conditions for non-CRAN packages are met (e.g., listing URL for package install in the DESCRIPTION file).\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThanks to \u003ca href=\"https://llrs.dev/\"\u003eLluís Revilla Sancho\u003c/a\u003e for his insights \u003ca href=\"https://discuss.ropensci.org/t/optional-suggests-dependency-that-has-been-archived-on-cran/3071/3\"\u003ein that same thread\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/10/21/ropensci-news-digest-october-2022/","date_published":"2022-10-21T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/hakqe-9nc10","title":"Become a Mentor for rOpenSci Champions!","language":"en","authors":[{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","help","diversity","champions program","welcome"],"content_html":"\u003ch2 id=\"ropensci-is-seeking-mentors-to-support-our-inaugural-cohort-of-ropensci-champions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-is-seeking-mentors-to-support-our-inaugural-cohort-of-ropensci-champions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci is seeking mentors to support our inaugural cohort of rOpenSci Champions!\u003c/h2\u003e\u003cp\u003eThe \u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e is for \u003cem\u003epeople from historically and systematically excluded groups\u003c/em\u003e who are interested in contributing to rOpenSci and the broader ecosystem of open source and open science communities. After receiving training, mentors will work with Champions to develop their project, which can be one of the following options:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eCreate a new package;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eGo through the review process with an R package they have already developed;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eServe as a reviewer for the rOpenSci software peer review system.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eMentors may also support Champions with delivering other activities including: giving a talk, writing blog posts, and teaching other community members.\u003c/p\u003e\u003ch3 id=\"role-description\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#role-description\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRole description\u003c/h3\u003e\u003cp\u003eMentors will play a vital role in the rOpenSci Champions Program by helping select the \u003ca href=\"/blog/2022/09/22/launch-champions-program/#how-to-apply\"\u003efirst cohort of Champions\u003c/a\u003e and advising and inspiring their mentees. Mentors will also \u003cstrong\u003econnect\u003c/strong\u003e their mentees to people, programs, and organizations; \u003cstrong\u003erecommend\u003c/strong\u003e, resources, readings, training, and experiences; and provide \u003cstrong\u003efeedback\u003c/strong\u003e on the mentee\u0026rsquo;s project.\u003c/p\u003e\u003cp\u003eWe are seeking mentors from the rOpenSci community who have:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eDemonstrated an understanding and ability to work openly and collaboratively;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe willingness to guide and teach others;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003ePrevious experience with any of the following:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eDeveloping, maintaining or contributing to any rOpenSci package or package which has gone through rOpenSci review, or\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eParticipating in the rOpenSci review process, or\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003ePackage development and/or peer code review.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eMentors will gain mentoring experience and skills, be acknowledged on the rOpenSci website and social media channels, and make new connections across the Champions\u0026rsquo; networks. By mentoring our selected Champions and helping to shape this program by providing feedback on this pilot year, mentors will also be giving back to the rOpenSci community in a great and meaningful way!\u003c/p\u003e\u003ch3 id=\"expectations\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#expectations\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExpectations\u003c/h3\u003e\u003cp\u003eThe total time commitment is expected to be approximately 1-2 hours per month from November 2022 - December 2023 to complete the following tentative program timeline.\u003c/p\u003e\u003ctable\u003e\t\u003cthead\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003cth\u003eDate\u003c/th\u003e\t\t\t\t\t\u003cth\u003eEvent\u003c/th\u003e\t\t\t\t\t\u003cth\u003eDetail\u003c/th\u003e\t\t\t\t\t\u003cth\u003eDuration\u003c/th\u003e\t\t\t\u003c/tr\u003e\t\u003c/thead\u003e\t\u003ctbody\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eNovember, 2022\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eSelect Champions\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eReview, rank and select 1-2 reviewed projects to mentor.\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e2 h\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eDecember 2022\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eKick-off event\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eLearn about the program, review the program expectations, and address questions. Meet mentees.\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e1.5 h\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eFebruary 2023\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eTraining\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eHow to mentor and logistics on the program.\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e1 h\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eMarch 2023\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCohort meeting: Presentation of projects\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eChampions give 5 minutes presentations on their project (package review or development) and get feedback.\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e1.5 h\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eMarch-July 2023\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eMeeting with mentee\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eProvide feedback and guidance on mentee project.  Connect with other experts, mentors or community members. Recommend training, resources for the mentee project.\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e1 meeting per month 0.5 h\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eJun 2023\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCohort meeting: Reflections on projects\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eChampions will be invited to share takeaways from their projects with the cohort.\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e1.5 h\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eAugust - November 2023\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eMeeting with mentee\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eProvide feedback and guidance on mentee project.  Connect with other experts, mentors or community members. Recommend training, resources for the mentee project.\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e1 meeting per month 0.5 h\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eSeptember 2023\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCohort meeting: Reflections on events\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eChampions will be invited to share takeaways from their events with the cohort.\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e1.5 h\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eDecember 2023\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCohort meeting: Reflections on program\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eMentors will be invited to share takeaways from the program and help to define future roles for Champions.\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e1.5 h\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\u003c/tbody\u003e\u003c/table\u003e\u003ch3 id=\"benefits-of-being-a-mentor\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#benefits-of-being-a-mentor\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBenefits of being a mentor\u003c/h3\u003e\u003cp\u003eBy becoming an rOpenSci mentor you will:\u003c/p\u003e\u003cul\u003e\u003cli\u003eEmpower members of historically and systematically excluded groups by sharing your expertise with others;\u003c/li\u003e\u003cli\u003eConnect with other mentors and with the champion community, expanding your professional network;\u003c/li\u003e\u003cli\u003eGain mentoring experience and skills;\u003c/li\u003e\u003cli\u003eGain exposure, recognition and acknowledgment for your work as a mentor in rOpenSci spaces (website, social media, events)\u003c/li\u003e\u003cli\u003eHelp rOpenSci and the wider R community grow;\u003c/li\u003e\u003cli\u003eCo-develop this program and other rOpenSci projects by sharing feedback;\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eMentors will participate in a training about mentoring and program logistics as part of their onboarding process and have the support of the Community Manager throughout the program.\u003c/p\u003e\u003ch3 id=\"how-to-apply\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-apply\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to apply\u003c/h3\u003e\u003cp\u003ePlease, fill out the \u003ca href=\"https://airtable.com/shrlrLdQbb4wphosK\"\u003eapplication form\u003c/a\u003e (\u003ca href=\"/champions/files/mentors_champions_template\"\u003ethis template shows the information we will require\u003c/a\u003e) by \u003cstrong\u003eMonday November 7, 2022\u003c/strong\u003e. The application forms have to be completed \u003cem\u003ein English\u003c/em\u003e.\u003c/p\u003e\u003ch2 id=\"do-you-have-any-questions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#do-you-have-any-questions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDo you have any questions?\u003c/h2\u003e\u003cp\u003ePlease, contact our Community Manager by \u003ca href=\"mailto:yabellini@ropensci.org\"\u003eemail\u003c/a\u003e or \u003ca href=\"https://calendly.com/yabellini-ropensci/15min\"\u003ebook a 15 minutes meeting with her\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe will have a \u003ca href=\"/commcalls/oct2022-champions/\"\u003eCommunity Call on October 24th\u003c/a\u003eto explain and explore the benefits of Champions Programs and a \u003ca href=\"/events/coworking-2022-11/\"\u003eCoworking slot on November 1st\u003c/a\u003e to answer any questions you might have about mentoring in this program.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/10/20/mentors-champions-program/","date_published":"2022-10-20T00:00:01-07:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/7xhqt-zzr83","title":"Interesting Uses of censo2017 a Year After Publishing","language":"en","authors":[{"name":"Mauricio Vargas Sepúlveda","url":"https://ropensci.org/author/mauricio-vargas-sep%C3%BAlveda/","avatar":"https://github.com/pachadotdev.png","_role":["author"]}],"tags":["open-science","tech notes","reproducible-research","data-access","data-extraction","geospatial","community","software-peer-review","censo2017"],"content_html":"\u003ch2 id=\"summary\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#summary\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSummary\u003c/h2\u003e\u003cp\u003eThis post is about the surprising uses I’ve noticed and the questionsabout the \u003ca href=\"https://docs.ropensci.org/censo2017\"\u003ecenso2017\u003c/a\u003e R package, a tool foraccessing the Chilean census 2017 data, I’ve gotten since it was peer-reviewedthrough rOpenSci one year ago. The \u003ca href=\"/blog/2021/07/27/censo2017/\"\u003eoriginalpost\u003c/a\u003e about thepackage one year ago didn’t cover the different examples I present here,including a Python port of the R package.\u003c/p\u003e\u003ch2 id=\"organizing-the-census-data\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#organizing-the-census-data\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOrganizing the census data\u003c/h2\u003e\u003cp\u003e\u003ca href=\"/blog/2021/07/27/censo2017/\"\u003eThree years ago\u003c/a\u003e, I had to complete an assignment that required me toextract data from Windows-only software in DVD format, which got verycomplicated.\u003c/p\u003e\u003cp\u003eI needed to access REDATAM files and obtain a few population summarieswith specific software for that format. To my surprise, the task gotincredibly challenging, and I exported the data to SQL for moreaccessible data extraction.\u003c/p\u003e\u003cp\u003eWhat I initially organized in PostgreSQL, ended up being organized in alocal (embedded) database, which is more convenient for end-users andcan be installed with two lines of code.\u003c/p\u003e\u003cp\u003eInstallation in R:\u003c/p\u003e\u003cpre\u003e\u003ccode\u003eremotes::install_github(\u0026quot;ropensci/censo2017\u0026quot;)censo2017::censo_descargar()\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eInstallation in Python:\u003c/p\u003e\u003cpre\u003e\u003ccode\u003epip install git+https://github.com/pachadotdev/censo2017python.git#egg=censo2017import censo2017censo2017.descargar()\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"unexpected-use-i-substandard-housing-in-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#unexpected-use-i-substandard-housing-in-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUnexpected use I: Substandard housing (in R)\u003c/h2\u003e\u003cp\u003eWe can use the census data to determine where substandard housing is common,leading to valuable insights for public policy. That is something I never contemplated whencreating the software.\u003c/p\u003e\u003cp\u003eWhat kind of housing information can we look for in the census? To keepit simple, let’s explore the \u003ccode\u003ep01\u003c/code\u003e variable, which we can look at in the\u003ccode\u003evariables_codificacion\u003c/code\u003e, a table that I created to organize my work.\u003c/p\u003e\u003cpre\u003e\u003ccode\u003elibrary(censo2017)library(dplyr)con \u0026lt;- censo_conectar()tbl(con, \u0026quot;variables\u0026quot;) %\u0026gt;%   filter(variable == \u0026quot;p01\u0026quot;) %\u0026gt;%   collect() %\u0026gt;%   kable()\u003c/code\u003e\u003c/pre\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr class=\"header\"\u003e\u003cth style=\"text-align: left;\"\u003etabla\u003c/th\u003e\u003cth style=\"text-align: left;\"\u003evariable\u003c/th\u003e\u003cth style=\"text-align: left;\"\u003edescripcion\u003c/th\u003e\u003cth style=\"text-align: left;\"\u003etipo\u003c/th\u003e\u003cth style=\"text-align: left;\"\u003erango\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: left;\"\u003eviviendas\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003ep01\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eTipo de Vivienda\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003einteger\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003e1 - 10\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cpre\u003e\u003ccode\u003etbl(con, \u0026quot;variables_codificacion\u0026quot;) %\u0026gt;%   filter(variable == \u0026quot;p01\u0026quot;) %\u0026gt;%   select(valor, descripcion) %\u0026gt;%   collect() %\u0026gt;%   kable()\u003c/code\u003e\u003c/pre\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr class=\"header\"\u003e\u003cth style=\"text-align: right;\"\u003evalor\u003c/th\u003e\u003cth style=\"text-align: left;\"\u003edescripcion\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e1\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eCasa\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e2\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eDepartamento en Edificio\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e3\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eVivienda Tradicional Indígena (Ruka, PaePae u Otras)\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e4\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003ePieza en Casa Antigua o enConventillo\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e5\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eMediagua, Mejora, Rancho o Choza\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e6\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eMóvil (Carpa, Casa Rodante o Similar)\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e7\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eOtro Tipo de Vivienda Particular\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e8\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eVivienda Colectiva\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e9\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eOperativo Personas en Tránsito (No EsVivienda)\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e10\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eOperativo Calle (No Es Vivienda)\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e11\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eValor Perdido\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e0\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eNo Aplica\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003eThe variable refers to “Tipo de Vivienda” (Housing Type) and containsten numeric values that mean:\u003c/p\u003e\u003ctable\u003e\u003ccolgroup\u003e\u003ccol style=\"width: 13%\" /\u003e\u003ccol style=\"width: 86%\" /\u003e\u003c/colgroup\u003e\u003cthead\u003e\u003ctr class=\"header\"\u003e\u003cth style=\"text-align: right;\"\u003eValue\u003c/th\u003e\u003cth style=\"text-align: left;\"\u003eDescription\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e1\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eHouse\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e2\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eApartment Building\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e3\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eTraditional Indigenous Dwelling (Ruka\u003cahref=\"#fn1\" class=\"footnote-ref\" id=\"fnref1\"role=\"doc-noteref\"\u003e\u003csup\u003e1\u003c/sup\u003e\u003c/a\u003e or Others)\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e4\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eBedroom in an Old House or in aConventillo\u003ca href=\"#fn2\" class=\"footnote-ref\" id=\"fnref2\"role=\"doc-noteref\"\u003e\u003csup\u003e2\u003c/sup\u003e\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e5\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eHalf Hut, Improvement, Ranch or Shack\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e6\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eMobile (Tent, Mobile Home or Similar)\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e7\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eOther Type of Private Housing\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e8\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eCollective Housing\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e9\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003ePersons in Transit Operative (Not aDwelling)\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e10\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eStreet Operative (Not Housing)\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e11\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eMissing Value\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e0\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eNot applicable\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003csection class=\"footnotes footnotes-end-of-document\"role=\"doc-endnotes\"\u003e\u003chr /\u003e\u003col\u003e\u003cli id=\"fn1\" role=\"doc-endnote\"\u003e\u003cp\u003etraditional Mapuche house type\u003cahref=\"#fnref1\" class=\"footnote-back\" role=\"doc-backlink\"\u003e↩︎\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn2\" role=\"doc-endnote\"\u003e\u003cp\u003eA building designed to house as many people aspossible in a small space at a low cost.\u003ca href=\"#fnref2\" class=\"footnote-back\"role=\"doc-backlink\"\u003e↩︎\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/section\u003eIn this example, I consider dwellings coded as 5 (Half Hut, Improvement, Ranch or Shack / Mediagua, Mejora, Rancho o Choza) as substandard.Because of the census data organization, to get the share of these typesof housing per region, we need to:\u003col\u003e\u003cli\u003eCreate the code for each political division (i.e., region) from thegeographical code in the zones table.\u003c/li\u003e\u003cli\u003eJoin the zones (“zonas”) table with the households (“viviendas”)table to match each unit to its location (i.e., household ID 100 isin the “Los Ríos (14th)” region).\u003c/li\u003e\u003cli\u003eGroup by \u003ccode\u003ep01\u003c/code\u003e and count the number of units.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eFor example, if we want to look at the 14th region specifically, one way to do this could be:\u003c/p\u003e\u003cpre\u003e\u003ccode\u003etbl(con, \u0026quot;zonas\u0026quot;) %\u0026gt;%   mutate(region = str_sub(geocodigo, 1, 2)) %\u0026gt;%   filter(region == 14) %\u0026gt;%     inner_join(tbl(con, \u0026quot;viviendas\u0026quot;)) %\u0026gt;%     group_by(p01) %\u0026gt;%   count() %\u0026gt;%     collect() %\u0026gt;%   kable()\u003c/code\u003e\u003c/pre\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr class=\"header\"\u003e\u003cth style=\"text-align: right;\"\u003ep01\u003c/th\u003e\u003cth style=\"text-align: right;\"\u003en\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e1\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e144081\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e2\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e4793\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e3\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e44\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e4\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e494\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e5\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e2187\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e6\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e35\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e7\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e1875\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e8\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e467\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e9\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e6\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e10\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e8\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003eWe can improve this a little bit with an optional join and a step toextract the percentages:\u003c/p\u003e\u003cpre\u003e\u003ccode\u003etbl(con, \u0026quot;zonas\u0026quot;) %\u0026gt;%   mutate(region = str_sub(geocodigo, 1, 2)) %\u0026gt;%   filter(region == \u0026quot;14\u0026quot;) %\u0026gt;%     inner_join(tbl(con, \u0026quot;viviendas\u0026quot;)) %\u0026gt;%     group_by(p01) %\u0026gt;%   count() %\u0026gt;%     left_join(    tbl(con, \u0026quot;variables_codificacion\u0026quot;) %\u0026gt;%       filter(variable == \u0026quot;p01\u0026quot;) %\u0026gt;%       select(p01 = valor, p01_desc = descripcion)  ) %\u0026gt;%   select(p01, p01_desc, n) %\u0026gt;%     arrange(-n) %\u0026gt;%   ungroup() %\u0026gt;%   mutate(p = round(100 * n / sum(n), 2)) %\u0026gt;%     collect() %\u0026gt;%   kable()\u003c/code\u003e\u003c/pre\u003e\u003ctable\u003e\u003ccolgroup\u003e\u003ccol style=\"width: 5%\" /\u003e\u003ccol style=\"width: 76%\" /\u003e\u003ccol style=\"width: 9%\" /\u003e\u003ccol style=\"width: 8%\" /\u003e\u003c/colgroup\u003e\u003cthead\u003e\u003ctr class=\"header\"\u003e\u003cth style=\"text-align: right;\"\u003ep01\u003c/th\u003e\u003cth style=\"text-align: left;\"\u003ep01_desc\u003c/th\u003e\u003cth style=\"text-align: right;\"\u003en\u003c/th\u003e\u003cth style=\"text-align: right;\"\u003ep\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e1\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eCasa\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e144081\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e93.57\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e2\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eDepartamento en Edificio\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e4793\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e3.11\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e5\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eMediagua, Mejora, Rancho o Choza\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e2187\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e1.42\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e7\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eOtro Tipo de Vivienda Particular\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e1875\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e1.22\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e4\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003ePieza en Casa Antigua o enConventillo\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e494\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.32\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e8\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eVivienda Colectiva\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e467\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.30\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e3\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eVivienda Tradicional Indígena (Ruka, PaePae u Otras)\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e44\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.03\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e6\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eMóvil (Carpa, Casa Rodante o Similar)\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e35\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.02\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e10\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eOperativo Calle (No Es Vivienda)\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e8\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.01\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e9\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eOperativo Personas en Tránsito (No EsVivienda)\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e6\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.00\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003eFor the 14th region, housing quality seems not to be a problem. What ifwe wonder for the number of people living in each of these unit types?This would need additional steps to match people (“personas”) to homes(“hogares”), and homes to households.\u003c/p\u003e\u003cpre\u003e\u003ccode\u003etbl(con, \u0026quot;zonas\u0026quot;) %\u0026gt;%   mutate(region = str_sub(geocodigo, 1, 2)) %\u0026gt;%   filter(region == \u0026quot;14\u0026quot;) %\u0026gt;%     inner_join(tbl(con, \u0026quot;viviendas\u0026quot;)) %\u0026gt;%     inner_join(tbl(con, \u0026quot;hogares\u0026quot;)) %\u0026gt;%   inner_join(tbl(con, \u0026quot;personas\u0026quot;)) %\u0026gt;%     group_by(p01) %\u0026gt;%   count() %\u0026gt;%     left_join(    tbl(con, \u0026quot;variables_codificacion\u0026quot;) %\u0026gt;%       filter(variable == \u0026quot;p01\u0026quot;) %\u0026gt;%       select(p01 = valor, p01_desc = descripcion)  ) %\u0026gt;%   select(p01, p01_desc, n) %\u0026gt;%     arrange(-n) %\u0026gt;%   ungroup() %\u0026gt;%   mutate(p = round(100 * n / sum(n), 2)) %\u0026gt;%     collect() %\u0026gt;%   kable()\u003c/code\u003e\u003c/pre\u003e\u003ctable\u003e\u003ccolgroup\u003e\u003ccol style=\"width: 5%\" /\u003e\u003ccol style=\"width: 76%\" /\u003e\u003ccol style=\"width: 9%\" /\u003e\u003ccol style=\"width: 8%\" /\u003e\u003c/colgroup\u003e\u003cthead\u003e\u003ctr class=\"header\"\u003e\u003cth style=\"text-align: right;\"\u003ep01\u003c/th\u003e\u003cth style=\"text-align: left;\"\u003ep01_desc\u003c/th\u003e\u003cth style=\"text-align: right;\"\u003en\u003c/th\u003e\u003cth style=\"text-align: right;\"\u003ep\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e1\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eCasa\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e359343\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e93.38\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e2\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eDepartamento en Edificio\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e9139\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e2.37\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e8\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eVivienda Colectiva\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e7905\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e2.05\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e5\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eMediagua, Mejora, Rancho o Choza\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e3980\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e1.03\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e7\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eOtro Tipo de Vivienda Particular\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e3008\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.78\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e4\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003ePieza en Casa Antigua o enConventillo\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e727\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.19\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e9\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eOperativo Personas en Tránsito (No EsVivienda)\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e494\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.13\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e3\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eVivienda Tradicional Indígena (Ruka, PaePae u Otras)\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e96\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.02\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e10\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eOperativo Calle (No Es Vivienda)\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e84\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.02\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e6\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eMóvil (Carpa, Casa Rodante o Similar)\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e61\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.02\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003eHow does the previous result compare with the capitol (13th region)?\u003c/p\u003e\u003cpre\u003e\u003ccode\u003etbl(con, \u0026quot;zonas\u0026quot;) %\u0026gt;%   mutate(region = str_sub(geocodigo, 1, 2)) %\u0026gt;%   filter(region == \u0026quot;13\u0026quot;) %\u0026gt;%     inner_join(tbl(con, \u0026quot;viviendas\u0026quot;)) %\u0026gt;%     inner_join(tbl(con, \u0026quot;hogares\u0026quot;)) %\u0026gt;%   inner_join(tbl(con, \u0026quot;personas\u0026quot;)) %\u0026gt;%     group_by(p01) %\u0026gt;%   count() %\u0026gt;%     left_join(    tbl(con, \u0026quot;variables_codificacion\u0026quot;) %\u0026gt;%       filter(variable == \u0026quot;p01\u0026quot;) %\u0026gt;%       select(p01 = valor, p01_desc = descripcion)  ) %\u0026gt;%   select(p01, p01_desc, n) %\u0026gt;%     arrange(-n) %\u0026gt;%   ungroup() %\u0026gt;%   mutate(p = round(100 * n / sum(n), 2)) %\u0026gt;%     collect() %\u0026gt;%   kable()\u003c/code\u003e\u003c/pre\u003e\u003ctable\u003e\u003ccolgroup\u003e\u003ccol style=\"width: 5%\" /\u003e\u003ccol style=\"width: 75%\" /\u003e\u003ccol style=\"width: 11%\" /\u003e\u003ccol style=\"width: 8%\" /\u003e\u003c/colgroup\u003e\u003cthead\u003e\u003ctr class=\"header\"\u003e\u003cth style=\"text-align: right;\"\u003ep01\u003c/th\u003e\u003cth style=\"text-align: left;\"\u003ep01_desc\u003c/th\u003e\u003cth style=\"text-align: right;\"\u003en\u003c/th\u003e\u003cth style=\"text-align: right;\"\u003ep\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e1\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eCasa\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e5265416\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e74.03\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e2\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eDepartamento en Edificio\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e1613157\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e22.68\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e8\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eVivienda Colectiva\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e78763\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e1.11\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e4\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003ePieza en Casa Antigua o enConventillo\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e72142\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e1.01\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e5\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eMediagua, Mejora, Rancho o Choza\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e52710\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.74\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e7\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eOtro Tipo de Vivienda Particular\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e17335\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.24\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e9\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eOperativo Personas en Tránsito (No EsVivienda)\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e9113\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.13\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e10\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eOperativo Calle (No Es Vivienda)\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e2740\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.04\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e3\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eVivienda Tradicional Indígena (Ruka, PaePae u Otras)\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e865\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.01\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e6\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eMóvil (Carpa, Casa Rodante o Similar)\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e567\u003c/td\u003e\u003ctd style=\"text-align: right;\"\u003e0.01\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003eFrom the previous summarised data we can see that in the capitol, 52,710individuals are living in substandard housing(Mediagua, Mejora, Rancho o Choza).\u003c/p\u003e\u003cp\u003eWe shouldn’t forget to close the database connection.\u003c/p\u003e\u003cpre\u003e\u003ccode\u003ecenso_desconectar()\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"unexpected-use-ii-water-source-in-python\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#unexpected-use-ii-water-source-in-python\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUnexpected use II: Water source (in Python)\u003c/h2\u003e\u003cp\u003eThe motivation for this example is to show that the goal of organizing thecensus data was not to promote R, but to show some of the benefits of having thedata organized in an open format, regardless of the programming language usedfor the analysis. For me it\u0026rsquo;s easier to complete this example in R, but Iwanted to include those using this census data and Python.\u003c/p\u003e\u003cp\u003eThe variable for the water source is \u003ccode\u003ep05\u003c/code\u003e. The analysis is very similarto the previous one, and we start by looking at its description. This particularexample is relevant, as it allows to quantify the number of people that mightbe exposed to water contamination in a certain area.\u003c/p\u003e\u003cpre\u003e\u003ccode\u003eimport censo2017import duckdbcon = duckdb.connect(database = censo2017.archivo_sql())con.execute(\u0026quot;SELECT * FROM variables_codificacion WHERE variable = 'p05'\u0026quot;).df()##        tabla variable  valor                                descripcion## 0  viviendas      p05      1                                Red Pública## 1  viviendas      p05      2                               Pozo o Noria## 2  viviendas      p05      3                              Camión Aljibe## 3  viviendas      p05      4  Río, Vertiente, Estero, Canal, Lago, Etc.## 4  viviendas      p05     99                              Valor Perdido## 5  viviendas      p05     98                                  No Aplica\u003c/code\u003e\u003c/pre\u003e\u003ctable\u003e\u003cthead\u003e\u003ctr class=\"header\"\u003e\u003cth style=\"text-align: right;\"\u003eValue\u003c/th\u003e\u003cth style=\"text-align: left;\"\u003eDescription\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e1\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003ePublic Network\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e2\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eWell or Noria\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e3\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eCistern Truck\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e4\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eRiver, Stream, Estuary, Canal, Lake,Etc.\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"odd\"\u003e\u003ctd style=\"text-align: right;\"\u003e99\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eMissing Value\u003c/td\u003e\u003c/tr\u003e\u003ctr class=\"even\"\u003e\u003ctd style=\"text-align: right;\"\u003e98\u003c/td\u003e\u003ctd style=\"text-align: left;\"\u003eNot Applicable\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003eBy using this variable, we can know the number of people for each watersource in the same way as the previous case.\u003c/p\u003e\u003cpre\u003e\u003ccode\u003econ.execute(\u0026quot;\u0026quot;\u0026quot;SELECT \u0026quot;p05\u0026quot;, \u0026quot;p05_desc\u0026quot;, \u0026quot;n\u0026quot;,  ROUND((100.0 * \u0026quot;n\u0026quot;) / SUM(\u0026quot;n\u0026quot;) OVER (), CAST(ROUND(2.0, 0) AS INTEGER)) AS \u0026quot;p\u0026quot;FROM (  SELECT \u0026quot;LHS\u0026quot;.\u0026quot;p05\u0026quot; AS \u0026quot;p05\u0026quot;, \u0026quot;n\u0026quot;, \u0026quot;p05_desc\u0026quot;  FROM (    SELECT \u0026quot;p05\u0026quot;, COUNT(*) AS \u0026quot;n\u0026quot;    FROM (      SELECT *, \u0026quot;LHS\u0026quot;.\u0026quot;hogar_ref_id\u0026quot; AS \u0026quot;hogar_ref_id\u0026quot;      FROM (        SELECT *, \u0026quot;LHS\u0026quot;.\u0026quot;vivienda_ref_id\u0026quot; AS \u0026quot;vivienda_ref_id\u0026quot;        FROM (          SELECT *, \u0026quot;LHS\u0026quot;.\u0026quot;zonaloc_ref_id\u0026quot; AS \u0026quot;zonaloc_ref_id\u0026quot;          FROM (            SELECT *            FROM (              SELECT *, SUBSTR(\u0026quot;geocodigo\u0026quot;, 1, 2) AS \u0026quot;region\u0026quot;              FROM \u0026quot;zonas\u0026quot;            ) \u0026quot;q01\u0026quot;            WHERE (\u0026quot;region\u0026quot; = '14')          ) \u0026quot;LHS\u0026quot;          INNER JOIN \u0026quot;viviendas\u0026quot; AS \u0026quot;RHS\u0026quot;            ON (\u0026quot;LHS\u0026quot;.\u0026quot;zonaloc_ref_id\u0026quot; = \u0026quot;RHS\u0026quot;.\u0026quot;zonaloc_ref_id\u0026quot;)        ) \u0026quot;LHS\u0026quot;        INNER JOIN \u0026quot;hogares\u0026quot; AS \u0026quot;RHS\u0026quot;          ON (\u0026quot;LHS\u0026quot;.\u0026quot;vivienda_ref_id\u0026quot; = \u0026quot;RHS\u0026quot;.\u0026quot;vivienda_ref_id\u0026quot;)      ) \u0026quot;LHS\u0026quot;      INNER JOIN \u0026quot;personas\u0026quot; AS \u0026quot;RHS\u0026quot;        ON (\u0026quot;LHS\u0026quot;.\u0026quot;hogar_ref_id\u0026quot; = \u0026quot;RHS\u0026quot;.\u0026quot;hogar_ref_id\u0026quot;)    ) \u0026quot;q02\u0026quot;    GROUP BY \u0026quot;p05\u0026quot;  ) \u0026quot;LHS\u0026quot;  LEFT JOIN (    SELECT \u0026quot;valor\u0026quot; AS \u0026quot;p05\u0026quot;, \u0026quot;descripcion\u0026quot; AS \u0026quot;p05_desc\u0026quot;    FROM \u0026quot;variables_codificacion\u0026quot;    WHERE (\u0026quot;variable\u0026quot; = 'p05')  ) \u0026quot;RHS\u0026quot;    ON (\u0026quot;LHS\u0026quot;.\u0026quot;p05\u0026quot; = \u0026quot;RHS\u0026quot;.\u0026quot;p05\u0026quot;)) \u0026quot;q03\u0026quot;ORDER BY -\u0026quot;n\u0026quot;\u0026quot;\u0026quot;\u0026quot;).df()##    p05                                   p05_desc       n      p## 0    1                                Red Pública  299464  77.82## 1    4  Río, Vertiente, Estero, Canal, Lago, Etc.   38796  10.08## 2    2                               Pozo o Noria   32150   8.35## 3   98                                  No Aplica    8483   2.20## 4    3                              Camión Aljibe    3558   0.92## 5   99                              Valor Perdido    2386   0.62\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWhere we see that for the 14th region, 22.18% of the population doesn’thave access to the public tap water network. The advantage of thisapproach is that here we used pure SQL for querying, which would work inany language where we can pass SQL queries. The disadvantage is nothaving a tool such as \u003ccode\u003edplyr\u003c/code\u003e and the need to learn the SQL syntax.\u003c/p\u003e\u003cp\u003eWe shouldn’t forget to close the database connection.\u003c/p\u003e\u003cpre\u003e\u003ccode\u003econ.close()\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"concluding-remarks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#concluding-remarks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConcluding remarks\u003c/h2\u003e\u003cp\u003eThe examples shown here were simplified. Most of the inquiries I get areabout data summaries at the sub-communal level, for example how to count theoccurrences of a categorical variable in a neighborhood, as we did in our example ofwater access (i.e., well or public network). Byusing censo2017 we can extract useful information for evidence-basedpublic policy when it comes to, for example, prioritizing budgetdecisions.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/10/19/censo2017-one-year-after/","date_published":"2022-10-19T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/bfxd3-dtw18","title":"Maintain or Co-Maintain an rOpenSci Package!","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]}],"tags":["community","packages","welcome","maintenance"],"content_html":"\u003cp\u003eThe rOpenSci \u003ca href=\"/packages\"\u003esuite of packages\u003c/a\u003e is mainly composed of packages contributed by the community through \u003ca href=\"/software-review\"\u003epeer-review\u003c/a\u003e, but also includes some packages maintained by staff.Over time, the commitments and availability of the original developers of a package can change. This leads to some maintainers stepping down from their maintainer role, or other maintainers looking to lower their workload through more teamwork and therefore looking for co-maintainers.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;re so grateful for all our community maintainers and want to make sure that they feel good about the work they do and not burdened by the responsibility. This is why we started conducting annual maintainer surveys, to ensure that maintainers feel supported and feel free to say when they need help, or are ready to move on.Following our recent annual maintainer survey, we have projects looking for both new maintainers and co-maintainers. Therefore, we say \u003cstrong\u003ethank you!\u003c/strong\u003e to our maintainers looking to move on, and in this blog post we will explain why \u003cstrong\u003eyou\u003c/strong\u003e might want to help, and we\u0026rsquo;ll list the packages currently up for adoption or collaboration.\u003c/p\u003e\u003ch2 id=\"why-maintain-or-co-maintain-a-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-maintain-or-co-maintain-a-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy maintain or co-maintain a package?\u003c/h2\u003e\u003cp\u003eMaintaining or co-maintaining a package can have some specific advantages, on top of the big motivator \u0026ldquo;keep a cool package alive\u0026rdquo;.Maintenance work allows you to gain and practice software development skills (writing R functions, using GitHub interface, unit testing and continuous integration, technical writing in the documentation\u0026hellip;).Furthermore, it becomes a public record of these awesome skills you have developed and will contribute to your online developer portfolio.\u003c/p\u003e\u003cp\u003eBeing an author of an \u003cem\u003erOpenSci\u003c/em\u003e package means you have access to rOpenSci infrastructure (such as \u003ca href=\"/blog/2021/09/03/runiverse-docs/\"\u003epkgdown docs building for all packages\u003c/a\u003e) as well as community support and camaraderie (through our \u003ca href=\"/blog/2022/01/11/ropensci-forum/\"\u003eforum\u003c/a\u003e, and our semi-open slack where there are other package maintainers, including rOpenSci staff).We\u0026rsquo;re grateful for all contributors that help us provide a healthy suite of packages!\u003c/p\u003e\u003cp\u003eCo-maintaining can allow for more team work and more division of labour, so if that appeals to you, you could also look for co-maintainers.\u003c/p\u003e\u003ch2 id=\"what-does-it-take-to-co-maintain-a-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-does-it-take-to-co-maintain-a-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat does it take to (co-)maintain a package?\u003c/h2\u003e\u003cp\u003eHow much time, what skills in particular?Sadly the answers is \u0026ldquo;it depends\u0026rdquo;.In the list of packages in this post, some require a large overhaul (for instance \u003ca href=\"https://github.com/ropensci/essurvey\"\u003eessurvey\u003c/a\u003e whose data source underwent many changes) while others are more stable (for instance \u003ca href=\"https://github.com/ropensci/robotstxt/\"\u003erobotstxt\u003c/a\u003e).Other criteria that might increase the workload are: popularity (many users\u0026rsquo; requests), code health (maybe a dependency could or should be swapped for a more modern or better maintained one), whether the package is on CRAN or you\u0026rsquo;d want it to be, etc.Have a \u003ca href=\"/blog/2022/07/01/evaluating-github-activity-for-contributors/\"\u003elook at the repository\u003c/a\u003e to assess its needs and its toolset before volunteering, and don\u0026rsquo;t hesitate to ask questions (in the volunteering issue, in a new issue if there is no volunteering issue).\u003c/p\u003e\u003ch2 id=\"how-long-would-you-co-maintain-a-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-long-would-you-co-maintain-a-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow long would you (co-)maintain a package?\u003c/h2\u003e\u003cp\u003eUntil you no longer want to. \u0026#x1f609;Ideally, it\u0026rsquo;d be great for you to be reasonably confident you can spend some of your time on the package for at least one year.As a maintainer, if you want to step down, please reach out to \u003ccode\u003einfo@ropensci.org\u003c/code\u003e \u0026ndash; no need to wait for the next annual survey and suffer in silence.\u003c/p\u003e\u003ch2 id=\"how-to-choose-a-package-to-co-maintain\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-choose-a-package-to-co-maintain\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to choose a package to (co-)maintain?\u003c/h2\u003e\u003cp\u003eAlthough general technical skills will make you a good contributor to many packages, it is \u003cstrong\u003ecrucial\u003c/strong\u003e to have specific interest in what a package does or the toolset it uses.You might have that interest because you use that package at work or because its scope falls under your topics of interest, for instance.Being very interested in a package will make you more motivated, furthermore the user community will likely be a community of your peers.\u003c/p\u003e\u003cp\u003eLast but not least, if you use the package you maintain at work, you might be able to tackle maintenance during your normal working hours, which might be more sustainable than carving time for it on the side.\u003c/p\u003e\u003ch2 id=\"packages-looking-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#packages-looking-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackages looking for maintainers!\u003c/h2\u003e\u003cp\u003eTo volunteer, comment in the corresponding volunteering issue. Thank you!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003erobotstxt, A \u0026lsquo;robots.txt\u0026rsquo; Parser and \u0026lsquo;Webbot\u0026rsquo;/\u0026lsquo;Spider\u0026rsquo;/\u0026lsquo;Crawler\u0026rsquo; Permissions Checker\u003c/strong\u003e. Provides functions to download and parse \u0026lsquo;robots.txt\u0026rsquo; files. Ultimately the package makes it easy to check if bots (spiders, crawler, scrapers, \u0026hellip;) are allowed to access specific resources on a domain. \u003ca href=\"https://github.com/ropensci/robotstxt/issues/62\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003echromer, Interface to Chromosome Counts Database API\u003c/strong\u003e. A programmatic interface to the \u003ca href=\"http://ccdb.tau.ac.il/\"\u003eChromosome Counts Database\u003c/a\u003e. \u003ca href=\"https://github.com/ropensci/chromer/issues/33\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eessurvey, Download Data from the European Social Survey on the Fly\u003c/strong\u003e. Download data from the European Social Survey directly from their \u003ca href=\"https://www.europeansocialsurvey.org/\"\u003ewebsite\u003c/a\u003e. There are two families of functions that allow you to download and interactively check all countries and rounds available. \u003ca href=\"https://github.com/ropensci/essurvey/issues/57\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003ewikitaxa, Taxonomic Information from \u0026lsquo;Wikipedia\u0026rsquo;\u003c/strong\u003e. \u0026lsquo;Taxonomic\u0026rsquo; information from \u0026lsquo;Wikipedia\u0026rsquo;, \u0026lsquo;Wikicommons\u0026rsquo;, \u0026lsquo;Wikispecies\u0026rsquo;, and \u0026lsquo;Wikidata\u0026rsquo;. Functions included for getting taxonomic information from each of the sources just listed, as well performing taxonomic search. \u003ca href=\"https://github.com/ropensci/wikitaxa/issues/20\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003ergnparser, Parse Scientific Names\u003c/strong\u003e. Parse scientific names using \u003ca href=\"https://github.com/gnames/gnparser\"\u003e\u0026lsquo;gnparser\u0026rsquo;\u003c/a\u003e, written in Go. \u0026lsquo;gnparser\u0026rsquo; parses scientific names into their component parts; it utilizes a Parsing Expression Grammar specifically for scientific names. \u003ca href=\"https://github.com/ropensci/rgnparser/issues/14\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003etabulizer, Bindings for \u0026lsquo;Tabula\u0026rsquo; PDF Table Extractor Library\u003c/strong\u003e. Bindings for the \u003ca href=\"https://tabula.technology/\"\u003e\u0026lsquo;Tabula\u0026rsquo;\u003c/a\u003e \u0026lsquo;Java\u0026rsquo; library, which can extract tables from PDF documents. The \u003ca href=\"https://github.com/ropensci/tabulizerjars\"\u003e\u0026rsquo;tabulizerjars\u0026rsquo;\u003c/a\u003e package provides versioned \u0026lsquo;Java\u0026rsquo; .jar files, including all dependencies, aligned to releases of \u0026lsquo;Tabula\u0026rsquo;. \u003ca href=\"https://github.com/ropensci/tabulizer/issues/148\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eRSelenium, R Bindings for \u0026lsquo;Selenium WebDriver\u0026rsquo;\u003c/strong\u003e. Provides a set of R bindings for the \u003ca href=\"https://www.selenium.dev/documentation/\"\u003e\u0026lsquo;Selenium 2.0 WebDriver\u0026rsquo;\u003c/a\u003e using the \u003ca href=\"https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol\"\u003e\u0026lsquo;JsonWireProtocol\u0026rsquo;\u003c/a\u003e. \u0026lsquo;Selenium 2.0 WebDriver\u0026rsquo; allows driving a web browser natively as a user would either locally or on a remote machine using the Selenium server it marks a leap forward in terms of web browser automation. \u003ca href=\"https://github.com/ropensci/RSelenium/issues/261\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eelastic, General Purpose Interface to \u0026lsquo;Elasticsearch\u0026rsquo;\u003c/strong\u003e. Connect to \u0026lsquo;Elasticsearch\u0026rsquo;, a \u0026lsquo;NoSQL\u0026rsquo; database built on the \u0026lsquo;Java\u0026rsquo; Virtual Machine. Interacts with the \u003ca href=\"https://www.elastic.co/elasticsearch/\"\u003e\u0026lsquo;Elasticsearch\u0026rsquo; \u0026lsquo;HTTP\u0026rsquo; API\u003c/a\u003e, including functions for setting connection details to \u0026lsquo;Elasticsearch\u0026rsquo; instances, loading bulk data, searching for documents with both \u0026lsquo;HTTP\u0026rsquo; query variables and \u0026lsquo;JSON\u0026rsquo; based body requests. \u003ca href=\"https://github.com/ropensci/elastic/issues/292\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eckanr, Client for the Comprehensive Knowledge Archive Network (\u0026lsquo;CKAN\u0026rsquo;) API\u003c/strong\u003e. Client for \u003ca href=\"https://ckan.org/\"\u003e\u0026lsquo;CKAN\u0026rsquo; API\u003c/a\u003e. Includes interface to \u0026lsquo;CKAN\u0026rsquo; \u0026lsquo;APIs\u0026rsquo; for search, list, show for packages, organizations, and resources. In addition, provides an interface to the \u0026lsquo;datastore\u0026rsquo; API. \u003ca href=\"https://github.com/ropensci/ckanr/issues/186\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eRclean, A Tool for Writing Cleaner, More Transparent Code\u003c/strong\u003e. To create clearer, more concise code provides this toolbox helps coders to isolate the essential parts of a script that produces a chosen result, such as an object, tables and figures written to disk. \u003ca href=\"https://github.com/ropensci/Rclean/issues/213\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"packages-looking-for-co-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#packages-looking-for-co-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackages looking for co-maintainers!\u003c/h2\u003e\u003cp\u003eTo volunteer, comment in the corresponding issue or email the maintainer.Thank you!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003etaxlist, Handling Taxonomic Lists\u003c/strong\u003e. Handling taxonomic lists through objects of class \u0026rsquo;taxlist\u0026rsquo;. This package provides functions to import species lists from \u003ca href=\"https://www.synbiosys.alterra.nl/turboveg/\"\u003e\u0026lsquo;Turboveg\u0026rsquo;\u003c/a\u003e and the possibility to create backups from resulting R-objects. \u003ca href=\"https://github.com/ropensci/taxlist/issues/19\"\u003eIssue with details\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003etidync, A Tidy Approach to \u0026lsquo;NetCDF\u0026rsquo; Data Exploration and Extraction\u003c/strong\u003e. Tidy tools for \u0026lsquo;NetCDF\u0026rsquo; data sources. Explore the contents of a \u0026lsquo;NetCDF\u0026rsquo; source (file or URL) presented as variables organized by grid with a database-like interface.   \u003ca href=\"https://github.com/ropensci/tidync/issues/117\"\u003eIssue with details\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003egoogleLanguageR, Call Google\u0026rsquo;s \u0026lsquo;Natural Language\u0026rsquo; API, \u0026lsquo;Cloud Translation\u0026rsquo; API,\u0026lsquo;Cloud Speech\u0026rsquo; API and \u0026lsquo;Cloud Text-to-Speech\u0026rsquo; API\u003c/strong\u003e. Call \u0026lsquo;Google Cloud\u0026rsquo; machine learning APIs for text and speech tasks. Call the \u003ca href=\"https://cloud.google.com/translate/\"\u003e\u0026lsquo;Cloud Translation\u0026rsquo; API\u003c/a\u003e for detection and translation of text, the \u003ca href=\"https://cloud.google.com/natural-language/\"\u003e\u0026lsquo;Natural Language\u0026rsquo; API\u003c/a\u003e to analyse text for sentiment, entities or syntax, the \u003ca href=\"https://cloud.google.com/speech/\"\u003e\u0026lsquo;Cloud Speech\u0026rsquo; API\u003c/a\u003e to transcribe sound files to text and the \u003ca href=\"https://cloud.google.com/text-to-speech/\"\u003e\u0026lsquo;Cloud Text-to-Speech\u0026rsquo; API\u003c/a\u003e\u0026gt; to turn text into sound files. \u003ca href=\"https://github.com/ropensci/googleLanguageR/issues/79\"\u003eIssue with details\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003enlrx, Setup, Run and Analyze \u0026lsquo;NetLogo\u0026rsquo; Model Simulations from \u0026lsquo;R\u0026rsquo; via \u0026lsquo;XML\u0026rsquo;\u003c/strong\u003e. Setup, run and analyze \u003ca href=\"https://ccl.northwestern.edu/netlogo/%3E\"\u003e\u0026lsquo;NetLogo\u0026rsquo;\u003c/a\u003e model simulations in \u0026lsquo;R\u0026rsquo;. \u0026rsquo;nlrx\u0026rsquo; experiments use a similar structure as \u0026lsquo;NetLogos\u0026rsquo; Behavior Space experiments. However, \u0026rsquo;nlrx\u0026rsquo; offers more flexibility and additional tools for running and analyzing complex simulation designs and sensitivity analyses. By nesting model calls in future environments, large simulation design with many runs can be executed in parallel. This also enables simulating \u0026lsquo;NetLogo\u0026rsquo; experiments on remote high performance computing machines.  \u003ca href=\"https://github.com/ropensci/nlrx\"\u003eRepository\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003erefsplitr, author name disambiguation, author georeferencing, and mapping ofcoauthorship networks with \u0026lsquo;Web of Science\u0026rsquo; data\u003c/strong\u003e. Tools to parse and organize reference records downloaded from the \u0026lsquo;Web of Science\u0026rsquo; citation database into an R-friendly format, disambiguate the names of authors, geocode their locations, and generate/visualize coauthorship networks. \u003ca href=\"https://github.com/ropensci/refsplitr/issues/88\"\u003eIssue with details\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003ertika, R Interface to \u0026lsquo;Apache Tika\u0026rsquo;\u003c/strong\u003e. Extract text or metadata from over a thousand file types, using \u003ca href=\"https://tika.apache.org/\"\u003eApache Tika\u003c/a\u003e. Get either plain text or structured XHTML content.  \u003ca href=\"https://github.com/ropensci/rtika/issues/16\"\u003eIssue with details\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003etidyqpcr, Quantitative PCR Analysis with the Tidyverse\u003c/strong\u003e. For reproducible quantitative PCR (qPCR) analysis building on packages from the ’tidyverse’, notably ’dplyr’ and ’ggplot2’. It normalizes (by ddCq), summarizes, and plots pre-calculated Cq data, and plots raw amplification and melt curves from Roche Lightcycler (tm) machines. It does NOT (yet) calculate Cq data from amplification curves. \u003ca href=\"https://github.com/ropensci/tidyqpcr\"\u003eRepository\u003c/a\u003e. \u003ca href=\"https://github.com/ropensci/tidyqpcr/issues/196\"\u003eIssue with details\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003edbparser, \u0026lsquo;DrugBank\u0026rsquo; Database XML Parser\u003c/strong\u003e. This tool is for parsing the \u003ca href=\"https://www.drugbank.ca/\"\u003e\u0026lsquo;DrugBank\u0026rsquo; XML database\u003c/a\u003e. The parsed data are then returned in a proper \u0026lsquo;R\u0026rsquo; dataframe with the ability to save them in a given database. \u003ca href=\"https://github.com/ropensci/dbparser/issues/138\"\u003eIssue with details\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eMODIStsp, Find, Download and Process MODIS Land ProductsData\u003c/strong\u003e. Allows automating the creation of time series of rasters derived from MODIS satellite land products data. It performs several typical preprocessing steps such as download, mosaicking, reprojecting and resizing data acquired on a specified time period. \u003ca href=\"https://github.com/ropensci/MODIStsp\"\u003eRepository\u003c/a\u003e. \u003ca href=\"https://github.com/ropensci/MODIStsp/issues/262\"\u003eIssue with details\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cstrong\u003eassertr, Assertive Programming for R Analysis Pipelines\u003c/strong\u003e. Provides functionality to assert conditions that have to be met so that errors in data used in analysis pipelines can fail quickly. Similar to \u0026lsquo;stopifnot()\u0026rsquo; but more powerful, friendly, and easier for use in pipelines. \u003ca href=\"https://github.com/ropensci/assertr\"\u003eRepository\u003c/a\u003e. \u003ca href=\"https://github.com/ropensci/assertr/issues/118\"\u003eIssue with details\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we explained that there is a cycle to package maintenance, why maintainers may step down, and why one would want to step up! Hopefully we\u0026rsquo;ve inspired some soon-to-be maintainers, who\u0026rsquo;ve taken a look at our list of rOpenSci packages for which new maintainers or co-maintainers are needed.Not sure you\u0026rsquo;re ready to tackle these packages, but think you might be interested in the future? Help requests including calls for maintainers and co-maintainers are always listed on our \u003ca href=\"/help-wanted\"\u003ehelp wanted\u003c/a\u003e page.If you are interested in rOpenSci mission but not in the idea of maintaining a package, have a look at our \u003ca href=\"https://contributing.ropensci.org/\"\u003econtributing guide\u003c/a\u003e for other ways you can contribute to rOpenSci and benefit from being part of the rOpenSci community!\u003c/p\u003e","url":"https://ropensci.org/blog/2022/10/17/maintain-or-co-maintain-an-ropensci-package/","date_published":"2022-10-17T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/mtta5-thw68","title":"rOpenSci News Digest, September 2022","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2022/09/23/ropensci-news-digest-september-2022\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"we-are-thrilled-to-launch-our-champions-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#we-are-thrilled-to-launch-our-champions-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWe are thrilled to launch our Champions program!\u003c/h3\u003e\u003cp\u003e\u003ca href=\"/champions/\"\u003erOpenSci Champions Program\u003c/a\u003e is part of a series of activities and projects we are carrying out to ensure our research software serves everyone in our communities.That is why this program focuses on \u003cstrong\u003epeople who belong to groups that are historically and systematically excluded\u003c/strong\u003e from the open software and research software communities and who are interested in contributing to rOpenSci and the broader open source and research software communities.\u003c/p\u003e\u003cp\u003eIf you are selected as a Champion, over the course of a year you will develop a project, get training, and be mentored. You will also receive a small stipend.\u003c/p\u003e\u003cp\u003eYou can apply until November 7, 2022 \u003ca href=\"/champions/#how-to-apply\"\u003eusing a form\u003c/a\u003e.  You can read more details in this \u003ca href=\"/blog/2022/09/22/launch-champions-program/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"first-three-packages-to-pass-statistical-software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#first-three-packages-to-pass-statistical-software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFirst three packages to pass Statistical Software Review!\u003c/h3\u003e\u003cp\u003eWe are overjoyed to have the first three packages pass through our Statistical Software Review process.\u003ca href=\"https://docs.ropensci.org/canaper/\"\u003eThe canaper package\u003c/a\u003e by \u003ca href=\"https://www.joelnitta.com/\"\u003eJoel Nitta\u003c/a\u003e was \u003ca href=\"https://github.com/ropensci/software-review/issues/475#issuecomment-1247094903\"\u003eapproved on the 14th of September 2022\u003c/a\u003e, followed shortly after by \u003ca href=\"https://github.com/ropensci/melt\"\u003ethe melt package\u003c/a\u003e by \u003ca href=\"https://github.com/markean\"\u003eEunseop Kim\u003c/a\u003e on \u003ca href=\"https://github.com/ropensci/software-review/issues/550#issuecomment-1252237325\"\u003ethe 20th of September\u003c/a\u003e, and then \u003ca href=\"https://github.com/ropensci/aorsf\"\u003ethe aorsf package\u003c/a\u003e by \u003ca href=\"https://github.com/bcjaeger\"\u003eByron Jaeger\u003c/a\u003e on \u003ca href=\"https://github.com/ropensci/software-review/issues/532#issuecomment-1255257167\"\u003ethe 22nd of September\u003c/a\u003e.Among many exciting aspects of the expansion of software peer review to statistical software is the introduction of new statistics-specific \u0026ldquo;Peer Reviewed\u0026rdquo; badges.Until now, every rOpenSci package has used the same single badge. Our new badges for statistical packages include a \u0026ldquo;grade\u0026rdquo; of \u003ca href=\"https://stats-devguide.ropensci.org/pkgdev.html#pkgdev-badges\"\u003ebronze, silver, or gold\u003c/a\u003e, and the version number of the \u003ca href=\"https://stats-devguide.ropensci.org/standards.html\"\u003e\u003cem\u003eStatistical Software Standards\u003c/em\u003e\u003c/a\u003e with which a package complies.You can see the first statistical software badges on the front pages of the \u003ca href=\"https://github.com/ropensci/canaper#canaper\"\u003ecanaper\u003c/a\u003e, \u003ca href=\"https://github.com/ropensci/melt#readme\"\u003emelt\u003c/a\u003e and \u003ca href=\"https://github.com/ropensci/aorsf#readme\"\u003eaorsf\u003c/a\u003e repositories, the first two with a \u0026ldquo;silver\u0026rdquo; badge for compliance with version 0.1 of our statistical standards, and aorsf with a \u0026ldquo;gold\u0026rdquo; badge.There are already a number of other \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+label%3Astats+is%3Aopen\"\u003estatistical packages under review\u003c/a\u003e, and we\u0026rsquo;ll be excited to see many more of these new badges appearing on rOpenSci packages soon.\u003c/p\u003e\u003ch3 id=\"check-out-our-calls-for-new-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#check-out-our-calls-for-new-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCheck out our Calls for new maintainers!\u003c/h3\u003e\u003cp\u003eA few packages are \u003ca href=\"#call-for-maintainers\"\u003elooking for new maintainers\u003c/a\u003e.Do you want to maintain software that will help fellow R users extract tables out of PDFs, or access data from the IUCN Red list of endangered species, or perhaps something else completely?See if one of these packages appeals to you!You could volunteer on your own or as a team of maintainers (the more the merrier!).The rOpenSci team will be happy to help you with specifics, and will provide resources, tips and PR reviews as needed.Thank you!\u003c/p\u003e\u003ch3 id=\"coworking-sessions-continue\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking-sessions-continue\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking sessions continue!\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2022-10/\"\u003eTuesday, 04 October 2022 9 AM Australian Western / 1:00 UTC \u003c/a\u003e \u0026ldquo;Start writing that package!\u0026rdquo; \u003cem\u003eHosted by community host \u003ca href=\"/author/nicholas-tierney/\"\u003eNick Tierney\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eCowork on a project of your choice;\u003c/li\u003e\u003cli\u003eTake time to look up how to write a package;\u003c/li\u003e\u003cli\u003eStart putting together that package you\u0026rsquo;ve always meant to;\u003c/li\u003e\u003cli\u003eOr talk to \u003ca href=\"/author/nicholas-tierney/\"\u003eNick Tierney\u003c/a\u003e and others about how to get started.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2022-11/\"\u003eTuesday, 01 November 2022 9 AM North American Pacific / 16:00 UTC \u003c/a\u003e \u0026ldquo;Champions Program Application Clinic\u0026rdquo; \u003cem\u003eHosted by rOpenSci community manager \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eCowork on a project of your choice;\u003c/li\u003e\u003cli\u003ePrepare your application for the Champions Program;\u003c/li\u003e\u003cli\u003eOr talk to \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina\u003c/a\u003e about the application process.Find out about more \u003ca href=\"/events\"\u003eevents\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"pkgcheck-updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pkgcheck-updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003epkgcheck updates\u003c/h3\u003e\u003cp\u003eOur \u003ca href=\"https://docs.ropensci.org/pkgcheck\"\u003epkgcheck checks\u003c/a\u003e now have an additional category beyond just pass (\u0026#x2714;\u0026#xfe0f;) or fail (\u0026#x2716;\u0026#xfe0f;). Some checks indicate aspects which are worth considering, but which might not necessarily be considered check failures. We have introduced the symbol \u0026#x1f440; to denote aspects of packages which authors might consider modifying or tweaking at their discretion, but which do not indicate failing checks. The only check in this category at present is the check for duplicated function names, but other \u0026#x1f440; checks are likely to be included as our automated check system expands its scope in the future.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following three packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/aorsf\"\u003eaorsf\u003c/a\u003e, developed by Byron Jaeger: Fit, interpret, and make predictions with oblique random survival forests. Oblique decision trees are notoriously slow compared to their axis based counterparts, but aorsf runs as fast or faster than axis-based decision tree algorithms for right-censored time-to-event outcomes. Methods to accelerate and interpret the oblique random survival forest are described in Jaeger et al., (2022) \u003ca href=\"arXiv:2208.01129\"\u003earXiv:2208.01129\u003c/a\u003e.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=aorsf\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/532/\"\u003ereviewed\u003c/a\u003e by Christopher Jackson, Marvin Wright, and Lukas Burk.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/canaper\"\u003ecanaper\u003c/a\u003e, developed by Joel H. Nitta: Provides functions to conduct categorical analysis of neo- and paleo-endemism (CANAPE). It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/475\"\u003ereviewed\u003c/a\u003e by Klaus Schliep, and Luis Osorio.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/melt\"\u003emelt\u003c/a\u003e, developed by Eunseop Kim: Performs multiple empirical likelihood tests for linear and generalized linear models. The package offers an easy-to-use interface and flexibility in specifying hypotheses and calibration methods, extending the framework to simultaneous inferences. The core computational routines are implemented using the Eigen C++ library and RcppEigen interface, with OpenMP for parallel computation. Details of the testing procedures are given in Kim, MacEachern, and Peruggia (2021) \u003ca href=\"arxiv:2112.09206\"\u003earxiv:2112.09206\u003c/a\u003e. This work was supported by the U.S. National Science Foundation under Grants No. SES-1921523 and DMS-2015552.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=melt\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/550\"\u003ereviewed\u003c/a\u003e by Pierre Chausse, and Alex Stringer.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following twenty packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/frictionless\" title=\"Read and Write Frictionless Data Packages\"\u003efrictionless\u003c/a\u003e (\u003ca href=\"https://github.com/frictionlessdata/frictionless-r/releases/tag/v1.0.1\"\u003e\u003ccode\u003ev1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gert\" title=\"Simple Git Client for R\"\u003egert\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/gert/releases/tag/v1.9.0\"\u003e\u003ccode\u003ev1.9.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/binman\" title=\"A Binary Download Manager\"\u003ebinman\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/binman/releases/tag/v0.1.3\"\u003e\u003ccode\u003ev0.1.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/canaper\" title=\"Categorical Analysis of Neo- And Paleo-Endemism\"\u003ecanaper\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/canaper/releases/tag/v0.0.3\"\u003e\u003ccode\u003ev0.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/datefixR\" title=\"Standardize Dates in Different Formats or with Missing Data\"\u003edatefixR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/datefixR/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/EDIutils\" title=\"An API Client for the Environmental Data Initiative Repository\"\u003eEDIutils\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/EDIutils/releases/tag/v1.0.2\"\u003e\u003ccode\u003ev1.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/geojsonio\" title=\"Convert Data from and to GeoJSON or TopoJSON\"\u003egeojsonio\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/geojsonio/releases/tag/v0.9.5\"\u003e\u003ccode\u003ev0.9.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gittargets\" title=\"Data Version Control for the Targets Package\"\u003egittargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gittargets/releases/tag/0.0.5\"\u003e\u003ccode\u003e0.0.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ijtiff\" title=\"Comprehensive TIFF I/O with Full Support for ImageJ TIFF Files\"\u003eijtiff\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ijtiff/releases/tag/v2.2.8\"\u003e\u003ccode\u003ev2.2.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/MODIStsp\" title=\"Find, Download and Process MODIS Land ProductsData\"\u003eMODIStsp\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/MODIStsp/releases/tag/v2.0.9\"\u003e\u003ccode\u003ev2.0.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmextract\" title=\"Download and Import Open Street Map Data Extracts\"\u003eosmextract\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmextract/releases/tag/v0.4.1\"\u003e\u003ccode\u003ev0.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/restez\" title=\"Create and Query a Local Copy of GenBank in R\"\u003erestez\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/restez/releases/tag/v2.1.2\"\u003e\u003ccode\u003ev2.1.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgbif\" title=\"Interface to the Global Biodiversity Information Facility API\"\u003ergbif\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgbif/releases/tag/v3.7.3\"\u003e\u003ccode\u003ev3.7.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spiro\" title=\"Manage Data from Cardiopulmonary Exercise Testing\"\u003espiro\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spiro/releases/tag/v0.1.1\"\u003e\u003ccode\u003ev0.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.7.1\"\u003e\u003ccode\u003e0.7.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Workflows\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/0.13.4\"\u003e\u003ccode\u003e0.13.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/taxlist\" title=\"Handling Taxonomic Lists\"\u003etaxlist\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/taxlist/releases/tag/v0.2.3\"\u003e\u003ccode\u003ev0.2.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tic\" title=\"CI-Agnostic Workflow Definitions\"\u003etic\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tic/releases/tag/v0.13.1\"\u003e\u003ccode\u003ev0.13.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/wdman\" title=\"Webdriver/Selenium Binary Manager\"\u003ewdman\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/wdman/releases/tag/v0.2.6\"\u003e\u003ccode\u003ev0.2.6\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/webmockr\" title=\"Stubbing and Setting Expectations on HTTP Requests\"\u003ewebmockr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/webmockr/releases/tag/v0.8.2\"\u003e\u003ccode\u003ev0.8.2\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are thirteen recently closed and active submissions and 3 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/550\"\u003emelt\u003c/a\u003e, Multiple Empirical Likelihood Tests. Submitted by \u003ca href=\"https://github.com/markean\"\u003eEunseop Kim\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/532\"\u003eaorsf\u003c/a\u003e, Accelerated Oblique Random Survival Forests. Submitted by \u003ca href=\"https://github.com/bcjaeger\"\u003eByron\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/475\"\u003ecanaper\u003c/a\u003e, Categorical Analysis of Neo- And Paleo-Endemism. Submitted by \u003ca href=\"https://joelnitta.com\"\u003eJoel Nitta\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román Palacios\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/535\"\u003edaiquiri\u003c/a\u003e, Data Quality Reporting for Temporal Datasets. Submitted by \u003ca href=\"https://github.com/phuongquan\"\u003ePhuong Quan\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/524\"\u003ehudr\u003c/a\u003e, A R interface for accessing HUD (US Department of Housing and Urban Development) APIs. Submitted by \u003ca href=\"https://github.com/etam4260/etam4260\"\u003eEmmet Tam\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/554\"\u003edynamite\u003c/a\u003e, Bayesian Modeling and Causal Inference for Multivariate. Submitted by \u003ca href=\"http://users.jyu.fi/~santikka/\"\u003eSanttu Tikka\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"http://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/551\"\u003estochLAB\u003c/a\u003e, Stochastic Collision Risk Model. Submitted by \u003ca href=\"http://www.blackbawks.net\"\u003eGrant\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/09/13/contributing-ropensci\"\u003eHow to Participate with rOpenSci\u003c/a\u003e by Yanina Bellini Saibene. Are you curious about rOpenSci? Wondering how to start participating? 🤔 Glad you asked! Here\u0026rsquo;s a summary on how to get involved with us.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/09/13/contributing-ropensci-es\"\u003eCómo participar en rOpenSci\u003c/a\u003e by Yanina Bellini Saibene. ¿Tienes curiosidad por rOpenSci? Te preguntas cómo empezar a participar? 🤔 ¡Nos alegramos! Aquí tienes un resumen de cómo participar con nosotros.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/09/22/launch-champions-program\"\u003eAnnouncing the rOpenSci Champions Program!\u003c/a\u003e by Yanina Bellini Saibene. We are thrilled to launch our Champions Program pilot.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/09/22/launch-champions-program-es\"\u003e¡Anunciamos el programa de Campeones y Campeonas de rOpenSci!\u003c/a\u003e by Yanina Bellini Saibene. ¡Estamos muy felices de realizar el lanzamiento nuestro programa de Campeones y Campeonas.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eTwo use cases of our packages and resources have been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/using-taxize-and-highcharter-in-r-to-extract-and-visualize-taxonomic-data/3096\"\u003eUsing taxize and highcharter in R to extract and visualize taxonomic data\u003c/a\u003e. Reported by Stepminer.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/using-handlr-to-convert-bibtex-citation-to-cff/3107\"\u003eUsing handlr to convert bibtex citation to cff\u003c/a\u003e. Reported by Athanasia Monika Mowinckel.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eWe\u0026rsquo;re looking for a new maintainer, or a new maintainer \u003cem\u003eteam\u003c/em\u003e, for each of the following packages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/rgnparser/\"\u003ergnparser\u003c/a\u003e, Parse scientific names using gnparser. \u003ca href=\"https://github.com/ropensci/rgnparser/issues/14\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/ritis\"\u003eritis\u003c/a\u003e, Integrated Taxonomic Information Service (ITIS) R client. \u003ca href=\"https://github.com/ropensci/ritis/issues/23\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/rredlist\"\u003erredlist\u003c/a\u003e, IUCN Red List API Client. \u003ca href=\"https://github.com/ropensci/rredlist/issues/49\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/wikitaxa\"\u003ewikitaxa\u003c/a\u003e, taxonomy data from Wikipedia/Wikidata/Wikispecies. \u003ca href=\"https://github.com/ropensci/wikitaxa/issues/20\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/tabulizer/\"\u003etabulizer\u003c/a\u003e, Extract Tables from PDFs. \u003ca href=\"https://github.com/ropensci/tabulizer/issues/148\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/RSelenium/\"\u003eRSelenium\u003c/a\u003e, Automate browsers locally or remotely (for instance for webscraping). \u003ca href=\"https://github.com/ropensci/RSelenium/issues/261\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/elastic/\"\u003eelastic\u003c/a\u003e, R client for the Elasticsearch HTTP API. \u003ca href=\"https://github.com/ropensci/elastic/issues/292\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIf you\u0026rsquo;re interested, please comment in the issues or email \u003ccode\u003einfo@ropensci.org\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eFor more info, see\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://devguide.ropensci.org/changing-maintainers.html\"\u003eour guidance on \u003cem\u003eChanging package maintainers\u003c/em\u003e\u003c/a\u003e;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://devguide.ropensci.org/curationpolicy.html\"\u003eour \u003cem\u003ePackage Curation Policy\u003c/em\u003e\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"improve-your-code-with-lintrs-new-linters\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#improve-your-code-with-lintrs-new-linters\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eImprove your code with lintr\u0026rsquo;s new linters!\u003c/h3\u003e\u003cp\u003eThe most recent lintr release includes \u003ca href=\"https://www.tidyverse.org/blog/2022/07/lintr-3-0-0/#google-linters\"\u003ea bunch of new linters originally authored by Google developers\u003c/a\u003e.Have a look at the list, and run it on one of your codebases!Thanks to \u003ca href=\"https://github.com/Bisaloo\"\u003eHugo Gruson\u003c/a\u003e for this tip.\u003c/p\u003e\u003cp\u003eTo run \u003cem\u003eall\u003c/em\u003e linters there are you could run \u003ca href=\"https://github.com/r-lib/lintr/issues/1482#issuecomment-1198590483\"\u003e\u003ccode\u003elintr::lint_package(linters = lintr::linters_with_tags(tags = NULL))\u003c/code\u003e\u003c/a\u003e (or first filter a bit the list returned by \u003ccode\u003elintr::linters_with_tags(tags = NULL)\u003c/code\u003e in case you see too many \u003ca href=\"https://github.com/r-lib/lintr/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Afalse-positive\"\u003efalse positives\u003c/a\u003e for one of the linters).\u003c/p\u003e\u003ch3 id=\"minimum-r-version-dependency-in-r-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#minimum-r-version-dependency-in-r-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMinimum R version dependency in R packages\u003c/h3\u003e\u003cp\u003eCurious about why and how to make your R package depend on a minimal R version?See this \u003ca href=\"https://blog.r-hub.io/2022/09/12/r-dependency/\"\u003eR-hub blog post by Hugo Gruson and Maëlle Salmon\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"tweak-the-commit-message-obtained-by-merging-a-github-pull-request\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tweak-the-commit-message-obtained-by-merging-a-github-pull-request\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTweak the commit message obtained by merging a GitHub pull request\u003c/h3\u003e\u003cp\u003eYou might be interested in \u003ca href=\"https://github.blog/changelog/2022-08-23-new-options-for-controlling-the-default-commit-message-when-merging-a-pull-request/\"\u003eNew options for controlling the default commit message when merging a pull request\u003c/a\u003e to make the merge/squash commit messages more informative.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/09/23/ropensci-news-digest-september-2022/","date_published":"2022-09-23T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/bc3bg-8ge90","title":"Announcing the rOpenSci Champions Program!","language":"en","authors":[{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","help","beginner","welcome","champions program"],"content_html":"\u003cblockquote\u003e\u003cp\u003eWe are thrilled to launch our Champions Program pilot!\u003c/p\u003e\u003c/blockquote\u003e\u003ch2 id=\"why-a-champions-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-a-champions-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy a Champions Program?\u003c/h2\u003e\u003cp\u003eChampion programs are designed to identify, recognize, and reward passionate community members.\u003c/p\u003e\u003cp\u003eAt rOpenSci, we recognize that there is a dismaying lack of diversity in the ecosystem of research software and open source communities. The R Community is no exception; its developers are overwhelmingly white, male, and from a handful of countries. This disappointing lack of diversity is potentially detrimental to the sustainability, utility and productivity of projects.\u003c/p\u003e\u003cp\u003eWe also know that communities of practice can drive meaningful change. We understand the importance of supporting a diverse cohort of community leaders and contributors to all aspects of research software creation as they strive to transform our ecosystem for the better.\u003c/p\u003e\u003cp\u003eThe rOpenSci Champion Program \u003ca href=\"/blog/2021/12/20/inclusive-leadership-program/\"\u003eis part of a series of activities and projects we are carrying out to ensure our research software serves everyone in our communities\u003c/a\u003e, which means that it needs to be sustainable and open, and built \u003cstrong\u003eby and for all groups.\u003c/strong\u003e\u003c/p\u003e\u003cp\u003eThat is why this program focuses on \u003cstrong\u003epeople who belong to groups that are historically and systematically excluded\u003c/strong\u003e from the open software and research software communities and who are interested in contributing to rOpenSci and the broader open source and research software communities.We are looking for people that work in STEAM fields, from anywhere in the world, who already have development knowledge with the R language.\u003c/p\u003e\u003ch2 id=\"what-is-our-champions-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-our-champions-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is our Champions Program?\u003c/h2\u003e\u003cp\u003eWe have developed a \u003cstrong\u003e12-month-long program including cohort-based training, project development, and personal mentorship\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eChampions will participate in a 6-week long cohort-based training on a) planning and facilitating engaging and inclusive workshops to support participants’ success, b) knowledge of various channels through which new members can engage in and contribute to rOpenSci and R projects, and c) technical skills in software development and review.\u003c/p\u003e\u003cp\u003eAfter training, Champions will develop their project, which can be one of these options:\u003c/p\u003e\u003cul\u003e\u003cli\u003ecreate a new package,\u003c/li\u003e\u003cli\u003ego through the review process with an R package they already have developed,\u003c/li\u003e\u003cli\u003eor be a reviewer for our peer review system.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eOther Champions activities include options for delivering a talk, writing blog posts and teaching other community members. During this stage, Champions will receive personal and group mentorship through meetings with mentors, quarterly cohort calls, Community Manager support, and a dedicated channel on rOpenSci Slack workspace.\u003c/p\u003e\u003cp\u003eWe will provide a $1000 (USD) stipend to the selected community champions.We are looking for six to nine Champions for this first pilot. We expect to co-create the rOpenSci Champions Program with the selected applicants and influence future editions with their experience and feedback.\u003c/p\u003e\u003cp\u003eWe look forward to receiving many applications and are committed to directing non-selected applicants towards other ways in which they can contribute to rOpenSci.You can see all details on our \u003ca href=\"/champions/\"\u003eChampions Program webpage\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"how-to-apply\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-apply\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to apply?\u003c/h2\u003e\u003cp\u003ePlease, fill out the \u003ca href=\"https://airtable.com/shrAsYlSXU0coJ5Ld\"\u003eapplication form\u003c/a\u003e (this \u003ca href=\"/champions/files/champions_template\"\u003etemplate\u003c/a\u003e shows the information we require) before \u003cstrong\u003eFriday, Nov 7, 2022\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eThe application forms have to be filled in \u003cem\u003eEnglish\u003c/em\u003e.\u003c/p\u003e\u003ch3 id=\"application-timeline\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#application-timeline\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eApplication timeline\u003c/h3\u003e\u003ctable\u003e\t\u003cthead\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003cth\u003eDate\u003c/th\u003e\t\t\t\t\t\u003cth\u003eEvent\u003c/th\u003e\t\t\t\u003c/tr\u003e\t\u003c/thead\u003e\t\u003ctbody\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eSep 23, 2022\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCall for Applications opens\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eOct 24, 2022\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e[OPTIONAL] \u003ca href=\"/commcalls/oct2022-champions/\"\u003eCommunity Call\u003c/a\u003e -  Tips for submitting your Champions Program application\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eNov 1, 2022\u003c/td\u003e\t\t\t\t\t\u003ctd\u003e[OPTIONAL] \u003ca href=\"/events/coworking-2022-11/\"\u003eCo-working hours\u003c/a\u003e: receive help with your application to the Champions Program\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eNov 7, 2022\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCall for applications closed\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd\u003eNov 25, 2022\u003c/td\u003e\t\t\t\t\t\u003ctd\u003eCommunication with selected Champions\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\u003c/tbody\u003e\u003c/table\u003e\u003ch2 id=\"do-you-have-any-questions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#do-you-have-any-questions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDo you have any questions?\u003c/h2\u003e\u003cp\u003ePlease, contact our Community Manager \u003ca href=\"mailto:yabellini@ropensci.org\"\u003eby email\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe will have a \u003ca href=\"/commcalls/oct2022-champions/\"\u003eCommunity Call on October 24\u003c/a\u003e and a \u003ca href=\"/events/coworking-2022-11/\"\u003eCoworking space on November 1\u003c/a\u003e to help you with your application.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eWe look forward to meeting all of you passionate Champions out there :-D\u003c/strong\u003e\u003c/p\u003e","url":"https://ropensci.org/blog/2022/09/22/launch-champions-program/","date_published":"2022-09-22T00:00:01-07:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/xdm34-zxh50","title":"How to Participate with rOpenSci","language":"en","authors":[{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","help","beginner","welcome"],"content_html":"\u003cp\u003eThis blog post is intended to help you get started in rOpenSci community by highlighting some key links and activities. If you have questions, please get in touch with our Community Manager, Yanina Bellini Saibene \u003ca href=\"mailto:yabellini@ropensci.org\"\u003eby email\u003c/a\u003e or \u003ca href=\"https://calendly.com/yabellini-ropensci/\"\u003eschedule a meeting\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe are here for you as you begin your journey with our community. Welcome!\u003c/p\u003e\u003ch2 id=\"where-do-i-get-started\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#where-do-i-get-started\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhere do I get started?\u003c/h2\u003e\u003cp\u003eGlad you asked! rOpenSci fosters a culture that values open and reproducible research using shared data and reusable software. We are dedicated to providing a welcoming and supportive environment for all people. By participating in this community, participants agree to \u003ca href=\"/code-of-conduct/\"\u003eabide by our Code of Conduct\u003c/a\u003e. Whether you have a little or a lot of time, there are \u003ca href=\"https://contributing.ropensci.org/\"\u003emany ways to contribute and engage with us\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you\u0026rsquo;re ready for the big dive, check out our \u003ca href=\"https://contributing.ropensci.org/\"\u003eContributing Guide\u003c/a\u003e which covers all the ways you can get more involved with rOpenSci and how you may benefit.\u003c/p\u003e\u003cp\u003eOtherwise, see below for a quick overview of the resources available.\u003c/p\u003e\u003ch2 id=\"finding-information--asking-for-help\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#finding-information--asking-for-help\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFinding information \u0026amp; asking for help\u003c/h2\u003e\u003cp\u003eDo you want to know how to use an rOpenSci package? or are you looking information on how to develop an R package? There are several way to ask for help:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/\"\u003eDiscussion forum\u003c/a\u003e: public forum on Discourse for use cases, Q \u0026amp; A about rOpenSci packages, exploration of ideas, and best practices. Learn how to\u003ca href=\"/blog/2022/01/11/ropensci-forum/\"\u003eGather on the rOpenSci Forum\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/\"\u003ePackages Documentation\u003c/a\u003e: this site hosts pkgdown documentation for all rOpenSci packages.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/usecases/\"\u003eUse Cases\u003c/a\u003e: check how our R packages or resources have been used.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/\"\u003eBlog\u003c/a\u003e: browse our blog posts and technical notes to see packages updates, how-to and examples. You can find articles written by our community members. If you feel inspired, our \u003ca href=\"https://blogguide.ropensci.org/\"\u003eBlog Guide\u003c/a\u003e explains how to contribute a blog post.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://devguide.ropensci.org/\"\u003erOpenSci Packages: Development, Maintenance, and Peer Review\u003c/a\u003e: this book contains our guidelines for creating and testing R packages and our process for peer review.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://stats-devguide.ropensci.org/\"\u003erOpenSci Statistical Software Peer Review\u003c/a\u003e: this book provides guidelines for authors on how to develop statistical software, and for editors and reviewers on our processes for peer review of statistical software.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://ropensci.org/talks-papers/\"\u003eTalks and Publications\u003c/a\u003e: talks by the rOpenSci team or community members representing us, in English, French, or Spanish.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cem\u003eSlack\u003c/em\u003e: A semi-open space for communications among people who contribute to rOpenSci. Our Slack is \u003ca href=\"/contact/\"\u003eopen to anyone who contributes\u003c/a\u003e to an rOpenSci project or participates in our peer-review process as an author or reviewer.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"chat-with-other-community-members\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#chat-with-other-community-members\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChat with other community members\u003c/h2\u003e\u003cp\u003eIf you want to chat with other members of the community, in addition to the \u003ca href=\"https://discuss.ropensci.org/\"\u003eDiscussion forum\u003c/a\u003e and \u003cem\u003eSlack\u003c/em\u003e, we have meeting places such as\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/commcalls\"\u003eCommunity Calls\u003c/a\u003e: join to our quarterly Community Calls, these are free and open for anyone to attend and provide an opportunity to connect with rOpenSci community members around the world.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/08/17/coworking-sessions/\"\u003eRemote Co-Working Sessions\u003c/a\u003e: monthly social coworking + office hours sessions via Zoom (see upcoming sessions in \u003ca href=\"/events/\"\u003eEvents\u003c/a\u003e)\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/\"\u003eEvents\u003c/a\u003e: our staff and collaborators participate in different events and conferences.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"receive-communications\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#receive-communications\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReceive communications\u003c/h2\u003e\u003cp\u003eWe have several channels for our information to reach you directly. Worried about too many communications? Don’t be! Only subscribe to the communications you want, and you can unsubscribe at any time.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/news/\"\u003eNewsletter\u003c/a\u003e: every month receive in your inbox R package news, blog posts, tips and tricks, events and use cases. Subscribe via RSS (XML), JSON feed, or email.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003cem\u003eSocial Media\u003c/em\u003e: follow our organization’s activities on \u003ca href=\"https://hachyderm.io/@rOpenSci\"\u003eMastodon\u003c/a\u003e, \u003ca href=\"https://www.linkedin.com/company/ropensci/\"\u003eLinkedIn\u003c/a\u003e, and \u003ca href=\"https://vimeo.com/ropensci\"\u003eVimeo\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-and-contribute-to-our-infrastructure\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-and-contribute-to-our-infrastructure\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse and contribute to our infrastructure\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/packages/\"\u003ePackages\u003c/a\u003e: our packages are carefully vetted, staff- and community-contributed R software tools that, in particular, lower barriers to working with local and remote scientific data sources.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/r-universe/\"\u003eThe R-universe\u003c/a\u003e: improving research software publication and discovery in R.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/software-review/\"\u003eSoftware Peer-Review\u003c/a\u003e: packages contributed by the community undergo a transparent, constructive, non-adversarial and open review process.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/software-review/\"\u003eStatistical Software Peer-Review\u003c/a\u003e: we have expanded our peer review system to include packages that implement statistical algorithms.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/12/20/inclusive-leadership-program/\"\u003eMultilingual Publishing\u003c/a\u003e: we are expanding documentation for our review process beyond the English language.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/12/20/inclusive-leadership-program/\"\u003eChampions Program\u003c/a\u003e: support community champions from historically excluded groups to become contributors to rOpenSci.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/citations/\"\u003ePackage Citations\u003c/a\u003e: if you use one of our packages, please cite it! \u003ca href=\"/blog/2021/11/16/how-to-cite-r-and-r-packages/\"\u003eYou can learn here how to cite R and R Packages\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/help-wanted/\"\u003eHelp Wanted\u003c/a\u003e: if you are ready to contribute, here is a list of issues where your expertise is needed (we have issues for different levels of expertise).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"ready-to-contribute\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ready-to-contribute\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReady to contribute!\u003c/h2\u003e\u003cp\u003eWe are happy you made it this far.  We hope you find some way to participate among these options.  We would be glad to learn more if you have ideas about other ways to collaborate with us!\u003c/p\u003e\u003cp\u003eWe hope to see you in some of our spaces.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/09/13/contributing-ropensci/","date_published":"2022-09-13T00:00:01-07:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/mwype-v8n14","title":"rOpenSci News Digest, August 2022","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2022/08/26/ropensci-news-digest-august-2022\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"coworking-sessions-resume\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#coworking-sessions-resume\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCoworking sessions resume!\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays!Hosted by Steffi LaZerte and various community hosts.Everyone welcome.No RSVP needed.Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2022-09/\"\u003eTuesday, 06 September 2022 9 AM North American Pacific / 16:00 UTC \u003c/a\u003e \u0026ldquo;Teaching with R\u0026rdquo; \u003cem\u003eHosted by rOpenSci community manager \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eCowork on a project of your choice;\u003c/li\u003e\u003cli\u003eWork on R-related lessons;\u003c/li\u003e\u003cli\u003eLearn teaching-related R packages;\u003c/li\u003e\u003cli\u003eOr chat with \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina\u003c/a\u003e and others to discuss teaching in or with R.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2022-10/\"\u003eTuesday, 04 October 2022 9 AM Australian Western / 1:00 UTC \u003c/a\u003e \u0026ldquo;Start writing that package!\u0026rdquo; \u003cem\u003eHosted by community host \u003ca href=\"/author/nicholas-tierney/\"\u003eNick Tierney\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eCowork on a project of your choice;\u003c/li\u003e\u003cli\u003eTake time to look up how to write a package;\u003c/li\u003e\u003cli\u003eStart putting together that package you\u0026rsquo;ve always meant to;\u003c/li\u003e\u003cli\u003eOr talk to \u003ca href=\"/author/nicholas-tierney/\"\u003eNick Tierney\u003c/a\u003e and others about how to get started.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out about more \u003ca href=\"/events\"\u003eevents\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-pkgcheck-check-for-undocumented-return-values\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-pkgcheck-check-for-undocumented-return-values\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew pkgcheck check for undocumented return values\u003c/h3\u003e\u003cp\u003eOur \u003ca href=\"https://docs.ropensci.org/pkgcheck\"\u003epkgcheck checks\u003c/a\u003e now include an additional check that all functions have documented return values.This check is \u003ca href=\"https://github.com/DavisVaughan/extrachecks\"\u003erun on all new CRAN submissions\u003c/a\u003e, yet is not currently implemented on any other standard check systems (including R CMD check).Checking your packages with pkgcheck will now catch any functions which do not document return values, like in \u003ca href=\"https://github.com/ropensci/software-review/issues/554#issuecomment-1224053977\"\u003ethe report on this recent submission\u003c/a\u003e.All current checks are also listed in \u003ca href=\"https://docs.ropensci.org/pkgcheck/articles/list-checks.html\"\u003ea new vignette\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following  package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/spiro\"\u003espiro\u003c/a\u003e, developed by Simon Nolte: Import, process, summarize and visualize raw data from metabolic carts. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/541\"\u003ereviewed\u003c/a\u003e by Manuel Ramon, and James Hunter.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following twenty-nine packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/av\" title=\"Working with Audio and Video in R\"\u003eav\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/av/releases/tag/v0.8.0\"\u003e\u003ccode\u003ev0.8.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/babette\" title=\"Control BEAST2\"\u003ebabette\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/babette/releases/tag/v2.3.2\"\u003e\u003ccode\u003ev2.3.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/beastier\" title=\"Call BEAST2\"\u003ebeastier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beastier/releases/tag/v2.4.11\"\u003e\u003ccode\u003ev2.4.11\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/beautier\" title=\"BEAUti from R\"\u003ebeautier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beautier/releases/tag/v.2.6.5\"\u003e\u003ccode\u003ev.2.6.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (cff) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v0.2.3\"\u003e\u003ccode\u003ev0.2.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/circle\" title=\"R Client Package for Circle CI\"\u003ecircle\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/circle/releases/tag/v0.7.2\"\u003e\u003ccode\u003ev0.7.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/datefixR\" title=\"Standardize Dates in Different Formats or with Missing Data\"\u003edatefixR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/datefixR/releases/tag/v1.1.0\"\u003e\u003ccode\u003ev1.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/drake\" title=\"A Pipeline Toolkit for Reproducible Computation at Scale\"\u003edrake\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/drake/releases/tag/7.13.4\"\u003e\u003ccode\u003e7.13.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/epair\" title=\"EPA Data Helper for R\"\u003eepair\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/epair/releases/tag/v1.1.0\"\u003e\u003ccode\u003ev1.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/getCRUCLdata\" title=\"CRU CL v. 2.0 Climatology Client\"\u003egetCRUCLdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/getCRUCLdata/releases/tag/v0.3.3\"\u003e\u003ccode\u003ev0.3.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gittargets\" title=\"Data Version Control for the Targets Package\"\u003egittargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gittargets/releases/tag/0.0.4\"\u003e\u003ccode\u003e0.0.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/GSODR\" title=\"Global Surface Summary of the Day (GSOD) Weather Data Client\"\u003eGSODR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/GSODR/releases/tag/v3.1.5\"\u003e\u003ccode\u003ev3.1.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/mauricer\" title=\"Work with BEAST2 Packages\"\u003emauricer\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/mauricer/releases/tag/v2.5.2\"\u003e\u003ccode\u003ev2.5.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/mctq\" title=\"Tools to Process the Munich ChronoType Questionnaire (MCTQ)\"\u003emctq\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/mctq/releases/tag/v0.3.0\"\u003e\u003ccode\u003ev0.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nasapower\" title=\"NASA POWER API Client\"\u003enasapower\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nasapower/releases/tag/v4.0.8\"\u003e\u003ccode\u003ev4.0.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.8.1\"\u003e\u003ccode\u003ev0.8.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/occCite\" title=\"Querying and Managing Large Biodiversity Occurrence Datasets\"\u003eoccCite\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/occCite/releases/tag/v0.5.6\"\u003e\u003ccode\u003ev0.5.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rdhs\" title=\"API Client and Dataset Management for the Demographic and Health Survey (DHS) Data\"\u003erdhs\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rdhs/releases/tag/0.7.5\"\u003e\u003ccode\u003e0.7.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rglobi\" title=\"R Interface to Global Biotic Interactions\"\u003erglobi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rglobi/releases/tag/v0.2.28\"\u003e\u003ccode\u003ev0.2.28\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/spiro\" title=\"Manage Data from Cardiopulmonary Exercise Testing\"\u003espiro\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/spiro/releases/tag/v0.1.0\"\u003e\u003ccode\u003ev0.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stantargets\" title=\"Targets for Stan Workflows\"\u003estantargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stantargets/releases/tag/0.0.5\"\u003e\u003ccode\u003e0.0.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stplanr\" title=\"Sustainable Transport Planning\"\u003estplanr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stplanr/releases/tag/v1.0.1\"\u003e\u003ccode\u003ev1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.7.0\"\u003e\u003ccode\u003e0.7.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Workflows\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/0.13.1\"\u003e\u003ccode\u003e0.13.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/terrainr\" title=\"Landscape Visualizations in R and Unity\"\u003eterrainr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/terrainr/releases/tag/v0.7.1\"\u003e\u003ccode\u003ev0.7.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tidyhydat\" title=\"Extract and Tidy Canadian Hydrometric Data\"\u003etidyhydat\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidyhydat/releases/tag/0.5.6\"\u003e\u003ccode\u003e0.5.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tidytags\" title=\"Importing and Analyzing Twitter Data Collected with Twitter Archiving Google Sheets\"\u003etidytags\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidytags/releases/tag/v1.0.2\"\u003e\u003ccode\u003ev1.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tinkr\" title=\"Cast (R)Markdown Files to XML and Back Again\"\u003etinkr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tinkr/releases/tag/0.1.0\"\u003e\u003ccode\u003e0.1.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/unifir\" title=\"A Unifying API for Calling the Unity 3D Video Game Engine\"\u003eunifir\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/unifir/releases/tag/v0.2.2\"\u003e\u003ccode\u003ev0.2.2\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are sixteen recently closed and active submissions and 1 submission on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/541\"\u003espiro\u003c/a\u003e, Manage Data from Cardiopulmonary Exercise Testing. Submitted by \u003ca href=\"https://github.com/smnnlt\"\u003eSimon Nolte\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román Palacios\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/524\"\u003ehudr\u003c/a\u003e, A R interface for accessing HUD (US Department of Housing and Urban Development) APIs. Submitted by \u003ca href=\"https://github.com/etam4260/etam4260\"\u003eEmmet Tam\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/550\"\u003emelt\u003c/a\u003e, Multiple Empirical Likelihood Tests. Submitted by \u003ca href=\"https://github.com/markean\"\u003eEunseop Kim\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/535\"\u003edaiquiri\u003c/a\u003e, Data Quality Reporting for Temporal Datasets. Submitted by \u003ca href=\"https://github.com/phuongquan\"\u003ePhuong Quan\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/475\"\u003ecanaper\u003c/a\u003e, Categorical Analysis of Neo- And Paleo-Endemism. Submitted by \u003ca href=\"https://joelnitta.com\"\u003eJoel Nitta\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/433\"\u003eROriginStamp\u003c/a\u003e, Interface to OriginStamp API to Obtain Trusted Time Stamps. Submitted by \u003ca href=\"https://github.com/rkrug\"\u003eRainer M Krug\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/553\"\u003edataset\u003c/a\u003e, Create Data Frames that are Easier to Exchange and Reuse. Submitted by \u003ca href=\"http://nl.linkedin.com/in/antaldaniel/\"\u003eDaniel Antal\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/532\"\u003eaorsf\u003c/a\u003e, Accelerated Oblique Random Survival Forests. Submitted by \u003ca href=\"https://github.com/bcjaeger\"\u003eByron\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"http://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/532\"\u003eaorsf\u003c/a\u003e, Accelerated Oblique Random Survival Forests. Submitted by \u003ca href=\"https://github.com/bcjaeger\"\u003eByron\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/554\"\u003edynamite\u003c/a\u003e, Bayesian Modeling and Causal Inference for Multivariate. Submitted by \u003ca href=\"http://users.jyu.fi/~santikka/\"\u003eSanttu Tikka\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/08/02/working-with-qualtrics-data-importing\"\u003eWorking with Qualtrics Data - Part 1: Importing Data\u003c/a\u003e by Jeffrey Stevens. This post summarizes how to use the qualtRics package to import Qualtrics data.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/08/09/working-with-qualtrics-data-excluding\"\u003eWorking with Qualtrics Data - Part 2: Excluding Data\u003c/a\u003e by Jeffrey Stevens. This post summarizes how to use the excluder package to exclude survey data.\u003cfigure\u003e\u003cimg src=\"/blog/2022/08/26/ropensci-news-digest-august-2022/excluder_hex.png\"\t\t\talt=\"Hex sticker for excluder package, which has lines representing rows and red Xes representing excluded rows.\" width=\"400\"\u003e\u003c/figure\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"other-topics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-topics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOther topics\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2022/07/26/package-yfr\"\u003eNew Package yfR\u003c/a\u003e by Marcelo S. Perlin. A simple tutorial for package yfR.\u003cfigure\u003e\u003cimg src=\"/blog/2022/08/26/ropensci-news-digest-august-2022/manystocks-1.png\"\t\t\talt=\"Free stock price data with yfR\" width=\"400\"\u003e\u003c/figure\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2022/07/21/rtweet-1-0-0\"\u003eUpgrading rtweet\u003c/a\u003e by Lluís Revilla Sancho. Update from rtweet 0.7.0 to 1.0.2.\u003c/li\u003e\u003c/ul\u003e\u003c!--## Use cases`snakecase::to_sentence_case(english(length(usecases)))` use case`if (length(usecases) \u003e 1) \"s\"` of our packages and resources ha`if (length(usecases) \u003e 1) \"ve\" else \"s\"` been reported since we sent the last newsletter.Explore [other use cases](/usecases) and [report your own](https://discuss.ropensci.org/c/usecases/10)!--\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eWe\u0026rsquo;re looking for a new maintainer, or a new maintainer \u003cem\u003eteam\u003c/em\u003e, for each of the following packages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/tabulizer/\"\u003etabulizer\u003c/a\u003e, Extract Tables from PDFs. \u003ca href=\"https://github.com/ropensci/tabulizer/issues/148\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/RSelenium/\"\u003eRSelenium\u003c/a\u003e, Automate browsers locally or remotely (for instance for webscraping). \u003ca href=\"https://github.com/ropensci/RSelenium/issues/261\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/nbaR/\"\u003enbaR\u003c/a\u003e, R client library for the Netherlands Biodiversity Api (NBA). \u003ca href=\"https://github.com/ropensci/nbaR/issues/64\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/elastic/\"\u003eelastic\u003c/a\u003e, R client for the Elasticsearch HTTP API. \u003ca href=\"https://github.com/ropensci/elastic/issues/292\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIf you\u0026rsquo;re interested, please comment in the issues or email \u003ccode\u003einfo@ropensci.org\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eFor more info, see\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://devguide.ropensci.org/changing-maintainers.html\"\u003eour guidance on \u003cem\u003eChanging package maintainers\u003c/em\u003e\u003c/a\u003e;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://devguide.ropensci.org/curationpolicy.html\"\u003eour \u003cem\u003ePackage Curation Policy\u003c/em\u003e\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"test-your-shiny-app-with-shinytest2\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#test-your-shiny-app-with-shinytest2\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTest your Shiny app with shinytest2!\u003c/h3\u003e\u003cp\u003eBarret Schloerke developed a new package for testing Shiny apps, \u003ca href=\"https://rstudio.github.io/shinytest2\"\u003eshinytest2\u003c/a\u003e.It was presented in a \u003ca href=\"https://www.rstudio.com/conference/2022/talks/shinytest2-unit-testing-for-shiny/\"\u003erecorded RStudio conf talk\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"comparing-package-versions-with-diffify\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#comparing-package-versions-with-diffify\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eComparing package versions with Diffify\u003c/h3\u003e\u003cp\u003eDiffify by Jumping Rivers provides you with a comparison between different versions of any R package stored on CRAN.Colin Gillespie presented it in a \u003ca href=\"https://www.rstudio.com/conference/2022/talks/comparing-package-versions-diffify/\"\u003erecorded RStudio conf talk\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"pkgdown-missing-topics-or-missing-articles\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pkgdown-missing-topics-or-missing-articles\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003epkgdown missing topics or missing articles\u003c/h3\u003e\u003cp\u003eIf pkgdown complains about missing reference topics or articles:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eEdit \u003ccode\u003e_pkgdown.yml\u003c/code\u003e (see \u003ca href=\"https://pkgdown.r-lib.org/reference/build_reference.html#reference-index\"\u003e\u003ccode\u003e?pkgdown::build_reference\u003c/code\u003e\u003c/a\u003e \u0026ndash; you can \u003cem\u003echoose\u003c/em\u003e to omit topics; \u003ca href=\"https://pkgdown.r-lib.org/reference/build_articles.html#index-and-navbar\"\u003e\u003ccode\u003e?pkgdown::build_articles\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThen check everything is ok with \u003ca href=\"https://pkgdown.r-lib.org/reference/check_pkgdown.html\"\u003e\u003ccode\u003epkgdown::check_pkgdown\u003c/code\u003e\u003c/a\u003e. This is faster than rebuilding the whole site to check the configuration!\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/08/26/ropensci-news-digest-august-2022/","date_published":"2022-08-26T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/6j9e7-fr071 ","title":"Working with Qualtrics Data - Part 2: Excluding Data","language":"en","authors":[{"name":"Jeffrey Stevens","url":"https://orcid.org/0000-0003-2375-1360","avatar":"https://github.com/JeffreyRStevens.png","_role":["author"]}],"tags":["beginner","community","data munging","excluder","qualtrics","packages","Software Peer Review","survey data"],"content_html":"\u003cp\u003eIn the \u003ca href=\"/blog/2022/08/02/working-with-qualtrics-data-importing/\"\u003elast post\u003c/a\u003e, we used the \u003ca href=\"https://docs.ropensci.org/qualtRics/\"\u003equaltRics\u003c/a\u003e\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e package to import survey data directly from \u003ca href=\"https://www.qualtrics.com/\"\u003eQualtrics\u003c/a\u003e accounts.I often use Qualtrics for survey data collected via \u003ca href=\"https://www.mturk.com/\"\u003eAmazon’s Mechanical Turk\u003c/a\u003e, which is an automated system that connects online respondents to paid surveys.However, sometimes those data are not super useful because the quality of the data is poor.In the anonymous, large-scale market of online survey respondents, the financial incentives for completing surveys attract respondents who blast through the study just to collect the money or, worse, automated bots programmed to act like humans and reap the incentives. 🤖As a scientist, I’m collecting survey data to understand human nature, so I’m looking for honest responses.But low-quality data can be common in online surveys, and not just on Mechanical Turk\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eThere are some cues that data may come from bots, such as entries originating from outside of your specified country or multiple entries coming from the same IP address.Cues of inattentive human participants include not completing the survey, completing it very quickly or slowly, or ignoring your requests to use specific types of devices (e.g., desktop computers not phones or tablets).I call these kinds of cues \u003cem\u003emetadata\u003c/em\u003e because they are not direct responses from the respondents but are information about \u003cem\u003ehow\u003c/em\u003e the respondent took the survey.After repeatedly creating filters to deal with these problematic metadata, I formalized them into my first R package called \u003ca href=\"https://docs.ropensci.org/excluder/\"\u003eexcluder\u003c/a\u003e\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eIn Part 2 of this series, we’ll use excluder to remove potentially problematic metadata. First, we’ll learn how to set up your Qualtrics survey to collect the relevant information. Then we’ll learn how to mark, check, and exclude observations based on the metadata. Finally, we’ll clean up our data sets by deidentifying them.\u003c/p\u003e\u003ch2 id=\"before-collecting-your-data\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#before-collecting-your-data\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBefore collecting your data\u003c/h2\u003e\u003cp\u003eAs a reminder, excluder focuses on \u003cem\u003emetadata\u003c/em\u003e about an entry rather than the actual responses.If you have particular questions from your specific survey that you want to use to exclude data (for example, questions specifically designed to check the attentiveness of respondents), you should use regular subset/filter functions from \u003ca href=\"https://rdrr.io/r/base/subset.html\"\u003ebase R\u003c/a\u003e or \u003ca href=\"https://dplyr.tidyverse.org/reference/filter.html\"\u003edplyr\u003c/a\u003e.Here, we’re focusing on metadata collected about your survey respondents.\u003c/p\u003e\u003cp\u003eBut to use this metadata, you must first collect it! Though the excluder package can work with metadata from other survey systems (e.g., SurveyMonkey), we’ll focus on data coming from Qualtrics surveys. There are two options in Qualtrics that allow you to collect the metadata that excluder can work with.\u003c/p\u003e\u003ch3 id=\"anonymous-vsnon-anonymous-data\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#anonymous-vsnon-anonymous-data\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAnonymous vs. non-anonymous data\u003c/h3\u003e\u003cp\u003eFirst, Qualtrics can collect either anonymous or non-anonymous data.Non-anonymous data include IP address, geolocation, and contact information provided by you (if you have Qualtrics email your respondents).To collect non-anonymous data, you must toggle the switch \u003cem\u003eOff\u003c/em\u003e under \u003cem\u003eSurvey\u003c/em\u003e \u0026gt; \u003cem\u003eOptions\u003c/em\u003e \u0026gt; \u003cem\u003eSecurity\u003c/em\u003e \u0026gt; \u003ca href=\"https://www.qualtrics.com/support/survey-platform/survey-module/survey-options/survey-protection/#AnonymizingResponses\"\u003e\u003cem\u003eAnonymize responses\u003c/em\u003e\u003c/a\u003e.If you collect non-anonymous data, just make sure that respondents know that you’re collecting their IP address and location\u003csup id=\"fnref:4\"\u003e\u003ca href=\"#fn:4\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e4\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2022/08/09/working-with-qualtrics-data-excluding/qualtrics_anonymize.png\"\t\t\talt=\"A screenshot of Qualtrics Survey \u0026gt; Options \u0026gt; Security tab.\" width=\"600\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eSource: Jeffrey Stevens\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch3 id=\"computer-metadata\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#computer-metadata\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eComputer metadata\u003c/h3\u003e\u003cp\u003eIn addition to IP address and location, Qualtrics can also collect information about the computer environment that respondents use to take your survey, such as operating system, browser type and version, and screen resolution.To collect the \u003ca href=\"https://www.qualtrics.com/support/survey-platform/survey-module/editing-questions/question-types-guide/advanced/meta-info-question/\"\u003ecomputer metadata\u003c/a\u003e, you must create a question in your survey in a block that already has another question.Click \u003cem\u003eAdd a new question\u003c/em\u003e and select the \u003cem\u003eMeta info\u003c/em\u003e question type.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2022/08/09/working-with-qualtrics-data-excluding/qualtrics_metadata.png\"\t\t\talt=\"A screenshot of adding a Meta info question to a Qualtrics survey.\" width=\"600\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eSource: Jeffrey Stevens\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"removing-problematic-data\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#removing-problematic-data\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRemoving problematic data\u003c/h2\u003e\u003cp\u003eNow that we’ve collected the proper metadata, we can use it to deal with potentially problematic data.\u003c/p\u003e\u003ch3 id=\"metadata\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#metadata\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMetadata\u003c/h3\u003e\u003cp\u003eHere are seven types of metadata that excluder works with, along with their tags that are used in excluder functions.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eQualtrics preview status\u003c/strong\u003e (\u003ccode\u003epreview\u003c/code\u003e):Qualtrics records data when you \u003ca href=\"https://www.qualtrics.com/support/survey-platform/survey-module/preview-survey/\"\u003epreview your survey\u003c/a\u003e before deploying it.You probably always want to remove preview data.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eSurvey progress\u003c/strong\u003e (\u003ccode\u003eprogress\u003c/code\u003e):Qualtrics tracks how much of the survey the respondent completes.excluder can detect surveys which are incomplete.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eSurvey completion time\u003c/strong\u003e (\u003ccode\u003eduration\u003c/code\u003e):Qualtrics records the number of seconds that the respondent works on the survey.excluder can detect completion times that are too fast or that take too long.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eIP address country\u003c/strong\u003e (\u003ccode\u003eip\u003c/code\u003e)\u003csup\u003e*\u003c/sup\u003e:If IP addresses are collected, they can determine the country of origin for the respondent.excluder can detect IP addresses outside of a specified country.Note, however, that VPNs can use IP addresses outside of the country of origin, so you must weigh the possibility of false alarms in detecting IP addresses from other countries.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eGeolocation in US\u003c/strong\u003e (\u003ccode\u003elocation\u003c/code\u003e)\u003csup\u003e*\u003c/sup\u003e:Qualtrics determines geolocation (latitude and longitude) through GPS or IP addresses.excluder can detect locations within the United States but cannot detect this for other countries at the moment.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eDuplicate IP address\u003c/strong\u003e (\u003ccode\u003eduplicates\u003c/code\u003e)\u003csup\u003e*\u003c/sup\u003e:Automated bots may spam your survey from the same IP address.excluder detects if the same IP address shows up repeatedly in your data.Note, however, that duplicate IP addresses may be legitimately different respondents using the same computer or recycled dynamic IP address in the same household, dormitory, or business.So you must weigh the costs of losing good data against the benefits of removing bad data.\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eScreen resolution\u003c/strong\u003e (\u003ccode\u003eresolution\u003c/code\u003e)\u003csup\u003e**\u003c/sup\u003e:Sometimes, you may request that respondents use a particular kind of device for your survey, such as a desktop computer rather than a phone or tablet.excluder can assess screen resolution to detect respondents who may be using the wrong type of device.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003csup\u003e*\u003c/sup\u003e You must have enabled \u003ca href=\"https://www.qualtrics.com/support/survey-platform/survey-module/survey-options/survey-protection/#AnonymizingResponses\"\u003enon-anonymized data\u003c/a\u003e in Qualtrics to collect these metadata.\u003c/p\u003e\u003cp\u003e\u003csup\u003e**\u003c/sup\u003e You must have included the \u003ca href=\"https://www.qualtrics.com/support/survey-platform/survey-module/editing-questions/question-types-guide/advanced/meta-info-question/\"\u003ecomputer metadata question\u003c/a\u003e in Qualtrics to collect these metadata.\u003c/p\u003e\u003ch3 id=\"marking-rows\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#marking-rows\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMarking rows\u003c/h3\u003e\u003cp\u003eOK, now that we know what kind of metadata we can work with, what do we do with them?The excluder package can do three actions on the metadata: mark, check, or exclude.The mark functions are the backbone of the package.Mark functions make new columns with the metadata criteria output appended to the existing data frame.So you pass a data frame to the mark functions to see which rows meet the metadata criteria.Mark function names simple prepend \u003ccode\u003emark_\u003c/code\u003e to the metadata tag. So, for example, the function that marks preview metadata (\u003ccode\u003epreview\u003c/code\u003e) is \u003ccode\u003emark_preview()\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eBefore we start marking, let’s look at an example data set that we can work with. The \u003ccode\u003equaltrics_text\u003c/code\u003e data set includes both non-anonymous and computer metadata. We’ll just look at the first six rows by piping to \u003ccode\u003ehead()\u003c/code\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eexcluder\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003equaltrics_text\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e##             StartDate             EndDate         Status    IPAddress Progress## 1 2020-12-11 12:06:52 2020-12-11 12:10:30 Survey Preview         \u0026lt;NA\u0026gt;      100## 2 2020-12-11 12:06:43 2020-12-11 12:11:27 Survey Preview         \u0026lt;NA\u0026gt;      100## 3 2020-12-11 12:17:22 2020-12-11 12:21:41     IP Address   73.23.43.0      100## 4 2020-12-11 12:17:41 2020-12-11 12:22:07     IP Address 16.140.105.0      100## 5 2020-12-11 12:19:45 2020-12-11 12:23:16     IP Address 107.57.244.0      100## 6 2020-12-11 12:37:51 2020-12-11 12:43:09     IP Address 15.232.167.0      100##   Duration (in seconds) Finished        RecordedDate        ResponseId## 1                   465     TRUE 2020-12-11 12:10:30 R_xLWiuPaNuURSFXY## 2                   545     TRUE 2020-12-11 12:11:27 R_Q5lqYw6emJQZx2o## 3                   651     TRUE 2020-12-11 12:21:42 R_fbYBeNscosfzN9L## 4                   409     TRUE 2020-12-11 12:22:07 R_yyG1HGXOMNPfWDn## 5                   140     TRUE 2020-12-11 12:23:16 R_9dnzH1VI9mf8gle## 6                   213     TRUE 2020-12-11 12:43:09 R_1BoPF5igdMw536H##   LocationLatitude LocationLongitude UserLanguage Browser      Version## 1         29.73694         -94.97599           EN  Chrome 88.0.4324.41## 2         39.74107        -121.82490           EN  Chrome 88.0.4324.50## 3         34.03852        -118.25739           EN  Chrome 87.0.4280.88## 4         44.96581         -93.07187           EN  Chrome 87.0.4280.88## 5         27.98064         -82.78531           EN  Chrome 87.0.4280.88## 6         29.76499         -95.36156           EN  Chrome 87.0.4280.88##   Operating System Resolution## 1  Windows NT 10.0   1366x768## 2        Macintosh  1680x1050## 3  Windows NT 10.0   1366x768## 4  Windows NT 10.0   1536x864## 5  Windows NT 10.0   1536x864## 6  Windows NT 10.0   1366x768\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eBy looking at the \u003ccode\u003eStatus\u003c/code\u003e column, we can already see that the first two rows are previews. Let’s see what \u003ccode\u003emark_preview()\u003c/code\u003e does by applying it to the \u003ccode\u003equaltrics_text\u003c/code\u003e data.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003emark_preview\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003equaltrics_text\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e## ℹ 2 rows were collected as previews. It is highly recommended to exclude these rows before further processing.##             StartDate             EndDate         Status    IPAddress Progress## 1 2020-12-11 12:06:52 2020-12-11 12:10:30 Survey Preview         \u0026lt;NA\u0026gt;      100## 2 2020-12-11 12:06:43 2020-12-11 12:11:27 Survey Preview         \u0026lt;NA\u0026gt;      100## 3 2020-12-11 12:17:22 2020-12-11 12:21:41     IP Address   73.23.43.0      100## 4 2020-12-11 12:17:41 2020-12-11 12:22:07     IP Address 16.140.105.0      100## 5 2020-12-11 12:19:45 2020-12-11 12:23:16     IP Address 107.57.244.0      100## 6 2020-12-11 12:37:51 2020-12-11 12:43:09     IP Address 15.232.167.0      100##   Duration (in seconds) Finished        RecordedDate        ResponseId## 1                   465     TRUE 2020-12-11 12:10:30 R_xLWiuPaNuURSFXY## 2                   545     TRUE 2020-12-11 12:11:27 R_Q5lqYw6emJQZx2o## 3                   651     TRUE 2020-12-11 12:21:42 R_fbYBeNscosfzN9L## 4                   409     TRUE 2020-12-11 12:22:07 R_yyG1HGXOMNPfWDn## 5                   140     TRUE 2020-12-11 12:23:16 R_9dnzH1VI9mf8gle## 6                   213     TRUE 2020-12-11 12:43:09 R_1BoPF5igdMw536H##   LocationLatitude LocationLongitude UserLanguage Browser      Version## 1         29.73694         -94.97599           EN  Chrome 88.0.4324.41## 2         39.74107        -121.82490           EN  Chrome 88.0.4324.50## 3         34.03852        -118.25739           EN  Chrome 87.0.4280.88## 4         44.96581         -93.07187           EN  Chrome 87.0.4280.88## 5         27.98064         -82.78531           EN  Chrome 87.0.4280.88## 6         29.76499         -95.36156           EN  Chrome 87.0.4280.88##   Operating System Resolution exclusion_preview## 1  Windows NT 10.0   1366x768           preview## 2        Macintosh  1680x1050           preview## 3  Windows NT 10.0   1366x768                  ## 4  Windows NT 10.0   1536x864                  ## 5  Windows NT 10.0   1536x864                  ## 6  Windows NT 10.0   1366x768\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThere are two important outputs.First, we have an informational message telling us that \u003cem\u003e2 rows were collected as previews\u003c/em\u003e.Each mark function will output this kind of message letting us know how many rows meet each metadata criterion.Second, we now have a new column called \u003ccode\u003eexclusion_preview\u003c/code\u003e appended to the data frame.Notice that the first two rows of that column have \u003ccode\u003epreview\u003c/code\u003e values while the rest of the rows are blank.We have now marked which rows meet this metadata criterion. ☑️\u003c/p\u003e\u003cp\u003eOf course, you may want to mark your data for multiple metadata criteria.To do this, you simply have to connect multiple mark functions with a pipe (either \u003ca href=\"https://rdrr.io/r/base/pipeOp.html\"\u003ebase R’s \u003ccode\u003e|\u0026gt;\u003c/code\u003e\u003c/a\u003e or \u003ca href=\"https://magrittr.tidyverse.org/reference/pipe.html\"\u003emagrittr’s %\u0026gt;%\u003c/a\u003e).So if we want to mark preview data and all rows where the completion duration is less than 200 seconds or more than 600 seconds, we just chain these together.In fact, we can also pull the data frame out of functions as well.Note that for clarity, I use the \u003ca href=\"https://dplyr.tidyverse.org/reference/select.html\"\u003e\u003ccode\u003eselect()\u003c/code\u003e\u003c/a\u003e function from \u003ca href=\"https://dplyr.tidyverse.org/reference/select.html\"\u003edplyr\u003c/a\u003e to show just a subset of columns and rows.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003equaltrics_text\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emark_preview\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emark_duration\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emin_duration\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e200\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_duration\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e600\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eStatus\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003e`Duration \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kr\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eseconds\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"n\"\u003e`\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eexclusion_preview\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eexclusion_duration\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e## ℹ 2 rows were collected as previews. It is highly recommended to exclude these rows before further processing.## ℹ 23 out of 100 rows took less time than 200.## ℹ 8 out of 100 rows took more time than 600.##           Status Duration (in seconds) exclusion_preview exclusion_duration## 1 Survey Preview                   465           preview                   ## 2 Survey Preview                   545           preview                   ## 3     IP Address                   651                        duration_slow## 4     IP Address                   409                                     ## 5     IP Address                   140                       duration_quick## 6     IP Address                   213\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow we have three messages regarding rows that meet the criteria: one for previews, one for short completion times, and one for long completion times.We also now have a new \u003ccode\u003eexclusion_duration\u003c/code\u003e column added that marks rows that are too quick or too slow.\u003c/p\u003e\u003cp\u003eYou can pipe together as many mark functions as you would like to get a feel for which data rows meet your different criteria.But adding a new column for each criterion can make it difficult to visualize everything together.If you want to combine all of your criteria into a single column, add the \u003ccode\u003eunite_exclusions()\u003c/code\u003e function at the end of the chain.Rows meeting multiple criteria will separate those criteria with commas.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003equaltrics_text\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emark_preview\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emark_duration\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emin_duration\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e200\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_duration\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e600\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eunite_exclusions\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eStatus\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003e`Duration \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"kr\"\u003ein\u003c/span\u003e \u003cspan class=\"n\"\u003eseconds\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"n\"\u003e`\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eexclusions\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e## ℹ 2 rows were collected as previews. It is highly recommended to exclude these rows before further processing.## ℹ 23 out of 100 rows took less time than 200.## ℹ 8 out of 100 rows took more time than 600.##           Status Duration (in seconds)     exclusions## 1 Survey Preview                   465        preview## 2 Survey Preview                   545        preview## 3     IP Address                   651  duration_slow## 4     IP Address                   409               ## 5     IP Address                   140 duration_quick## 6     IP Address                   213\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"checking-rows\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#checking-rows\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChecking rows\u003c/h3\u003e\u003cp\u003eThe mark functions are nice to view rows that meet all of your different criteria, but it can be unwieldy to use this if you have large data sets or sparse cases that meet criteria.The \u003ccode\u003echeck\u003c/code\u003e functions help with this by extracting only the rows that meet the criterion.So you can view just the problematic data.Here we use \u003ccode\u003echeck_progress()\u003c/code\u003e to extract the rows with progress percentages less than 100.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003equaltrics_text\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003echeck_progress\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e## ℹ 6 out of 100 rows did not complete the study.##             StartDate             EndDate     Status    IPAddress Progress## 1 2020-12-17 15:40:53 2020-12-17 15:43:25 IP Address   22.51.31.0       99## 2 2020-12-17 15:40:56 2020-12-17 15:46:23 IP Address 71.146.112.0        1## 3 2020-12-17 15:41:52 2020-12-17 15:46:37 IP Address   15.223.0.0       13## 4 2020-12-17 15:41:27 2020-12-17 15:46:45 IP Address  19.127.87.0       48## 5 2020-12-17 15:49:42 2020-12-17 15:51:50 IP Address 40.146.247.0        5## 6 2020-12-17 15:49:28 2020-12-17 15:55:06 IP Address   2.246.67.0       44##   Duration (in seconds) Finished        RecordedDate        ResponseId## 1                   879    FALSE 2020-12-17 15:43:25 R_AkQyJypPyjgribz## 2                   627    FALSE 2020-12-17 15:46:23 R_1cvaTAoXO7XW1vi## 3                    40    FALSE 2020-12-17 15:46:37 R_Dx6w74UfhnGhAmj## 4                    74    FALSE 2020-12-17 15:46:46 R_ewyyOOPADLGo9xZ## 5                   307    FALSE 2020-12-17 15:51:50 R_HFKclPO5wWGNsFs## 6                   355    FALSE 2020-12-17 15:55:06 R_UfSQq1VXYkVcxdJ##   LocationLatitude LocationLongitude UserLanguage Browser      Version## 1         37.28265        -120.50248           EN  Chrome 87.0.4280.88## 2         34.03605        -117.04066           EN    \u0026lt;NA\u0026gt;         \u0026lt;NA\u0026gt;## 3         34.77804         -84.96198           DE  Chrome 83.0.4103.61## 4         33.66715        -117.82543           EN  Chrome 87.0.4280.88## 5         29.29882         -81.04289           EN Firefox         81.0## 6         37.79058        -121.96737           EN  Chrome 87.0.4280.67##   Operating System Resolution## 1  Windows NT 10.0   1366x768## 2             \u0026lt;NA\u0026gt;       \u0026lt;NA\u0026gt;## 3  Windows NT 10.0   1366x768## 4  Windows NT 10.0   1188x668## 5  Windows NT 10.0   1366x768## 6        Macintosh   1280x800\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe check functions are useful for viewing rows meeting individual criteria.But you probably do not want to pipe multiple check functions together because each function outputs only the subset of the data that meets that criterion.So piping multiple check functions returns the rows that meet all of the criteria at once (the \u003cem\u003eintersection\u003c/em\u003e of the criteria in set theory lingo).\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2022/08/09/working-with-qualtrics-data-excluding/check_venn.png\"\t\t\talt=\"A Venn diagram of multiple check functions overlapping with an arrow pointing to the intersection.\" width=\"400\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eSource: Jeffrey Stevens\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch3 id=\"excluding-rows\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#excluding-rows\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExcluding rows\u003c/h3\u003e\u003cp\u003eAfter marking and/or checking our data, we may have decided which rows we want to remove.For this, we use the \u003ccode\u003eexclude\u003c/code\u003e functions.For instance to exclude all rows that come from the same IP address, we use the \u003ccode\u003eexclude_duplicates()\u003c/code\u003e function.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003equaltrics_text\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eexclude_duplicates\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e## ℹ 10 out of 100 duplicate rows were excluded, leaving 90 rows.##             StartDate             EndDate         Status    IPAddress Progress## 1 2020-12-11 12:06:52 2020-12-11 12:10:30 Survey Preview         \u0026lt;NA\u0026gt;      100## 2 2020-12-11 12:06:43 2020-12-11 12:11:27 Survey Preview         \u0026lt;NA\u0026gt;      100## 3 2020-12-11 12:17:22 2020-12-11 12:21:41     IP Address   73.23.43.0      100## 4 2020-12-11 12:17:41 2020-12-11 12:22:07     IP Address 16.140.105.0      100## 5 2020-12-11 12:19:45 2020-12-11 12:23:16     IP Address 107.57.244.0      100## 6 2020-12-11 12:37:51 2020-12-11 12:43:09     IP Address 15.232.167.0      100##   Duration (in seconds) Finished        RecordedDate        ResponseId## 1                   465     TRUE 2020-12-11 12:10:30 R_xLWiuPaNuURSFXY## 2                   545     TRUE 2020-12-11 12:11:27 R_Q5lqYw6emJQZx2o## 3                   651     TRUE 2020-12-11 12:21:42 R_fbYBeNscosfzN9L## 4                   409     TRUE 2020-12-11 12:22:07 R_yyG1HGXOMNPfWDn## 5                   140     TRUE 2020-12-11 12:23:16 R_9dnzH1VI9mf8gle## 6                   213     TRUE 2020-12-11 12:43:09 R_1BoPF5igdMw536H##   LocationLatitude LocationLongitude UserLanguage Browser      Version## 1         29.73694         -94.97599           EN  Chrome 88.0.4324.41## 2         39.74107        -121.82490           EN  Chrome 88.0.4324.50## 3         34.03852        -118.25739           EN  Chrome 87.0.4280.88## 4         44.96581         -93.07187           EN  Chrome 87.0.4280.88## 5         27.98064         -82.78531           EN  Chrome 87.0.4280.88## 6         29.76499         -95.36156           EN  Chrome 87.0.4280.88##   Operating System Resolution## 1  Windows NT 10.0   1366x768## 2        Macintosh  1680x1050## 3  Windows NT 10.0   1366x768## 4  Windows NT 10.0   1536x864## 5  Windows NT 10.0   1536x864## 6  Windows NT 10.0   1366x768\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis leaves all rows except the ones that meet the criterion, in this case, the 10 rows out of 100 that have duplicate IP addresses.The exclude functions are like the opposite of the check functions.Therefore, we can pipe multiple exclude functions together to remove data based on multiple metadata criteria.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003equaltrics_text\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eexclude_preview\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eexclude_progress\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eexclude_duplicates\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eexclude_duration\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emin_duration\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eexclude_resolution\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eexclude_ip\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eexclude_location\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e## ℹ 2 out of 100 preview rows were excluded, leaving 98 rows.## ℹ 6 out of 98 rows with incomplete progress were excluded, leaving 92 rows.## ℹ 9 out of 92 duplicate rows were excluded, leaving 83 rows.## ℹ 2 out of 83 rows of short and/or long duration were excluded, leaving 81 rows.## ℹ 3 out of 81 rows with unacceptable screen resolution were excluded, leaving 78 rows.## ℹ 2 out of 78 rows with IP addresses outside of US were excluded, leaving 76 rows.## ℹ 4 out of 76 rows outside of the US were excluded, leaving 72 rows.##             StartDate             EndDate     Status    IPAddress Progress## 1 2020-12-11 12:17:22 2020-12-11 12:21:41 IP Address   73.23.43.0      100## 2 2020-12-11 12:17:41 2020-12-11 12:22:07 IP Address 16.140.105.0      100## 3 2020-12-11 12:19:45 2020-12-11 12:23:16 IP Address 107.57.244.0      100## 4 2020-12-11 12:37:51 2020-12-11 12:43:09 IP Address 15.232.167.0      100## 5 2020-12-11 12:37:04 2020-12-11 12:45:50 IP Address  98.75.201.0      100## 6 2020-12-11 13:22:34 2020-12-11 13:35:19 IP Address 17.163.199.0      100##   Duration (in seconds) Finished        RecordedDate        ResponseId## 1                   651     TRUE 2020-12-11 12:21:42 R_fbYBeNscosfzN9L## 2                   409     TRUE 2020-12-11 12:22:07 R_yyG1HGXOMNPfWDn## 3                   140     TRUE 2020-12-11 12:23:16 R_9dnzH1VI9mf8gle## 4                   213     TRUE 2020-12-11 12:43:09 R_1BoPF5igdMw536H## 5                   662     TRUE 2020-12-11 12:45:51 R_6OZ4weICjHVtEkg## 6                   277     TRUE 2020-12-11 13:35:19 R_ed0N9zgbymHSLLd##   LocationLatitude LocationLongitude UserLanguage Browser      Version## 1         34.03852        -118.25739           EN  Chrome 87.0.4280.88## 2         44.96581         -93.07187           EN  Chrome 87.0.4280.88## 3         27.98064         -82.78531           EN  Chrome 87.0.4280.88## 4         29.76499         -95.36156           EN  Chrome 87.0.4280.88## 5         29.41433         -98.50342           EN    Edge  84.0.522.52## 6         33.41401        -111.55062           EN Firefox         83.0##   Operating System Resolution## 1  Windows NT 10.0   1366x768## 2  Windows NT 10.0   1536x864## 3  Windows NT 10.0   1536x864## 4  Windows NT 10.0   1366x768## 5  Windows NT 10.0  1920x1080## 6  Windows NT 10.0   1440x900\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAs we exclude, the messages tell us how many rows are returned from each functions, so we can see how the data frame gets smaller at each step.While the order of the functions shouldn’t influence the final data frame output, it might make sense to use criteria with many exclusions early to speed processing of subsequent exclusions.\u003c/p\u003e\u003ch2 id=\"deidentifying-data\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#deidentifying-data\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDeidentifying data\u003c/h2\u003e\u003cp\u003eCongratulations—we have now removed all of our problematic data! 🎉However, those data frames may still have identifying information included in them (e.g., IP addresses and geolocation).Before we pass on the data set to others or post it publicly, we probably want to remove those identifying columns.excluder has a \u003ccode\u003edeidentify()\u003c/code\u003e function that quickly removes all metadata columns. 🥸\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003edeidentify\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003equaltrics_text\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e##             StartDate             EndDate         Status Progress## 1 2020-12-11 12:06:52 2020-12-11 12:10:30 Survey Preview      100## 2 2020-12-11 12:06:43 2020-12-11 12:11:27 Survey Preview      100## 3 2020-12-11 12:17:22 2020-12-11 12:21:41     IP Address      100## 4 2020-12-11 12:17:41 2020-12-11 12:22:07     IP Address      100## 5 2020-12-11 12:19:45 2020-12-11 12:23:16     IP Address      100## 6 2020-12-11 12:37:51 2020-12-11 12:43:09     IP Address      100##   Duration (in seconds) Finished        RecordedDate        ResponseId## 1                   465     TRUE 2020-12-11 12:10:30 R_xLWiuPaNuURSFXY## 2                   545     TRUE 2020-12-11 12:11:27 R_Q5lqYw6emJQZx2o## 3                   651     TRUE 2020-12-11 12:21:42 R_fbYBeNscosfzN9L## 4                   409     TRUE 2020-12-11 12:22:07 R_yyG1HGXOMNPfWDn## 5                   140     TRUE 2020-12-11 12:23:16 R_9dnzH1VI9mf8gle## 6                   213     TRUE 2020-12-11 12:43:09 R_1BoPF5igdMw536H\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can also use the \u003ccode\u003estrict = FALSE\u003c/code\u003e argument to only remove the non-anonymous columns, leaving the computer metadata.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003edeidentify\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003equaltrics_text\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estrict\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ehead\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e##             StartDate             EndDate         Status Progress## 1 2020-12-11 12:06:52 2020-12-11 12:10:30 Survey Preview      100## 2 2020-12-11 12:06:43 2020-12-11 12:11:27 Survey Preview      100## 3 2020-12-11 12:17:22 2020-12-11 12:21:41     IP Address      100## 4 2020-12-11 12:17:41 2020-12-11 12:22:07     IP Address      100## 5 2020-12-11 12:19:45 2020-12-11 12:23:16     IP Address      100## 6 2020-12-11 12:37:51 2020-12-11 12:43:09     IP Address      100##   Duration (in seconds) Finished        RecordedDate        ResponseId Browser## 1                   465     TRUE 2020-12-11 12:10:30 R_xLWiuPaNuURSFXY  Chrome## 2                   545     TRUE 2020-12-11 12:11:27 R_Q5lqYw6emJQZx2o  Chrome## 3                   651     TRUE 2020-12-11 12:21:42 R_fbYBeNscosfzN9L  Chrome## 4                   409     TRUE 2020-12-11 12:22:07 R_yyG1HGXOMNPfWDn  Chrome## 5                   140     TRUE 2020-12-11 12:23:16 R_9dnzH1VI9mf8gle  Chrome## 6                   213     TRUE 2020-12-11 12:43:09 R_1BoPF5igdMw536H  Chrome##        Version Operating System Resolution## 1 88.0.4324.41  Windows NT 10.0   1366x768## 2 88.0.4324.50        Macintosh  1680x1050## 3 87.0.4280.88  Windows NT 10.0   1366x768## 4 87.0.4280.88  Windows NT 10.0   1536x864## 5 87.0.4280.88  Windows NT 10.0   1536x864## 6 87.0.4280.88  Windows NT 10.0   1366x768\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eBefore the fun part of analyzing data, we often need to perform some more tedious steps. The \u003ca href=\"https://docs.ropensci.org/qualtRics/\"\u003equaltRics\u003c/a\u003e package is a huge help in automating the import of data into R.As we learned in \u003ca href=\"/blog/2022/08/02/working-with-qualtrics-data-importing/\"\u003ePart 1\u003c/a\u003e, after connecting to the Qualtrics API, we can quickly (and powerfully) import our Qualtrics data with the \u003ca href=\"https://docs.ropensci.org/qualtRics/reference/fetch_survey.html\"\u003e\u003ccode\u003efetch_survey()\u003c/code\u003e\u003c/a\u003e function.Once those data are imported, we can use the \u003ca href=\"https://docs.ropensci.org/excluder/\"\u003eexcluder\u003c/a\u003e package to deal with potentially problematic online survey data based on respondent metadata, using the mark, check, and exclude functions.Then we can deidentify our data set before continuing to work with it or passing it on to others.Combined, these two packages can improve your data workflow by automating import and early cleaning processes, leaving the fun part of data processing up to you!\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2022/08/09/working-with-qualtrics-data-excluding/happy_data.jpg\"\t\t\talt=\"A person sitting on a black couch with a laptop is looking left and smiling.\" width=\"600\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eSource: Brooke Cagle on \u003ca href=\"https://unsplash.com/photos/LCcFI_26diA\"\u003eUnsplash\u003c/a\u003e.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eIf you have ideas for improvements to the excluder package or if you find bugs, please \u003ca href=\"https://github.com/ropensci/excluder/issues\"\u003esubmit an issue\u003c/a\u003e on the \u003ca href=\"https://github.com/ropensci/excluder/\"\u003eexcluder GitHub repo\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"acknowledgments\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#acknowledgments\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAcknowledgments\u003c/h2\u003e\u003cp\u003eIn developing the excluder package, I thank \u003ca href=\"https://orcid.org/0000-0002-7364-4398\"\u003eFrancine Goh\u003c/a\u003e and BillyLim for comments on an early version of the package, as well as theinsightful feedback during \u003ca href=\"https://github.com/ropensci/software-review/issues/455\"\u003epeer review\u003c/a\u003e from rOpenSci editor \u003ca href=\"/author/mauro-lepore/\"\u003eMauro Lepore\u003c/a\u003e and reviewers \u003ca href=\"https://orcid.org/0000-0001-9851-5077\"\u003eJoseph O’Brien\u003c/a\u003e and \u003ca href=\"/author/julia-silge/\"\u003eJuliaSilge\u003c/a\u003e. This work was funded byUS National Science Foundation grant NSF-1658837.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eGinn J, Silge J (2022). qualtRics: Download ‘Qualtrics’ Survey Data. R package version 3.1.6,\u003ca href=\"https://CRAN.R-project.org/package=qualtRics\"\u003ehttps://CRAN.R-project.org/package=qualtRics\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eEyal, P., David, R., Andrew, G., Zak, E., \u0026amp; Ekaterina, D. (2021). Data quality of platforms and panels for online behavioral research. Behavior Research Methods. \u003ca href=\"https://doi.org/10.3758/s13428-021-01694-3\"\u003ehttps://doi.org/10.3758/s13428-021-01694-3\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eStevens, J. R. (2021). excluder: An R package that checks for exclusion criteria in online data. \u003cem\u003eJournal of Open Source Software\u003c/em\u003e, 6(67), 3893. \u003ca href=\"https://doi.org/10.21105/joss.03893\"\u003ehttps://doi.org/10.21105/joss.03893\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:4\"\u003e\u003cp\u003eIn some cases, the default in Qualtrics is to collect non-anonymous data, so always check that this option is set to your desired selection for each survey.\u0026#160;\u003ca href=\"#fnref:4\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2022/08/09/working-with-qualtrics-data-excluding/","date_published":"2022-08-09T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/jxvgh-t7z38","title":"Working with Qualtrics Data - Part 1: Importing Data","language":"en","authors":[{"name":"Jeffrey Stevens","url":"https://orcid.org/0000-0003-2375-1360","avatar":"https://github.com/JeffreyRStevens.png","_role":["author"]}],"tags":["API client","Software Peer Review","beginner","community","data import","excluder","package","qualtrics","survey data"],"content_html":"\u003cp\u003eThe online survey system \u003ca href=\"https://www.qualtrics.com/\"\u003eQualtrics\u003c/a\u003e can be a great way to collect data from research participants, customers, and stakeholders. I use it frequently to conduct research studies with participants or just to poll students and collaborators. However, while Qualtrics makes survey design straightforward, once the data are collected, there is a lot of work to do. Fortunately, two R packages (\u003ca href=\"https://docs.ropensci.org/qualtRics/\"\u003equaltRics\u003c/a\u003e\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e and \u003ca href=\"https://docs.ropensci.org/excluder/\"\u003eexcluder\u003c/a\u003e\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e) can make importing data and excluding low-quality data easier.\u003c/p\u003e\u003cp\u003eDiscovering the qualtRics package has saved me a lot of time importing data. It also lets me create data pipelines for sensitive data by reading files directly into R without saving them locally until they\u0026rsquo;ve been deidentified. This way I don\u0026rsquo;t accidentally save personally identifiable information in a place that is not authorized for sensitive data.\u003c/p\u003e\u003cp\u003eAfter importing data, there is often a lot of clean up that needs to happen, especially for online survey respondents. I developed the excluder package to help with removing data entries based on broad metadata such as response duration, respondent location, screen resolution, etc. Combining the qualtRics and excluder packages can help you deal with the tedious part of survey data and quickly get to the fun part of data analysis!\u003c/p\u003e\u003cp\u003ePart 1 of this series will show you how to use qualtRics to import your data, and we\u0026rsquo;ll cover excluding your data with excluder in \u003ca href=\"/blog/2022/08/09/working-with-qualtrics-data-excluding/\"\u003ePart 2\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"importing-qualtrics-data-into-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#importing-qualtrics-data-into-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eImporting Qualtrics data into R\u003c/h2\u003e\u003cp\u003eIf you\u0026rsquo;ve worked with Qualtrics data before, you know you have to log into Qualtrics, navigate to the data section, wait for all of the data to be \u0026ldquo;re-indexed\u0026rdquo; for viewing, choose whether to export as numeric or character values, choose what type of file to export, download the data file, find the downloaded data file, change the name of the file to something comprehensible, and delete those first two obnoxious rows of metadata. 😮‍💨 Having to go through this process manually every time that you want to download Qualtrics data can be cumbersome and time consuming.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2022/08/02/working-with-qualtrics-data-importing/mouseclicking.gif\"\t\t\talt=\"A gif of a hand furiously clicking a computer mouse.\" width=\"400\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eSource: @corsairgaming at \u003ca href=\"https://media.giphy.com/media/443u3QvEVYcvcHJVdQ/giphy.gif\"\u003eGiphy\u003c/a\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003c!-- ![](mouseclicking.gif) --\u003e\u003cp\u003eEnter, the \u003ca href=\"https://docs.ropensci.org/qualtRics/\"\u003equaltRics\u003c/a\u003e package from \u003ca href=\"https://juliasilge.com/\"\u003eJulia Silge\u003c/a\u003e and \u003ca href=\"https://jasperhg90.github.io/\"\u003eJasper Ginn\u003c/a\u003e\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e. This package allows you to use the Qualtrics API to directly connect to your survey data. You can download a list of surveys in your account, as well as the actual questions and metadata about those questions. But, most importantly, the qualtRics package allows you to download Qualtrics data into your R session. Therefore, you can write scripts that automatically import your Qualtrics data whenever you run your script. No more time wasted downloading manually!\u003c/p\u003e\u003ch3 id=\"connecting-to-qualtrics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#connecting-to-qualtrics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConnecting to Qualtrics\u003c/h3\u003e\u003cp\u003eOf course, to get your data, you have to have access to your Qualtrics account. The \u003ca href=\"https://api.qualtrics.com/\"\u003eQualtrics API\u003c/a\u003e allows you to connect to your Qualtrics account with your personal API token (or key) and your datacenter ID. You can \u003ca href=\"https://api.qualtrics.com/ZG9jOjg3NjYzMg-api-key-authentication\"\u003efind your API token\u003c/a\u003e by logging into Qualtrics, going to \u003cem\u003eAccount Settings\u003c/em\u003e, selecting the \u003cem\u003eQualtrics IDs\u003c/em\u003e tab, finding the \u003cem\u003eAPI\u003c/em\u003e box, clicking \u003cem\u003eGenerate Token\u003c/em\u003e, and copying the long string of random letters and numbers shown next to \u003cem\u003eToken\u003c/em\u003e. Note this key is like your password for accessing your account, so don\u0026rsquo;t share it with others. 🤫\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2022/08/02/working-with-qualtrics-data-importing/qualtrics_api_token.png\"\t\t\talt=\"An image of the Qualtrics ID page with an example token in the API box highlighted with a red rectangle.\" width=\"800\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eSource: \u003ca href=\"https://api.qualtrics.com/ZG9jOjg3NjYzMg-api-key-authentication\"\u003eQualtrics API Documentation\u003c/a\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003c!-- ![](qualtrics_api_token.png) --\u003e\u003cp\u003eFor your datacenter ID, follow the same procedure but look in the \u003cem\u003eUser\u003c/em\u003e box of the \u003cem\u003eQualtrics ID\u003c/em\u003e page and grab the \u003cem\u003eDatacenter ID\u003c/em\u003e.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2022/08/02/working-with-qualtrics-data-importing/qualtrics_api_datacenter.png\"\t\t\talt=\"An image of the User box from the Qualtrics ID page with an example User ID, Organization ID, and Datacenter ID.\" width=\"400\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eSource: \u003ca href=\"https://api.qualtrics.com/ZG9jOjg3NjYzMw-base-url-and-datacenter-i-ds\"\u003eQualtrics API Documentation\u003c/a\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003c!-- ![](qualtrics_api_datacenter.png) --\u003e\u003cp\u003eYour datacenter ID can now be appended before \u003ccode\u003equaltrics.com\u003c/code\u003e to generate your base URL: \u003ccode\u003eyourdatacenterid.qualtrics.com\u003c/code\u003e (don\u0026rsquo;t include \u003ccode\u003ehttps://\u003c/code\u003e). You can use the qualtRics function \u003ca href=\"https://docs.ropensci.org/qualtRics/reference/qualtrics_api_credentials.html\"\u003e\u003ccode\u003equaltrics_api_credentials()\u003c/code\u003e\u003c/a\u003e to connect your R session to the Qualtrics API.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='kr'\u003e\u003ca href='https://rdrr.io/r/base/library.html'\u003elibrary\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003e\u003ca href='https://docs.ropensci.org/qualtRics/'\u003equaltRics\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan\u003e\u003c/span\u003e\u003cspan\u003e\u003cspan class='nf'\u003e\u003ca href='https://docs.ropensci.org/qualtRics/reference/qualtrics_api_credentials.html'\u003equaltrics_api_credentials\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003eapi_key \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='s'\u003e\"\u0026lt;YOUR-QUALTRICS_API_TOKEN\u0026gt;\"\u003c/span\u003e, \u003c/span\u003e\u003cspan\u003e                          base_url \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='s'\u003e\"\u0026lt;YOUR-QUALTRICS_BASE_URL\u0026gt;\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNow your R session should have access to your Qualtrics account. But if you start a new R session, you\u0026rsquo;ll have to rerun this command. And it is not recommended to save this command in an R script because, if you send the script to someone else or post it publicly in a repository, you are granting access to your Qualtrics account to other people. 😬\u003c/p\u003e\u003cp\u003eTo avoid having to rerun the command, you can store your API token and base URL on your local computer by using \u003ccode\u003einstall = TRUE\u003c/code\u003e. Including this argument will save the API token and base URL information in your \u003ccode\u003e.Renviron\u003c/code\u003e file, which is read when starting every new R session.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='nf'\u003e\u003ca href='https://docs.ropensci.org/qualtRics/reference/qualtrics_api_credentials.html'\u003equaltrics_api_credentials\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003eapi_key \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='s'\u003e\"\u0026lt;YOUR-QUALTRICS_API_TOKEN\u0026gt;\"\u003c/span\u003e, \u003c/span\u003e\u003cspan\u003e                          base_url \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='s'\u003e\"\u0026lt;YOUR-QUALTRICS_BASE_URL\u0026gt;\"\u003c/span\u003e,\u003c/span\u003e\u003cspan\u003e                          install \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='kc'\u003eTRUE\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNow you\u0026rsquo;ll either need to restart your R session or reload your environment with \u003ccode\u003ereadRenviron(\u0026quot;~/.Renviron\u0026quot;)\u003c/code\u003e to make the credentials accessible in the current R session.\u003c/p\u003e\u003cp\u003eIf you use \u003ccode\u003einstall = TRUE\u003c/code\u003e, this means that your credentials are stored in a plain text file on your computer. So this may not be something that you want to do on a shared computer account. You must decide between the security of not storing credentials on your computer and the convenience of not having to enter your credentials for every new R session. ⚖️\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2022/08/02/working-with-qualtrics-data-importing/security_convenience.jpg\"\t\t\talt=\"Meme with hand hovering over two red buttons, one reading Security and the other reading Convenience.\" width=\"400\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eSource: Jeffrey Stevens built in \u003ca href=\"https://imgflip.com/meme/Two-Buttons\"\u003eMeme Generator\u003c/a\u003e\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003c!-- ![](security_convenience.jpg) --\u003e\u003cp\u003eCongrats\u0026mdash;you\u0026rsquo;ve now registered your Qualtrics credentials! 🎉 If you have difficulty with this, check out the qualtRics \u003ca href=\"https://docs.ropensci.org/qualtRics/articles/qualtRics.html#registering-your-qualtrics-credentials\"\u003edocumentation\u003c/a\u003e or \u003ca href=\"https://github.com/ropensci/qualtRics/issues\"\u003eGitHub issues\u003c/a\u003e, or the \u003ca href=\"https://api.qualtrics.com/\"\u003eQualtrics API documentation\u003c/a\u003e. If you have multiple Qualtrics accounts that you want you use, you\u0026rsquo;ll have to get creative about how you \u003ca href=\"https://github.com/ropensci/qualtRics/issues/110\"\u003eset up your API tokens\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"listing-your-surveys\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#listing-your-surveys\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eListing your surveys\u003c/h3\u003e\u003cp\u003eNow that you\u0026rsquo;ve connected to your Qualtrics account, one of the first things you may want to do is list the surveys that you have in your account. While you can do this by hand through the Qualtrics website, you can also download a list of all surveys as a data frame with \u003ca href=\"https://docs.ropensci.org/qualtRics/reference/all_surveys.html\"\u003e\u003ccode\u003eall_surveys()\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='nv'\u003esurveys\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nf'\u003e\u003ca href='https://docs.ropensci.org/qualtRics/reference/all_surveys.html'\u003eall_surveys\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eYou can then view data frame to find the survey that you want.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/utils/View.html'\u003eView\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='nv'\u003esurveys\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure class=\"center\"\u003e\u003cimg src=\"/blog/2022/08/02/working-with-qualtrics-data-importing/qualtrics_surveys.png\"\t\t\talt=\"An image of a data frame that is the output of the all_surveys function with columns id, name, ownerID, lastModified, creationDate, and isActive.\" width=\"800\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eSource: Jeffrey Stevens\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003c!-- ![](qualtrics_surveys.png) --\u003e\u003cp\u003eThe \u003ccode\u003eid\u003c/code\u003e column lists the survey ID for each survey (starting with \u003ccode\u003eSV_\u003c/code\u003e). This is a unique identifier that Qualtrics uses to label each survey. You will need the survey ID to download or work with it, so make sure to copy it from the data frame.\u003c/p\u003e\u003ch3 id=\"importing-surveys\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#importing-surveys\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eImporting surveys\u003c/h3\u003e\u003cp\u003eNow that we know which survey we want, we can import it using \u003ca href=\"https://docs.ropensci.org/qualtRics/reference/fetch_survey.html\"\u003e\u003ccode\u003efetch_survey()\u003c/code\u003e\u003c/a\u003e and the survey ID.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan\u003e\u003cspan class='nv'\u003emysurvey\u003c/span\u003e \u003cspan class='o'\u003e\u0026lt;-\u003c/span\u003e \u003cspan class='nf'\u003e\u003ca href='https://docs.ropensci.org/qualtRics/reference/fetch_survey.html'\u003efetch_survey\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003esurveyID \u003cspan class='o'\u003e=\u003c/span\u003e \u003cspan class='s'\u003e\"SV_XXXXXXXXXX\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThis imports the survey as a data frame. The \u003ca href=\"https://docs.ropensci.org/qualtRics/reference/fetch_survey.html\"\u003e\u003ccode\u003efetch_survey()\u003c/code\u003e\u003c/a\u003e function has many arguments that are helpful in importing your data. Here are just a few:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eSet your time zone with \u003ccode\u003etime_zone\u003c/code\u003e. This is important because, if you don\u0026rsquo;t set it in your Account Settings, Qualtrics has a default time zone that may differ from your own.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eExtract entries during a particular time period with \u003ccode\u003estart_date\u003c/code\u003e and/or \u003ccode\u003eend_date\u003c/code\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eImport only certain questions with \u003ccode\u003einclude_questions\u003c/code\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eControl whether you import choice text or numeric data with \u003ccode\u003elabel\u003c/code\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eLet the function try to guess the proper data types for your columns with \u003ccode\u003econvert\u003c/code\u003e or specify the data types with \u003ccode\u003ecol_types\u003c/code\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSave your data frame locally with the \u003ccode\u003esave_dir\u003c/code\u003e argument. Note it saves the file as an RDS file, so you\u0026rsquo;ll need something like \u003ca href=\"https://rdrr.io/r/base/readRDS.html\"\u003e\u003ccode\u003ereadRDS()\u003c/code\u003e\u003c/a\u003e to read it.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about this function in the \u003ca href=\"https://docs.ropensci.org/qualtRics/reference/fetch_survey.html\"\u003e\u003ccode\u003efetch_survey()\u003c/code\u003e documentation\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/qualtRics/reference/fetch_survey.html\"\u003e\u003ccode\u003efetch_survey()\u003c/code\u003e\u003c/a\u003e allows you to automatically import your Qualtrics surveys directly\u0026mdash;no more messy and time-consuming downloads! But if you\u0026rsquo;ve already downloaded a file from Qualtrics, you can use qualtRics\u0026rsquo; \u003ca href=\"https://docs.ropensci.org/qualtRics/reference/read_survey.html\"\u003e\u003ccode\u003eread_survey()\u003c/code\u003e\u003c/a\u003e function to import that file and clean up some Qualtrics messiness like removing those first two obnoxious rows and allowing control over the time zone and column data types.\u003c/p\u003e\u003ch3 id=\"viewing-survey-info\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#viewing-survey-info\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eViewing survey info\u003c/h3\u003e\u003cp\u003eWhile \u003ca href=\"https://docs.ropensci.org/qualtRics/reference/fetch_survey.html\"\u003e\u003ccode\u003efetch_survey()\u003c/code\u003e\u003c/a\u003e provides the core functionality of the qualtRics package, the package also includes some other helper functions that allow you to view information about your survey.\u003c/p\u003e\u003cp\u003eYou can get a data frame that includes all survey questions and their IDs and names with \u003ca href=\"https://docs.ropensci.org/qualtRics/reference/survey_questions.html\"\u003e\u003ccode\u003esurvey_questions()\u003c/code\u003e\u003c/a\u003e. To really drill down into your survey, use the \u003ca href=\"https://docs.ropensci.org/qualtRics/reference/metadata.html\"\u003e\u003ccode\u003emetadata()\u003c/code\u003e\u003c/a\u003e function. Not only can you access general metadata about your survey (survey name, owner ID, organization ID, creation/modification dates), but you can get more detailed information about your questions (question labels, question type, response option descriptions), block information, and survey flow. You can access information about the survey distribution, mailing lists, etc. with other functions. It\u0026rsquo;s definitely worth exploring all of the \u003ca href=\"https://docs.ropensci.org/qualtRics/reference/index.html\"\u003ehelper functions\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"next-steps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#next-steps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNext steps\u003c/h2\u003e\u003cp\u003eYou have learned a quick and easy way to automatically download your Qualtrics data with the qualtRics package. 😎 Now what do you do with it? Well, if you\u0026rsquo;re collecting online surveys, you may have a lot of problematic data that you want to remove. Check out \u003ca href=\"/blog/2022/08/09/working-with-qualtrics-data-excluding/\"\u003ePart 2: Excluding Data\u003c/a\u003e to find out how to exclude data with the \u003ca href=\"https://docs.ropensci.org/excluder/\"\u003eexcluder\u003c/a\u003e package.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eGinn J, Silge J (2022). qualtRics: Download \u0026lsquo;Qualtrics\u0026rsquo; Survey Data. R package version 3.1.6, \u003ca href=\"https://CRAN.R-project.org/package=qualtRics\"\u003ehttps://CRAN.R-project.org/package=qualtRics\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eStevens, J. R. (2021). excluder: An R package that checks for exclusion criteria in online data. \u003cem\u003eJournal of Open Source Software\u003c/em\u003e, 6(67), 3893. \u003ca href=\"https://doi.org/10.21105/joss.03893\"\u003ehttps://doi.org/10.21105/joss.03893\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eMany thanks to Julia Silge and Jasper Ginn for creating a wonderful package and providing the \u003ca href=\"https://docs.ropensci.org/qualtRics/\"\u003edocumentation\u003c/a\u003e and \u003ca href=\"https://docs.ropensci.org/qualtRics/articles/qualtRics.html\"\u003evignette\u003c/a\u003e on which this post was based! Also, check out Julia\u0026rsquo;s blog post about \u003ca href=\"/blog/2019/04/30/qualtrics-relaunch/\"\u003erelaunching the qualtRics package\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2022/08/02/working-with-qualtrics-data-importing/","date_published":"2022-08-02T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/2s4zm-cmc58","title":"New Package yfR","language":"en","authors":[{"name":"Marcelo S. Perlin","url":"https://orcid.org/0000-0002-9839-4268","avatar":"https://ropensci.org/img/team/marcelo-perlin.jpg","_role":["author"]}],"tags":["yfR","yahoo-finance","stocks","community","packages","data-access","data-extraction","software-peer-review"],"content_html":"\u003cp\u003ePackage yfR recently passed \u003ca href=\"https://github.com/ropensci/software-review/issues/523\"\u003epeer review at rOpenSci\u003c/a\u003e and is all about downloading stock price data from \u003ca href=\"https://finance.yahoo.com/\"\u003eYahoo Finance (YF)\u003c/a\u003e. I wrote this package to solve a particular problem I had as a teacher: I needed a large volume of clean stock price data to use in my classes, either for explaining how financial markets work or for class exercises. While there are several R packages to import raw data from YF, none solved my problem.\u003c/p\u003e\u003cp\u003ePackage yfR facilitates the importation of data, organizing it in the \u003ccode\u003etidy\u003c/code\u003e format and speeding up the process using a cache system and parallel computing. yfR is a backwards-incompatible substitute of \u003ca href=\"https://CRAN.R-project.org/package=BatchGetSymbols\"\u003eBatchGetSymbols\u003c/a\u003e,  released in 2016 (see vignette \u003ca href=\"https://docs.ropensci.org/yfR/articles/diff-batchgetsymbols.html\"\u003eyfR and BatchGetSymbols\u003c/a\u003e for details).\u003c/p\u003e\u003ch1 id=\"introducing-yfr\"\u003eIntroducing yfR\u003c/h1\u003e\u003cp\u003e\u003ca href=\"https://finance.yahoo.com/\"\u003eYahoo Finance\u003c/a\u003e provides a vast repository of stock price data around the globe. It covers a significant number of markets and assets, and is therefore used extensively in academic research and teaching. In order to import the financial data from YF, all you need is a ticker (id of a stock, e.g. \u0026ldquo;GM\u0026rdquo; for \u003ca href=\"https://finance.yahoo.com/quote/GM?p=GM\u0026amp;.tsrc=fin-srch\"\u003eGeneral Motors\u003c/a\u003e) and a time period \u0026ndash; first and last date.\u003c/p\u003e\u003ch2 id=\"features-of-yfr\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#features-of-yfr\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFeatures of yfR\u003c/h2\u003e\u003cp\u003ePackage yfR distinguishes itself from other similar packages with the following features:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eFetches daily/weekly/monthly/annual stock prices/returns from yahoo finance and outputs a dataframe (tibble) in the long format (stacked data);\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA feature called \u003cstrong\u003ecollections\u003c/strong\u003e facilitates download of multiple tickers from a particular market/index. You can, for example, download data for all stocks in the SP500 index with a simple call to \u003ccode\u003eyf_collection_get(\u0026quot;SP500\u0026quot;)\u003c/code\u003e;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA session-persistent smart cache system is available by default. This means that the data is saved locally and only missing portions are downloaded, if needed.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eAll dates are compared to a benchmark index such as SP500 (^GSPC) and, whenever an individual asset does not have a sufficient number of dates, the software drops it from the output. This means you can choose to ignore tickers with a high proportion of missing dates.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA customized function called \u003ccode\u003eyf_convert_to_wide()\u003c/code\u003e can transform the long dataframe into a wide format (tickers as columns), which is much used in portfolio optimization. The output is a list where each element is a different target variable (prices, returns, volumes).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eParallel computing with package \u003ca href=\"https://furrr.futureverse.org/\"\u003efurrr\u003c/a\u003e is available, speeding up the data importation process.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"available-columns\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#available-columns\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAvailable columns\u003c/h2\u003e\u003cp\u003eThe main function of the package, \u003ccode\u003eyfR::yf_get\u003c/code\u003e, returns a dataframe with the financial data. All price data is measured at the unit of the financial exchange. For example, price data for GM (NASDAQ/US) is measured in US dollars, while price data for PETR3.SA (B3/BR) is measured in Reais (Brazilian currency).\u003c/p\u003e\u003cp\u003eThe returned data contains the following columns:\u003c/p\u003e\u003cp\u003e\u003ccode\u003eticker\u003c/code\u003e: The requested tickers (ids of stocks);\u003c/p\u003e\u003cp\u003e\u003ccode\u003eref_date\u003c/code\u003e: The reference day (this can also be year/month/week when using argument \u003ccode\u003efreq_data\u003c/code\u003e);\u003c/p\u003e\u003cp\u003e\u003ccode\u003eprice_open\u003c/code\u003e: The opening price of the day/period;\u003c/p\u003e\u003cp\u003e\u003ccode\u003eprice_high\u003c/code\u003e: The highest price of the day/period;\u003c/p\u003e\u003cp\u003e\u003ccode\u003eprice_close\u003c/code\u003e: The closing/last price of the day/period;\u003c/p\u003e\u003cp\u003e\u003ccode\u003evolume\u003c/code\u003e: The financial volume of the day/period, in the unit of the exchange;\u003c/p\u003e\u003cp\u003e\u003ccode\u003eprice_adjusted\u003c/code\u003e: The stock price adjusted for corporate events such assplits, dividends and others \u0026ndash; this is usually what you want/need for studyingstocks as it represents the \u003cstrong\u003ereal\u003c/strong\u003e financial performance of stockholders;\u003c/p\u003e\u003cp\u003e\u003ccode\u003eret_adjusted_prices\u003c/code\u003e: The arithmetic or log return (see input \u003ccode\u003etype_return\u003c/code\u003e) for the adjusted stockprices;\u003c/p\u003e\u003cp\u003e\u003ccode\u003eret_adjusted_prices\u003c/code\u003e: The arithmetic or log return (see input \u003ccode\u003etype_return\u003c/code\u003e) for the closing stockprices;\u003c/p\u003e\u003cp\u003e\u003ccode\u003ecumret_adjusted_prices\u003c/code\u003e: The accumulated arithmetic/log return for the period (starts at 100%).\u003c/p\u003e\u003ch1 id=\"installation\"\u003eInstallation\u003c/h1\u003e\u003cp\u003ePackage yfR is available in its stable version in CRAN, but you can also find the latest features and bug fixes in GitHub and rOpenSci repository. Below you can find the R commands for installation in each case.\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# CRAN (stable)install.packages(\u0026#39;yfR\u0026#39;)# GitHub (dev version)devtools::install_github(\u0026#39;ropensci/yfR\u0026#39;)# rOpenSciinstall.packages(\u0026#34;yfR\u0026#34;, repos = c(\u0026#34;https://ropensci.r-universe.dev\u0026#34;, \u0026#34;https://cloud.r-project.org\u0026#34;))\u003c/code\u003e\u003c/pre\u003e\u003ch1 id=\"examples-of-usage\"\u003eExamples of usage\u003c/h1\u003e\u003ch2 id=\"the-sp500-historical-performance\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-sp500-historical-performance\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe SP500 historical performance\u003c/h2\u003e\u003cp\u003eIn this example we are going to download price data for the SP500 index from 1950 to today (2022-07-25), analyze its financial performance and also visualize its prices using \u003ccode\u003eggplot2\u003c/code\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eyfR\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003elubridate\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# for date manipulations\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e# for data manipulations\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# set options for algorithm\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emy_ticker\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;^GSPC\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efirst_date\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;1950-01-01\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elast_date\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eSys.Date\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# fetch data\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edf_yf\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eyf_get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etickers\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emy_ticker\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003efirst_date\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efirst_date\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003elast_date\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003elast_date\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# output is a tibble with data\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eglimpse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf_yf\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eRows: 18,257Columns: 11$ ticker                 \u0026lt;chr\u0026gt; \u0026#34;^GSPC\u0026#34;, \u0026#34;^GSPC\u0026#34;, \u0026#34;^GSPC\u0026#34;, \u0026#34;^GSPC\u0026#34;, \u0026#34;^GSPC\u0026#34;, \u0026#34;^…$ ref_date               \u0026lt;date\u0026gt; 1950-01-03, 1950-01-04, 1950-01-05, 1950-01-06…$ price_open             \u0026lt;dbl\u0026gt; 16.66, 16.85, 16.93, 16.98, 17.08, 17.03, 17.09…$ price_high             \u0026lt;dbl\u0026gt; 16.66, 16.85, 16.93, 16.98, 17.08, 17.03, 17.09…$ price_low              \u0026lt;dbl\u0026gt; 16.66, 16.85, 16.93, 16.98, 17.08, 17.03, 17.09…$ price_close            \u0026lt;dbl\u0026gt; 16.66, 16.85, 16.93, 16.98, 17.08, 17.03, 17.09…$ volume                 \u0026lt;dbl\u0026gt; 1260000, 1890000, 2550000, 2010000, 2520000, 21…$ price_adjusted         \u0026lt;dbl\u0026gt; 16.66, 16.85, 16.93, 16.98, 17.08, 17.03, 17.09…$ ret_adjusted_prices    \u0026lt;dbl\u0026gt; NA, 0.0114045618, 0.0047477745, 0.0029533373, 0…$ ret_closing_prices     \u0026lt;dbl\u0026gt; NA, 0.0114045618, 0.0047477745, 0.0029533373, 0…$ cumret_adjusted_prices \u0026lt;dbl\u0026gt; 1.000000, 1.011405, 1.016206, 1.019208, 1.02521…\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe output of yfR is a tibble (dataframe) with the stock price data. We can use it to 1) get the number of years within the data, and 2) calculate the annual financial performance of the index:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003en_years\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003einterval\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003emin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf_yf\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eref_date\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"nf\"\u003emax\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf_yf\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eref_date\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"nf\"\u003eyears\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etotal_return\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003elast\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf_yf\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eprice_adjusted\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"nf\"\u003efirst\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf_yf\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eprice_adjusted\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ecat\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003epaste0\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;n_years = \u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003en_years\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;\\n\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e           \u003cspan class=\"s\"\u003e\u0026#34;total_return = \u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"n\"\u003etotal_return\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003en_years = 72.5479452054795total_return = 236.792910144058\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIn 1950-01-03, the index was valued at 16.66. Today (2022-07-25), after roughly 72 years, the value of the index is 3961.629883. The total return for the SP500, without accounting for inflation, is equivalent to an impressive 23 679%! Overall, anyone holding stocks for that long  has done very well financially.\u003c/p\u003e\u003cp\u003eAdditionally, we can also calculate performance as the compounded annual return, which is the usual figure reported when looking stocks in the long run:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eret_comp\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003etotal_return\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"nf\"\u003e^\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003en_years\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e  \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ecat\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003epaste0\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Comp Return = \u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e           \u003cspan class=\"n\"\u003escales\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epercent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eret_comp\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eaccuracy\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e0.01\u003c/span\u003e\u003cspan class=\"p\"\u003e)))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eComp Return = 7.83%\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOver the 72 of existence, the SP500 index returned an annual compounded interest of 7.83%. This is quite in line with the roughly 8% per year reported in the media.\u003c/p\u003e\u003cp\u003eTo visualize the data, we can use a log plot and see the value of the SP500 index over time:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eggplot2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf_yf\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eref_date\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eprice_adjusted\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elabs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003epaste0\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;SP500 Index Value (\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                   \u003cspan class=\"nf\"\u003eyear\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003emin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf_yf\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eref_date\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39; - \u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                   \u003cspan class=\"nf\"\u003eyear\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003emax\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf_yf\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eref_date\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;)\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Time\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Index Value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecaption\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Data from Yahoo Finance \u0026lt;https://finance.yahoo.com/\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etheme_light\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003escale_y_log10\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/07/26/package-yfr/sp500-01-1.png\"\t\t\talt=\"Black and white line graph showing the SP500 index value increasing over time.The x axis is time from 1950 to 2020 and the y axis is on a log scale and shows index values increasing from \u0026lt;30 to \u0026gt;3000.\" width=\"600\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eSP500 index value since 1950\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"performance-of-many-stocks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#performance-of-many-stocks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePerformance of many stocks\u003c/h2\u003e\u003cp\u003eIn this second example, instead of using a single stock/index, we will investigate the financial performance of a set of ten stocks using \u003ccode\u003edplyr\u003c/code\u003e. First, let\u0026rsquo;s download the current composition of the SP500 index and select 10 random stocks.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eset.seed\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e20220713\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003en_tickers\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"m\"\u003e10\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edf_sp500\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eyf_index_composition\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;SP500\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e✔ Got SP500 composition with 503 rows\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ernd_tickers\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esample\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf_sp500\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eticker\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003en_tickers\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ecat\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003epaste0\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;The selected tickers are: \u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e           \u003cspan class=\"nf\"\u003epaste0\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ernd_tickers\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecollapse\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;, \u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eThe selected tickers are: AAPL, DHI, AMZN, CMS, FCX, NRG, EXR, CFG, CI, AWK\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd now we fetch the data using \u003ccode\u003eyfR::yf_get\u003c/code\u003e:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edf_yf\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eyf_get\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etickers\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ernd_tickers\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003efirst_date\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;2010-01-01\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003elast_date\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eSys.Date\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eOut of the 10 stocks, one was left out due to the high number of missing days. Internally, \u003ccode\u003eyf_get\u003c/code\u003e compares every ticker to a benchmark time series, in this case the SP500 index itself (see \u003ccode\u003eyf_get\u003c/code\u003e\u0026rsquo;s argument \u003ccode\u003ebench_ticker\u003c/code\u003e). Whenever the proportion of missing days is higher than the default case (\u003ccode\u003ethresh_bad_data = 0.75\u003c/code\u003e), the algorithm drops the ticker from the output. In the end, we are left with just nine stocks.\u003c/p\u003e\u003cp\u003eFirst, let\u0026rsquo;s look at their accumulated return over time:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eggplot2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf_yf\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eref_date\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ecumret_adjusted_prices\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"n\"\u003ecolor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eticker\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_line\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elabs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003epaste0\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;SP500 Index Value (\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                   \u003cspan class=\"nf\"\u003eyear\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003emin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf_yf\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eref_date\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39; - \u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                   \u003cspan class=\"nf\"\u003eyear\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003emax\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edf_yf\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eref_date\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;)\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Time\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Accumulated Return (from 100%)\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecaption\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Data from Yahoo Finance \u0026lt;https://finance.yahoo.com/\u0026gt;\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003etheme_light\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003escale_y_log10\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/07/26/package-yfr/manystocks-1.png\"\t\t\talt=\"Line graph showing the accumulated returns of 9 stocks on the SP500 index value. The x axis shows time running from 2010 to 2022, while the y axis shows accumulated return (from 100%) ranging from 0.1 to \u0026gt; 10 on a log scale. Three stocks show sharply increasing patterns, four show moderately increasing patterns and two show fluctuating horizontal trends.\" width=\"600\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eAccumulated Return of 9 stocks\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003cp\u003eAs we can see, some stocks, such as AMZN and AAPL, did much better than others. We can check this numerically by reporting their compounded return over the period:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etab_perf\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003edf_yf\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eticker\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003esummarise\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003en_years\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003einterval\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003emin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eref_date\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                       \u003cspan class=\"nf\"\u003emax\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eref_date\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"nf\"\u003eyears\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etotal_ret\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003elast\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eprice_adjusted\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"nf\"\u003efirst\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eprice_adjusted\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eret_comp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003etotal_ret\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"nf\"\u003e^\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003en_years\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etab_perf\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003en_years\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003efloor\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003en_years\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"n\"\u003etotal_ret\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003escales\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epercent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etotal_ret\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"n\"\u003eret_comp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003escales\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003epercent\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eret_comp\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eknitr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ekable\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecaption\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Financial Performance of Several Stocks\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eTable: Table 1: Financial Performance of Several Stocks\u003c/p\u003e\u003ctable\u003e\t\u003cthead\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003cth style=\"text-align: left\"\u003eticker\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: right\"\u003en_years\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: left\"\u003etotal_ret\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: left\"\u003eret_comp\u003c/th\u003e\t\t\t\u003c/tr\u003e\t\u003c/thead\u003e\t\u003ctbody\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eAAPL\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e12\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e2 258%\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e28.65%\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eAMZN\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e12\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e1 729%\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e26.07%\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eAWK\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e12\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e776%\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e18.88%\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eCI\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e12\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e665%\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e17.61%\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eCMS\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e12\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e526%\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e15.74%\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eDHI\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e12\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e696%\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e17.98%\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eEXR\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e12\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e2 146%\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e28.15%\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eFCX\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e12\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e-12%\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e-0.99%\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eNRG\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: right\"\u003e12\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e81%\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003e4.85%\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\u003c/tbody\u003e\u003c/table\u003e\u003ch1 id=\"final-thoughts\"\u003eFinal thoughts\u003c/h1\u003e\u003cp\u003ePackage yfR was created to facilitate the importation and organization of YF data sets. In the examples of this post, we can see how easy it is to download the data and do some simple performance statistics. We only scratched the surface, there are many ways to analyze stock data, not just financial performance.\u003c/p\u003e\u003ch1 id=\"acknowledgements\"\u003eAcknowledgements\u003c/h1\u003e\u003cp\u003ePackage yfR was \u003ca href=\"https://github.com/ropensci/software-review/issues/523\"\u003ereviewed\u003c/a\u003e by \u003ca href=\"https://github.com/s3alfisc\"\u003eAlexander Fischer\u003c/a\u003e and \u003ca href=\"https://github.com/thisisnic\"\u003eNic Crane\u003c/a\u003e, and I\u0026rsquo;m very grateful for their feedback, which improved the package significantly. I\u0026rsquo;m also grateful to \u003ca href=\"https://www.quantmod.com/\"\u003eJoshua Ulrich\u003c/a\u003e, the maintainer of \u003ca href=\"https://www.quantmod.com/\"\u003equantmod\u003c/a\u003e, which wrote \u003ccode\u003equantmod::getSymbols\u003c/code\u003e, the main function used by \u003ccode\u003eyfR::yf_get\u003c/code\u003e\u003c/p\u003e","url":"https://ropensci.org/blog/2022/07/26/package-yfr/","date_published":"2022-07-26T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/hge37-v9p96","title":"rOpenSci News Digest, July 2022","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2022/07/22/ropensci-news-digest-july-2022\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"ropensci-code-of-conduct-update\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-code-of-conduct-update\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci Code of Conduct update\u003c/h3\u003e\u003cp\u003eWe are pleased to announce the release of a new version of our Code of Conduct.\u003cbr\u003eBased on the feedback of our community we added greater detail about acceptable and unacceptable behaviors in online settings and we have the first translation of the text to Spanish.\u003c/p\u003e\u003ch4 id=\"committee-changes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#committee-changes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommittee changes\u003c/h4\u003e\u003cp\u003eWe thank \u003ca href=\"https://www.esipfed.org/about/people/megan-carter\"\u003eMegan Carter\u003c/a\u003e for serving as independent community member until June, 2022 and welcome back \u003ca href=\"https://karawoo.com/\"\u003eKara Woo\u003c/a\u003e to serve on this role.\u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e joins the committee as the new rOpenSci Community Manager.\u003c/p\u003e\u003cp\u003eYou can read all the details in our \u003ca href=\"/blog/2022/07/12/coc-update/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following three packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/datefixR\"\u003edatefixR\u003c/a\u003e, developed by Nathan Constantine-Cooke: There are many different formats dates are commonly represented with: the order of day, month, or year can differ, different separators (\u0026quot;-\u0026quot;, \u0026ldquo;/\u0026rdquo;, or whitespace) can be used, months can be numerical, names, or abbreviations and year given as two digits or four. datefixR takes dates in all these different formats and converts them to Rs built-in date class. If datefixR cannot standardize a date, such as because it is too malformed, then the user is told which date cannot be standardized and the corresponding ID for the row. datefixR\u0026rsquo; also allows the imputation of missing days and months with user-controlled behavior.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=datefixR\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/533\"\u003ereviewed\u003c/a\u003e by Kaique dos S. Alves, and Al-Ahmadgaid B. Asaad.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/epair\"\u003eepair\u003c/a\u003e, developed by G.L. Orozco-Mulfinger together with Madyline Lawrence, and Owais Gilani: Aid the user in making queries to the EPA API site found at \u003ca href=\"https://aqs.epa.gov/aqsweb/documents/data_api\"\u003ehttps://aqs.epa.gov/aqsweb/documents/data_api\u003c/a\u003e. This package combines API calling methods from various web scraping packages with specific strings to retrieve data from the EPA API. It also contains easy to use loaded variables that help a user navigate services offered by the API and aid the user in determining the appropriate way to make a an API call.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/readODS\"\u003ereadODS\u003c/a\u003e, developed by Chung-hong Chan together with Gerrit-Jan Schutten, and Thomas J. Leeper: Read ODS (OpenDocument Spreadsheet) into R as data frame. Also support writing data frame into ODS file.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=readODS\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/386\"\u003ereviewed\u003c/a\u003e by Emma Mendelsohn, and Adam H. Sparks.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following eight packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/datefixR\" title=\"Standardize Dates in Different Formats or with Missing Data\"\u003edatefixR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/datefixR/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/dittodb\" title=\"A Test Environment for Database Requests\"\u003edittodb\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/dittodb/releases/tag/v0.1.4\"\u003e\u003ccode\u003ev0.1.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/EDIutils\" title=\"An API Client for the Environmental Data Initiative Repository\"\u003eEDIutils\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/EDIutils/releases/tag/v1.0.1\"\u003e\u003ccode\u003ev1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/jagstargets\" title=\"Targets for JAGS Workflows\"\u003ejagstargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/jagstargets/releases/tag/1.0.3\"\u003e\u003ccode\u003e1.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lingtypology\" title=\"Linguistic Typology and Mapping\"\u003elingtypology\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lingtypology/releases/tag/v1.1.9\"\u003e\u003ccode\u003ev1.1.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/restez\" title=\"Create and Query a Local Copy of GenBank in R\"\u003erestez\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/restez/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rtweet\" title=\"Collecting Twitter Data\"\u003ertweet\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rtweet/releases/tag/v1.0.2\"\u003e\u003ccode\u003ev1.0.2\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/tidyqpcr\" title=\"Quantitative PCR Analysis with the Tidyverse\"\u003etidyqpcr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidyqpcr/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are fifteen recently closed and active submissions and 2 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/533\"\u003edatefixR\u003c/a\u003e, Fix Really Messy Dates. Submitted by \u003ca href=\"http://constantine-cooke.com\"\u003eNathan Constantine-Cooke\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/418\"\u003eepair\u003c/a\u003e, Grabs data from EPA API, simplifies getting pollutant data. Submitted by \u003ca href=\"https://github.com/GLOrozcoM\"\u003eLeo Orozco-Mulfinger\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román Palacios\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/524\"\u003ehudr\u003c/a\u003e, A R interface for accessing HUD (US Department of Housing and Urban Development) APIs. Submitted by \u003ca href=\"https://github.com/etam4260/etam4260\"\u003eEmmet Tam\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/541\"\u003espiro\u003c/a\u003e, Manage Data from Cardiopulmonary Exercise Testing. Submitted by \u003ca href=\"https://github.com/smnnlt\"\u003eSimon Nolte\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/475\"\u003ecanaper\u003c/a\u003e, Categorical Analysis of Neo- And Paleo-Endemism. Submitted by \u003ca href=\"https://joelnitta.com\"\u003eJoel Nitta\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/433\"\u003eROriginStamp\u003c/a\u003e, Interface to OriginStamp API to Obtain Trusted Time Stamps. Submitted by \u003ca href=\"https://github.com/rkrug\"\u003eRainer M Krug\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/532\"\u003eaorsf\u003c/a\u003e, Accelerated Oblique Random Survival Forests. Submitted by \u003ca href=\"https://github.com/bcjaeger\"\u003eByron\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"http://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/535\"\u003edaiquiri\u003c/a\u003e, Data Quality Reporting for Temporal Datasets. Submitted by \u003ca href=\"https://github.com/phuongquan\"\u003ePhuong Quan\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/522\"\u003ewmm\u003c/a\u003e, World Magnetic Model. Submitted by \u003ca href=\"https://github.com/wfrierson\"\u003eWill Frierson\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/443\"\u003erdbhapi\u003c/a\u003e, Interface to DBH-API. Submitted by \u003ca href=\"https://hkdir.no/\"\u003eMarija Ninic\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2022/07/12/coc-update\"\u003erOpenSci Code of Conduct Update\u003c/a\u003e by Yanina Bellini Saibene, Mark Padgham, and Kara Woo. Update on Code of Conduct 2022.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/07/01/evaluating-github-activity-for-contributors\"\u003eEvaluating GitHub Activity for Contributors\u003c/a\u003e by Maëlle Salmon. How to evaluate the activity of a GitHub repository as an user or potential contributor. This post was discussed on the \u003ca href=\"https://share.fireside.fm/episode/87RSVeFz+17WMAquN?t=1491\"\u003eR Weekly Highlights podcast\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/07/21/rtweet-1-0-0\"\u003eUpgrading rtweet\u003c/a\u003e by Lluís Revilla Sancho. Update from rtweet 0.7.0 to 1.0.2.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c!--## Use cases`snakecase::to_sentence_case(english(length(usecases)))` use case`if (length(usecases) \u003e 1) \"s\"` of our packages and resources ha`if (length(usecases) \u003e 1) \"ve\" else \"s\"` been reported since we sent the last newsletter.Explore [other use cases](/usecases) and [report your own](https://discuss.ropensci.org/c/usecases/10)!--\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eWe\u0026rsquo;re looking for a new maintainer, or a new maintainer \u003cem\u003eteam\u003c/em\u003e, for each of the following packages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/nbaR/\"\u003enbaR\u003c/a\u003e, R client library for the Netherlands Biodiversity Api (NBA). \u003ca href=\"https://github.com/ropensci/nbaR/issues/64\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/elastic/\"\u003eelastic\u003c/a\u003e, R client for the Elasticsearch HTTP API. \u003ca href=\"https://github.com/ropensci/elastic/issues/292\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIf you\u0026rsquo;re interested, please comment in the issues or email \u003ccode\u003einfo@ropensci.org\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eFor more info, see\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://devguide.ropensci.org/changing-maintainers.html\"\u003eour guidance on \u003cem\u003eChanging package maintainers\u003c/em\u003e\u003c/a\u003e;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://devguide.ropensci.org/curationpolicy.html\"\u003eour \u003cem\u003ePackage Curation Policy\u003c/em\u003e\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"pakpak\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pakpak\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003epak::pak()\u003c/h3\u003e\u003cp\u003eSay you cloned a repository and are now getting ready to debug it.How do you make sure you have all its development dependencies installed?\u003ca href=\"https://twitter.com/GaborCsardi/status/1545306904028741632\"\u003eSimply\u003c/a\u003e run \u003ca href=\"https://pak.r-lib.org/reference/pak.html\"\u003e\u003ccode\u003epak::pak()\u003c/code\u003e\u003c/a\u003e!Easy to remember and to type, and it works!\u003c/p\u003e\u003ch3 id=\"update-to-cran-newsmd-parsing\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#update-to-cran-newsmd-parsing\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdate to CRAN NEWS.md parsing\u003c/h3\u003e\u003cp\u003eIf you maintain a \u003ca href=\"https://blog.r-hub.io/2020/05/08/pkg-news/\"\u003echangelog for your package\u003c/a\u003e, as \u003ca href=\"https://devguide.ropensci.org/releasing.html?q=news#news\"\u003eyou should\u003c/a\u003e, and have chosen the Markdown format (\u003ccode\u003eNEWS.md\u003c/code\u003e) to do so, you might need to pay attention to its formatting for optimal parsing by\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003epkgdown, see the docs for \u003ca href=\"https://pkgdown.r-lib.org/reference/build_news.html\"\u003e\u003ccode\u003epkgdown::build_news()\u003c/code\u003e\u003c/a\u003e, for instance pay attention to \u003ca href=\"/blog/2022/01/31/package-build-failures/#wrong-newsmd-structure\"\u003eheadings\u003c/a\u003e;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://stat.ethz.ch/pipermail/r-package-devel/2022q3/008239.html\"\u003eR itself\u003c/a\u003e \u0026ndash; if all goes well a \u003ccode\u003eNEWS.md\u003c/code\u003e file that is correct for pkgdown will be correct for R too. You can follow the \u003ca href=\"https://stat.ethz.ch/pipermail/r-package-devel/2022q3/008238.html\"\u003edebugging steps recommended by Henrik Bengtsson\u003c/a\u003e to find what\u0026rsquo;s wrong in your \u003ccode\u003eNEWS.md\u003c/code\u003e file.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"how-to-handle-cran-checks-with-_r_check_depends_only_true\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-handle-cran-checks-with-_r_check_depends_only_true\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to handle CRAN checks with \u003ccode\u003e_R_CHECK_DEPENDS_ONLY_\u003c/code\u003e=true\u003c/h3\u003e\u003cp\u003eIn some cases CRAN might run \u003ca href=\"https://stat.ethz.ch/pipermail/r-package-devel/2022q2/008193.html\"\u003echecks without installing the Suggested dependencies\u003c/a\u003e.How to ensure your vignettes still \u0026ldquo;work\u0026rdquo;, that is to say, that R CMD check will not produce any error or warning?\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2019/12/08/precompute-vignettes/\"\u003epre-build\u003c/a\u003e your vignettes;\u003c/li\u003e\u003cli\u003emake them pkgdown \u003ca href=\"https://usethis.r-lib.org/reference/use_vignette.html\"\u003earticles\u003c/a\u003e instead (no vignette, no vignette error!);\u003c/li\u003e\u003cli\u003eexecute code conditionally based on the availability of packages, with knitr \u003ccode\u003eeval\u003c/code\u003e chunk option for instance.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/07/22/ropensci-news-digest-july-2022/","date_published":"2022-07-22T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/600k0-ana71","title":"Upgrading rtweet","language":"en","authors":[{"name":"Lluís Revilla Sancho","url":"https://orcid.org/0000-0001-9747-2570","avatar":"https://github.com/llrs.png","_role":["author"]}],"tags":["rtweet","api","packages","tech notes"],"content_html":"\u003cp\u003eIn this post I will provide some examples of what has changed between rtweet 0.7.0 and rtweet 1.0.2.I hope both the changes and this guide will help all users.I highlight the most important and interesting changes in this blog post, and for a full list of changes you can consult it on the \u003ca href=\"https://docs.ropensci.org/rtweet/news/index.html\"\u003eNEWS\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"big-breaking-changes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#big-breaking-changes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003cstrong\u003eBig breaking changes\u003c/strong\u003e\u003c/h2\u003e\u003ch3 id=\"more-consistent-output\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#more-consistent-output\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMore consistent output\u003c/h3\u003e\u003cp\u003eThis is probably what will affect the most users.All functions that return data about tweets\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e now return the same columns.\u003c/p\u003e\u003cp\u003eFor example if we search some tweets we\u0026rsquo;ll get the following columns:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003etweets\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esearch_tweets\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;weather\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nf\"\u003ecolnames\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etweets\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[1]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;created_at\u0026#34;\u003c/span\u003e                    \u003cspan class=\"s\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e                           \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[3]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;id_str\u0026#34;\u003c/span\u003e                        \u003cspan class=\"s\"\u003e\u0026#34;full_text\u0026#34;\u003c/span\u003e                    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[5]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;truncated\u0026#34;\u003c/span\u003e                     \u003cspan class=\"s\"\u003e\u0026#34;display_text_range\u0026#34;\u003c/span\u003e           \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[7]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;entities\u0026#34;\u003c/span\u003e                      \u003cspan class=\"s\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e                     \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[9]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;source\u0026#34;\u003c/span\u003e                        \u003cspan class=\"s\"\u003e\u0026#34;in_reply_to_status_id\u0026#34;\u003c/span\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[11]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;in_reply_to_status_id_str\u0026#34;\u003c/span\u003e     \u003cspan class=\"s\"\u003e\u0026#34;in_reply_to_user_id\u0026#34;\u003c/span\u003e          \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[13]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;in_reply_to_user_id_str\u0026#34;\u003c/span\u003e       \u003cspan class=\"s\"\u003e\u0026#34;in_reply_to_screen_name\u0026#34;\u003c/span\u003e      \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[15]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;geo\u0026#34;\u003c/span\u003e                           \u003cspan class=\"s\"\u003e\u0026#34;coordinates\u0026#34;\u003c/span\u003e                  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[17]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;place\u0026#34;\u003c/span\u003e                         \u003cspan class=\"s\"\u003e\u0026#34;contributors\u0026#34;\u003c/span\u003e                 \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[19]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;is_quote_status\u0026#34;\u003c/span\u003e               \u003cspan class=\"s\"\u003e\u0026#34;retweet_count\u0026#34;\u003c/span\u003e                \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[21]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;favorite_count\u0026#34;\u003c/span\u003e                \u003cspan class=\"s\"\u003e\u0026#34;favorited\u0026#34;\u003c/span\u003e                    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[23]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;retweeted\u0026#34;\u003c/span\u003e                     \u003cspan class=\"s\"\u003e\u0026#34;lang\u0026#34;\u003c/span\u003e                         \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[25]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;quoted_status_id\u0026#34;\u003c/span\u003e              \u003cspan class=\"s\"\u003e\u0026#34;quoted_status_id_str\u0026#34;\u003c/span\u003e         \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[27]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;quoted_status\u0026#34;\u003c/span\u003e                 \u003cspan class=\"s\"\u003e\u0026#34;possibly_sensitive\u0026#34;\u003c/span\u003e           \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[29]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;retweeted_status\u0026#34;\u003c/span\u003e              \u003cspan class=\"s\"\u003e\u0026#34;text\u0026#34;\u003c/span\u003e                         \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[31]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;favorited_by\u0026#34;\u003c/span\u003e                  \u003cspan class=\"s\"\u003e\u0026#34;scopes\u0026#34;\u003c/span\u003e                       \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[33]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;display_text_width\u0026#34;\u003c/span\u003e            \u003cspan class=\"s\"\u003e\u0026#34;quoted_status_permalink\u0026#34;\u003c/span\u003e      \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[35]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;quote_count\u0026#34;\u003c/span\u003e                   \u003cspan class=\"s\"\u003e\u0026#34;timestamp_ms\u0026#34;\u003c/span\u003e                 \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[37]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;reply_count\u0026#34;\u003c/span\u003e                   \u003cspan class=\"s\"\u003e\u0026#34;filter_level\u0026#34;\u003c/span\u003e                 \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[39]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;query\u0026#34;\u003c/span\u003e                         \u003cspan class=\"s\"\u003e\u0026#34;withheld_scope\u0026#34;\u003c/span\u003e               \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[41]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;withheld_copyright\u0026#34;\u003c/span\u003e            \u003cspan class=\"s\"\u003e\u0026#34;withheld_in_countries\u0026#34;\u003c/span\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[43]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;possibly_sensitive_appealable\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ertweet now minimizes the processing of tweets and only returns the same data as provided by the API while making it easier to handle by R.However, to preserve the nested nature of the data returned some fields are now nested inside other.For example, previously fields \u003ccode\u003e\u0026quot;bbpx_coords\u0026quot;\u003c/code\u003e, \u003ccode\u003e\u0026quot;geo_coords\u0026quot;\u003c/code\u003e, \u003ccode\u003e\u0026quot;coords_coords\u0026quot;\u003c/code\u003e were returned as separate columns, but they are now nested inside \u003ccode\u003e\u0026quot;place\u0026quot;\u003c/code\u003e, \u003ccode\u003e\u0026quot;coordinates\u0026quot;\u003c/code\u003e or \u003ccode\u003e\u0026quot;geo\u0026quot;\u003c/code\u003e depending where they are provided.Some columns previously calculated by rtweet are now not returned, like \u003ccode\u003e\u0026quot;rtweet_favorite_count\u0026quot;\u003c/code\u003e.At the same time it provides with new columns about each tweet like the \u003ccode\u003e\u0026quot;withheld_*\u0026quot;\u003c/code\u003e columns.\u003c/p\u003e\u003cp\u003eIf you scanned through the columns you might have noticed that columns \u003ccode\u003e\u0026quot;user_id\u0026quot;\u003c/code\u003e and \u003ccode\u003e\u0026quot;screen_name\u0026quot;\u003c/code\u003e are no longer returned.This data is still returned by the API but it is now made available to the rtweet users via \u003ccode\u003eusers_data()\u003c/code\u003e:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nf\"\u003ecolnames\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eusers_data\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etweets\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[1]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e                      \u003cspan class=\"s\"\u003e\u0026#34;id_str\u0026#34;\u003c/span\u003e                 \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[3]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e                    \u003cspan class=\"s\"\u003e\u0026#34;screen_name\u0026#34;\u003c/span\u003e            \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[5]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;location\u0026#34;\u003c/span\u003e                \u003cspan class=\"s\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e            \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[7]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;url\u0026#34;\u003c/span\u003e                     \u003cspan class=\"s\"\u003e\u0026#34;protected\u0026#34;\u003c/span\u003e              \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[9]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;followers_count\u0026#34;\u003c/span\u003e         \u003cspan class=\"s\"\u003e\u0026#34;friends_count\u0026#34;\u003c/span\u003e          \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[11]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;listed_count\u0026#34;\u003c/span\u003e            \u003cspan class=\"s\"\u003e\u0026#34;created_at\u0026#34;\u003c/span\u003e             \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[13]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;favourites_count\u0026#34;\u003c/span\u003e        \u003cspan class=\"s\"\u003e\u0026#34;verified\u0026#34;\u003c/span\u003e               \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[15]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;statuses_count\u0026#34;\u003c/span\u003e          \u003cspan class=\"s\"\u003e\u0026#34;profile_image_url_https\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[17]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;profile_banner_url\u0026#34;\u003c/span\u003e      \u003cspan class=\"s\"\u003e\u0026#34;default_profile\u0026#34;\u003c/span\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[19]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;default_profile_image\u0026#34;\u003c/span\u003e   \u003cspan class=\"s\"\u003e\u0026#34;withheld_in_countries\u0026#34;\u003c/span\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[21]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;derived\u0026#34;\u003c/span\u003e                 \u003cspan class=\"s\"\u003e\u0026#34;withheld_scope\u0026#34;\u003c/span\u003e         \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[23]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;entities\u0026#34;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThis blog post should help you find the right data columns, but if you don\u0026rsquo;t find what you are looking for it might be nested inside a column.\u003cbr\u003eTry using \u003ccode\u003edplyr::glimpse()\u003c/code\u003e to explore the data and locate nested columns.For example the entities column (which is present in both tweets and users) have the following useful columns:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nf\"\u003enames\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etweets\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eentities[[1]]\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[1]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;hashtags\u0026#34;\u003c/span\u003e      \u003cspan class=\"s\"\u003e\u0026#34;symbols\u0026#34;\u003c/span\u003e       \u003cspan class=\"s\"\u003e\u0026#34;user_mentions\u0026#34;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;urls\u0026#34;\u003c/span\u003e         \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[5]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;media\u0026#34;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eSimilarly if you look up a user via \u003ccode\u003esearch_users()\u003c/code\u003e or \u003ccode\u003elookup_users()\u003c/code\u003e you\u0026rsquo;ll get consistent data:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eusers\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003elookup_users\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;twitter\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;rladiesglobal\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;_R_Foundation\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nf\"\u003ecolnames\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[1]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e                      \u003cspan class=\"s\"\u003e\u0026#34;id_str\u0026#34;\u003c/span\u003e                 \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[3]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e                    \u003cspan class=\"s\"\u003e\u0026#34;screen_name\u0026#34;\u003c/span\u003e            \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[5]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;location\u0026#34;\u003c/span\u003e                \u003cspan class=\"s\"\u003e\u0026#34;description\u0026#34;\u003c/span\u003e            \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[7]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;url\u0026#34;\u003c/span\u003e                     \u003cspan class=\"s\"\u003e\u0026#34;protected\u0026#34;\u003c/span\u003e              \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[9]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;followers_count\u0026#34;\u003c/span\u003e         \u003cspan class=\"s\"\u003e\u0026#34;friends_count\u0026#34;\u003c/span\u003e          \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[11]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;listed_count\u0026#34;\u003c/span\u003e            \u003cspan class=\"s\"\u003e\u0026#34;created_at\u0026#34;\u003c/span\u003e             \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[13]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;favourites_count\u0026#34;\u003c/span\u003e        \u003cspan class=\"s\"\u003e\u0026#34;verified\u0026#34;\u003c/span\u003e               \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[15]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;statuses_count\u0026#34;\u003c/span\u003e          \u003cspan class=\"s\"\u003e\u0026#34;profile_image_url_https\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[17]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;profile_banner_url\u0026#34;\u003c/span\u003e      \u003cspan class=\"s\"\u003e\u0026#34;default_profile\u0026#34;\u003c/span\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[19]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;default_profile_image\u0026#34;\u003c/span\u003e   \u003cspan class=\"s\"\u003e\u0026#34;withheld_in_countries\u0026#34;\u003c/span\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[21]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;derived\u0026#34;\u003c/span\u003e                 \u003cspan class=\"s\"\u003e\u0026#34;withheld_scope\u0026#34;\u003c/span\u003e         \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[23]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;entities\u0026#34;\u003c/span\u003e               \u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eYou can use \u003ccode\u003etweets_data()\u003c/code\u003e to retrieve information about their latest tweet:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nf\"\u003ecolnames\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etweets_data\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[1]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;created_at\u0026#34;\u003c/span\u003e                    \u003cspan class=\"s\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e                           \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[3]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;id_str\u0026#34;\u003c/span\u003e                        \u003cspan class=\"s\"\u003e\u0026#34;text\u0026#34;\u003c/span\u003e                         \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[5]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;truncated\u0026#34;\u003c/span\u003e                     \u003cspan class=\"s\"\u003e\u0026#34;entities\u0026#34;\u003c/span\u003e                     \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[7]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;source\u0026#34;\u003c/span\u003e                        \u003cspan class=\"s\"\u003e\u0026#34;in_reply_to_status_id\u0026#34;\u003c/span\u003e        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003e[9]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;in_reply_to_status_id_str\u0026#34;\u003c/span\u003e     \u003cspan class=\"s\"\u003e\u0026#34;in_reply_to_user_id\u0026#34;\u003c/span\u003e          \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[11]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;in_reply_to_user_id_str\u0026#34;\u003c/span\u003e       \u003cspan class=\"s\"\u003e\u0026#34;in_reply_to_screen_name\u0026#34;\u003c/span\u003e      \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[13]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;geo\u0026#34;\u003c/span\u003e                           \u003cspan class=\"s\"\u003e\u0026#34;coordinates\u0026#34;\u003c/span\u003e                  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[15]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;place\u0026#34;\u003c/span\u003e                         \u003cspan class=\"s\"\u003e\u0026#34;contributors\u0026#34;\u003c/span\u003e                 \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[17]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;is_quote_status\u0026#34;\u003c/span\u003e               \u003cspan class=\"s\"\u003e\u0026#34;retweet_count\u0026#34;\u003c/span\u003e                \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[19]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;favorite_count\u0026#34;\u003c/span\u003e                \u003cspan class=\"s\"\u003e\u0026#34;favorited\u0026#34;\u003c/span\u003e                    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[21]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;retweeted\u0026#34;\u003c/span\u003e                     \u003cspan class=\"s\"\u003e\u0026#34;lang\u0026#34;\u003c/span\u003e                         \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[23]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;retweeted_status\u0026#34;\u003c/span\u003e              \u003cspan class=\"s\"\u003e\u0026#34;possibly_sensitive\u0026#34;\u003c/span\u003e           \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[25]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;quoted_status\u0026#34;\u003c/span\u003e                 \u003cspan class=\"s\"\u003e\u0026#34;display_text_width\u0026#34;\u003c/span\u003e           \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[27]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;user\u0026#34;\u003c/span\u003e                          \u003cspan class=\"s\"\u003e\u0026#34;full_text\u0026#34;\u003c/span\u003e                    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[29]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;favorited_by\u0026#34;\u003c/span\u003e                  \u003cspan class=\"s\"\u003e\u0026#34;scopes\u0026#34;\u003c/span\u003e                       \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[31]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;display_text_range\u0026#34;\u003c/span\u003e            \u003cspan class=\"s\"\u003e\u0026#34;quoted_status_id\u0026#34;\u003c/span\u003e             \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[33]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;quoted_status_id_str\u0026#34;\u003c/span\u003e          \u003cspan class=\"s\"\u003e\u0026#34;quoted_status_permalink\u0026#34;\u003c/span\u003e      \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[35]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;quote_count\u0026#34;\u003c/span\u003e                   \u003cspan class=\"s\"\u003e\u0026#34;timestamp_ms\u0026#34;\u003c/span\u003e                 \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[37]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;reply_count\u0026#34;\u003c/span\u003e                   \u003cspan class=\"s\"\u003e\u0026#34;filter_level\u0026#34;\u003c/span\u003e                 \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[39]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;metadata\u0026#34;\u003c/span\u003e                      \u003cspan class=\"s\"\u003e\u0026#34;query\u0026#34;\u003c/span\u003e                        \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[41]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;withheld_scope\u0026#34;\u003c/span\u003e                \u003cspan class=\"s\"\u003e\u0026#34;withheld_copyright\u0026#34;\u003c/span\u003e           \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[43]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;withheld_in_countries\u0026#34;\u003c/span\u003e         \u003cspan class=\"s\"\u003e\u0026#34;possibly_sensitive_appealable\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eYou can merge them via:\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eusers_and_last_tweets \u0026lt;- cbind(users, id_str = tweets_data(users)[, \u0026#34;id_str\u0026#34;])\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIn the future (\u003ca href=\"#future\"\u003esee below\u003c/a\u003e), with helper functions managing the output of rtweet will become easier.\u003c/p\u003e\u003cp\u003eFinally, \u003ccode\u003eget_followers()\u003c/code\u003e and \u003ccode\u003eget_friends()\u003c/code\u003e now return the same columns:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nf\"\u003ecolnames\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eget_followers\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;_R_Foundation\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[1]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;from_id\u0026#34;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;to_id\u0026#34;\u003c/span\u003e  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"nf\"\u003ecolnames\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eget_friends\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;_R_Foundation\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e[1]\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;from_id\u0026#34;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;to_id\u0026#34;\u003c/span\u003e  \u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThis will make it easier to build networks of connections (although you might want to convert screen names to ids or vice versa).\u003c/p\u003e\u003ch3 id=\"more-consistent-interface\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#more-consistent-interface\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMore consistent interface\u003c/h3\u003e\u003cp\u003eAll paginated functions that don\u0026rsquo;t return tweets now use a consistent pagination interface (except the premium endpoints).They all store the \u0026ldquo;next cursor\u0026rdquo; in an \u003ccode\u003ertweet_cursor\u003c/code\u003e attribute, which will be automatically retrieved when you use the \u003ccode\u003ecursor\u003c/code\u003e argument.This will make it easier to continue a query you started:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eusers\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_followers\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;_R_Foundation\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eusers\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# use `cursor` to find the next \u0026#34;page\u0026#34; of results\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emore_users\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_followers\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;_R_Foundation\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecursor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThey support \u003ccode\u003emax_id\u003c/code\u003e and \u003ccode\u003esince_id\u003c/code\u003e to find earlier and later tweets respectively:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Retrieve all the tweets made since the previous request\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003enewer\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esearch_tweets\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;weather\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esince_id\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003etweets\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Retrieve tweets made before the previous request\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eolder\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esearch_tweets\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;weather\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_id\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003etweets\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eIf you want more tweets than it is allowed by the rate limits of the API, you can use \u003ccode\u003eretryonratelimit\u003c/code\u003e to wait as long as needed:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003elong\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esearch_tweets\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;weather\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1000\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eretryonratelimit\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThis will keep busy your terminal until the 1000 tweets are retrieved.\u003c/p\u003e\u003ch3 id=\"saving-data\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#saving-data\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSaving data\u003c/h3\u003e\u003cp\u003eAn unexpected consequence of returning more data (now matching that returned by the API) is that it is harder to save it in a tabular format.For instance one tweet might have one media, mention two users and have three hashtags.There isn\u0026rsquo;t a simple way to save it in a single row uniformly for all tweets orit could lead to confusion.\u003c/p\u003e\u003cp\u003eThis resulted in deprecating \u003ccode\u003esave_as_csv\u003c/code\u003e, \u003ccode\u003eread_twitter_csv\u003c/code\u003e and related functions because they don\u0026rsquo;t work with the new data structure and it won\u0026rsquo;t be possible to load the complete data from a csv.They will be removed in later versions.\u003c/p\u003e\u003cp\u003eMany users will benefit from saving to RDS (e.g., \u003ccode\u003esaveRDS()\u003c/code\u003e or \u003ccode\u003ereadr::write_rds()\u003c/code\u003e), and those wanting to export to tabular format can simplify the data to include only that of interest before saving with generic R functions (e.g., \u003ccode\u003ewrite.csv()\u003c/code\u003e or \u003ccode\u003ereadr::write_csv()\u003c/code\u003e).\u003c/p\u003e\u003ch2 id=\"other-breaking-changes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-breaking-changes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003cstrong\u003eOther breaking changes\u003c/strong\u003e\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eAccessibility is important and for this reason if you tweet via \u003ccode\u003epost_tweet()\u003c/code\u003e and add an image, gif or video you\u0026rsquo;ll need to provide the media alternative text.Without \u003ccode\u003emedia_alt_text\u003c/code\u003e it will not allow you to post.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ccode\u003etweet_shot()\u003c/code\u003e has been deprecated as it no longer works correctly.It might be possible to bring it back, but the code is complex and I do not understand enough to maintain it.If you\u0026rsquo;re interested in seeing this feature return, checkout the discussion about this \u003ca href=\"https://github.com/ropensci/rtweet/issues/458\"\u003eissue\u003c/a\u003e and let me know if you have any suggestions.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003ertweet also used to provide functions for data on \u003ccode\u003eemojis\u003c/code\u003e, \u003ccode\u003elangs\u003c/code\u003e and \u003ccode\u003estopwordslangs\u003c/code\u003e.These are useful resources for text mining in general - not only in tweets - however they need to be updated to be helpful and would be better placed in other packages, for instance emojis is now on the \u003ca href=\"https://cran.r-project.org/package=bdpar\"\u003ebdpar package\u003c/a\u003e.Therefore they are no longer available in rtweet.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe functions like \u003ccode\u003esuggested_*()\u003c/code\u003e have been removed as they have been broken since 2019.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"easier-authentication\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#easier-authentication\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003cstrong\u003eEasier authentication\u003c/strong\u003e\u003c/h2\u003e\u003cp\u003eAn exciting part of this release has been a big rewrite of the authentication protocol.While it is compatible with previous rtweet authentication methods it has also some important new functions which make it easier to work with rtweet and the twitter API in different ways.\u003c/p\u003e\u003ch3 id=\"different-ways-to-authenticate\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#different-ways-to-authenticate\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDifferent ways to authenticate\u003c/h3\u003e\u003cp\u003eIf you just want to test the package, use the default authentication \u003ccode\u003eauth_setup_default()\u003c/code\u003e that comes with rtweet.If you use it for one or two days you won\u0026rsquo;t notice any problem.\u003c/p\u003e\u003cp\u003eIf you want to use the package for more than a couple of days, I recommend you set up your own token via \u003ccode\u003ertweet_user()\u003c/code\u003e.It will open a window to authenticate via the authenticated account in your default browser.This authentication won\u0026rsquo;t allow you to do everything but it will avoid running out of requests and being rate-limited.\u003c/p\u003e\u003cp\u003eIf you plan to make heavy use of the package, I recommend registering yourself as developer and using one of the following two mechanisms, depending on your plans:\u003c/p\u003e\u003cul\u003e\u003cli\u003eCollect data and analyze: \u003ccode\u003ertweet_app()\u003c/code\u003e.\u003c/li\u003e\u003cli\u003eSet up a bot: \u003ccode\u003ertweet_bot()\u003c/code\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind more information in the \u003ca href=\"https://docs.ropensci.org/rtweet/articles/auth.html\"\u003eAuthentication with rtweet vignette\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"storing-credentials\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#storing-credentials\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStoring credentials\u003c/h3\u003e\u003cp\u003ePreviously rtweet saved each token created, but now non-default tokens are only saved if you ask. You can save them manually via \u003ccode\u003eauth_save(token, \u0026quot;my_app\u0026quot;)\u003c/code\u003e.Bonus, if you name your token as default (\u003ccode\u003eauth_save(token, \u0026quot;default\u0026quot;)\u003c/code\u003e) it will be used automatically upon loading the library.\u003c/p\u003e\u003cp\u003eFurther, tokens are now saved in the location output by \u003ccode\u003etools::R_user_dir(\u0026quot;rtweet\u0026quot;, \u0026quot;config\u0026quot;)\u003c/code\u003e, rather than in your home directory.If you have previous tokens saved or problems identifying which token is which use \u003ccode\u003eauth_sitrep()\u003c/code\u003e.This will provides clues to which tokens might be duplicated or misconfigured but it won\u0026rsquo;t check if they work.It will also automatically move your tokens to the new path.\u003c/p\u003e\u003cp\u003eTo check which credentials you have stored use \u003ccode\u003eauth_list()\u003c/code\u003e and load them via \u003ccode\u003eauth_as(\u0026quot;my_app\u0026quot;)\u003c/code\u003e.All the rtweet functions will use the latest token loaded with \u003ccode\u003eauth_as\u003c/code\u003e (unless you manually specify one when calling it).If you are not sure which token you are using you can use \u003ccode\u003eauth_get()\u003c/code\u003e it will return the token in use, list them or ask you to authenticate.\u003c/p\u003e\u003ch2 id=\"other-changes-of-note\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-changes-of-note\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003cstrong\u003eOther changes of note\u003c/strong\u003e\u003c/h2\u003e\u003cp\u003eThis is a list of other changes that aren\u0026rsquo;t too big or are not breaking changes but are worthy enough of a mention:\u003c/p\u003e\u003ch3 id=\"iteration-and-continuation-of-requests\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#iteration-and-continuation-of-requests\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIteration and continuation of requests\u003c/h3\u003e\u003cp\u003eUsing cursors, pagination or waiting until you can make more queries is now easier.For example you can continue previous requests via:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eusers\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_followers\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;_R_Foundation\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eusers\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# use `cursor` to find the next \u0026#34;page\u0026#34; of results\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emore_users\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eget_followers\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;_R_Foundation\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecursor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eusers\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"additions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#additions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAdditions\u003c/h3\u003e\u003cp\u003eThere is now a function to find a thread of a user.You can start from any tweet and it will find all the tweets of the thread:\u003ccode\u003etweet_threading(\u0026quot;1461776330584956929\u0026quot;)\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eThere is a lot of interest in downloading and keeping track of interactions on Twitter.The amount of interest is big enough that Twitter is releasing a new API to provide more information of this nature.\u003c/p\u003e\u003ch2 id=\"future\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#future\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003cstrong\u003eFuture\u003c/strong\u003e\u003c/h2\u003e\u003cp\u003eTwitter API v2 is being released and soon it will replace API v1.rtweet up to now, including this release, uses API v1 so it will need to adapt to the new endpoints and new data returned.\u003c/p\u003e\u003cp\u003eFirst will be the streaming endpoints in November, so expect more (breaking?) changes around those dates if not earlier.\u003c/p\u003e\u003cp\u003eI would also like to make it easier for users, dependencies and the package itself to handle the outputs.To this regard I would like to provide some classes to handle the different type of objects it returns.\u003c/p\u003e\u003cp\u003eThis will help avoid some of the current shortcomings.Specifically I would like to provide functions to make it easier to reply to previous tweets,extract nested data, and subset tweets and the accompanying user information.\u003c/p\u003e\u003ch2 id=\"conclusions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u003cstrong\u003eConclusions\u003c/strong\u003e\u003c/h2\u003e\u003cp\u003eWhile I made many breaking changes I hope these changes will smooth future development and help both users and maintainers.\u003c/p\u003e\u003cp\u003eFeel free to ask on the \u003ca href=\"https://discuss.ropensci.org/tag/rtweet\"\u003erOpenSci community\u003c/a\u003e if you have questions about the transition or find something amiss.Please let me know! It will help me prioritize which endpoints are more relevant to the community.(And yes, the academic archive endpoint is on the radar.)\u003c/p\u003e\u003cp\u003eIt is also possible that I overlooked something and I thought the code is working when it isn\u0026rsquo;t.For example, after several months of changing the way the API is parsed, several users found it wasn\u0026rsquo;t handling some elements.Let me know of such or similar cases and I\u0026rsquo;ll try to fix it.\u003c/p\u003e\u003cp\u003eIn case you find a bug, check the open issues and if it has not already been reported, open an \u003ca href=\"https://github.com/ropensci/rtweet/issues/\"\u003eissue on GitHub\u003c/a\u003e.Don\u0026rsquo;t forget to make a \u003ca href=\"https://cran.r-project.org/web/packages/reprex/readme/README.html\"\u003ereprex\u003c/a\u003e and if possible provide the id of the tweets you are having trouble with.Unfortunately it has happened that when I came to look at a bug I couldn\u0026rsquo;t reproduce it as I wasn\u0026rsquo;t able to find the tweet which caused the error.\u003c/p\u003e\u003cp\u003eThis release includes contributions from Hadely Wicham, Bob Rudis, Alex Hayes, Simon Heß, Diego Hernán, Michael Chirico, Jonathan Sidi, Jon Harmon, Andrew Fraser and many other that reported bugs or provided feedback.Many thanks all for using it, your interest to keep it working and improving rtweet for all.\u003c/p\u003e\u003cp\u003eFinally, you can read the whole \u003ca href=\"https://docs.ropensci.org/rtweet/news/index.html\"\u003eNEWS online\u003c/a\u003e and the examples.\u003c/p\u003e\u003cp\u003eHappy tweeting!\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eSpecifically these: \u003ccode\u003eget_favorites()\u003c/code\u003e, \u003ccode\u003eget_favorites_user()\u003c/code\u003e, \u003ccode\u003eget_mentions()\u003c/code\u003e,\u003ccode\u003eget_my_timeline()\u003c/code\u003e, \u003ccode\u003eget_retweets()\u003c/code\u003e, \u003ccode\u003eget_timeline()\u003c/code\u003e, \u003ccode\u003eget_timeline_user()\u003c/code\u003e,\u003ccode\u003elists_statuses()\u003c/code\u003e, \u003ccode\u003elookup_statuses()\u003c/code\u003e, \u003ccode\u003elookup_tweets()\u003c/code\u003e, \u003ccode\u003esearch_30day()\u003c/code\u003e,\u003ccode\u003esearch_fullarchive()\u003c/code\u003e, \u003ccode\u003esearch_tweets()\u003c/code\u003e, \u003ccode\u003etweet_shot()\u003c/code\u003e and \u003ccode\u003etweet_threading()\u003c/code\u003e.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2022/07/21/rtweet-1-0-0/","date_published":"2022-07-21T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/rrrna-v4e34","title":"rOpenSci Code of Conduct Update","language":"en","authors":[{"name":"Kara Woo","url":"https://ropensci.org/author/kara-woo/","avatar":"https://github.com/karawoo.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community","code of conduct","governance"],"content_html":"\u003cp\u003eWe are pleased to announce the release of \u003cem\u003eVersion 2.4\u003c/em\u003e of our Code of Conduct with changes based on the feedback of our community.\u003c/p\u003e\u003ch3 id=\"whats-new\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#whats-new\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat’s new?\u003c/h3\u003e\u003cul\u003e\u003cli\u003eGreater detail about acceptable and unacceptable behaviors in online settings.\u003c/li\u003e\u003cli\u003eFirst translation of the text to Spanish.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eYou can access now the last version full-text in \u003ca href=\"/code-of-conduct/\"\u003eEnglish\u003c/a\u003e and \u003ca href=\"/codigo-de-conducta/\"\u003eSpanish\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe welcome your feedback by email to \u003ccode\u003econduct at ropensci.org\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eAs always our Code of Conduct uses community sources to improve.  For these changes, we have consulted and adapted the \u003ca href=\"https://user2021.r-project.org/participation/coc/\"\u003euseR! 2021 Code of Conduct\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"committee-changes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#committee-changes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommittee Changes\u003c/h3\u003e\u003cp\u003eWe thank \u003ca href=\"https://www.esipfed.org/about/people/megan-carter\"\u003eMegan Carter\u003c/a\u003e for serving as independent community member until June, 2022 and welcome back \u003ca href=\"https://karawoo.com/\"\u003eKara Woo\u003c/a\u003e to serve on this role.  \u003ca href=\"/author/yanina-bellini-saibene/\"\u003eYanina Bellini Saibene\u003c/a\u003e joins the committee as the new rOpenSci Community Manager.\u003cbr\u003eThank you for working with us to keep rOpenSci a safe, enjoyable, friendly, and enriching experience for everyone who participates.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/07/12/coc-update/","date_published":"2022-07-12T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/m8tb6-can94","title":"Evaluating GitHub Activity for Contributors","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]}],"tags":["GitHub","contributors","tech notes"],"content_html":"\u003cp\u003eSay you have a bug report or feature request to make to a package.How can you use information on GitHub to manage your expectations (will there be a quick fix) and actions (should you go ahead and fork the repository)?In this post, we shall go over sources of information and explain how they can be used.In the end, there is no magical recipe, except perhaps graciousness, as software is made by humans. \u0026#x1f609;\u003c/p\u003e\u003ch2 id=\"look-whether-the-repository-is-archived\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#look-whether-the-repository-is-archived\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLook whether the repository is archived\u003c/h2\u003e\u003cp\u003eLook whether the repository is \u003ca href=\"https://docs.github.com/en/repositories/archiving-a-github-repository/archiving-repositories\"\u003earchived on GitHub\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"how-it-helps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-it-helps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow it helps\u003c/h3\u003e\u003cp\u003eIf the repository is archived, clearly the authors are not going to work on it any more.\u003c/p\u003e\u003ch2 id=\"custom-watch-the-repository\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#custom-watch-the-repository\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e(Custom) watch the repository\u003c/h2\u003e\u003cp\u003eIf you are very invested in the fate of an R package, it might make sense to \u003ca href=\"https://docs.github.com/en/account-and-profile/managing-subscriptions-and-notifications-on-github/setting-up-notifications/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository=\"\u003ecustom watch\u003c/a\u003e it on GitHub: you can for instance to choose to be notified of all issues and PRs or only of releases.\u003c/p\u003e\u003cp\u003eNote that if you just watch a repository you are publicly listed as watcher, but to the best of my knowledge custom watchers are not publicly listed.\u003c/p\u003e\u003ch3 id=\"how-it-helps-1\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-it-helps-1\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow it helps\u003c/h3\u003e\u003cp\u003eWatching activity in the repository will make you aware of\u003c/p\u003e\u003cul\u003e\u003cli\u003eongoing development,\u003c/li\u003e\u003cli\u003edevelopment rhythms (for instance \u0026ldquo;cyclic but with quick fixes for crucial bugs\u0026rdquo;),\u003c/li\u003e\u003cli\u003eworkflows (are PRs welcome or do maintainers prefer to confirm interest in an issue first),\u003c/li\u003e\u003cli\u003ethe tone in that repository (if the tone is not friendly, run!).\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eNow it won\u0026rsquo;t help you if right now you are looking at a repository you were not watching before, but it\u0026rsquo;s good to know for next time.\u003c/p\u003e\u003ch2 id=\"read-the-contributing-files\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#read-the-contributing-files\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRead the contributing files\u003c/h2\u003e\u003cp\u003eIf the repository has a \u003ca href=\"/blog/2021/04/28/commcall-pkg-community/\"\u003econtributing guide\u003c/a\u003e (file \u003ccode\u003eCONTRIBUTING.md\u003c/code\u003e or \u003ccode\u003e.github/CONTRIBUTING.md\u003c/code\u003e) and it seems to have been at least a little bit customized compared to a standard model, pay attention to it. \u0026#x1f638;\u003c/p\u003e\u003cp\u003eIf the docs have any mention of development lifecycle (a badge, some text), also take it into account.\u003c/p\u003e\u003cp\u003eLast but not least, seeing the repository has a code of conduct can help one feel safe!rOpenSci \u003ca href=\"https://ropensci.org/code-of-conduct/\"\u003ecode of conduct\u003c/a\u003e applies to all rOpenSci packages.\u003c/p\u003e\u003ch3 id=\"how-it-helps-2\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-it-helps-2\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow it helps\u003c/h3\u003e\u003cp\u003eIt\u0026rsquo;s direct information from maintainers on what they expect from contributions, so it can help guide you in how to make contributions and what kind of contributions are welcome.\u003c/p\u003e\u003ch2 id=\"look-at-latest-code-activity\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#look-at-latest-code-activity\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLook at latest code activity\u003c/h2\u003e\u003cp\u003eOn the GitHub repository homepage you can find the time since the latest commit on the default branch.In the branches page you might see there\u0026rsquo;s code activity in another branch (see for instance \u003ca href=\"https://github.com/ropensci/readODS/branches\"\u003ehttps://github.com/ropensci/readODS/branches\u003c/a\u003e).In the releases tab you can see how old the latest released version is, and whether there\u0026rsquo;s a regularity in releases (see for instance \u003ca href=\"https://github.com/ropensci/magick/releases\"\u003ehttps://github.com/ropensci/magick/releases\u003c/a\u003e).\u003c/p\u003e\u003ch3 id=\"how-it-helps-3\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-it-helps-3\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow it helps\u003c/h3\u003e\u003cp\u003eIf there\u0026rsquo;s current code activity, your contributions might be tackled more quickly.If you see the code activity is bursty (the developers focus on it for a period of time, release a new version, then ignore notifications for a while), you might guess you will have to be patient.\u003c/p\u003e\u003ch2 id=\"look-at-planning-and-user-support-activity\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#look-at-planning-and-user-support-activity\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLook at planning and user support activity\u003c/h2\u003e\u003cp\u003eSort issues and PRs by recently updated (the default when using the browser extension \u003ca href=\"https://github.com/refined-github/refined-github\"\u003eRefinedGitHub\u003c/a\u003e). Are repository members actively answering issues?\u003c/p\u003e\u003cp\u003eLook at milestones: what\u0026rsquo;s the content of the different milestones?Are there expected dates of release?(See for instance \u003ca href=\"https://github.com/ropensci/dev_guide/milestones\"\u003ehttps://github.com/ropensci/dev_guide/milestones\u003c/a\u003e.)\u003c/p\u003e\u003ch3 id=\"how-it-helps-4\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-it-helps-4\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow it helps\u003c/h3\u003e\u003cp\u003eIf issues get a fast first human response, lucky you, you can politely ask whatever you wanted to ask and hope for a rather quick answer.If the planning is transparent and current (it\u0026rsquo;s hard to curate milestones \u0026#x1f605;), you might get an idea of where your contribution will fit.\u003c/p\u003e\u003ch2 id=\"look-at-authors-activity\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#look-at-authors-activity\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLook at authors\u0026rsquo; activity\u003c/h2\u003e\u003cp\u003eIdentify main contributors:\u003c/p\u003e\u003cul\u003e\u003cli\u003eThe DESCRIPTION file might not be that informative as it can contain historic contributors.\u003c/li\u003e\u003cli\u003eLook at the graph of contributions to see who are the current / recent active contributors (see for instance \u003ca href=\"https://github.com/ropensci/dev_guide/graphs/contributors\"\u003ehttps://github.com/ropensci/dev_guide/graphs/contributors\u003c/a\u003e).\u003c/li\u003e\u003cli\u003eAlso notice who responded to the latest issues and PRs.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eHead over to their GitHub profile, and even their \u003ca href=\"https://r-universe.dev/maintainers/\"\u003eR-universe profile\u003c/a\u003e: Have they been working on other things? Do they have a status (parental leave, vacation)? Is there a mismatch between the repo organization and the contributor\u0026rsquo;s job?\u003c/p\u003e\u003ch3 id=\"how-it-helps-5\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-it-helps-5\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow it helps\u003c/h3\u003e\u003cp\u003eSometimes there might be something obvious: if the maintainer changed jobs, maybe they dropped the repository of interest.However, more importantly, while it helps to be aware of the public activity of contributors \u003cstrong\u003eyou never know what a person is going through, so be gracious and patient\u003c/strong\u003e.\u003c/p\u003e\u003ch2 id=\"look-at-repository-checks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#look-at-repository-checks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLook at repository checks\u003c/h2\u003e\u003cp\u003eHead over the page of continuous integration status for the repositories, for instance it might be the Actions tab.Look at the CRAN status if the package was ever on CRAN.\u003c/p\u003e\u003ch3 id=\"how-it-helps-6\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-it-helps-6\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow it helps\u003c/h3\u003e\u003cp\u003eFailing checks that are not tackled might indicate the repository is not actively worked on.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we summarized some sources of information you, as potential contributor, can use to assess whether and how much a repository is active, to calibrate your expectations and offers of contributions.If a repository looks particularly abandoned, you might perhaps email authors to ask whether future work is planned and if not, whether you might take it over.Be considerate in all your \u003ca href=\"https://jacobtomlinson.dev/posts/2022/dont-be-that-open-source-user-dont-be-me/\"\u003einteractions with code maintainers\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you are the \u003cem\u003emaintainer\u003c/em\u003e of an rOpenSci package and need some punctual help or longer term maintenance support, please get in touch with us at \u003ccode\u003einfo@ropensci.org\u003c/code\u003e.We can for instance add a call for co-maintainers in our monthly newsletter.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/07/01/evaluating-github-activity-for-contributors/","date_published":"2022-07-01T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/jv328-x0m77","title":"rOpenSci News Digest, June 2022","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2022/06/24/ropensci-news-digest-june-2022\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"introducing-ropensci-new-community-manager-yanina-bellini-saibene\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#introducing-ropensci-new-community-manager-yanina-bellini-saibene\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIntroducing rOpenSci new Community Manager, Yanina Bellini Saibene\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;re excited and extremely thrilled to announce \u003ca href=\"/author/yanina-bellini-saibene/\"\u003e\u003cstrong\u003eYanina Bellini Saibene\u003c/strong\u003e\u003c/a\u003e is our new community manager!Yanina is a computer and data scientist by training and an educator by choice.She lives in Argentina, where she has been a researcher for the last 24 years.She is also a professor at Universidad Nacional Guillermo Brown.She is part of several communities as a member of The Carpentries Executive Council, R-Ladies Global and Leadership Team, R Forwards Core Team, R Consortium Infrastructure Steering Committee, useR! Working Group, Minorities in R (MiR), and Sociedad Argentina de Informática.\u003c/p\u003e\u003cp\u003eIn \u003ca href=\"/blog/2022/06/21/introducing-yanina/\"\u003eher words\u003c/a\u003e,\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eI believe in the power of open science at the service of people, that education is the best tool we have to improve lives, and that the most effective way to make changes is as part of a community. rOpenSci combines my passion for open software and open science with my favorite programming language and community. I am particularly excited by our \u003ca href=\"/blog/2021/12/20/inclusive-leadership-program/\"\u003enew project to empower community leaders from historically excluded groups\u003c/a\u003e and looking forward to playing a role in its development. I have worked to improve diversity, equity, and inclusion throughout my career, both because I am a member of groups that are historically excluded from science and because it’s the right thing to do.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eIn the coming weeks and months, she\u0026rsquo;ll be getting to know you all, listening in, and learning how she can support you and your contributions to rOpenSci.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003ePlease don’t hesitate to say hello! You can contact me by email yabellini@ropensci.org and also reach me on \u003ca href=\"https://contributing.ropensci.org/resources.html?q=slack#channels\"\u003erOpenSci semi-open Slack workspace\u003c/a\u003e.\u003c/p\u003e\u003c/blockquote\u003e\u003ch3 id=\"over-10000-r-packages-tracked-on-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#over-10000-r-packages-tracked-on-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOver 10.000 R packages tracked on R-universe!\u003c/h3\u003e\u003cp\u003eThe r-universe infrastructure has been \u003ca href=\"https://twitter.com/opencpu/status/1539869749215203333\"\u003eupgraded\u003c/a\u003e to automatically track development of all Bioconductor/CRAN packages that are maintained on GitHub, GitLab, or BitBucket.Together with other packages signed up by our users, the system now serves over 10,000 packages and 10,000 articles, providing a comprehensive database of the best software that the R ecosystem has to offer.\u003c/p\u003e\u003cp\u003eThe \u003ca href=\"https://r-universe.dev/search/\"\u003er-universe website\u003c/a\u003e makes it easy to browse by topic, keyword, author, organization, and shows extensive information about each package and its development process.We hope this will make it easier to discover interesting software and get a clear sense of the purpose and quality of the many R packages.\u003c/p\u003e\u003cp\u003eIf you want to create your own universe on r-universe, refer to this \u003ca href=\"https://ropensci.org/blog/2021/06/22/setup-runiverse/\"\u003epost in English\u003c/a\u003e or this \u003ca href=\"https://ropensci.org/blog/2021/09/21/creando-tu-r-universe/\"\u003epost in Spanish\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following three packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/sodium\"\u003esodium\u003c/a\u003e, developed by Jeroen Ooms: Bindings to libsodium \u003ca href=\"https://doc.libsodium.org/\"\u003ehttps://doc.libsodium.org/\u003c/a\u003e: a modern, easy-to-use software library for encryption, decryption, signatures, password hashing and more. Sodium uses curve25519, a state-of-the-art Diffie-Hellman function by Daniel Bernstein, which has become very popular after it was discovered that the NSA had backdoored Dual EC DRBG.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=sodium\"\u003eCRAN\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/tidyqpcr\"\u003etidyqpcr\u003c/a\u003e, developed by Edward Wallace together with Sam Haynes: For reproducible quantitative PCR (qPCR) analysis building on packages from the ’tidyverse’, notably ’dplyr’ and ’ggplot2’. It normalizes (by ddCq), summarizes, and plots pre-calculated Cq data, and plots raw amplification and melt curves from Roche Lightcycler (tm) machines. It does NOT (yet) calculate Cq data from amplification curves. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/470\"\u003ereviewed\u003c/a\u003e by Kelsey Montgomery.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/yfR\"\u003eyfR\u003c/a\u003e, developed by Marcelo Perlin: Facilitates download of financial data from Yahoo Finance \u003ca href=\"https://finance.yahoo.com/\"\u003ehttps://finance.yahoo.com/\u003c/a\u003e, a vast repository of stock price data across multiple financial exchanges. The package offers a local caching system and support for parallel computation. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/523\"\u003ereviewed\u003c/a\u003e by Nic Crane, and Alexander Fischer.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following eighteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/pkgstats\" title=\"Metrics of R Packages\"\u003epkgstats\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/pkgstats/releases/tag/v0.1.1\"\u003e\u003ccode\u003ev0.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/sodium\" title=\"A Modern and Easy-to-Use Crypto Library\"\u003esodium\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/sodium/releases/tag/v1.2.1\"\u003e\u003ccode\u003ev1.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/beastier\" title=\"Call BEAST2\"\u003ebeastier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beastier/releases/tag/v2.4.9\"\u003e\u003ccode\u003ev2.4.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/beautier\" title=\"BEAUti from R\"\u003ebeautier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beautier/releases/tag/v2.6.4\"\u003e\u003ccode\u003ev2.6.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/datapack\" title=\"A Flexible Container to Transport and Manipulate Data and AssociatedResources\"\u003edatapack\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/datapack/releases/tag/1.4.1\"\u003e\u003ccode\u003e1.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/EDIutils\" title=\"An API Client for the Environmental Data Initiative Repository\"\u003eEDIutils\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/EDIutils/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/excluder\" title=\"Checks for Exclusion Criteria in Online Data\"\u003eexcluder\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/excluder/releases/tag/v0.4.0\"\u003e\u003ccode\u003ev0.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/fingertipsR\" title=\"Fingertips Data for Public Health\"\u003efingertipsR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/fingertipsR/releases/tag/v1.0.9\"\u003e\u003ccode\u003ev1.0.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.8.0\"\u003e\u003ccode\u003ev0.8.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nomisr\" title=\"Access Nomis UK Labour Market Data\"\u003enomisr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nomisr/releases/tag/v0.4.7\"\u003e\u003ccode\u003ev0.4.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmdata\" title=\"Import OpenStreetMap Data as Simple Features or Spatial Objects\"\u003eosmdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmdata/releases/tag/v0.1.10\"\u003e\u003ccode\u003ev0.1.10\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/qualtRics\" title=\"Download Qualtrics Survey Data\"\u003equaltRics\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/qualtRics/releases/tag/v3.1.6\"\u003e\u003ccode\u003ev3.1.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/restez\" title=\"Create and Query a Local Copy of GenBank in R\"\u003erestez\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/restez/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rinat\" title=\"Access iNaturalist Data Through APIs\"\u003erinat\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rinat/releases/tag/v0.1.9\"\u003e\u003ccode\u003ev0.1.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stplanr\" title=\"Sustainable Transport Planning\"\u003estplanr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stplanr/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Workflows\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/0.12.1\"\u003e\u003ccode\u003e0.12.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tidyqpcr\" title=\"Quantitative PCR Analysis with the Tidyverse\"\u003etidyqpcr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidyqpcr/releases/tag/v1.0\"\u003e\u003ccode\u003ev1.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/webchem\" title=\"Chemical Information from the Web\"\u003ewebchem\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/webchem/releases/tag/v1.1.3\"\u003e\u003ccode\u003ev1.1.3\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are eighteen recently closed and active submissions and 2 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/523\"\u003eyfR\u003c/a\u003e, Downloads and Organizes Financial Data from Yahoo Finance. Submitted by \u003ca href=\"https://www.msperlin.com/blog/\"\u003eMarcelo S. Perlin\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/470\"\u003etidyqpcr\u003c/a\u003e, Quantitative PCR Analysis with the Tidyverse. Submitted by \u003ca href=\"https://scholar.google.co.uk/citations?user=7FLIJBAAAAAJ\u0026amp;hl=en\"\u003eEdward Wallace\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/386\"\u003ereadODS\u003c/a\u003e, Read and Write ODS Files. Submitted by \u003ca href=\"http://www.chainsawriot.com\"\u003eChung-hong Chan\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/524\"\u003ehudr\u003c/a\u003e, A R interface for accessing HUD (US Department of Housing and Urban Development) APIs. Submitted by \u003ca href=\"https://github.com/etam4260/etam4260\"\u003eEmmet Tam\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román-Palacios\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/418\"\u003eepair\u003c/a\u003e, Grabs data from EPA API, simplifies getting pollutant data. Submitted by \u003ca href=\"https://github.com/GLOrozcoM\"\u003eLeo Orozco-Mulfinger\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/533\"\u003edatefixR\u003c/a\u003e, Fix Really Messy Dates. Submitted by \u003ca href=\"http://constantine-cooke.com\"\u003eNathan Constantine-Cooke\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/475\"\u003ecanaper\u003c/a\u003e, Categorical Analysis of Neo- And Paleo-Endemism. Submitted by \u003ca href=\"https://joelnitta.com\"\u003eJoel Nitta\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/433\"\u003eROriginStamp\u003c/a\u003e, Interface to OriginStamp API to Obtain Trusted Time Stamps. Submitted by \u003ca href=\"https://github.com/rkrug\"\u003eRainer M Krug\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/541\"\u003espiro\u003c/a\u003e, Manage Data from Cardiopulmonary Exercise Testing. Submitted by \u003ca href=\"https://github.com/smnnlt\"\u003eSimon Nolte\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/532\"\u003eaorsf\u003c/a\u003e, Accelerated Oblique Random Survival Forests. Submitted by \u003ca href=\"https://github.com/bcjaeger\"\u003eByron\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"http://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/535\"\u003edaiquiri\u003c/a\u003e, Data Quality Reporting for Temporal Datasets. Submitted by \u003ca href=\"https://github.com/phuongquan\"\u003ephuongquan\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/443\"\u003erdbhapi\u003c/a\u003e, Interface to DBH-API. Submitted by \u003ca href=\"https://hkdir.no/\"\u003eMarija Ninic\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/429\"\u003erWind\u003c/a\u003e, Download, Edit and Include Wind and Sea Currents Data in Ecological and Evolutionary Analysis. Submitted by \u003ca href=\"http://allthiswasfield.blogspot.com.es/\"\u003eJavier Fernández-López\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/05/31/chatops-review-system-github\"\u003eEditorial Automation: Why \u0026amp; How to Set Up Chat-Ops for your Own Review System on GitHub\u003c/a\u003e by Maëlle Salmon, Mark Padgham, and Karthik Ram. Could the editorial bot generator Buffy fit your needs? How to know, how to set it up.\u003cfigure\u003e\u003cimg src=\"/blog/2022/06/24/ropensci-news-digest-june-2022/diagram.png\"\t\t\talt=\"Diagram representing automation for rOpenSci software peer review. On the left, is a GitHub issue thread with emojis as avatars, and wobbly lines as text. Under the GitHub issue thread, a legend indicating who among the emojis is the Author /Editor / Reviewer / ropensci-review-bot. At the center of the diagram is a Heroku app using the Buffy Ruby tool, that receives information from GitHub via webhooks. The app digests messages received and depending on the command pings an external service represented on the right (with a plumber logo); fills the Airtable-based software review database; manages ropensci GitHub organization via GitHub API; posts back or labels in the GitHub issue thread.\" width=\"400\"\u003e\u003c/figure\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/06/09/devguide-0.8.0\"\u003erOpenSci Dev Guide 0.8.0: Updates\u003c/a\u003e by Mark Padgham, Laura DeCicco, Julia Gustavsen, Jeff Hollister, Anna Krystalli, Mauro Lepore, Karthik Ram, Emily Riederer, Noam Ross, Maëlle Salmon, Adam Sparks, and Melina Vidoni. Updates in version 0.8.0 of the online book \u0026lsquo;rOpenSci Packages: Development, Maintenance, and Peer Review\u0026rsquo;.\u003cfigure\u003e\u003cimg src=\"/blog/2022/06/24/ropensci-news-digest-june-2022/cover.png\"\t\t\talt=\"cover of rOpenSci dev guide, showing a package production line with small humans discussing, examining and promoting packages\" width=\"400\"\u003e\u003c/figure\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"other-topics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-topics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOther topics\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/06/14/communication-with-contributors-in-an-open-source-organization\"\u003eCommunication \u0026amp; Collaboration with Contributors in an Open-Source Organization\u003c/a\u003e by Maëlle Salmon, and Zhian N. Kamvar. How we interact with volunteer maintainers.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/06/16/publicize-api-client-yes-no\"\u003eWhy You Should (or Shouldn\u0026rsquo;t) Build an API Client\u003c/a\u003e by Maëlle Salmon, Matthias Grenié, and Hugo Gruson. Should you write and maintain an R package accessing a web API? Here are our tips for deciding, and for doing it if you go for it. This post was discussed on the \u003ca href=\"https://share.fireside.fm/episode/87RSVeFz+4qaUu8e0?t=540\"\u003eR Weekly Highlights podcast\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/06/21/introducing-yanina\"\u003eIntroducing rOpenSci new Community Manager, Yanina Bellini Saibene\u003c/a\u003e by Yanina Bellini Saibene.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/06/21/introducing-yanina-es\"\u003ePresentamos a la nueva Community Manager de rOpenSci, Yanina Bellini Saibene\u003c/a\u003e by Yanina Bellini Saibene.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eTwo use cases of our packages and resources have been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/extracao-de-dados-sobre-herois-negros-e-negras-da-marvel-e-dc/2952\"\u003eExtração de dados sobre heróis negros e negras da Marvel e DC\u003c/a\u003e. Reported by Fernando Almeida Barbalho.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/map-of-linguae-francae-of-dagestan-russia/2957\"\u003eMap of linguae francae of Dagestan, Russia\u003c/a\u003e. Reported by George Moroz.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eIf you are interested in contributing to gistr, you could \u003ca href=\"https://github.com/ropensci/gistr/issues/85\"\u003ejoin the new maintainer team\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eFor more info see:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://devguide.ropensci.org/changing-maintainers.html\"\u003eour guidance on \u003cem\u003eChanging package maintainers\u003c/em\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://devguide.ropensci.org/curationpolicy.html\"\u003eour \u003cem\u003ePackage Curation Policy\u003c/em\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"new-testing-chapter-in-the-r-packages-book\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-testing-chapter-in-the-r-packages-book\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew testing chapter in the R packages book\u003c/h3\u003e\u003cp\u003eJenny Bryan has announced on \u003ca href=\"https://twitter.com/JennyBryan/status/1535339178812067840\"\u003eTwitter\u003c/a\u003e that the \u003ca href=\"https://r-pkgs.org/tests.html\"\u003echapter on testing\u003c/a\u003e of the R packages book has been updated as she and Hadley Wickham work towards a second edition.A read worthy of your time especially if you\u0026rsquo;re a (future) testthat user!\u003c/p\u003e\u003ch3 id=\"conceptor-role-in-a-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conceptor-role-in-a-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConceptor role in a package?\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://www.rplumber.io/\"\u003eplumber\u003c/a\u003e package has an author listed as \u0026ldquo;cpp\u0026rdquo; (conceptor): \u003ca href=\"https://github.com/rstudio/plumber/blob/0c21b78669861c7cb03f98b192b660320ff8040c/DESCRIPTION#L9\"\u003ehttps://github.com/rstudio/plumber/blob/0c21b78669861c7cb03f98b192b660320ff8040c/DESCRIPTION#L9\u003c/a\u003eIt is not an \u003ca href=\"https://stat.ethz.ch/R-manual/R-devel/library/utils/html/person.html\"\u003eofficially recognized role\u003c/a\u003e but it is interesting to think of ways to recognize original authors when for instance \u003ca href=\"https://devguide.ropensci.org/changing-maintainers.html\"\u003echanging package maintainers\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"github-issue-close-labels\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#github-issue-close-labels\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGitHub Issue Close Labels\u003c/h3\u003e\u003cp\u003eGitHub recently tweaked their \u0026ldquo;Close Issue\u0026rdquo; button to add a down-arrow to the right which opens a pop-down menu offering two ways to label why the issue was closed: as \u0026ldquo;completed\u0026rdquo; or \u0026ldquo;not planned.\u0026rdquo; They described this feature in \u003ca href=\"https://github.blog/changelog/2022-05-19-the-new-github-issues-may-19th-update/\"\u003ea recent GitHub blog entry\u003c/a\u003e. See also Maëlle\u0026rsquo;s recent blog post on \u003ca href=\"https://masalmon.eu/2022/04/05/github-tips/\"\u003eGitHub Tips\u003c/a\u003e for advice on how to keep up-to-date with ongoing GitHub development.\u003c/p\u003e\u003c!-- To be curated by hand --\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/06/24/ropensci-news-digest-june-2022/","date_published":"2022-06-24T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/nrs7d-ysq57","title":"Introducing rOpenSci new Community Manager, Yanina Bellini Saibene","language":"en","authors":[{"name":"Yanina Bellini Saibene","url":"https://orcid.org/0000-0002-4522-7466","avatar":"https://github.com/yabellini.png","_role":["author"]}],"tags":["community"],"content_html":"\u003ch2 id=\"hello-i-am-yanina-bellini-saibene-your-new-community-manager\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#hello-i-am-yanina-bellini-saibene-your-new-community-manager\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHello! I am Yanina Bellini Saibene, your new community manager.\u003c/h2\u003e\u003cp\u003eI\u0026rsquo;m so excited to join rOpenSci in this role, and support such an important project in open science and in the R Community.\u003c/p\u003e\u003cp\u003eWhen I saw the call for the position, I thought that my over 20 years of experience as a community builder, teacher, and researcher aligned perfectly with it.\u003c/p\u003e\u003cp\u003eI believe in the power of open science at the service of people, that education is the best tool we have to improve lives, and that the most effective way to make changes is as part of a community. rOpenSci combines my passion for open software and open science with my favorite programming language and community. I am particularly excited by our \u003ca href=\"/blog/2021/12/20/inclusive-leadership-program/\"\u003enew project to empower community leaders from historically excluded groups\u003c/a\u003e and looking forward to playing a role in its development. I have worked to improve diversity, equity, and inclusion throughout my career, both because I am a member of groups that are historically excluded from science and because it’s the right thing to do.\u003c/p\u003e\u003ch2 id=\"a-little-bit-about-me\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-little-bit-about-me\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA little bit about me\u003c/h2\u003e\u003cp\u003eI earned a master’s degree from the Universidad Austral (Buenos Aires, Argentina) in Data Mining and Knowledge Discovery. My bachelor’s degree is from Universidad del Salvador (Buenos Aires, Argentina) in Information System. I live in Argentina, where I have been a researcher for the last 24 years at the \u003ca href=\"https://www.argentina.gob.ar/inta\"\u003eNational Institute of Agricultural Technology\u003c/a\u003e (INTA). I\u0026rsquo;m also a professor at \u003ca href=\"https://www.unab.edu.ar/\"\u003eUniversidad Nacional Guillermo Brown\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eI started using R in 2009. My journey in the R community began in 2017 when I founded \u003ca href=\"https://www.meetup.com/es/rladies-santa-rosa/\"\u003eR-Ladies Santa Rosa\u003c/a\u003e, the second active chapter of R-Ladies in Latin America. Since then, I co-founded \u003ca href=\"https://latin-r.com/\"\u003eLatinR\u003c/a\u003e and \u003ca href=\"https://www.metadocencia.org/\"\u003eMetaDocencia\u003c/a\u003e and became a member of \u003ca href=\"https://carpentries.org/\"\u003eThe Carpentries\u003c/a\u003e Executive Council (by the community\u0026rsquo;s vote). I’m also part of the \u003ca href=\"https://rladies.org/\"\u003eR-Ladies Global\u003c/a\u003e Team, \u003ca href=\"https://forwards.github.io/\"\u003eRForwards\u003c/a\u003e Core Team, \u003ca href=\"https://www.r-consortium.org/about/governance\"\u003eR Consortium Infrastructure Steering Committee\u003c/a\u003e as R-Ladies Project Lead, \u003ca href=\"https://github.com/cienciadedatos\"\u003eR4DS_ES\u003c/a\u003e, useR! Working Group, \u003ca href=\"https://mircommunity.com\"\u003eMiR\u003c/a\u003e, and \u003ca href=\"https://www.sadio.org.ar/\"\u003eSociedad Argentina de Informática\u003c/a\u003e (SADIO).\u003c/p\u003e\u003ch2 id=\"lets-to-know-each-other\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#lets-to-know-each-other\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLet\u0026rsquo;s to know each other\u003c/h2\u003e\u003cp\u003eIn the coming weeks and months, I\u0026rsquo;ll be getting to know you all, listening in, and learning how I can support you and your \u003ca href=\"https://contributing.ropensci.org/index.html\"\u003econtributions\u003c/a\u003e to rOpenSci.\u003c/p\u003e\u003cp\u003eI know I have \u003ca href=\"/blog/2022/01/14/msg-from-stefanie/\"\u003ehuge shoes to fill\u003c/a\u003e, but I\u0026rsquo;m looking forward to learning from and getting to know you all.\u003c/p\u003e\u003cp\u003ePlease don’t hesitate to say hello! You can contact me by email yabellini@ropensci.org and also reach me on \u003ca href=\"https://contributing.ropensci.org/resources.html?q=slack#channels\"\u003erOpenSci semi-open Slack workspace\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/06/21/introducing-yanina/","date_published":"2022-06-21T00:00:01-07:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/hywj2-cwh39","title":"Why You Should (or Shouldn't) Build an API Client","language":"en","authors":[{"name":"Hugo Gruson","url":"https://orcid.org/0000-0002-4094-1476","avatar":"https://ropensci.org/img/community/hugo-gruson.jpg","_role":["author"]},{"name":"Matthias Grenié","url":"https://orcid.org/0000-0002-4659-7522","avatar":"https://github.com/Rekyt.png","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]}],"tags":["api","API client"],"content_html":"\u003cp\u003eThese days web Application Programming Interfaces (APIs) are everywhere (scientific data sources, your system for Customer relationship management, cat facts API\u0026hellip;). Do you need to write some R code wrapping a web resource such as an API? Packaging it up might be useful to you or your team for the same reason as any code. Now, whether you really want to publicize the package and to guarantee its maintenance might be slightly trickier than for other packages, as the usefulness and status of your package will depend on the web API being up and running according to expectations. This creates a surface for failures that might be more or less scary depending on your trust in the upstream maintainers.\u003c/p\u003e\u003cp\u003eIn this post, we will go over whether you should bother maintain a package wrapping a web API and we will provide suggestions of useful resources.\u003c/p\u003e\u003ch2 id=\"why-would-your-api-package-delight-users\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-would-your-api-package-delight-users\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy would your API package delight users?\u003c/h2\u003e\u003cp\u003eIn a world where we have great R packages to interact with internet resources (httr, httr2, curl, etc.), one might wonder if it\u0026rsquo;s worth writing an API package rather than using these packages directly:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan class='nf'\u003ehttr2\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://httr2.r-lib.org/reference/request.html'\u003erequest\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"https://cat-fact.herokuapp.com/facts\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e |\u0026gt;   \u003cspan class='nf'\u003ehttr2\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://httr2.r-lib.org/reference/req_perform.html'\u003ereq_perform\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e |\u0026gt;   \u003cspan class='nf'\u003ehttr2\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://httr2.r-lib.org/reference/resp_body_raw.html'\u003eresp_body_json\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e |\u0026gt;   \u003cspan class='nf'\u003epurrr\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://purrr.tidyverse.org/reference/map.html'\u003emap_chr\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"text\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; [1] \"Cats make about 100 different sounds. Dogs make only about 10.\"                                        \u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; [2] \"Domestic cats spend about 70 percent of the day sleeping and 15 percent of the day grooming.\"          \u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; [3] \"I don't know anything about cats.\"                                                                     \u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; [4] \"The technical term for a cat’s hairball is a bezoar.\"                                                  \u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; [5] \"Cats are the most popular pet in the United States: There are 88 million pet cats and 74 million dogs.\"\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eHowever, even if not doing extremely complex things under the hood, the mere existence of your package can hugely lower the barrier to API usage to some R users.\u003c/p\u003e\u003cp\u003eHaving to read package docs rather than web API docs can for instance lower the efforts needed.\u003c/p\u003e\u003cp\u003eOther aspects that your package can simplify are:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003eAuthentication\u003c/strong\u003e (see below).\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eAPI response parsing\u003c/strong\u003e, for instance from deeply nested lists to near tibbles (see \u003ca href=\"https://docs.ropensci.org/rcrossref\"\u003ercrossref\u003c/a\u003e). When the data are complex, it may save some user time to use a well-designed package;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://blog.r-hub.io/2022/03/10/input-checking/\"\u003e\u003cstrong\u003eInput checking\u003c/strong\u003e\u003c/a\u003e (as done in \u003ca href=\"https://github.com/ropensci/qualtRics/blob/7d1e80ca20cb3d07cf7cfce3b0154b86c2113689/R/utils.R#L109\"\u003equaltRics\u003c/a\u003e and \u003ca href=\"https://github.com/ropensci/nasapower/blob/beb9e2907b6d100615a0cc2396b120f785c69813/R/get_power.R#L224\"\u003enasapower\u003c/a\u003e);\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eInput entry\u003c/strong\u003e (for instance better defaults, using today\u0026rsquo;s date, etc.);\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eGetting data from several result pages\u003c/strong\u003e (example: in gh, automatically implemented in the \u003ca href=\"https://gh.r-lib.org/reference/gh.html\"\u003e\u003ccode\u003egh::gh()\u003c/code\u003e\u003c/a\u003e function but done under the hood by \u003ca href=\"https://gh.r-lib.org/reference/gh_next.html\"\u003e\u003ccode\u003egh::gh_next()\u003c/code\u003e\u003c/a\u003e);\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eLimiting request rate\u003c/strong\u003e (as done in \u003ca href=\"https://docs.ropensci.org/rtweet/reference/rate_limit.html\"\u003ertweet\u003c/a\u003e and \u003ca href=\"https://github.com/r-lib/gh/blob/1820a99bcfb292683a1a7fdfb71bd36f8d45d6e5/R/gh_rate_limit.R\"\u003egh\u003c/a\u003e);\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eSending a good user-agent\u003c/strong\u003e to signal yourself to the API (\u003ca href=\"https://github.com/r-lib/gh/blob/1820a99bcfb292683a1a7fdfb71bd36f8d45d6e5/R/gh_request.R#L7\"\u003egh\u003c/a\u003e (\u003ccode\u003eUser-Agent: \u0026quot;https://github.com/r-lib/gh\u0026quot;\u003c/code\u003e), \u003ca href=\"https://github.com/ropensci/rmangal/blob/8f786a83824c8b5142e1485fa5fac5993227360e/R/zzz.R#L18\"\u003ermangal\u003c/a\u003e: \u003ccode\u003eUser-Agent: \u0026quot;rmangal\u0026quot;\u003c/code\u003e);\u003c/li\u003e\u003cli\u003e\u003cstrong\u003eManaging API errors\u003c/strong\u003e as R errors can be easier to interpret than HTTP errors for the unfamiliar users (\u003ca href=\"https://github.com/ropensci/qualtRics/blob/7d1e80ca20cb3d07cf7cfce3b0154b86c2113689/R/utils.R#L10\"\u003equaltRics\u003c/a\u003e, \u003ca href=\"https://github.com/ropensci/rnassqs/blob/80564dbc076981ad9f1fd51ccf6a513fe55967b7/R/request.R#L297-L301\"\u003ernassqs\u003c/a\u003e);\u003c/li\u003e\u003cli\u003eetc.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eA particularly tricky aspect your package can simplify is \u003cstrong\u003eauthentication\u003c/strong\u003e. Authentication is the fact that certain APIs ask the users to identify themselves before accessing them. This can come in several flavors: using provided API keys, using OAuth, or using HTTP authentication (see \u003ca href=\"https://rapidapi.com/blog/api-glossary/api-authentication\"\u003ehttps://rapidapi.com/blog/api-glossary/api-authentication\u003c/a\u003e for examples). Your package can both simplify it and promote \u003ca href=\"https://devguide.ropensci.org/package-development-security-best-practices.html#pkgsecrets\"\u003esecurity best practices\u003c/a\u003e! For instance, your package should not make an API key a function argument only as it would encourage writing the API key in scripts. Examples of packages simplifying authentication: \u003ca href=\"https://gh.r-lib.org/\"\u003egh\u003c/a\u003e, \u003ca href=\"https://docs.ropensci.org/rtweet\"\u003ertweet\u003c/a\u003e, \u003ca href=\"https://docs.ropensci.org/opencage\"\u003eopencage\u003c/a\u003e (whose docs encourage the use of the keyring package for storing credentials).\u003c/p\u003e\u003cp\u003eYour package might be even more useful if it wraps not only one, but more web APIs, providing an unified interface to different data sources. Examples: \u003ca href=\"https://jessicatytam.github.io/specieshindex/\"\u003especieshindex\u003c/a\u003e, \u003ca href=\"https://docs.ropensci.org/spocc/\"\u003espocc\u003c/a\u003e, and \u003ca href=\"https://docs.ropensci.org/taxize\"\u003etaxize\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"finding-the-right-complexityflexibility-balance\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#finding-the-right-complexityflexibility-balance\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFinding the right complexity/flexibility balance\u003c/h2\u003e\u003cp\u003eOne of the most difficult aspect with API R packages (or any R package really, but even more so here) is to strike the right balance on the complexity/flexibility trade-off. In an attempt to simplify things, you might end up:\u003c/p\u003e\u003cul\u003e\u003cli\u003eobscuring errors returned by the API. This typically happens when you indiscriminately catch all \u003ca href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses\"\u003eHTTP errors\u003c/a\u003e (e.g., by using \u003ca href=\"https://httr.r-lib.org/reference/http_error.html\"\u003e\u003ccode\u003ehttr::http_error()\u003c/code\u003e\u003c/a\u003e) and return a generic error message while each HTTP code has a precise meaning about what went wrong (see for example, \u003ca href=\"https://github.com/ropensci/qualtRics/blob/7d1e80ca20cb3d07cf7cfce3b0154b86c2113689/R/utils.R#L10\"\u003equaltRics\u0026rsquo; \u003ccode\u003equaltrics_response_code()\u003c/code\u003e function\u003c/a\u003e which returns custom errors in function of the HTTP error).\u003c/li\u003e\u003cli\u003evalidating the inputs in an overly strict way, and thereby preventing the user from sending potentially valid requests.\u003c/li\u003e\u003cli\u003ereturning a truncated output. This could arise when you insist on returning a clean, rectangular data where the API returns deeply nested data. It might be tempting to drop some information you don\u0026rsquo;t deem useful but that users might be interested in (e.g., \u003ca href=\"https://github.com/ropensci-archive/rromeo/issues/48\"\u003ehttps://github.com/ropensci-archive/rromeo/issues/48\u003c/a\u003e).\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAlternatively, in an attempt to preserve the API flexibility and to make sure you offer all options to the user, you might end up creating a package that is as complex, if not more complex than direct calls to the API.\u003c/p\u003e\u003cp\u003eAn interesting pattern might be for your package to provide both high-level and low-level functions, where low level functions can support API calls that the high level functions do not cover (or not yet). Expert users could then use the lower-level functions to access more detailed features of the API with more flexibility, while less experienced users would be interested in using higher-level functions that have simpler outputs. The \u003ca href=\"https://gh.r-lib.org/\"\u003egh\u003c/a\u003e package only offers low level functions, that are used in for instance the incredibly useful \u003ca href=\"https://usethis.r-lib.org/articles/pr-functions.html\"\u003ePR helpers in usethis\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eSimilarly, some packages, such as rtweet (via the \u003ccode\u003eparse\u003c/code\u003e argument), offer the option of getting either the raw output or the output parsed into rectangular data. The \u003ca href=\"https://docs.ropensci.org/zbank/\"\u003ezbank\u003c/a\u003e package offers a low-level API that gives back the unparsed answer as a nested list with complete information, it also offers a high-level API that sends back parsed data.frames.\u003c/p\u003e\u003ch2 id=\"how-an-api-can-hurt-you-sweat_smile\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-an-api-can-hurt-you-sweat_smile\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow an API can hurt you \u0026#x1f605;\u003c/h2\u003e\u003cp\u003eA web API might change: for instance its output could evolve, breaking your code.\u003c/p\u003e\u003cp\u003eBefore writing an R package, you might want to assess whether the API is well maintained, and you might even want to contact API maintainers to get their blessing. Alternatively, they might advise you to wait a couple of months as major breaking changes are in the pipeline. It is also a way to see whether they are responsive (and maybe get moral support for your package). That is a step useful if the API is, say, a small scientific data source (two of us, who built \u003ca href=\"https://github.com/ropensci-archive/rromeo\"\u003erromeo\u003c/a\u003e discovered the day the package was approved by rOpenSci that the API released a brand new version, with no common functions from the previous version).\u003c/p\u003e\u003cp\u003eNow, even a big commercial API (à la Twitter, wrapped by \u003ca href=\"https://docs.ropensci.org/rtweet\"\u003ertweet\u003c/a\u003e) could bite you: pricing could change, features can get dropped, etc. Beside, commercial APIs do not necessarily offer great rates for client developers, so your involvement might depend on what subscription you have for other reasons (now, if you lose your subscription by for instance changing jobs, you might no longer be interested in maintaining a package anyway).\u003c/p\u003e\u003cp\u003eGetting informed in advance won\u0026rsquo;t prevent bad surprises but should still help. Keeping informed (via a changelog, a newsletter, regular manual checks, tests with real requests) might also help seeing changes early. In \u003cstrong\u003etheory\u003c/strong\u003e, adding a custom \u003ca href=\"https://en.wikipedia.org/wiki/User_agent\"\u003euser-agent\u003c/a\u003e\u0026ndash;a small string that goes to the server to signal yourself when you\u0026rsquo;re making a query\u0026ndash;with contact details (link to your package development repository) might allow API maintainers to contact you if your package is causing issues or if it\u0026rsquo;s interacting with (soon to be) deprecated endpoints.\u003c/p\u003e\u003cp\u003eOne thing to keep in mind is that no matter how many flags you plant in your documentation, users of the R package might file bug reports with your package instead of with the API maintainers. It can help if you for example implement a once per session reminder of the link to the API and its citation to clear up the confusion.\u003c/p\u003e\u003cp\u003eFor the case when an API is \u003cem\u003eflaky\u003c/em\u003e, that is to say is often down, you might want to add warnings to your documentation and retries to your code (see for instance \u003ca href=\"https://httr2.r-lib.org/reference/req_retry.html\"\u003e\u003ccode\u003ehttr2::req_retry()\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"should-you-bother-maintain-an-api-package-for-everyone\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#should-you-bother-maintain-an-api-package-for-everyone\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eShould you bother maintain an API package for everyone?\u003c/h2\u003e\u003cp\u003eAssess potential usage before spending too much effort on your package. Of course usage might depend on your efforts: your package might make a data source more accessible to users who would feel less at ease writing httr2 code themselves; and your promotion efforts might make a wider audience tap into the API your package is wrapping.\u003c/p\u003e\u003cp\u003eAlso, maybe you might want to still develop an API package as a way to learn general package development and maintenance skills and to display these skills of yours to a wider audience.\u003c/p\u003e\u003cp\u003eIf you make your package public but are not sure whether you want to commit to maintain it longer term, make sure the docs clearly state the repo status or lifecycle.\u003c/p\u003e\u003ch2 id=\"could-the-api-package-creating-be-easier\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#could-the-api-package-creating-be-easier\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCould the API package creating be easier?\u003c/h2\u003e\u003cp\u003eCould the package be developed automatically based on an OpenAPI (formerly called Swagger) specifications? Maybe, but currently there is no established tool for that so you would first need to develop the R package creating R packages. \u0026#x1f609;\u003c/p\u003e\u003cp\u003eWorth exploring are:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/OpenAPITools/openapi-generator/tree/master/modules/openapi-generator/src/main/resources/r\"\u003eOpenAPI generator\u003c/a\u003e that seems to offer R functionalities;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://github.com/hrbrmstr/crumpets/\"\u003ecrumpets\u003c/a\u003e that was scaffolded using R.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eNow, of course not all APIs have an OpenAPI specification.\u003c/p\u003e\u003cp\u003eMore generally you might find the R-hub blog post \u003ca href=\"https://blog.r-hub.io/2020/02/10/code-generation\"\u003e\u0026ldquo;Code generation in R packages\u0026rdquo;\u003c/a\u003e relevant.\u003c/p\u003e\u003ch2 id=\"resources-for-api-package-developers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#resources-for-api-package-developers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eResources for API package developers\u003c/h2\u003e\u003cp\u003eNow, if you are still motivated to maintain an API package for a small (your team?) or big (the world!) audience, we recommend:\u003c/p\u003e\u003cul\u003e\u003cli\u003eThe \u003ca href=\"https://r-pkgs.org/\"\u003eR packages book by Hadley Wickham and Jenny Bryan\u003c/a\u003e (the online version corresponds to the future second edition, not completely revised at the time of writing);\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://devguide.ropensci.org/\"\u003erOpenSci dev guide\u003c/a\u003e;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://httr2.r-lib.org/articles/wrapping-apis.html\"\u003ehttr2 \u0026ldquo;Wrapping APIs\u0026rdquo; vignette\u003c/a\u003e (or httr vignettes, or curl docs, depending on what dependency you prefer);\u003c/li\u003e\u003cli\u003e\u003ca href=\"/blog/2014/04/14/webapis/\"\u003e\u0026ldquo;The ins and outs of interacting with web APIs\u0026rdquo;\u003c/a\u003e on this blog;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://books.ropensci.org/http-testing/\"\u003eHTTP testing in R\u003c/a\u003e including a more general chapter on \u003ca href=\"https://books.ropensci.org/http-testing/graceful.html\"\u003e\u0026ldquo;Graceful HTTP R packages\u0026rdquo;\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eReading all docs of the API you are using, potentially subscribing to its changelog;\u003c/li\u003e\u003cli\u003eAsking questions to friendly communities (\u003ca href=\"http://discuss.ropensci.org/\"\u003erOpenSci forum\u003c/a\u003e or \u003ca href=\"https://contributing.ropensci.org/resources.html?q=slack#channels\"\u003esemi-open slack workspace\u003c/a\u003e, \u003ca href=\"https://community.rstudio.com/c/package-development/11\"\u003epackage development category of RStudio community forum\u003c/a\u003e)\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIf you need to write code wrapping an API, you can obviously always package it up and follow best practices. Now, whether to publicize and guarantee maintenance of the resulting tool is a conscious decision to make. You should also regularly re-assess your maintaining the package. Onboard contributors regularly to share the load and potentially leave completely at some point without the package getting orphaned. Good luck, we hope you get all \u003ca href=\"https://http.cat/200\"\u003e\u003ccode\u003e200\u003c/code\u003e\u003c/a\u003e\u0026rsquo;s! Feel free to POST about your own experiences below.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/06/16/publicize-api-client-yes-no/","date_published":"2022-06-16T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/z329k-sqn35","title":"Communication & Collaboration with Contributors in an Open-Source Organization","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Zhian N. Kamvar","url":"https://orcid.org/0000-0003-1458-7108","avatar":"https://github.com/zkamvar.png","_role":["author"]}],"tags":["community"],"content_html":"\u003cp\u003e\u003cem\u003eZhiam Kamvar is Lesson Infrastructure Technology Developer at \u003ca href=\"https://carpentries.org/\"\u003eThe Carpentries\u003c/a\u003e (Software Carpentry, Data Carpentry \u0026amp; Library Carpentry), an open global community teaching the skills \u0026amp; perspectives to turn data into knowledge.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e\u003c/em\u003e\u003cem\u003eMaëlle Salmon is a Research Software Engineer with rOpenSci.\u003c/em\u003e\u003cem\u003eIn this post they compare their experiences in the two distinct organizations The Carpentries and rOpenSci.\u003c/em\u003e\u003c/p\u003e\u003cp\u003eAt rOpenSci, many \u003ca href=\"/commcalls/2020-03-18/\"\u003epackages are maintained\u003c/a\u003e by volunteer community members, and similarly at The Carpentries \u003ca href=\"https://carpentries.org/maintainers/\"\u003elessons are maintained\u003c/a\u003e by volunteer community members.We\u0026rsquo;re very thankful for the effort our volunteers put into that role and our organisations could literally not run without their work.However, sometimes infrastructure changes are decided centrally. For example, \u003ca href=\"/blog/2022/05/16/requiring-2fa-for-the-ropensci-github-organization/\"\u003erequiring two-factor authentication for all GitHub organization members at rOpenSci\u003c/a\u003e or \u003ca href=\"https://carpentries.org/blog/2022/05/workbench-beta/\"\u003eoverhauling the foundation of the lesson infrastructure at The Carpentries\u003c/a\u003e.In this post, we shall share some insights from our experiences regarding how we, as staff members, best support our volunteers through these transformations.\u003c/p\u003e\u003ch2 id=\"making-requirements-explicit\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#making-requirements-explicit\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMaking requirements explicit\u003c/h2\u003e\u003cp\u003eWhen volunteers take on maintenance of something (be it an R package or an R lesson), it is helpful to make expectations explicit right away.These requirements can contain a list of tasks and expectations of time (to respond) and duration (of the responsibility).At rOpenSci we have an \u003ca href=\"https://devguide.ropensci.org/authors-guide.html\"\u003eauthor guide\u003c/a\u003e for those who submit software to review, as well as a \u003ca href=\"https://devguide.ropensci.org/curationpolicy.html\"\u003epackage curation policy\u003c/a\u003e.At The Carpentries, maintainers \u003ca href=\"https://carpentries.org/blog/2022/05/maintainer-application/\"\u003eundergo an onboarding training\u003c/a\u003e to establish guidelines for how to work with Pull Requests, and to ensure our lessons align with \u003ca href=\"https://carpentries.org/values\"\u003eThe Carpentries’ core values\u003c/a\u003e and evidenced-based teaching practices.In 2022, The Carpentries established a \u003ca href=\"https://github.com/carpentries/maintainer-RFCs/issues/19\"\u003eyearly check-in\u003c/a\u003e to give maintainers a chance to step down if they have decided that they need a break from maintenance.\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e\u003c/p\u003e\u003ch2 id=\"using-several-channels-of-communication-and-being-responsive\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#using-several-channels-of-communication-and-being-responsive\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUsing several channels of communication and being responsive\u003c/h2\u003e\u003cp\u003eUnless there are very few people involved, messages need to be sent in several places, \u003cem\u003ewith reminders\u003c/em\u003e.Not all at once, the idea is not to spam people!A mix of general communication channels (newsletter, mailing lists, Slack workspaces) together with more targeted communication (\u003ca href=\"https://github.com/datacarpentry/r-socialsci/issues/274#issuecomment-1126176378\"\u003eping in GitHub issues\u003c/a\u003e, emails\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e), can best help deliver information\u0026hellip; but also opens the floor for questions and feedback \u003cem\u003efrom\u003c/em\u003e maintainers (because at the end of the day, the most important part of the community is the community itself)!Answering contributor questions in a timely manner is key to trust.\u003c/p\u003e\u003ch2 id=\"not-rushing-changes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#not-rushing-changes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNot rushing changes\u003c/h2\u003e\u003cp\u003eHave you ever stumbled across a package dependency with a new release that \u003ca href=\"https://github.com/dwinter/mmod/issues/2\"\u003ebroke everything\u003c/a\u003e?Not rushing changes is probably a good idea in general, but especially so in organizations where much of the work is done by volunteers juggling other responsibilities.Even big tech organizations like GitHub \u003ca href=\"https://github.blog/2022-05-04-software-security-starts-with-the-developer-securing-developer-accounts-with-2fa/\"\u003emake changes slowly so that they don’t alienate their users\u003c/a\u003e.We keep this in mind when defining timelines so that we can give people support before the change happens.\u003c/p\u003e\u003ch2 id=\"helping-without-taking-over\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#helping-without-taking-over\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHelping without taking over\u003c/h2\u003e\u003cp\u003eIt is important to us to do as much work on volunteers\u0026rsquo; behalf as possible.For instance, when \u003ca href=\"/blog/2022/01/31/package-build-failures/\"\u003emonitoring\u003c/a\u003e the dashboard of R-universe builds of packages, failures are reported with as much information as possible, with clear suggestions of fixes (possibly even pull requests).However, this has to be balanced with letting maintainers have ownership: for instance, we make as few direct code edits as possible.In The Carpentries, helping without taking over means that we provide decision support for maintainers, which looks like working on pull requests during maintainer meetings, \u003ca href=\"https://github.com/swcarpentry/git-novice/issues/778#issuecomment-879242651\"\u003eproviding clear context for contentious issues\u003c/a\u003e, \u003ca href=\"https://carpentries.org/help-wanted-issues/\"\u003eaggregating issues that need help\u003c/a\u003e (rOpenSci \u003ca href=\"/help-wanted/\"\u003eequivalent page\u003c/a\u003e), and even \u003ca href=\"https://carpentries.org/blog/2021/09/curriculum-advisory-committee-application/\"\u003eproviding a high-level governance structure made up of volunteers\u003c/a\u003e to address \u003ca href=\"https://github.com/datacarpentry/r-raster-vector-geospatial/issues/363#issuecomment-1129233099\"\u003ebroad topics in curricula\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post, we described how we as staff members interact with volunteer maintainers in our organizations.Our key messages are: having clear requirements; communicating via several means, respectfully and timely; making changes not too quickly; doing as much work as possible while respecting ownership.We recognize that there will still be hiccups in the way we drive changes, but we do our best to learn our lessons.What is your own experience as staff or volunteer in open-source organizations?\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eZhian also maintains the rOpenSci \u003ca href=\"https://docs.ropensci.org/tinkr/\"\u003etinkr package\u003c/a\u003e that was first introduced on this \u003ca href=\"/blog/2018/10/01/tinkr/\"\u003eblog\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eThis has inspired rOpenSci to think about planning a similar yearly survey.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eOn a technical note, some communication can be partly automated, e.g. emails can be sent collectively using gmailr.\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2022/06/14/communication-with-contributors-in-an-open-source-organization/","date_published":"2022-06-14T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/73dn9-83186","title":"rOpenSci Dev Guide 0.8.0: Updates","language":"en","authors":[{"name":"Adam Sparks","url":"https://ropensci.org/author/adam-sparks/","avatar":"https://github.com/adamhsparks.png","_role":["author"]},{"name":"Anna Krystalli","url":"https://ropensci.org/author/anna-krystalli/","avatar":"https://github.com/annakrystalli.png","_role":["author"]},{"name":"Emily Riederer","url":"https://ropensci.org/author/emily-riederer/","avatar":"https://github.com/emilyriederer.png","_role":["author"]},{"name":"Jeff Hollister","url":"https://ropensci.org/author/jeff-hollister/","avatar":"https://github.com/jhollist.png","_role":["author"]},{"name":"Julia Gustavsen","url":"https://orcid.org/0000-0002-4764-4802","avatar":"https://ropensci.org/img/team/julia-gustavsen.jpg","_role":["author"]},{"name":"Karthik Ram","url":"https://ropensci.org/author/karthik-ram/","avatar":"https://ropensci.org/img/team/karthik-ram.png","_role":["author"]},{"name":"Laura DeCicco","url":"https://ropensci.org/author/laura-decicco/","avatar":"https://github.com/ldecicco-usgs.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Mauro Lepore","url":"https://orcid.org/0000-0002-1986-7988","avatar":"https://ropensci.org/img/team/mauro-lepore.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Melina Vidoni","url":"https://ropensci.org/author/melina-vidoni/","avatar":"https://github.com/melvidoni.png","_role":["author"]},{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["author"]}],"tags":["Software Peer Review","dev guide","automation","ropensci-review-bot","GitHub"],"content_html":"\u003cp\u003erOpenSci Software Peer Review\u0026rsquo;s guidance is gathered in an \u003ca href=\"https://devguide.ropensci.org/\"\u003eonline book\u003c/a\u003e that keeps improving!This blog post summarises what\u0026rsquo;s new in our Dev Guide 0.8.0, with all changes listed in the \u003ca href=\"https://devguide.ropensci.org/booknews.html\"\u003echangelog\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"farewell-stefanie-butland\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#farewell-stefanie-butland\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFarewell Stefanie Butland\u003c/h2\u003e\u003cp\u003eAfter many years of fabulous contributions to the rOpenSci community, Stefanie Butland \u003ca href=\"/blog/2022/01/14/msg-from-stefanie/\"\u003eleft the role of community manager\u003c/a\u003e at the start of 2022. The Dev Guide included several references to Stefanie, particularly regarding preparing blog posts, as well as preparing Dev Guide releases. Her name has been removed and replaced with a generic \u0026ldquo;\u003cem\u003eCommunity Manager\u003c/em\u003e\u0026rdquo; title.\u003c/p\u003e\u003ch2 id=\"expanded-aims-and-scope\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#expanded-aims-and-scope\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExpanded Aims and Scope\u003c/h2\u003e\u003cp\u003eThis version of the Dev Guide reflects the recent expansion of our peer-review system to include \u003ca href=\"/software-review/\"\u003estatistical software\u003c/a\u003e. The \u003ca href=\"https://devguide.ropensci.org/policies.html#aims-and-scope\"\u003e\u003cem\u003eAims and Scope\u003c/em\u003e section\u003c/a\u003e now explains that statistical software is also within scope, and links directly to the \u003ca href=\"https://stats-devguide.ropensci.org\"\u003e\u003cem\u003eStatistical Software Dev Guide\u003c/em\u003e\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"updated-guide-for-authors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#updated-guide-for-authors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdated Guide for Authors\u003c/h2\u003e\u003cp\u003eOne of the largest changes in the current release is in the \u003ca href=\"https://devguide.ropensci.org/authors-guide.html\"\u003e\u003cem\u003eGuide for Authors\u003c/em\u003e chapter\u003c/a\u003e. This used to be a largely unstructured collection of dot points reflecting our evolving \u0026ldquo;best practices\u0026rdquo;. These points were collated and refined as our peer review system evolved over the years. The updated \u003cem\u003eGuide for Authors\u003c/em\u003e chapter provides a more structured reference, divided into the four main sections of:\u003c/p\u003e\u003cul\u003e\u003cli\u003ePlanning a submission or pre-submission enquiry (at what stage of the package lifecycle should it be submitted)\u003c/li\u003e\u003cli\u003ePreparing for submission (practical steps)\u003c/li\u003e\u003cli\u003eThe submission process\u003c/li\u003e\u003cli\u003eThe review process\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThese changes should both make the chapter more informative for people planning to submit packages for review, and also clarify what authors can expect from our peer review process. Additional changes include informing authors of packages under review that they can now directly call \u003ccode\u003e@ropensci-review-bot check package\u003c/code\u003e at any time during review to trigger an automated package report.We also now have explicit advice under \u003cem\u003ePlanning a Submission\u003c/em\u003e to ensure availability during the review process, and to consider the valuable time volunteered by package reviewers. In \u003cem\u003eThe Review Process\u003c/em\u003e, we also advise authors to immediately inform us if they are no longer able to respond to reviewers. These improvements to the \u003cem\u003eAuthors Guide\u003c/em\u003e should hopefully improve coordinated time management of all those involved in software reviews.\u003c/p\u003e\u003ch2 id=\"updated-editors-guide\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#updated-editors-guide\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdated Editors\u0026rsquo; Guide\u003c/h2\u003e\u003cp\u003eThe \u003ca href=\"https://devguide.ropensci.org/editorguide.html\"\u003e\u003cem\u003eEditors\u0026rsquo; Guide\u003c/em\u003e Chapter\u003c/a\u003e now includes an additional section on \u0026ldquo;Answering Reviewers\u0026rsquo; Questions\u0026rdquo;, with links to a few previous reviews in which editors have worked with reviewers and package authors to implement major package changes prior to ultimate acceptance.\u003c/p\u003e\u003ch2 id=\"more-automation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#more-automation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMore automation\u003c/h2\u003e\u003cp\u003eOur \u003ca href=\"/blog/2022/05/31/chatops-review-system-github/\"\u003eautomation processes\u003c/a\u003e continue to ease the burden on all those involved in our software peer review system. This version of the Dev Guide can happily jettison an entire \u0026ldquo;approval comment template\u0026rdquo; that reviewers used to have to copy-and-paste into an issue. That template is now automatically inserted by the \u003ccode\u003e@ropensci-review-bot\u003c/code\u003e as soon as a submission is approved. As described above, authors can now also call \u003ccode\u003echeck package\u003c/code\u003e directly in a GitHub review thread.\u003c/p\u003e\u003cp\u003eOur \u003ca href=\"https://devguide.ropensci.org/ci.html\"\u003e\u003cem\u003eContinuous Integration Best Practices\u003c/em\u003e chapter\u003c/a\u003e now states that all packages are checked on submission by our own internal \u003ca href=\"https://docs.ropensci.org/pkgcheck\"\u003e\u003ccode\u003epkgcheck\u003c/code\u003e system\u003c/a\u003e, and that this system is also available as \u003ca href=\"/blog/2022/02/01/pkgcheck-action/\"\u003ea GitHub action\u003c/a\u003e which authors are encouraged to use prior to submission. That section now also includes a general description of GitHub actions.\u003c/p\u003e\u003cp\u003eWhile not exactly an automation enhancement, our review template now explicitly states that reviewers can download a local copy, and complete a review either as an Rmarkdown (\u003ccode\u003e.Rmd\u003c/code\u003e) or plain markdown (\u003ccode\u003e.md\u003c/code\u003e) document, and simply copy-and-paste into the GitHub issue to complete the review. We are indebted to \u003ca href=\"https://github.com/ropensci/dev_guide/pull/375\"\u003eHugo Gruson for that clarificiation\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"automation-also-comes-to-the-dev-guide\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#automation-also-comes-to-the-dev-guide\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAutomation also comes to the Dev Guide\u003c/h3\u003e\u003cp\u003eIn addition to the automation advances described above, this release of the Dev Guide has also been eased through automation, notably through collecting several scripts and helper functions in a new R package, \u003ca href=\"https://github.com/ropensci-org/devguider\"\u003e\u003ccode\u003edevguider\u003c/code\u003e\u003c/a\u003e. One function, \u003ccode\u003eprerelease_checklist()\u003c/code\u003e, collects all current issues on the \u003ca href=\"https://github.com/ropensci/dev_guide/issues\"\u003eDev Guide GitHub repository\u003c/a\u003e that are associated with the upcoming release, adds then to our \u003ca href=\"https://devguide.ropensci.org/bookreleaseissue.html\"\u003epre-release checklist\u003c/a\u003e, and opens a new GitHub issue with all of those items as a checklist used to guide the next release. This checklist also contains explicit instructions on using other functions from the \u003ccode\u003edevguider\u003c/code\u003e package.\u003c/p\u003e\u003ch2 id=\"guidance-on-contributingmd-files\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#guidance-on-contributingmd-files\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGuidance on \u003ccode\u003econtributing.md\u003c/code\u003e files\u003c/h2\u003e\u003cp\u003eHaving a contributing file is \u003ca href=\"https://devguide.ropensci.org/collaboration.html?q=contributing#contributing-guide\"\u003ecompulsory for rOpenSci packages\u003c/a\u003e, and is automatically checked by our automated package checks. We\u0026rsquo;ve updated our \u003ca href=\"https://devguide.ropensci.org/collaboration.html#contributing-guide\"\u003erecommendations for CONTRIBUTING.md files\u003c/a\u003e to suggest a number of explicit approaches, including the one-line \u003ccode\u003eusethis::use_tidy_contributing()\u003c/code\u003e function, and links to two more extensive examples of contributing guides. We now also recommend the inclusion of a lifecycle statement in package contributing guides, to give contributors an understanding of the likely future development of a package.\u003c/p\u003e\u003ch2 id=\"authorship-of-included-code\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#authorship-of-included-code\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAuthorship of included code\u003c/h2\u003e\u003cp\u003eIn response to an \u003ca href=\"https://github.com/ropensci/dev_guide/issues/388\"\u003eidea from Klaus Vigo\u003c/a\u003e, the \u003ca href=\"https://devguide.ropensci.org/building.html#authorship\"\u003esection of package authorship\u003c/a\u003e now has an additional section describing how to acknowledge additional authors of external code included in a package.\u003c/p\u003e\u003ch2 id=\"no-more-cran-notes-for-rev-role-in-package-authorship\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#no-more-cran-notes-for-rev-role-in-package-authorship\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNo more CRAN notes for \u0026ldquo;rev\u0026rdquo; role in package authorship\u003c/h2\u003e\u003cp\u003eStandard rOpenSci practice is to \u003ca href=\"/blog/2018/03/16/thanking-reviewers-in-metadata/\"\u003eacknowledge package reviewers in your \u003ccode\u003eDESCRIPTION\u003c/code\u003e file\u003c/a\u003e by including their names with a \u003ccode\u003erole = \u0026quot;rev\u0026quot;\u003c/code\u003e identifier (subject to their approval). This used to raise notes in CRAN package checks on older versions of R. That is thankfully no longer the case, and we are happy to have finally been able to remove that statement. Everybody can now simply insert \u003ccode\u003erole = \u0026quot;rev\u0026quot;\u003c/code\u003e to acknowledge all reviewers, and all CRAN systems will happily recognise those statements.\u003c/p\u003e\u003ch2 id=\"updated-package-archiving-practice\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#updated-package-archiving-practice\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdated package archiving practice\u003c/h2\u003e\u003cp\u003eWe have updated our guidance on package evolution to include a new section on \u003ca href=\"https://devguide.ropensci.org/evolution.html#archivalguidance\"\u003epackage archiving\u003c/a\u003e. This section reflects our updated policies that archived packages should move \u003ccode\u003eREADME.md\u003c/code\u003e to an alternative location, and reduce the main \u003ccode\u003eREADME.md\u003c/code\u003e to a minimal form explaining only that the package has been archived, and linking to the former \u003ccode\u003eREADME.md\u003c/code\u003e contents.\u003c/p\u003e\u003ch2 id=\"two-factor-authentication-now-required\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#two-factor-authentication-now-required\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTwo-Factor Authentication now required\u003c/h2\u003e\u003cp\u003eOur \u003ca href=\"https://devguide.ropensci.org/package-development-security-best-practices.html\"\u003e\u003cem\u003ePackage Security Best Practices\u003c/em\u003e\u003c/a\u003e now \u003cem\u003erecommend\u003c/em\u003e the use of two-factor authentication (2FA) for GitHub, and clarify that 2FA is \u003ca href=\"/blog/2022/05/16/requiring-2fa-for-the-ropensci-github-organization/\"\u003emandatory for all rOpenSci organization members and outside collaborators\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"other-guidance-updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-guidance-updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOther guidance updates\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThe \u003ca href=\"https://devguide.ropensci.org/building.html#citation-file\"\u003e\u003cem\u003eCitation\u003c/em\u003e guidelines\u003c/a\u003e now suggest using \u003ca href=\"/blog/2021/11/23/cffr/\"\u003ethe \u003ccode\u003ecffr\u003c/code\u003e package\u003c/a\u003e to create a \u003ccode\u003eCITATION.cff\u003c/code\u003e file.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe \u003ca href=\"https://devguide.ropensci.org/building.html#further-guidance\"\u003e\u003cem\u003eFurther Guidance\u003c/em\u003e on Package Development\u003c/a\u003e now includes a section on useful blogs.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe appendix on redirecting package documentation has been updated \u003ca href=\"https://github.com/ropensci/dev_guide/pull/387\"\u003ethanks to Peter Desmet (#387)\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe \u003ca href=\"https://devguide.ropensci.org/building.html#testing\"\u003e\u003cem\u003eTesting\u003c/em\u003e section of the \u003cem\u003ePackaging Guide\u003c/em\u003e chapter\u003c/a\u003e has an expanded list of recommended packages, particularly those for testing and mocking responses from web resources. That section now also suggests reading the blog post, \u003ca href=\"https://mtlynch.io/good-developers-bad-tests/\"\u003e\u0026quot;\u003cem\u003eWhy good developers write bad unit tests\u003c/em\u003e\u0026quot;\u003c/a\u003e, by Michael Lynch.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe \u003ca href=\"https://devguide.ropensci.org/building.html#recommended-scaffolding\"\u003e\u003cem\u003eRecommanded Scaffolding\u003c/em\u003e section of the \u003cem\u003ePackaging Guide\u003c/em\u003e chapter\u003c/a\u003e now includes explicit recommendation of spatial packages, and details of (soon-to-be) obsolete spatial packages.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe section in that chapter on \u003ca href=\"https://devguide.ropensci.org/building.html#roxygen2-use\"\u003e\u003ccode\u003eroxygen2\u003c/code\u003e use in documentation\u003c/a\u003e also describes the \u003ccode\u003e@seealso\u003c/code\u003e and \u003ccode\u003e@family\u003c/code\u003e tags for grouping functions in package documentation sites.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe \u003ca href=\"https://devguide.ropensci.org/collaboration.html#gitflow\"\u003esection in the \u003cem\u003eCollaboration Guide\u003c/em\u003e Chapter\u003c/a\u003e on \u0026ldquo;Working with collaborators\u0026rdquo; has been streamlined, with \u003ca href=\"https://github.com/ropensci/dev_guide/pull/374\"\u003eadditional links\u003c/a\u003e on giving and receiving code reviews.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we summarized the changes incorporated into our book “rOpenSci Packages: Development, Maintenance, and Peer Review” over the last months. We are thankful for all contributions that shaped this release. We are already working on the next version, including further improvements such as guidance on \u003ca href=\"https://discuss.ropensci.org/t/standards-for-wrapper-packages-and-some-pracical-questions/2859\"\u003epackages which wrap other software\u003c/a\u003e, and recommendations for \u003ca href=\"https://github.com/ropensci/dev_guide/issues/382\"\u003efurther automation\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/06/09/devguide-0.8.0/","date_published":"2022-06-09T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/qp0c0-wna29","title":"Editorial Automation: Why & How to Set Up Chat-Ops for your Own Review System on GitHub","language":"en","authors":[{"name":"Karthik Ram","url":"https://ropensci.org/author/karthik-ram/","avatar":"https://ropensci.org/img/team/karthik-ram.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]}],"tags":["tech notes","Software Peer Review","buffy"],"content_html":"\u003cp\u003eAnyone can contribute a software package to the rOpenSci suite as long as it fits our scope (\u003ca href=\"https://devguide.ropensci.org/policies.html#aims-and-scope\"\u003eresearch lifecycle software\u003c/a\u003e and \u003ca href=\"https://stats-devguide.ropensci.org/pkgdev.html#scope\"\u003estatistical software\u003c/a\u003e) for a transparent, constructive, nonadversarial and open review. In practice, the review steps are all recorded in \u003cstrong\u003eGitHub issue threads\u003c/strong\u003e (\u003ca href=\"https://github.com/ropensci/software-review/issues/485\"\u003eexample\u003c/a\u003e).Software peer-review involves coordinating and tracking many moving parts: software submissions (new issues), testing and diagnostics, assignment of editors and reviewers, and logging the progression of submissions through revisions and acceptance.\u003c/p\u003e\u003cp\u003eOur editorial workflow has been significantly enhanced with the use of \u0026#x2728; automation \u0026#x2728; .\u003c/p\u003e\u003cp\u003eTo ensure that a package meets our compliance standards, we would previously clone the repository locally, install dependencies, run manual checks, gather the results, and copy-paste them into the issue thread. Now we can accomplish the same outcome with just a simple \u003cstrong\u003ecommand\u003c/strong\u003e into a GitHub issue comment:\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e@ropensci-review-bot check package\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSimilarly, we can use the following command to register a reviewer named in the submission issue metadata (filling YAML data) as well as in our Airtable database.\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e@ropensci-review-bot add @maelle to reviewers\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eFeeling inspired? Maybe you run a submission process (of papers, software, conference abstracts) that is handled in GitHub issue (or pull request) threads (or could be moved there)?\u003c/p\u003e\u003cp\u003eIn that case, maybe you could benefit from the same toolset as us: \u003ca href=\"https://www.arfon.org/chatops-driven-publishing\"\u003e\u003cstrong\u003echat-ops\u003c/strong\u003e\u003c/a\u003e where a GitHub \u0026ldquo;bot\u0026rdquo; account performs actions dictated by \u003cstrong\u003ehuman-typed commands\u003c/strong\u003e, orchestrated by a \u003cstrong\u003eRuby app deployed on a cloud platform\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eIn this post, we explain how to assess whether that app framework, the \u003cstrong\u003eeditorial bot generator Buffy\u003c/strong\u003e, might be right for you.We detail the steps involved in setting up \u0026ldquo;chat-ops\u0026rdquo; with Buffy for your own needs.\u003c/p\u003e\u003ch2 id=\"what-is-an-editorial-bot-generator\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-an-editorial-bot-generator\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is an editorial bot generator?\u003c/h2\u003e\u003cp\u003eThe editorial bot generator \u003ca href=\"https://github.com/openjournals/buffy\"\u003eBuffy\u003c/a\u003e is the tool that supports the aforementioned commands.It is a \u003cstrong\u003eRuby codebase\u003c/strong\u003e that can be\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cstrong\u003econfigured\u003c/strong\u003e (and potentially \u003cstrong\u003eextended\u003c/strong\u003e),\u003c/li\u003e\u003cli\u003ethen \u003cstrong\u003edeployed\u003c/strong\u003e on a cloud platform like Heroku where it is always on and listening,\u003c/li\u003e\u003cli\u003eand hooked into \u003cstrong\u003eGitHub issues or pull requests\u003c/strong\u003e via, well, \u003cstrong\u003ewebhooks\u003c/strong\u003e. 🪝\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eEvery time a new issue is opened, every time an issue comment is created, its contents are sent to the deployed app.If it corresponds to the \u003cstrong\u003eregular expression\u003c/strong\u003e of a \u003cstrong\u003eregistered command\u003c/strong\u003e, predefined steps are launched: a check is launched somewhere, a database is updated, information is copied back to the GitHub issue, etc.\u003c/p\u003e\u003cp\u003eThe \u0026ldquo;visible\u0026rdquo; bot is the \u003ca href=\"https://github.com/ropensci-review-bot\"\u003e\u003cstrong\u003eGitHub account used as bot face\u003c/strong\u003e\u003c/a\u003e: commands are addressed to it, and it uses a \u0026ldquo;Personal\u0026rdquo; Access to post GitHub issue comments.\u003c/p\u003e\u003cp\u003eThe Journal of Open Source Software (JOSS) has developed an initial \u003ca href=\"https://buffy.readthedocs.io/en/latest/available_responders.html\"\u003elist of possible commands/actions\u003c/a\u003e, also known as responders.One can create new responders by writing Ruby code following \u003ca href=\"https://buffy.readthedocs.io/en/latest/custom_responder.html\"\u003edocumented instructions\u003c/a\u003e.Note that one of the responders allows launching a GitHub Action Workflow which can circumvent the absence of Ruby knowledge on a team \u0026ndash; although a pure Ruby responder might be faster.You can also send a call to any API, so if you can build an external API, you can really implement many things.\u003c/p\u003e\u003ch2 id=\"the-editorial-bot-generator-is-for-you-if\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-editorial-bot-generator-is-for-you-if\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe editorial bot generator is for you if\u0026hellip;\u003c/h2\u003e\u003cul\u003e\u003cli\u003eYou run a submission process (of papers, software, conference abstracts) that is handled in GitHub issue (or pull request) threads (or could be moved there)?\u003c/li\u003e\u003cli\u003eYour process involves tedious steps (editing issue/PR comments, switching issue/PR labels, copy-pasting URLs into an external database, running automatic checking tools) that can be automated via scripts possibly interacting with web APIs?\u003c/li\u003e\u003cli\u003eYou can recognize interesting responders in \u003ca href=\"https://buffy.readthedocs.io/en/latest/\"\u003eBuffy docs\u003c/a\u003e or you have Ruby talent on your team or contractor contacts, who could \u003ca href=\"https://buffy.readthedocs.io/en/latest/custom_responder.html\"\u003ewrite custom responders\u003c/a\u003e for you?\u003c/li\u003e\u003cli\u003eDo you have time and resources to spend at least a few days setting it up and communicating the change of processes to your users?\u003c/li\u003e\u003cli\u003eCan you devote some time to maintaining the installation e.g. responding to Heroku security updates or keeping Buffy codebase up to date with upstream changes?\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"they-use-the-editorial-bot-generator\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#they-use-the-editorial-bot-generator\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThey use the editorial bot generator\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://joss.theoj.org/\"\u003eJournal of Open Source Software (JOSS)\u003c/a\u003e \u0026ndash; original instigators of Buffy!\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003erOpenSci \u0026#x1f44b;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/scipy-conference/scipy_proceedings\"\u003eScipy\u003c/a\u003e \u0026ndash; see their \u003ca href=\"https://blog.neater-hut.com/scipy-is-partnering-with-joss-part-1.html\"\u003eblog post\u003c/a\u003e on the topic.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eJuliaCon is \u003ca href=\"https://github.com/JuliaCon/proceedings-review/issues\"\u003emigrating soon\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"how-to-set-up-the-editorial-bot-generator-for-your-system\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-set-up-the-editorial-bot-generator-for-your-system\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to set up the editorial bot generator for your system\u003c/h2\u003e\u003cp\u003eWe shall first show how Buffy usage works, afterwards, we shall go into details about how to get there.The following diagram represents the whole automation toolset we use for rOpenSci software peer-review.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/05/31/chatops-review-system-github/diagram.png\"\t\t\talt=\"Diagram representing automation for rOpenSci software peer review. On the left, a GitHub issue thread with emojis as avatars, and wobbly lines as text. Under the GitHub issue thread, a legend indicating who among the emojis is Author /Editor / Reviewer / ropensci-review-bot. At the center of the diagram is an Heroku app using the Buffy Ruby tool, that receives information from GitHub via webhooks. The app digests messages received and depending on the command pings an external service represented on the right (with a plumber logo); fills the Airtable-based software review database; manages ropensci GitHub organization via GitHub API; posts back or labels in the GitHub issue thread.\"\u003e\u003c/figure\u003e\u003cp\u003eWe can observe, on the left, a GitHub issue thread corresponding to a submission. The submission has\u003c/p\u003e\u003cul\u003e\u003cli\u003ea title,\u003c/li\u003e\u003cli\u003ea body that was created based on a GitHub issue template,\u003c/li\u003e\u003cli\u003elabels indicating the progress of the submission from editorial checks to the final decision,\u003c/li\u003e\u003cli\u003ean assignee who is the editor,\u003c/li\u003e\u003cli\u003evarious commenters who are the author, the editor, reviewers, and the bot account.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eEvery time an issue is created or updated with a new comment, information about that event is sent to the central app via a webhook.There on Heroku, if the comment corresponds to a registered command, actions (the formerly \u003cem\u003etedious steps\u003c/em\u003e 🙂) are made accordingly.Possible actions include filling an Airtable base via Airtable API, launching an external software check on a \u003ca href=\"https://www.rplumber.io/\"\u003eplumber API\u003c/a\u003e, inviting the author to the ropensci GitHub organization, posting a comment back into the GitHub issue thread with some results or confirmation.\u003c/p\u003e\u003cp\u003eHow does one achieve this?\u003c/p\u003e\u003ch3 id=\"initial-preparation--installation-steps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#initial-preparation--installation-steps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eInitial preparation \u0026amp; installation steps\u003c/h3\u003e\u003cul\u003e\u003cli\u003eRead / skim through \u003ca href=\"https://buffy.readthedocs.io/en\"\u003eBuffy readthedocs website\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFollow \u003ca href=\"https://buffy.readthedocs.io/en/latest/installation.html\"\u003eBuffy installation instructions\u003c/a\u003e.\u003c/p\u003e\u003cul\u003e\u003cli\u003eFork the Buffy codebase to an organization of yours, and create a branch there. Ours is named \u003ccode\u003eropensci\u003c/code\u003e. The organization does not have to be where the review repository also lives.\u003c/li\u003e\u003cli\u003eCreate a test review repository, that is to say, a copy of your production review repository so you can experiment without bothering serious watchers. The test repository should contain the same issue/PR templates and issue/PR labels as the production repository.\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://buffy.readthedocs.io/en/latest/installation.html#create-the-bot-github-user\"\u003eCreate a bot account\u003c/a\u003e (save its credentials and 2FA method into, for instance, your team\u0026rsquo;s 1Password vault). Give it access to your production and test review repositories. It might even need more access to your GitHub organization based on what you\u0026rsquo;ll task it to do. Follow Buffy docs to create a Personal Access Token, save it temporarily on your computer as you\u0026rsquo;ll need to save it in the app configuration.\u003c/li\u003e\u003cli\u003eSet up a Heroku account and app for \u003ca href=\"https://buffy-ropensci.readthedocs.io/en/latest/installation.html#deploy-buffy\"\u003eBuffy deployment\u003c/a\u003e \u0026ndash; or do the same on another service such as Render. Following the instructions worked for us. Make sure your pricing tier allows for the app to listen all the time. If the app is sleeping it will not be able to digest comments from GitHub.\u003c/li\u003e\u003cli\u003eCheck the build logs of your Heroku apps indicate success.\u003c/li\u003e\u003cli\u003eIn your test and production repositories, \u003ca href=\"https://buffy-ropensci.readthedocs.io/en/latest/installation.html#configure-a-webhook-to-send-events-from-github-to-buffy\"\u003eset up a webhook\u003c/a\u003e to send GitHub issue/PR comments to Heroku or your other service.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAs mentioned in the docs, at this stage in your test review repository you can write the following comment (replace the username with your bot account username)\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e@ropensci-review-bot help\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWhat if it does not work?\u003c/p\u003e\u003cul\u003e\u003cli\u003eRe-read the installation steps to ensure you did not miss anything.\u003c/li\u003e\u003cli\u003eLook into the webhooks of your repository, maybe there is a failure message there.\u003c/li\u003e\u003cli\u003eConsult the \u003ca href=\"https://devcenter.heroku.com/articles/logging\"\u003elogs of the Heroku app\u003c/a\u003e (we found it most convenient to use Heroku CLI for this\u0026hellip; to copy-paste info to our Ruby developer).\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"configuration-tests-documentation\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#configuration-tests-documentation\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConfiguration, tests, documentation\u003c/h3\u003e\u003cp\u003eNow comes the time to adapt your Buffy version to your needs!Good news: you can keep doing this forever depending on how your needs evolve.Bad news: you \u003cem\u003ewill\u003c/em\u003e keep doing this forever as you\u0026rsquo;ll always see opportunities for improvement. \u0026#x1f609;\u003c/p\u003e\u003cp\u003eTo configure your Buffy installation you will be making changes in these places\u003c/p\u003e\u003cul\u003e\u003cli\u003eIn the \u003ccode\u003e/config/settings-production.yml\u003c/code\u003e file of the branch of your \u003cstrong\u003ebuffy fork\u003c/strong\u003e;\u003c/li\u003e\u003cli\u003eIn other folders of the branch of your \u003cstrong\u003ebuffy fork\u003c/strong\u003e if you are \u003cem\u003eadding custom responders\u003c/em\u003e;\u003c/li\u003e\u003cli\u003eIn issue templates (\u003ccode\u003e.github/ISSUE_TEMPLATE\u003c/code\u003e) or PR templates (\u003ccode\u003e.github/PULL_REQUEST_TEMPLATE\u003c/code\u003e) and buffy templates \u003ccode\u003e.buffy/templates\u003c/code\u003e of your \u003cstrong\u003ereview repository (or repositories\u003c/strong\u003e, if you created a test review repository for experimenting with Buffy, which we\u0026rsquo;d recommend). Indeed, issue or PR templates will contain placeholders/wrappers for HTML variables like \u003ccode\u003e\u0026lt;!--editor--\u0026gt;  \u0026lt;!--end-editor--\u0026gt;\u003c/code\u003e \u0026ndash; otherwise the bot won\u0026rsquo;t be able to fill this information. \u003cem\u003ebuffy\u003c/em\u003e templates are for comments you will want the bot to post, for instance, a checklist at the end of the review process.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFollow Buffy docs on \u003ca href=\"https://buffy.readthedocs.io/en/latest/configuration.html\"\u003econfiguration\u003c/a\u003e.You will be adding (registering) responders by adding them to the YAML file \u003ccode\u003e/config/settings-production.yml\u003c/code\u003e, with subfields indicating some options.For instance, you might want to use the \u003ca href=\"https://buffy.readthedocs.io/en/latest/responders/assign_editor.html\"\u003e\u0026ldquo;assign editor\u0026rdquo; responder\u003c/a\u003e to store the editor username in the issue comment \u003cem\u003ewithout assigning the issue to them\u003c/em\u003e so you\u0026rsquo;ll set \u003ccode\u003eadd_as_assignee\u003c/code\u003e to \u003ccode\u003efalse\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eYou\u0026rsquo;ll find responders and their parameters in Buffy docs.You can also check out the \u003ca href=\"https://buffy-ropensci.readthedocs.io/en/latest/\"\u003ereadthedocs website of rOpenSci\u0026rsquo;s version of Buffy\u003c/a\u003e in case some of our custom responders are relevant for you (they are at the bottom of the list, with rOpenSci in front of their name).\u003c/p\u003e\u003cp\u003eAfter each responder addition or configuration, try it out by creating issues (or pull requests if that\u0026rsquo;s your process) and typing comments in them.If it works, you will be convinced you have added one feature to your system, congratulations!\u003c/p\u003e\u003cp\u003eAfterward, the feature should be officially released by telling actors of your system about it.In our case, we wrote announcements in the slack channel we have for editors, and we updated our dev guide.Updating guidance is particularly rewarding as bot commands typically replace lines of tedious task descriptions. \u0026#x1f601;\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post, we presented the editorial bot generator Buffy.We hope to make it easier for you to choose whether to adopt it for your own submission system and to know \u003cem\u003ehow\u003c/em\u003e to adopt it.The costs linked to Buffy usage are:\u003c/p\u003e\u003cul\u003e\u003cli\u003edeveloper time to set it up, tweak or add responders, document its usage, and long-term maintenance;\u003c/li\u003e\u003cli\u003eusers\u0026rsquo; time to learn how to use GitHub comments (lower cost for newcomers to your system, higher cost for those who had gotten used to tedious steps);\u003c/li\u003e\u003cli\u003ea subscription to Heroku or a similar service to ensure the app is always listening.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIn our experience, adopting Buffy has been worth it as once it\u0026rsquo;s well adopted, it\u003c/p\u003e\u003cul\u003e\u003cli\u003edecreases the cognitive load needed for handling a review as one does not need to switch between different tabs or apps;\u003c/li\u003e\u003cli\u003esimplifies future process changes, as the command could remain the same whilst the background tasks change.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFeel free to comment with any questions you might have about Buffy!\u003c/p\u003e","url":"https://ropensci.org/blog/2022/05/31/chatops-review-system-github/","date_published":"2022-05-31T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/vc7ar-ye672","title":"rOpenSci News Digest, May 2022","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup! \u003c!-- blabla --\u003e You can read this post \u003ca href=\"/blog/2022/05/20/ropensci-news-digest-may-2022\"\u003eon our blog\u003c/a\u003e. Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"r-universe-prominently-displays-more-information-on-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-prominently-displays-more-information-on-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-universe prominently displays more information on packages!\u003c/h3\u003e\u003cp\u003eWe have extended the \u003ca href=\"https://r-universe.dev\"\u003er-universe.dev\u003c/a\u003e platform to provide even more real-time information and metadata about R packages to help users quickly find and compare relevant software for a given topic, maintainer or organization.\u003c/p\u003e\u003cp\u003eIn addition to descriptive information about the package and its authors, the dashboard now shows some basic usage metrics, such as the number of GitHub stars, (transitive) dependencies, and dependents, and an overall score that we use to rank search results (similar to pagerank).\u003c/p\u003e\u003cfigure\u003e\u003ca href=\"https://r-universe.dev/search/#imputation\"\u003e\u003cimg src=\"/blog/2022/05/20/ropensci-news-digest-may-2022/search.png\"\t\t\talt=\"Package card on R-universe, including a count of github stars, (transitive) dependencies / dependent packages and an overall score of the package (similar to pagerank)\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003eYou will see these numbers both in the search results and in package individual pages (we\u0026rsquo;ll be posting a more detailed technote about the search ranking soon).\u003c/p\u003e\u003cfigure\u003e\u003ca href=\"https://tidyverse.r-universe.dev/ui#package:vroom\"\u003e\u003cimg src=\"/blog/2022/05/20/ropensci-news-digest-may-2022/vroom1.png\"\t\t\talt=\"Top of a package individual pages featuring the same badges.\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003eThese metrics are not the only improvement to package individual pages: You might have also noticed readme content and installation instructions:\u003c/p\u003e\u003cfigure\u003e\u003ca href=\"https://tidyverse.r-universe.dev/ui#package:vroom\"\u003e\u003cimg src=\"/blog/2022/05/20/ropensci-news-digest-may-2022/vroom2.png\"\t\t\talt=\"Installation instructions on a package individual page, ready to be copy-pasted.\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003eAnd towards the bottom of the page you can find information about the commit and release activity, contributors, and reverse dependencies of the package:\u003c/p\u003e\u003cfigure\u003e\u003ca href=\"https://tidyverse.r-universe.dev/ui#package:vroom\"\u003e\u003cimg src=\"/blog/2022/05/20/ropensci-news-digest-may-2022/vroom3.png\"\t\t\talt=\"List of \u0026#39;users\u0026#39; of a package, that is a list of links to reverse dependencies.\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003eHappy space travels! \u0026#x1f680; Please report bugs or feature requests to \u003ca href=\"https://github.com/r-universe-org/help\"\u003eour central station\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"pkgcheck-updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pkgcheck-updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003epkgcheck updates\u003c/h3\u003e\u003cp\u003eOur automated package checking system was extended \u003ca href=\"/blog/2022/04/22/ropensci-news-digest-april-2022/#pkgcheck-reports-now-include-dependencies\"\u003elast month to include a report on package dependency use\u003c/a\u003e. Another check has been added this month which indicates if a package has any functions with names duplicated in other packages. Having unique function names is the best way to avoid \u003ca href=\"https://conflicted.r-lib.org/\"\u003enamespace conflicts\u003c/a\u003e. One of the easiest ways to ensure unique function names is to name all functions with a package-specific prefix, like in \u003ca href=\"https://gh.r-lib.org/reference/index.html\"\u003ethe gh\u003c/a\u003e or \u003ca href=\"https://docs.ropensci.org/gert/reference/index.html\"\u003egert packages\u003c/a\u003e.\u003c/p\u003e\u003cp\u003ePackages with duplicate function names will produce an initial check summary like this:\u003c/p\u003e\u003cfigure\u003e\u003ca href=\"https://docs.ropensci.org/pkgcheck\"\u003e\u003cimg src=\"/blog/2022/05/20/ropensci-news-digest-may-2022/pkgcheck_1.png\"\t\t\talt=\"pkgcheck summary with failing function name check.\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003eThe \u0026ldquo;Details\u0026rdquo; section which follows will then include additional information like this:\u003c/p\u003e\u003cfigure\u003e\u003ca href=\"https://docs.ropensci.org/pkgcheck\"\u003e\u003cimg src=\"/blog/2022/05/20/ropensci-news-digest-may-2022/pkgcheck_2.png\"\t\t\talt=\"pkgcheck details of failing function name check.\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003eThis check relies on a database of the names of every function from every current CRAN package, which is also available for download \u003ca href=\"https://github.com/ropensci-review-tools/pkgstats/releases\"\u003ewith the latest release of the pkgstats package\u003c/a\u003e in the file, \u0026ldquo;pkgstats-fn-names.Rds\u0026rdquo;. Package authors can confirm the uniqueness of their function names by running \u003ca href=\"https://docs.ropensci.org/pkgcheck\"\u003epkgcheck\u003c/a\u003e locally.\u003c/p\u003e\u003ch3 id=\"next-coworking-sessions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#next-coworking-sessions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNext coworking sessions\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on 1st Tuesdays! Hosted by Steffi LaZerte and various community hosts. Everyone welcome. No RSVP needed. Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2022-06/\"\u003eTuesday, 07 June 2022 9 AM Australian Western / 1:00 UTC\u003c/a\u003e \u0026ldquo;Tackle something you\u0026rsquo;ve always wanted to learn\u0026rdquo; \u003cem\u003eHosted by community host Nick Tierney and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003cul\u003e\u003cli\u003eCowork on a project of your choice;\u003c/li\u003e\u003cli\u003eTake this time to tackle something you\u0026rsquo;ve always wanted to learn;\u003c/li\u003e\u003cli\u003eOr talk to \u003ca href=\"https://ropensci.org/author/nicholas-tierney/\"\u003eNick Tierney\u003c/a\u003e and discuss what it is you want to learn, and get some tips and resources to get yourself started!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe\u0026rsquo;re taking a break on Coworking events for July and August, so we\u0026rsquo;ll see you in September!\u003c/p\u003e\u003cp\u003eFind out about more \u003ca href=\"/events\"\u003eevents\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cp\u003eThe following four packages recently became a part of our software suite:\u003c/p\u003e\u003cdiv class='highlight'\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/gitcellar\"\u003egitcellar\u003c/a\u003e, developed by Maëlle Salmon together with Jeroen Ooms: Provide functionality to download archives (backups) for all repositories in a GitHub organization (useful for backups!).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/EDIutils\"\u003eEDIutils\u003c/a\u003e, developed by Colin Smith: A client for the Environmental Data Initiative repository REST API. The EDI data repository \u003ca href=\"https://portal.edirepository.org/nis/home.jsp\"\u003ehttps://portal.edirepository.org/nis/home.jsp\u003c/a\u003e is for publication and reuse of ecological data with emphasis on metadata accuracy and completeness. It is built upon the PASTA+ software stack \u003ca href=\"https://pastaplus-core.readthedocs.io/en/latest/index.html#\"\u003ehttps://pastaplus-core.readthedocs.io/en/latest/index.html#\u003c/a\u003e and was developed in collaboration with the US LTER Network \u003ca href=\"https://lternet.edu/\"\u003ehttps://lternet.edu/\u003c/a\u003e. EDIutils includes functions to search and access existing data, evaluate and upload new data, and assist other data management tasks common to repository users. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/498\"\u003ereviewed\u003c/a\u003e by Jasmine Lai, and Rodrigo Pires.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/ReLTER\"\u003eReLTER\u003c/a\u003e, developed by Alessandro Oggioni together with Micha Silver, Paolo Tagliolato, and Luigi Ranghetti: ReLTER provides access to DEIMS-SDR (\u003ca href=\"https://deims.org/\"\u003ehttps://deims.org/\u003c/a\u003e), and allows interaction with data and software implemented by eLTER Research Infrastructure (RI) thus improving data sharing among European LTER projects. ReLTER uses the R language to access and interact with the DEIMS-SDR archive of information shared by the Long Term Ecological Research (LTER) network. This package grew within eLTER H2020 as a major project that will help advance the development of European Long-Term Ecosystem Research Infrastructures (eLTER RI - \u003ca href=\"https://elter-ri.eu\"\u003ehttps://elter-ri.eu\u003c/a\u003e). The ReLTER package functions in particular allow to:\u003c/p\u003e\u003cul\u003e\u003cli\u003eretrieve the information about entities (e.g. sites, datasets, and activities) shared by DEIMS-SDR (see e.g. get_site_info function);\u003c/li\u003e\u003cli\u003einteract with the \u003ca href=\"maps.opendatascience.eu\"\u003eODSEurope\u003c/a\u003e starting with the dataset shared by \u003ca href=\"https://deims.org/\"\u003eDEIMS-SDR\u003c/a\u003e (see e.g. \u003ca href=\"https://docs.ropensci.org/ReLTER/reference/get_site_ODS.html\"\u003eget_site_ODS\u003c/a\u003e function);\u003c/li\u003e\u003cli\u003euse the eLTER site informations to download and crop geospatial data from other platforms (see e.g. get_site_ODS function);\u003c/li\u003e\u003cli\u003eimprove the quality of the dataset (see e.g. get_id_worms).\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFunctions currently implemented are derived from discussions of the needs among the eLTER users community.The ReLTER package will continue to follow the progress of eLTER-RI and evolve, adding new tools and improvements as required.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/unifir\"\u003eunifir\u003c/a\u003e, developed by Michael Mahoney: Functions for the creation and manipulation of scenes and objects within the Unity 3D video game engine (\u003ca href=\"https://unity.com/\"\u003ehttps://unity.com/\u003c/a\u003e). Specific focuses include the creation and import of terrain data and GameObjects as well as scene management. It is available on \u003ca href=\"https://CRAN.R-project.org/package=unifir\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/521\"\u003ereviewed\u003c/a\u003e by Will Jones, and Tan Tran.\u003c/p\u003e\u003c/div\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cp\u003eThe following eleven packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/EML\" title=\"Read and Write Ecological Metadata Language Files\"\u003eEML\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/EML/releases/tag/v2.0.6\"\u003e\u003ccode\u003ev2.0.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/GSODR\" title=\"Global Surface Summary of the Day (GSOD) Weather Data Client\"\u003eGSODR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/GSODR/releases/tag/3.1.5\"\u003e\u003ccode\u003e3.1.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/jagstargets\" title=\"Targets for JAGS Workflows\"\u003ejagstargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/jagstargets/releases/tag/1.0.2\"\u003e\u003ccode\u003e1.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lightr\" title=\"Read Spectrometric Data and Metadata\"\u003elightr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lightr/releases/tag/v1.7.0\"\u003e\u003ccode\u003ev1.7.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/mctq\" title=\"Tools to Process the Munich ChronoType Questionnaire (MCTQ)\"\u003emctq\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/mctq/releases/tag/v0.2.0\"\u003e\u003ccode\u003ev0.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.7.1\"\u003e\u003ccode\u003ev0.7.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/opencv\" title=\"Bindings to OpenCV Computer Vision Library\"\u003eopencv\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/opencv/releases/tag/v0.2.2\"\u003e\u003ccode\u003ev0.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/skimr\" title=\"Compact and Flexible Summaries of Data\"\u003eskimr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/skimr/releases/tag/v2.1.4\"\u003e\u003ccode\u003ev2.1.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stplanr\" title=\"Sustainable Transport Planning\"\u003estplanr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stplanr/releases/tag/v0.9.0\"\u003e\u003ccode\u003ev0.9.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/terrainr\" title=\"Landscape Visualizations in R and Unity\"\u003eterrainr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/terrainr/releases/tag/v0.7.0\"\u003e\u003ccode\u003ev0.7.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/unifir\" title=\"A Unifying API for Calling the Unity 3D Video Game Engine\"\u003eunifir\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/unifir/releases/tag/v0.2.1\"\u003e\u003ccode\u003ev0.2.1\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cdiv class='highlight'\u003e\u003cp\u003eThere are seventeen recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/521\"\u003eunifir\u003c/a\u003e, A Unifying API for Calling Unity from R. Submitted by \u003ca href=\"https://mm218.dev/\"\u003eMichael Mahoney\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/485\"\u003eReLTER\u003c/a\u003e, An interface to the eLTER for the R statistical programming environment. Submitted by \u003ca href=\"https://www.cnr.it/people/alessandro.oggioni\"\u003eAlessandro Oggioni\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/505\"\u003enpi\u003c/a\u003e, Access the U.S. National Provider Identifier Registry API. Submitted by \u003ca href=\"https://frankfarach.com\"\u003eFrank Farach\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/470\"\u003etidyqpcr\u003c/a\u003e, Quantitative PCR Analysis with the Tidyverse. Submitted by \u003ca href=\"https://scholar.google.co.uk/citations?user=7FLIJBAAAAAJ\u0026amp;hl=en\"\u003eEdward Wallace\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román-Palacios\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/418\"\u003eepair\u003c/a\u003e, Grabs data from EPA API, simplifies getting pollutant data. Submitted by \u003ca href=\"https://github.com/GLOrozcoM\"\u003eLeo Orozco-Mulfinger\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSeven at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/533\"\u003edatefixR\u003c/a\u003e, Fix Really Messy Dates. Submitted by \u003ca href=\"http://constantine-cooke.com\"\u003eNathan Constantine-Cooke\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/524\"\u003ehudr\u003c/a\u003e, A R interface for accessing HUD (US Department of Housing and Urban Development) APIs. Submitted by \u003ca href=\"https://github.com/etam4260\"\u003eEmmet Tam\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/523\"\u003eyfR\u003c/a\u003e, Downloads and Organizes Financial Data from Yahoo Finance. Submitted by \u003ca href=\"https://www.msperlin.com/blog/\"\u003eMarcelo S. Perlin\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/475\"\u003ecanaper\u003c/a\u003e, Categorical Analysis of Neo- And Paleo-Endemism. Submitted by \u003ca href=\"https://joelnitta.com\"\u003eJoel Nitta\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/433\"\u003eROriginStamp\u003c/a\u003e, Interface to OriginStamp API to Obtain Trusted Time Stamps. Submitted by \u003ca href=\"https://github.com/rkrug\"\u003eRainer M Krug\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/532\"\u003eaorsf\u003c/a\u003e, Accelerated Oblique Random Survival Forests. Submitted by \u003ca href=\"https://github.com/bcjaeger\"\u003eByron\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"http://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e. (Stats).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/443\"\u003erdbhapi\u003c/a\u003e, Interface to DBH-API. Submitted by \u003ca href=\"https://hkdir.no/\"\u003eMarija Ninic\u003c/a\u003e.\u003c/div\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/04/29/don-t-lose-your-head-over-default-branches\"\u003eDon\u0026rsquo;t Lose your HEAD over Default Branches\u003c/a\u003e by Maëlle Salmon. Use \u0026ldquo;HEAD\u0026rdquo; instead of the default branch name in links to files on GitHub, as it will work for any default branch name.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/05/16/requiring-2fa-for-the-ropensci-github-organization\"\u003eRequiring 2FA for Our Main GitHub Organization\u003c/a\u003e by Maëlle Salmon. How we went about requiring two-factor authentication for our main GitHub organization.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cdiv class=\"highlight\"\u003e\u003c/div\u003e\u003cp\u003eTwo use cases of our packages and resources have been reported since we sent the last newsletter.\u003c/p\u003e\u003cdiv class='highlight'\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/estimating-leaf-temperatures-worldwide/2908\"\u003eEstimating leaf temperatures worldwide\u003c/a\u003e. Reported by Paul Melloy.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/analyze-your-twitter-timeline-with-rtweet-and-lubridate/2931\"\u003eAnalyze your Twitter timeline with {rtweet} and {lubridate}\u003c/a\u003e. Reported by Albert Rapp.\u003c/p\u003e\u003c/div\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eWe\u0026rsquo;re looking for a new maintainer, or a new maintainer \u003cem\u003eteam\u003c/em\u003e, for each of the following packages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/phylotaR/\"\u003ephylotaR\u003c/a\u003e, Automated Retrieval of Orthologous DNA Sequences from GenBank. \u003ca href=\"https://github.com/ropensci/phylotaR/issues/57\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/outsider/\"\u003eoutsider\u003c/a\u003e, Install and run programs, outside of R, inside of R. \u003ca href=\"https://github.com/ropensci/outsider/issues/16\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/hddtools/\"\u003ehddtools\u003c/a\u003e, Hydrological Data Discovery Tools. \u003ca href=\"https://github.com/ropensci/hddtools/issues/31\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/gistr/\"\u003egistr\u003c/a\u003e, Work with GitHub Gists. \u003ca href=\"https://github.com/ropensci/gistr/issues/85\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/geojsonio/\"\u003egeojsonio\u003c/a\u003e, Convert many data formats to \u0026amp; from GeoJSON \u0026amp; TopoJSON. \u003ca href=\"https://github.com/ropensci/geojsonio/issues/178\"\u003eIssue for volunteering\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIf you\u0026rsquo;re interested, please comment in the issues or email \u003ccode\u003einfo@ropensci.org\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eFor more info, see\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://devguide.ropensci.org/changing-maintainers.html\"\u003eour guidance on \u003cem\u003eChanging package maintainers\u003c/em\u003e\u003c/a\u003e;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://devguide.ropensci.org/curationpolicy.html\"\u003eour \u003cem\u003ePackage Curation Policy\u003c/em\u003e\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"documentation-html--pdf\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#documentation-html--pdf\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDocumentation: HTML \u0026gt; PDF\u003c/h3\u003e\u003cp\u003eThis paragraph is not about LaTeX, but about screen-reader users! Please take time to read this \u003ca href=\"https://stat.ethz.ch/pipermail/r-package-devel/2022q2/007953.html\"\u003eemail by Jonathan Godfrey on R-pkg-devel\u003c/a\u003e.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003ePlease consider the HTML alternative to any pdf, in any context, but especially in anything relating to R.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eCommunity member Lluís Revilla Sancho also highlighted that \u003ca href=\"https://search.r-project.org/\"\u003esearch.r-project.org\u003c/a\u003e provides HTML documentation for all CRAN documentation.\u003c/p\u003e\u003ch3 id=\"twelve-quick-tips-for-software-design\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#twelve-quick-tips-for-software-design\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTwelve quick tips for software design\u003c/h3\u003e\u003cp\u003eYou might enjoy the article \u003ca href=\"https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1009809\"\u003e\u0026ldquo;Twelve quick tips for software design\u0026rdquo;\u003c/a\u003e by Greg Wilson. It is not R specific but is relevant to package development. \u0026ldquo;Design with everyone in mind\u0026rdquo; can for instance remind of the previous point about HTML documentation.\u003c/p\u003e\u003ch3 id=\"renaming-the-default-branch\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#renaming-the-default-branch\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRenaming the default branch\u003c/h3\u003e\u003cp\u003eIf you\u0026rsquo;ve been considering renaming the default branch from master (oppressive language) to main, do not miss the Tidyverse blog post Jenny Bryan wrote in October 2021 \u003ca href=\"https://www.tidyverse.org/blog/2021/10/renaming-default-branch/\"\u003e\u0026ldquo;Renaming the default branch\u0026rdquo;\u003c/a\u003e, especially as it features useful usethis functions!\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/05/20/ropensci-news-digest-may-2022/","date_published":"2022-05-20T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/55fqd-d5179","title":"Requiring 2FA for Our Main GitHub Organization","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]}],"tags":["github","security","tech notes"],"content_html":"\u003cp\u003eFollowing our recent post on \u003ca href=\"/blog/2022/03/22/safeguards-and-backups-for-github-organizations/\"\u003e\u0026ldquo;Safeguards and Backups for GitHub Organizations\u0026rdquo;\u003c/a\u003e, nearly one month ago we went one step further and made two-factor authentication (2FA) required for all members and outside collaborators of our main organization, \u003ca href=\"https://github.com/ropensci/\"\u003e\u003ccode\u003eropensci\u003c/code\u003e\u003c/a\u003e.It was a timely decision as GitHub since then announced it \u003ca href=\"https://github.blog/2022-05-04-software-security-starts-with-the-developer-securing-developer-accounts-with-2fa/\"\u003e\u003cem\u003ewill require all users who contribute code on GitHub.com to enable one or more forms of two-factor authentication (2FA) by the end of 2023\u003c/em\u003e\u003c/a\u003e.Here is how (and why) we went about it.\u003c/p\u003e\u003ch2 id=\"why-not-require-2fa\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-not-require-2fa\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy (not) require 2FA?\u003c/h2\u003e\u003cp\u003eWe used to only require \u003ca href=\"https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication\"\u003etwo-factor authentication\u003c/a\u003e of organization owners (which is not an actual setting of GitHub, just a rule we set for ourselves).However, requiring 2FA for the whole organization seemed like a logical step towards more security.Hopefully it also inspires more 2FA adoption beyond the \u003ccode\u003eropensci\u003c/code\u003e organization as new adopters of the setting can tell their collaborators about it.\u003c/p\u003e\u003cp\u003eWhen one starts requiring 2FA for an organization, all members and outside collaborators who have \u003cem\u003enot\u003c/em\u003e enabled it are removed from the organization and receive a notification from GitHub.\u003c/p\u003e\u003cp\u003eOne aspect we pondered was whether it\u0026rsquo;d be potentially unfair to require 2FA. Many 2FA systems rely on the user having a mobile device, which could be a barrier for some.However, GitHub provides many different 2FA methods (not only those requiring a mobile device), so in the end we decided to go for it, but to make careful note of feedback from organization members and collaborators.\u003c/p\u003e\u003ch2 id=\"communicating-the-change-in-advance\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#communicating-the-change-in-advance\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunicating the change in advance\u003c/h2\u003e\u003cp\u003eAs \u003ca href=\"https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-two-factor-authentication-for-your-organization/requiring-two-factor-authentication-in-your-organization#prerequisites=\"\u003erecommended in GitHub docs\u003c/a\u003e, we communicated about the change in advance, sending emails to all organization members and outside collaborators without 2FA two weeks before the switch.This was meant to ensure that as few people as possible lost access to their repositories.\u003c/p\u003e\u003cp\u003eEmail addresses were collected via the GitHub API, and for those who do not have a public email address on GitHub, using a search engine as well as \u003ca href=\"https://www.nymeria.io/blog/how-to-manually-find-email-addresses-for-github-users\"\u003eemail addresses used for recent commits\u003c/a\u003e. 🕵️Taking the time to do so was also crucial to, again, remove as few people as possible from the organization.\u003c/p\u003e\u003cp\u003eWe sent emails using the \u003ca href=\"https://gmailr.r-lib.org/\"\u003egmailr package\u003c/a\u003e.We manually went through automatic responses to decide action (e.g. scheduling a new email after someone was back from vacation, looking for a newer email address).\u003c/p\u003e\u003cp\u003eHere\u0026rsquo;s the text we used:\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eDear ropensci GitHub organization member,To increase the security of the `ropensci` GitHub organization, we plan to make two-factor authentication (\u0026#34;2FA\u0026#34;) required for members on April 18th. On this date, you will lose access to any ropensci GitHub repository you previously had access to.Docs: https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authenticationObviously we encourage anyone to enable 2FA if you had not done so yet. Please email me or info@ropensci.org if you have:- any question regarding 2FA,- enabled 2FA after April 18th and would like to added back.I will be glad to help!Thanks and best wishes,\u0026gt; Maëlle on behalf of the rOpenSci team.\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWith the subject \u003ccode\u003e[Action required] Enable GitHub Two-Factor Authentication to Preserve Access\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eWe also posted a message about the change in our Slack workspace, as well as quite a few Slack DMs in particular to package maintainers.\u003c/p\u003e\u003cp\u003eNote that we actually had to send two emails as we first misread the documentation and thought members could become outside collaborators without 2FA.That\u0026rsquo;s not true! 😅Thanks to organization members and outside collaborators for their patience. 🙏\u003c/p\u003e\u003ch2 id=\"viewing-people-removed-from-the-organization\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#viewing-people-removed-from-the-organization\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eViewing people removed from the organization\u003c/h2\u003e\u003cp\u003eTo see respectively removed organization members and collaborators, as organization owners we were able to use the URLs\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003ehttps://github.com/organizations/\u0026lt;org-name\u0026gt;/settings/audit-log?q=action%3Aorg.remove_outside_collaborator\u003c/code\u003e;\u003c/li\u003e\u003cli\u003e\u003ccode\u003ehttps://github.com/organizations/\u0026lt;org-name\u0026gt;/settings/audit-log?q=action%3Aorg.remove_member\u003c/code\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eBefore confirming the 2FA requirement, GitHub actually shows you which members you are about to remove from the organization.We went ahead anyway as we assumed the GitHub notification might reach some of them better than our previous email, and as the removal of people is reversible as soon as they have enabled 2FA.\u003c/p\u003e\u003ch2 id=\"re-instating-organization-members\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#re-instating-organization-members\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRe-instating organization members\u003c/h2\u003e\u003cp\u003eAfter we pulled the switch on April 19th, a few people reached out to tell us they had enabled 2FA.It was straightforward to add them back to the organization as GitHub lets you choose to \u003ca href=\"https://docs.github.com/en/organizations/managing-membership-in-your-organization/reinstating-a-former-member-of-your-organization\"\u003e\u003cem\u003ere-instate\u003c/em\u003e an organization member\u003c/a\u003e within three months of their removal, so they get added to the teams and repos they used to belong to.We strove to re-instate people timely.\u003c/p\u003e\u003cp\u003eIf you were an organization member or outside collaborator who was removed from the organization, please reach out to us if you have enabled 2FA and would like to be reinstated, or if you have any question about 2FA.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eTwo-factor authentication is now required for our main GitHub organization.It was a change made for the best for most people, but which might have created some pain and frustration for a few people depending on when they got the notification.We thank everyone for their collaboration and understanding.\u003c/p\u003e\u003cp\u003eAs a further GitHub security step for us and you, dear reader, let\u0026rsquo;s mention\u003c/p\u003e\u003cul\u003e\u003cli\u003epruning repositories from former, now inactive, collaborators (docs for \u003ca href=\"https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-github-user-account/managing-access-to-your-personal-repositories/removing-a-collaborator-from-a-personal-repository\"\u003epersonal repos\u003c/a\u003e, for \u003ca href=\"https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories\"\u003erepos hosted in organizations\u003c/a\u003e);\u003c/li\u003e\u003cli\u003epruning apps installed from \u003ca href=\"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/reviewing-your-authorized-applications-oauth\"\u003epersonal accounts\u003c/a\u003e and from \u003ca href=\"https://docs.github.com/en/enterprise-cloud@latest/organizations/restricting-access-to-your-organizations-data/about-oauth-app-access-restrictions\"\u003eorganizations\u003c/a\u003e;\u003c/li\u003e\u003cli\u003ea recent GitHub post \u003ca href=\"https://github.blog/2022-04-22-5-simple-things-every-developer-can-do-to-ship-more-secure-code/\"\u003e\u0026ldquo;5 simple things every developer can do to ship more secure code\u0026rdquo;\u0026quot;\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd more generally, we recommend the article \u003ca href=\"https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1008563\"\u003eTen quick tips for staying safe online\u003c/a\u003e by Danielle Smalls and Greg Wilson.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/05/16/requiring-2fa-for-the-ropensci-github-organization/","date_published":"2022-05-16T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/kymjz-5gg32","title":"Don't Lose your HEAD over Default Branches","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]}],"tags":["git","gert","GitHub","tech notes"],"content_html":"\u003cp\u003eDid you know that GitHub lets you refer to the default branch of any repository by substituting the branch name with \u003ccode\u003eHEAD\u003c/code\u003e in the url? This is a very useful trick to write robust code that works regardless of whether the default branch is called \u003ccode\u003emain\u003c/code\u003e or \u003ccode\u003emaster\u003c/code\u003e, and will keep working when the default branch gets renamed at some point.\u003c/p\u003e\u003cp\u003eWhile git has no \u0026ldquo;default\u0026rdquo; branch, online code platforms such as GitHub need to define a default for the branch that someone sees when they look at code online. While the community standard for the default branch is now becoming main instead of master\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e, and while the switch for any repo is rather \u003ca href=\"https://www.hanselman.com/blog/easily-rename-your-git-default-branch-from-master-to-main\"\u003eeasy\u003c/a\u003e and is \u003ca href=\"https://www.tidyverse.org/blog/2021/10/renaming-default-branch/\"\u003ewell supported by usethis\u003c/a\u003e, for a while (forever) there will still be repos with different default branches in the wild.\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e Especially as nothing prevents you from using any other name for the default branch (although this could trip up collaborators).\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e\u003c/p\u003e\u003cp\u003eSo, what to deal with the existence of different possible default branches?\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://www.tidyverse.org/blog/2021/10/renaming-default-branch/\"\u003eusethis tooling regarding default branches\u003c/a\u003e including \u003ca href=\"https://usethis.r-lib.org/reference/git-default-branch.html\"\u003e\u003ccode\u003eusethis::git_default_branch()\u003c/code\u003e\u003c/a\u003e, is very handy.\u003c/li\u003e\u003cli\u003eYou can also use gert directly, e.g. \u003ca href=\"https://docs.ropensci.org/gert/reference/git_fetch.html\"\u003e\u003ccode\u003egert::git_remote_ls()\u003c/code\u003e\u003c/a\u003e will help show you remote references. The symref for ref contains the default branch name.\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan class='nf'\u003egert\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://docs.ropensci.org/gert/reference/git_fetch.html'\u003egit_remote_ls\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e |\u0026gt;  \u003cspan class='nf'\u003e\u003ca href='https://rdrr.io/r/utils/head.html'\u003ehead\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e \u003cspan class='c'\u003e# another useful thing named head\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt;                           ref          symref\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; 1                        HEAD refs/heads/main\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; 2        refs/heads/1password            \u0026lt;NA\u0026gt;\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; 3              refs/heads/2fa            \u0026lt;NA\u0026gt;\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; 4            refs/heads/email            \u0026lt;NA\u0026gt;\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; 5 refs/heads/fix_author_links            \u0026lt;NA\u0026gt;\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; 6        refs/heads/footnotes            \u0026lt;NA\u0026gt;\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt;                                        oid\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; 1 2ef29132be682883d1c12a957c38e1fa6599898f\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; 2 e4f3ef36c453dd2ede5a091c7d3f5f32c609caca\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; 3 7461f15e81651d5bbf6dcab078801cfa35e2f039\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; 4 6f8c849ef325dc597e819bffbd8829afa05ae414\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; 5 2f328db8fc6ce94caa50ddde7a0b021178818d8f\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; 6 f552c2dcac79228e929e65975c52484f5655577c\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/gert/reference/git_remote.html\"\u003e\u003ccode\u003egert::git_remote_info()\u003c/code\u003e\u003c/a\u003e shows the head for a given remote:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre class='chroma'\u003e\u003ccode class='language-r' data-lang='r'\u003e\u003cspan class='nf'\u003egert\u003c/span\u003e\u003cspan class='nf'\u003e::\u003c/span\u003e\u003cspan class='nf'\u003e\u003ca href='https://docs.ropensci.org/gert/reference/git_remote.html'\u003egit_remote_info\u003c/a\u003e\u003c/span\u003e\u003cspan class='o'\u003e(\u003c/span\u003e\u003cspan class='s'\u003e\"origin\"\u003c/span\u003e\u003cspan class='o'\u003e)\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; $name\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; [1] \"origin\"\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; \u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; $url\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; [1] \"git@github.com:ropensci/roweb3.git\"\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; \u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; $push_url\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; NULL\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; \u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; $head\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; [1] \"refs/remotes/origin/main\"\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; \u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; $fetch\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; [1] \"+refs/heads/*:refs/remotes/origin/*\"\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; \u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; $push\u003c/span\u003e\u003cspan class='c'\u003e#\u0026gt; character(0)\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\u003cli\u003eWhen linking to a file, or trying to download the same path from a gaggle of repositories, think of the HEAD reference! I.e. instead of linking to a file via \u003ccode\u003ehttps://github.com/\u0026lt;owner\u0026gt;/\u0026lt;repo\u0026gt;/tree/\u0026lt;default-branch\u0026gt;/\u0026lt;path\u0026gt;\u003c/code\u003e where you need to know what the default branch is, you can link to \u003ccode\u003ehttps://github.com/\u0026lt;owner\u0026gt;/\u0026lt;repo\u0026gt;/tree/HEAD/\u0026lt;path\u0026gt;\u003c/code\u003e that will always point to the latest version of the path in the default branch. Similarly, for raw content (to download), you can use links à la \u003ccode\u003ehttps://github.com/\u0026lt;owner\u0026gt;/\u0026lt;repo\u0026gt;/raw/HEAD/\u0026lt;path\u0026gt;\u003c/code\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eIn conclusion, master or main? Hit the nail on the HEAD. \u0026#x1f609;\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eFor more context on Terminology, Power and Oppressive Language see for instance \u003ca href=\"https://tools.ietf.org/id/draft-knodel-terminology-00.html\"\u003ehttps://tools.ietf.org/id/draft-knodel-terminology-00.html\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eActually, this post was the occasion to change the default branch for the source of this website!\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eSome repos only have a branch called \u003ccode\u003egh-pages\u003c/code\u003e (e.g. everything under \u003ca href=\"https://github.com/ropensci-docs\"\u003ehttps://github.com/ropensci-docs\u003c/a\u003e), in which case that is the default branch.\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2022/04/29/don-t-lose-your-head-over-default-branches/","date_published":"2022-04-29T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/1qd99-11b02","title":"rOpenSci News Digest, April 2022","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2022/04/22/ropensci-news-digest-april-2022\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"pkgcheck-reports-now-include-dependencies\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pkgcheck-reports-now-include-dependencies\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003epkgcheck reports now include dependencies\u003c/h3\u003e\u003cp\u003eOur \u003ca href=\"/commcalls/dec2021-automation/\"\u003eautomated checking system for packages\u003c/a\u003e submitted for peer review now has a new section, \u0026ldquo;\u003cem\u003ePackage Dependencies\u003c/em\u003e\u0026rdquo;.This is intended to help editors and reviewers understand how package dependencies (that is, packages listed in \u003cem\u003eImports\u003c/em\u003e, \u003cem\u003eDepends\u003c/em\u003e, or \u003cem\u003eSuggests\u003c/em\u003e \u003ccode\u003eDESCRIPTION\u003c/code\u003e fields) are actually used by a package.The section summarises total numbers of function calls made to each package, followed by collapsible \u0026ldquo;details\u0026rdquo; sections containing numbers of calls made to the individual functions of each packages.Dependencies include base R and all recommended packages, ensuring that this section provides a comprehensive overview of how each package submitted for peer review uses and depends upon the entire R ecosystem.\u003c/p\u003e\u003cp\u003eWant to try it for yourself?Install \u003ca href=\"https://docs.ropensci.org/pkgcheck/\"\u003epkgcheck\u003c/a\u003e and then run \u003ccode\u003epkgcheck::pkgcheck (\u0026lt;package-source-directory\u0026gt;)\u003c/code\u003e.\u003c/p\u003e\u003ch3 id=\"r-universe-now-features-package-individual-pages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-now-features-package-individual-pages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-universe now features package individual pages\u003c/h3\u003e\u003cp\u003ePackages on \u003ca href=\"https://r-universe.dev\"\u003er-universe.dev\u003c/a\u003e now have beautiful individual landing pages, which give an overview of the current content and metadata for that package. This includes the package description, author information, articles, download links, commits, tags, contributors, reference manual, \u003ca href=\"https://ropensci.r-universe.dev/ui#view:cffr/paper.html\"\u003ecff citation\u003c/a\u003e, etc. We are also working on adding more information about usage of the package, such as citations and reverse dependencies.\u003c/p\u003e\u003cp\u003eYou can navigate to a package homepage directly from \u003ca href=\"https://r-universe.dev/search/\"\u003esearch\u003c/a\u003e results or via the dashboard from its universe. It is also possible to link directly to the package homepage, for example: \u003ca href=\"https://ropensci.r-universe.dev/ui#package:cffr\"\u003ehttps://ropensci.r-universe.dev/ui#package:cffr\u003c/a\u003e\u003c/p\u003e\u003cfigure\u003e\u003ca href=\"https://ropensci.r-universe.dev/ui#package:cffr\"\u003e\u003cimg src=\"/blog/2022/04/22/ropensci-news-digest-april-2022/homepage-lg.png\"\t\t\talt=\"example screenshot of a package homepage.\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003ch3 id=\"next-coworking-sessions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#next-coworking-sessions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNext coworking sessions\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on 1st Tuesdays! Hosted by Steffi LaZerte  and various community hosts. Everyone welcome. No RSVP needed. Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cp\u003eOur next sessions are:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2022-05/\"\u003eTuesday, 03 May 2022 9 AM North American Pacific / 16:00 UTC\u003c/a\u003e \u0026ldquo;Why be a reviewer of R packages?\u0026rdquo; \u003cem\u003eHosted by community host François Michonneau and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eCowork on a project of your choice;\u003c/li\u003e\u003cli\u003ePrepare an R package for rOpenSci software review, work on reviewer comments, or review a package;\u003c/li\u003e\u003cli\u003eOr ask \u003ca href=\"/author/francois-michonneau/\"\u003eFrançois Michonneau\u003c/a\u003e what it\u0026rsquo;s like to review packages!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2022-06/\"\u003eTuesday, 07 June 2022 9 AM Australian Western / 1:00 UTC \u003c/a\u003e \u0026ldquo;Tackle something you\u0026rsquo;ve always wanted to learn\u0026rdquo; \u003cem\u003eHosted by community host Nick Tierney and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eCowork on a project of your choice;\u003c/li\u003e\u003cli\u003eTake this time to tackle something you\u0026rsquo;ve always wanted to learn;\u003c/li\u003e\u003cli\u003eOr talk to \u003ca href=\"https://ropensci.org/author/nicholas-tierney/\"\u003eNick Tierney\u003c/a\u003e and discuss what it is you want to learn, and get some tips and resources to get yourself started!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out about more \u003ca href=\"/events\"\u003eevents\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following three packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/gbifdb\"\u003egbifdb\u003c/a\u003e, developed by Carl Boettiger: A high performance interface to the Global Biodiversity Information Facility, GBIF. In contrast to rgbif, which can access small subsets of GBIF data through web-based queries to a central server, gbifdb provides enhanced performance for R users performing large-scale analyses on servers and cloud computing providers, providing full support for arbitrary SQL or dplyr operations on the complete GBIF data tables (now over 1 billion records, and over a terabyte in size). gbifdb accesses a copy of the GBIF data in parquet format, which is already readily available in commercial computing clouds such as the Amazon Open Data portal and the Microsoft Planetary Computer, or can be accessed directly without downloading, or downloaded to any server with suitable bandwidth and storage space.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/qualR\"\u003equalR\u003c/a\u003e, developed by Mario Gavidia-Calderón together with Daniel Schuch: A package to download information from CETESB QUALAR \u003ca href=\"https://cetesb.sp.gov.br/ar/qualar/\"\u003ehttps://cetesb.sp.gov.br/ar/qualar/\u003c/a\u003e and MonitorAr \u003ca href=\"https://www.rio.rj.gov.br/web/smac/monitorar-rio1\"\u003ehttps://www.rio.rj.gov.br/web/smac/monitorar-rio1\u003c/a\u003e systems. It contains function to download different parameters, a set of criteria pollutants and the most frequent meteorological parameters used in air quality data analysis and air quality model evaluation. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/474\"\u003ereviewed\u003c/a\u003e by Beatriz Milz, and Kaue de Sousa.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/rsvg\"\u003ersvg\u003c/a\u003e, developed by Jeroen Ooms: Renders vector-based svg images into high-quality custom-size bitmap arrays using librsvg2. The resulting bitmap can be written to e.g. png, jpeg or webp format. In addition, the package can convert images directly to various formats such as pdf or postscript.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=rsvg\"\u003eCRAN\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following sixteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/gert\" title=\"Simple Git Client for R\"\u003egert\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/gert/releases/tag/v1.6.0\"\u003e\u003ccode\u003ev1.6.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/antiword\" title=\"Extract Text from Microsoft Word Documents\"\u003eantiword\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/antiword/releases/tag/v1.3.1\"\u003e\u003ccode\u003ev1.3.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/baRcodeR\" title=\"Label Creation for Tracking and Collecting Data fromBiological Samples\"\u003ebaRcodeR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/baRcodeR/releases/tag/v0.1.7\"\u003e\u003ccode\u003ev0.1.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (cff) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v0.2.2\"\u003e\u003ccode\u003ev0.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/comtradr\" title=\"Interface with the United Nations Comtrade API\"\u003ecomtradr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/comtradr/releases/tag/0.3.0\"\u003e\u003ccode\u003e0.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/git2rdata\" title=\"Store and Retrieve Data.frames in a Git Repository\"\u003egit2rdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/git2rdata/releases/tag/v0.4.0\"\u003e\u003ccode\u003ev0.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/MODIStsp\" title=\"Find, Download and Process MODIS Land ProductsData\"\u003eMODIStsp\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/MODIStsp/releases/tag/v2.0.7\"\u003e\u003ccode\u003ev2.0.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nasapower\" title=\"NASA POWER API Client\"\u003enasapower\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nasapower/releases/tag/v4.0.7\"\u003e\u003ccode\u003ev4.0.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/occCite\" title=\"Querying and Managing Large Biodiversity Occurrence Datasets\"\u003eoccCite\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/occCite/releases/tag/v0.5.4\"\u003e\u003ccode\u003ev0.5.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pdftools\" title=\"Text Extraction, Rendering and Converting of PDF Documents\"\u003epdftools\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/pdftools/releases/tag/v3.2.0\"\u003e\u003ccode\u003ev3.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgbif\" title=\"Interface to the Global Biodiversity Information Facility API\"\u003ergbif\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgbif/releases/tag/v3.7.2\"\u003e\u003ccode\u003ev3.7.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rsvg\" title=\"Render SVG Images into PDF, PNG, (Encapsulated) PostScript, or Bitmap Arrays\"\u003ersvg\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rsvg/releases/tag/v2.3.1\"\u003e\u003ccode\u003ev2.3.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.6.0\"\u003e\u003ccode\u003e0.6.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Workflows\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/0.12.0\"\u003e\u003ccode\u003e0.12.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/taxa\" title=\"Classes for Storing and Manipulating Taxonomic Data\"\u003etaxa\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/taxa/releases/tag/v0.4.2\"\u003e\u003ccode\u003ev0.4.2\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/tidyhydat\" title=\"Extract and Tidy Canadian Hydrometric Data\"\u003etidyhydat\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidyhydat/releases/tag/0.5.5\"\u003e\u003ccode\u003e0.5.5\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are sixteen recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/498\"\u003eEDIutils\u003c/a\u003e, An API Client for the Environmental Data Initiative Repository. Submitted by \u003ca href=\"https://github.com/clnsmth\"\u003eColin Smith\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/492\"\u003egbifdb\u003c/a\u003e, Local Database Interface to GBIF. Submitted by \u003ca href=\"http://carlboettiger.info\"\u003eCarl Boettiger\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/485\"\u003eReLTER\u003c/a\u003e, An interface to the eLTER for the R statistical programming environment. Submitted by \u003ca href=\"https://www.cnr.it/people/alessandro.oggioni\"\u003eAlessandro Oggioni\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/505\"\u003enpi\u003c/a\u003e, Access the U.S. National Provider Identifier Registry API. Submitted by \u003ca href=\"https://frankfarach.com\"\u003eFrank Farach\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román-Palacios\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/418\"\u003eepair\u003c/a\u003e, Grabs data from EPA API, simplifies getting pollutant data. Submitted by \u003ca href=\"https://github.com/GLOrozcoM\"\u003eLeo Orozco-Mulfinger\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/521\"\u003eunifir\u003c/a\u003e, A Unifying API for Calling Unity from R. Submitted by \u003ca href=\"https://mm218.dev/\"\u003eMichael Mahoney\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/475\"\u003ecanaper\u003c/a\u003e, Categorical Analysis of Neo- And Paleo-Endemism. Submitted by \u003ca href=\"https://joelnitta.com\"\u003eJoel Nitta\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/470\"\u003etidyqpcr\u003c/a\u003e, Quantitative PCR Analysis with the Tidyverse. Submitted by \u003ca href=\"https://scholar.google.co.uk/citations?user=7FLIJBAAAAAJ\u0026amp;hl=en\"\u003eEdward Wallace\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/433\"\u003eROriginStamp\u003c/a\u003e, Interface to OriginStamp API to Obtain Trusted Time Stamps. Submitted by \u003ca href=\"https://github.com/rkrug\"\u003eRainer M Krug\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/524\"\u003ehudr\u003c/a\u003e, A R interface for accessing HUD (US Department of Housing and Urban Development) APIs. Submitted by \u003ca href=\"https://github.com/etam4260\"\u003eEmmet Tam\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"http://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/443\"\u003erdbhapi\u003c/a\u003e, Interface to DBH-API. Submitted by \u003ca href=\"https://hkdir.no/\"\u003eMarija Ninic\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2022/04/19/software-review-editorial-challenges\"\u003eEditorial Challenges and Solutions in Software Peer Review\u003c/a\u003e by Maëlle Salmon, and Noam Ross. Challenges encountered by editors, and the measures we\u0026rsquo;ve taken to try to alleviate said problems.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/03/23/runiverse-search\"\u003eSearching and browsing the R universe\u003c/a\u003e by Jeroen Ooms. We made a series of structural improvements in r-universe to make it easier to browse and discover interesting R packages and articles. Most notably, the landing page has been overhauled: you can now search directly for any name or keyword across the entire ecosystem.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/03/29/rsnps-update\"\u003ersnps 0.5.0: New ncbi_snp_query() Features\u003c/a\u003e by Sina Rüeger, and Julia Gustavsen. \u003ccode\u003encbi_snp_query()\u003c/code\u003e now returns all reported variant allele frequencies in dbSNP.\u003cfigure\u003e\u003cimg src=\"/blog/2022/04/22/ropensci-news-digest-april-2022/plot-maf-1.png\"\t\t\talt=\"Allele frequencies in dbSNP for various studies/populations.\" width=\"400\"\u003e\u003c/figure\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/03/22/safeguards-and-backups-for-github-organizations\"\u003eSafeguards and Backups for GitHub Organizations\u003c/a\u003e by Maëlle Salmon. Some practical steps we\u0026rsquo;ve taken to safeguard our GitHub organizations.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eTwo use cases of our packages and resources have been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/using-vcr-for-http-testing-of-a-package-for-kobotoolbox/2865\"\u003eUsing vcr for HTTP testing of a package for Kobotoolbox\u003c/a\u003e. Reported by Frie.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/estimating-leaf-temperatures-worldwide/2908\"\u003eEstimating leaf temperatures worldwide\u003c/a\u003e. Reported by Paul Melloy.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eThere are no open calls for new maintainers at this point but you can refer to our \u003ca href=\"https://contributing.ropensci.org/\"\u003econtributing guide\u003c/a\u003e for finding ways to get involved!As the maintainer of an rOpenSci package, feel free to contact us on Slack or email \u003ccode\u003einfo@ropensci.org\u003c/code\u003e to get your call for maintainer featured in the next newsletter.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"identifying-code-duplication\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#identifying-code-duplication\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIdentifying code duplication\u003c/h3\u003e\u003cp\u003eAre you worried a codebase you\u0026rsquo;ve just inherited doesn\u0026rsquo;t follow the DRY (don\u0026rsquo;t repeat yourself) principle?You might find the \u003ca href=\"https://russhyde.github.io/dupree/\"\u003edupree package\u003c/a\u003e by Russ Hyde useful: \u0026ldquo;The goal of dupree is to identify chunks / blocks of highly duplicated code within a set of R scripts.\u0026rdquo;.\u003c/p\u003e\u003ch3 id=\"security-for-package-developers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#security-for-package-developers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSecurity for package developers\u003c/h3\u003e\u003cp\u003eDid you know our development guide includes a short chapter on \u003ca href=\"https://devguide.ropensci.org/package-development-security-best-practices.html\"\u003ePackage Development Security Best Practices\u003c/a\u003e?Starting with the recommendation to enable \u003ca href=\"https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication\"\u003etwo-factor authentication (2FA)\u003c/a\u003e for your GitHub account (now required for the ropensci GitHub organization).We\u0026rsquo;ve also recently blogged on \u003ca href=\"/blog/2022/03/22/safeguards-and-backups-for-github-organizations/\"\u003eSafeguards and Backups for GitHub Organizations\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"s3-s4-r6-r7-not-an-april-fools-joke\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#s3-s4-r6-r7-not-an-april-fools-joke\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eS3, S4, R6, R7 (not an April Fools\u0026rsquo; joke!)\u003c/h3\u003e\u003cp\u003eHave you heard of the \u003ca href=\"https://rconsortium.github.io/OOP-WG/\"\u003eR7 package\u003c/a\u003e?It is meant to be an object-oriented programming system successor to S3 and S4.It is developped under the umbrella of an R Consortium working group, and a long term goal is to merge it into base R.Explore the current repository and get a taste of the future!\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/04/22/ropensci-news-digest-april-2022/","date_published":"2022-04-22T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/yttbb-78v90","title":"Editorial Challenges and Solutions in Software Peer Review","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["author"]}],"tags":["Software Peer Review","editors"],"content_html":"\u003cp\u003erOpenSci \u003ca href=\"/software-review/\"\u003eSoftware Peer Review\u003c/a\u003e and \u003ca href=\"/software-review/\"\u003eStatistical Software Peer Review\u003c/a\u003e rely on the volunteer work of reviewers, and editors.Editors manage the day-to-day flow of submissions, recruit reviewers and guide the peer-review process from start to finish.  (Their role, like much of our process, is \u003ca href=\"https://devguide.ropensci.org/editorguide.html\"\u003ecodified in the rOpenSci Developer Guide\u003c/a\u003e).   While many in our community have participated in the peer-review process, only a few have been involved as editors and guest editors. Here we thought we\u0026rsquo;d shed some light on some of challenges our editors face, and some of the solutions we have found over the years, to make this part our work more transparent.\u003c/p\u003e\u003ch2 id=\"scope-decisions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#scope-decisions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eScope decisions\u003c/h2\u003e\u003cp\u003eAfter a package is submitted, before it is assigned an editor and reviewers, the rotating Editor-in-Chief has to assess whether it is \u003cem\u003ein scope\u003c/em\u003e for the review process.  Traditionally, rOpenSci\u0026rsquo;s \u003ca href=\"https://devguide.ropensci.org/policies.html#aims-and-scope\"\u003escope\u003c/a\u003e, has focused on packages that manage the research data lifecycle. This is both so that rOpenSci packages form a coherent set of tools, and also to limit us to packages which our editors and reviewers can review with relevant standards and expertise.\u003c/p\u003e\u003cp\u003eScope decisions can be tricky, and while there\u0026rsquo;s no way around that complexity, we\u0026rsquo;ve found it has gotten easier by refining the \u003ca href=\"https://devguide.ropensci.org/policies.html#aims-and-scope\"\u003escope descriptions\u003c/a\u003e over time as we have  more edge-cases.Better phrasing and examples also help authors evaluating the possible scope of their package before a submission.  Now that our scope is \u003ca href=\"https://stats-devguide.ropensci.org/overview.html#overview-categories\"\u003eexpanding to include statistical packages\u003c/a\u003e, we expect to continue to refine these categories in the coming months and years.\u003c/p\u003e\u003cp\u003eWhen the scope of a package is ambiguous, the Editor-in-Chief leads a discussion on the editorial Slack channel with other editors to come to a consensus.In these discussions, we acknowledge that some of us might have more expertise on some topics, and we sometimes even consult subject experts external to the board to gain more insights.\u003c/p\u003e\u003cp\u003eNote that we encourage package authors to submit a \u003cem\u003epre-submission inquiry\u003c/em\u003e before a full submission, to clear any doubt about scope.\u003c/p\u003e\u003ch2 id=\"recruiting--replacing-reviewers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#recruiting--replacing-reviewers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRecruiting \u0026amp; replacing reviewers\u003c/h2\u003e\u003cp\u003eReviewing a package takes precious time out of reviewers\u0026rsquo; busy schedules.We hope the experience is valuable for reviewers (and we try to make it easier with our \u003ca href=\"https://devguide.ropensci.org/reviewerguide.html\"\u003ereviewer guide\u003c/a\u003e) but we reckon that it\u0026rsquo;s quite an undertaking, demanding about the same time as reviewing a scientific paper.To add to the difficulty of finding available reviewers, we have a list of \u003ca href=\"https://devguide.ropensci.org/editorguide.html#criteria-for-choosing-a-reviewer\"\u003ecriteria for choosing reviewers\u003c/a\u003e to ensure diversity (in both skills and background), and to continuously build up a pool of experienced reviewers without overloading any of them.\u003c/p\u003e\u003cp\u003eLast year we launched a \u003ca href=\"/blog/2021/11/18/devguide-0.7.0/#a-new-form-for-volunteer-reviewing\"\u003enew form for reviewer volunteering\u003c/a\u003e that allow us to collect finer-grained data about technical and topical expertise, as well as an optional question \u0026ldquo;Do you consider yourself part of an underrepresented group in the fields of data science, programming, or in your primary field of work?\u0026rdquo;.We keep this information in a database (managed with Airtable), along with each reviewer\u0026rsquo;s history of reviews.  This database is a resource for editors as they look for reviewers with particular expertise, background, or availability.\u003c/p\u003e\u003cp\u003eWhen that is not enough, for instance after repeated refusals or nonresponses from potential reviewers, editors can ask for recommendations from other editors on our Slack channel. (Some of us are editors for traditional scientific journals, and wish we had such a useful chat with our co-editors there!)\u003c/p\u003e\u003cp\u003eOne challenge in reaching out to reviewers is knowing when to move on after waiting for a response.  So we\u0026rsquo;ve added \u0026ldquo;If I don\u0026rsquo;t hear from you within a week, I will assume you are unable to review at this time\u0026rdquo; to our \u003ca href=\"https://devguide.ropensci.org/reviewrequesttemplate.html\"\u003estandard review request template\u003c/a\u003e. This puts everyone is on the same page and provides clarity to both editors and potential reviewers.\u003c/p\u003e\u003cp\u003eLastly, when a reviewer drops out of the review process (or can no longer be contacted),the handling editor either recruits a replacement, often a person to which they can ask for a short turnaround (say, another editor!), or the editor acts as a second reviewer.The goal is to not delay the review process too much.\u003c/p\u003e\u003ch2 id=\"authors-dropping-out\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#authors-dropping-out\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAuthors dropping out\u003c/h2\u003e\u003cp\u003eIt\u0026rsquo;s a sadder state of affairs when package \u003cem\u003eauthors\u003c/em\u003e stop responding, as the review process has to be stopped.It\u0026rsquo;s especially disappointing when it happens after reviews are in, as reviewers can feel their work is wasted.In the end, there\u0026rsquo;s nothing we can really do about this as it\u0026rsquo;s out of the control of our editors and reviewers (and of authors).\u003c/p\u003e\u003cp\u003eHowever, to avoid simple problems with missed communications, we recommend that authors make sure they receive GitHub notifications as we try to keep communication transparent through GitHub and don\u0026rsquo;t generally use email.To deal with larger problems regarding time and commitment, we\u0026rsquo;ve recently added sentences to (the development version of) the \u003ca href=\"https://devdevguide.netlify.app/authors-guide.html\"\u003eauthor guide\u003c/a\u003e and to the submission templates: \u0026ldquo;I expect to maintain this package for at least 2 years or to find a replacement.\u0026rdquo;This should prompt package authors to think about the package maintenance in the long term.While this won\u0026rsquo;t prevent all problems, we hope this will prompt package authors to think about the package maintenance in the long term before submitting their packages for review.\u003c/p\u003e\u003cp\u003eWe also understand that while authors may have good intentions, life can twist unexpectedly.Therefore, another effort we make is to put holds on reviews (by applying holding labels) as needed.These holds are revisited every three months, up to one year.\u003c/p\u003e\u003ch2 id=\"editors-and-reviewers-work-overload\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#editors-and-reviewers-work-overload\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEditors (and reviewers) work overload\u003c/h2\u003e\u003cp\u003eSoftware review necessitates work by all: editors, reviewers, and obviously authors.\u003c/p\u003e\u003cp\u003eTo reduce editorial work in particular, we\u0026rsquo;ve improved automation, which was the topic of a community call, \u003ca href=\"/commcalls/dec2021-automation/\"\u003e\u0026ldquo;Enhancing Software Peer Review with GitHub Automation\u0026rdquo;\u003c/a\u003e.rOpenSci has worked with The Journal of Open Source Software to extend JOSS’s approach of chatops-driven publishing into a new GitHub chat-bot that manages our editorial process: assigning tasks, tagging issues, running tests on software submissions, returning reports to reviewers and editors, and logging reviews in an external (Airtable) database. All from the comfort of a GitHub issue comment!For example, you could clone a repository locally, install dependencies, run checks, and manually post the   results\u0026hellip; \u003cstrong\u003eor\u003c/strong\u003e you could simply type the following into a GitHub issue comment:\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e@ropensci-review-bot check package\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSimilarly, you can use the following to register a reviewer in the submission issue metadata as well as in our Airtable database.\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e@ropensci-review-bot add @maelle to reviewers\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eA huge part of limiting editors\u0026rsquo; workloads  is having enough editors!  We have been \u003ca href=\"/tags/editors/\"\u003eexpanding our editorial team\u003c/a\u003e, with the goal of only expecting editors to handle \u003ca href=\"https://devdevguide.netlify.app/editorguide.html#editors-responsabilities\"\u003eabout 4 submissions a year\u003c/a\u003e.\u003cbr\u003eAs our submission volume grows, and editors rotate out (we ask for 2-year commitments with option to renew), we recruit new editors largely out of our pool of reviewers.We invite experienced reviewers to guest-edit and ask if they want to stay on if everything works out.\u003cbr\u003eOur \u003ca href=\"https://devguide.ropensci.org/editorguide.html\"\u003eeditor guide\u003c/a\u003e facilitates onboarding\u0026hellip; and onboarding new editors leads to feedback on and therefore improvements to, that guide.If you want to try editing \u003ca href=\"/software-reviewer\"\u003estart by volunteering as a reviewer\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eHere we\u0026rsquo;ve summarized some common problems for our editorial boards.We\u0026rsquo;ve found it\u0026rsquo;s very important to automate processes but also for editors to be able to communicate with each other directly in order to find solutions, as well as to commiserate with and encourage each other.As software review continues, we will surely run into new challenges to tackle.We hope our experiences are useful for other editors and that they may help inform other editorial boards.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/04/19/software-review-editorial-challenges/","date_published":"2022-04-19T00:00:02-07:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/b9s6j-hmt03","title":"rsnps 0.5.0: New ncbi_snp_query() Features","language":"en","authors":[{"name":"Julia Gustavsen","url":"https://orcid.org/0000-0002-4764-4802","avatar":"https://ropensci.org/img/team/julia-gustavsen.jpg","_role":["author"]},{"name":"Sina Rüeger","url":"https://orcid.org/0000-0003-2848-9242","avatar":"https://github.com/sinarueeger.png","_role":["author"]}],"tags":["packages","R","rsnps","dbsnp","open-data","tech notes"],"content_html":"\u003ch2 id=\"tldr\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tldr\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTL;DR\u003c/h2\u003e\u003cp\u003e\u003ccode\u003ersnps\u003c/code\u003e is a package that enables the retrieval of single nucleotide polymorphism (SNP) data from the  \u003ca href=\"https://www.ncbi.nlm.nih.gov/\"\u003eNCBI\u0026rsquo;s\u003c/a\u003e \u003ca href=\"https://www.ncbi.nlm.nih.gov/snp/\"\u003edbSNP\u003c/a\u003e database and \u003ca href=\"https://opensnp.org/\"\u003eopenSNP\u003c/a\u003e by providing wrappers for the APIs. Single nucleotide polymorphisms represent differences at one specific position in a detected biological sequence compared to the reference.\u003c/p\u003e\u003cp\u003e\u003ccode\u003encbi_snp_query()\u003c/code\u003e now returns all reported variant allele frequencies in dbSNP in column \u003ccode\u003emaf_population\u003c/code\u003e in form of a \u003ccode\u003etibble\u003c/code\u003e. Previously (version \u0026lt;= 0.4.0), it reported only the allele frequency from \u003ca href=\"https://gnomad.broadinstitute.org/\"\u003egnomAD\u003c/a\u003e in column \u003ccode\u003emaf\u003c/code\u003e as a \u003ccode\u003edata.frame\u003c/code\u003e.\u003c/p\u003e\u003ch2 id=\"changes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#changes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChanges\u003c/h2\u003e\u003cp\u003eThe \u003ca href=\"https://github.com/ropensci/rsnps/blob/master/NEWS.md\"\u003eNEWS\u003c/a\u003e file will tell you about the changes of rsnps 0.4.0 to 0.5.0, but there is one change that we think will be particularly relevant to users which we will highlight in this blog post.\u003c/p\u003e\u003cp\u003e\u003ccode\u003encbi_snp_query()\u003c/code\u003e is the function that pulls data from \u003ca href=\"https://www.ncbi.nlm.nih.gov/\"\u003eNCBI\u0026rsquo;s\u003c/a\u003e \u003ca href=\"https://www.ncbi.nlm.nih.gov/snp/\"\u003edbSNP\u003c/a\u003e, a database of single-nucleotide polymorphisms (SNP). This database lets a user query for a SNP of interest and returns a plethora of information, among them genomic position, associated gene, clinical significance, and - relevant for this blogpost - the allele frequency. The allele frequency varies typically (on average) between different populations, sometimes just a little (e.g. \u003ca href=\"https://www.ncbi.nlm.nih.gov/snp/rs562556#frequency_tab\"\u003ers562556\u003c/a\u003e), sometimes a lot (e.g. \u003ca href=\"https://www.ncbi.nlm.nih.gov/snp/rs11677783#frequency_tab\"\u003ers11677783\u003c/a\u003e). This is why \u003ca href=\"https://www.ncbi.nlm.nih.gov/snp/\"\u003edbSNP\u003c/a\u003e collects allele frequency estimates from different studies and populations.\u003c/p\u003e\u003cp\u003eUntil version 0.4.0 \u003ccode\u003encbi_snp_query()\u003c/code\u003e reported the allele frequency estimated from \u003ca href=\"https://gnomad.broadinstitute.org/\"\u003egnomAD\u003c/a\u003e. For example, for SNP \u003ccode\u003ers420358\u003c/code\u003e the \u003ccode\u003encbi_snp_query()\u003c/code\u003e output used to look like this:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003encbi_snp_query\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;rs420358\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt;          query chromosome        bp class         rsid          gene\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; 2     rs420358          1  40341239   snv     rs420358              \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt;       alleles ancestral_allele variation_allele      seqname\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; 2     A,C,G,T                A            C,G,T NC_000001.11\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt;     assembly ref_seq minor    maf\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#\u0026gt; 2 GRCh38.p12       A     C 0.8614\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWe have now changed two things:\u003c/p\u003e\u003col\u003e\u003cli\u003e\u003ccode\u003encbi_snp_query()\u003c/code\u003e output now includes a new \u003ccode\u003emaf_population\u003c/code\u003e column which contains all reported allele frequencies, not only from one study or population (for backwards compatibility, the \u003ccode\u003emaf\u003c/code\u003e column stays the same).\u003c/li\u003e\u003cli\u003eTo do that, \u003ccode\u003encbi_snp_query()\u003c/code\u003e returns now a \u003ca href=\"https://tibble.tidyverse.org/\"\u003etibble\u003c/a\u003e (and not a data frame).\u003c/li\u003e\u003c/ol\u003e\u003ch2 id=\"examples\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#examples\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExamples\u003c/h2\u003e\u003cp\u003eLet\u0026rsquo;s have a look at the output of the two SNPs mentioned above. You can see that a) \u003ccode\u003emaf_population\u003c/code\u003e is a new list-column (\u003ccode\u003e\u0026lt;list\u0026gt;\u003c/code\u003e), and b) \u003ccode\u003edat\u003c/code\u003e is a tibble.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ersnps\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edat\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003encbi_snp_query\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;rs11677783\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;rs562556\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eGetting info about the following rsIDs: rs11677783, rs562556\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# A tibble: 2 x 16  query     chromosome        bp class rsid      gene   alleles ancestral_allele  \u0026lt;chr\u0026gt;     \u0026lt;chr\u0026gt;          \u0026lt;dbl\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;chr\u0026gt;     \u0026lt;chr\u0026gt;  \u0026lt;chr\u0026gt;   \u0026lt;chr\u0026gt;           1 rs116777… 2          219842264 snv   rs116777… \u0026#34;\u0026#34;     T,A     T               2 rs562556  1           55058564 snv   rs562556  \u0026#34;PCSK… G,A     G               # … with 8 more variables: variation_allele \u0026lt;chr\u0026gt;, seqname \u0026lt;chr\u0026gt;, hgvs \u0026lt;chr\u0026gt;,#   assembly \u0026lt;chr\u0026gt;, ref_seq \u0026lt;chr\u0026gt;, minor \u0026lt;chr\u0026gt;, maf \u0026lt;dbl\u0026gt;,#   maf_population \u0026lt;list\u0026gt;\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"one-row-per-study-long-data\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#one-row-per-study-long-data\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOne row per study (\u0026ldquo;long data\u0026rdquo;)\u003c/h3\u003e\u003cp\u003eHere is a visual to show how much the allele frequencies vary per SNP.\u003c/p\u003e\u003cp\u003eFirst, we \u003cstrong\u003elengthen\u003c/strong\u003e the data frame, so that each SNP and population/study are on a \u003cstrong\u003eseparate line\u003c/strong\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edat_maf\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003edat\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003equery\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emaf_population\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"nf\"\u003eunnest\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecols\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emaf_population\u003c/span\u003e\u003cspan class=\"p\"\u003e)))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# A tibble: 43 x 5   query      study          ref_seq Minor      MAF   \u0026lt;chr\u0026gt;      \u0026lt;chr\u0026gt;          \u0026lt;chr\u0026gt;   \u0026lt;chr\u0026gt;    \u0026lt;dbl\u0026gt; 1 rs11677783 1000Genomes    T       A     0.314    2 rs11677783 ALSPAC         T       A     0.166    3 rs11677783 Estonian       T       A     0.156    4 rs11677783 GENOME_DK      T       A     0.1      5 rs11677783 GnomAD         T       A     0.355    6 rs11677783 GoNL           T       A     0.164    7 rs11677783 KOREAN         T       A     0.000342 8 rs11677783 Korea1K        T       A     0.000546 9 rs11677783 NorthernSweden T       A     0.187   10 rs11677783 PRJEB36033     T       A     0.3     # … with 33 more rows\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThen we display it with the allele frequency on the x-axis and the study along the y-axis.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep1\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edat_maf\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e \u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003equery\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;rs11677783\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estudy\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eforcats\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003efct_reorder\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estudy\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eMAF\u003c/span\u003e \u003cspan class=\"p\"\u003e)))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_vline\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003exintercept\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003elinetype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecolor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;gray\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eMAF\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estudy\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elabs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Allele frequency\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esubtitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;rs11677783\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep2\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edat_maf\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e \u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003equery\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;rs562556\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estudy\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eforcats\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003efct_reorder\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estudy\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eMAF\u003c/span\u003e \u003cspan class=\"p\"\u003e)))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_vline\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003exintercept\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003elinetype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecolor\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;gray\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eMAF\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estudy\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003elabs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Allele frequency\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esubtitle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;rs562556\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep1\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003ep2\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/03/29/rsnps-update/plot-maf-1.png\"\t\t\talt=\"Two figures displaying the allele frequency for two genetic variants (rs11677783, rs562556). Each figure is a dot plot with study along the vertical, y-axis and MAF along the horizontal, x-axis. The studies are arranged in ascending order of MAF\" width=\"800\"\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003eAllele frequencies in dbSNP for rs11677783, rs562556 and various studies/populations.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch3 id=\"one-study-as-column\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#one-study-as-column\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOne study as column\u003c/h3\u003e\u003cp\u003eWe can decide to turn the tibble into a data frame again and pick a \u003cstrong\u003especific study\u003c/strong\u003e. For example, here we use the \u003ccode\u003emap()\u003c/code\u003e function from the \u003ca href=\"https://purrr.tidyverse.org/\"\u003epurrr\u003c/a\u003e package to pull out the study which matches \u0026ldquo;KOREAN\u0026rdquo; from the \u003ccode\u003emaf_population\u003c/code\u003e list. Note that our new column, \u003ccode\u003emaf_korean\u003c/code\u003e is a \u003ccode\u003edbl\u003c/code\u003e, and not a \u003ccode\u003elist\u003c/code\u003e:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edat_korean\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003edat\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emaf_korean\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003epurrr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003emap\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emaf_population\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e\u003cspan class=\"kc\"\u003e..1\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eMAF[..1\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003estudy\u003c/span\u003e\u003cspan class=\"o\"\u003e==\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;KOREAN\u0026#34;\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"nf\"\u003eunnest\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecols\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emaf_korean\u003c/span\u003e\u003cspan class=\"p\"\u003e)))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# A tibble: 2 x 17  query     chromosome        bp class rsid      gene   alleles ancestral_allele  \u0026lt;chr\u0026gt;     \u0026lt;chr\u0026gt;          \u0026lt;dbl\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;chr\u0026gt;     \u0026lt;chr\u0026gt;  \u0026lt;chr\u0026gt;   \u0026lt;chr\u0026gt;           1 rs116777… 2          219842264 snv   rs116777… \u0026#34;\u0026#34;     T,A     T               2 rs562556  1           55058564 snv   rs562556  \u0026#34;PCSK… G,A     G               # … with 9 more variables: variation_allele \u0026lt;chr\u0026gt;, seqname \u0026lt;chr\u0026gt;, hgvs \u0026lt;chr\u0026gt;,#   assembly \u0026lt;chr\u0026gt;, ref_seq \u0026lt;chr\u0026gt;, minor \u0026lt;chr\u0026gt;, maf \u0026lt;dbl\u0026gt;,#   maf_population \u0026lt;list\u0026gt;, maf_korean \u0026lt;dbl\u0026gt;\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"one-column-per-study-wide-data\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#one-column-per-study-wide-data\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOne column per study (\u0026ldquo;wide data\u0026rdquo;)\u003c/h3\u003e\u003cp\u003eLastly, we can decide to pivot the study allele frequencies, so that \u003cstrong\u003eeach study\u003c/strong\u003e has its \u003cstrong\u003eown column\u003c/strong\u003e:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edat_maf\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003edat\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003equery\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emaf_population\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eunnest\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecols\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emaf_population\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003equery\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estudy\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eMAF\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003epivot_wider\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003evalues_from\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;MAF\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003enames_from\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;study\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003evalues_fn\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003emin\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003enames_prefix\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;maf_\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e## if duplicate, picking the minimum\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edat_wide\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eleft_join\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edat\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edat_maf\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eby\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;query\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# A tibble: 2 x 41  query     chromosome        bp class rsid      gene   alleles ancestral_allele  \u0026lt;chr\u0026gt;     \u0026lt;chr\u0026gt;          \u0026lt;dbl\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;chr\u0026gt;     \u0026lt;chr\u0026gt;  \u0026lt;chr\u0026gt;   \u0026lt;chr\u0026gt;           1 rs116777… 2          219842264 snv   rs116777… \u0026#34;\u0026#34;     T,A     T               2 rs562556  1           55058564 snv   rs562556  \u0026#34;PCSK… G,A     G               # … with 33 more variables: variation_allele \u0026lt;chr\u0026gt;, seqname \u0026lt;chr\u0026gt;, hgvs \u0026lt;chr\u0026gt;,#   assembly \u0026lt;chr\u0026gt;, ref_seq \u0026lt;chr\u0026gt;, minor \u0026lt;chr\u0026gt;, maf \u0026lt;dbl\u0026gt;,#   maf_population \u0026lt;list\u0026gt;, maf_1000Genomes \u0026lt;dbl\u0026gt;, maf_ALSPAC \u0026lt;dbl\u0026gt;,#   maf_Estonian \u0026lt;dbl\u0026gt;, maf_GENOME_DK \u0026lt;dbl\u0026gt;, maf_GnomAD \u0026lt;dbl\u0026gt;, maf_GoNL \u0026lt;dbl\u0026gt;,#   maf_KOREAN \u0026lt;dbl\u0026gt;, maf_Korea1K \u0026lt;dbl\u0026gt;, maf_NorthernSweden \u0026lt;dbl\u0026gt;,#   maf_PRJEB36033 \u0026lt;dbl\u0026gt;, maf_Qatari \u0026lt;dbl\u0026gt;, maf_SGDP_PRJ \u0026lt;dbl\u0026gt;,#   maf_Siberian \u0026lt;dbl\u0026gt;, maf_TOPMED \u0026lt;dbl\u0026gt;, maf_TWINSUK \u0026lt;dbl\u0026gt;,#   maf_Vietnamese \u0026lt;dbl\u0026gt;, maf_dbGaP_PopFreq \u0026lt;dbl\u0026gt;, maf_ExAC \u0026lt;dbl\u0026gt;,#   maf_FINRISK \u0026lt;dbl\u0026gt;, maf_GnomAD_exomes \u0026lt;dbl\u0026gt;, maf_GoESP \u0026lt;dbl\u0026gt;,#   maf_HapMap \u0026lt;dbl\u0026gt;, maf_MGP \u0026lt;dbl\u0026gt;, maf_PAGE_STUDY \u0026lt;dbl\u0026gt;, maf_TOMMO \u0026lt;dbl\u0026gt;\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eWe have highlighted important changes in \u003ccode\u003encbi_snp_query()\u003c/code\u003e whereby this function now returns a tibble, the column \u003ccode\u003emaf_population\u003c/code\u003e now returns all allele frequencies available in the NCBI database, and finally \u003ccode\u003emaf_population\u003c/code\u003e is now a list column instead of a regular column. These improvements which provide additional information and functionality to this package are available in the most recent version of rnsps available on \u003ca href=\"https://cran.r-project.org/web/packages/rsnps/index.html\"\u003eCRAN\u003c/a\u003e and on \u003ca href=\"https://github.com/ropensci/rsnps\"\u003eGitHub\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/03/29/rsnps-update/","date_published":"2022-03-29T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/vv99q-gjf32","title":"Searching and browsing the R universe","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","tech notes","search","topics"],"content_html":"\u003ch2 id=\"r-universe-now-has-search\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-now-has-search\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-universe now has search!\u003c/h2\u003e\u003cp\u003eWe made a series of structural improvements in r-universe to make it easier to browse and discover interesting R packages and articles.\u003c/p\u003e\u003cp\u003eMost notably, the \u003ca href=\"https://r-universe.dev\"\u003er-universe.dev\u003c/a\u003e landing page has been overhauled: you can now search directly for any name or keyword across the entire ecosystem:\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://r-universe.dev\"\u003e\u003cimg src=\"/blog/2022/03/23/runiverse-search/search.png\" alt=\"screenshot of r-universe homepage with search bar\"\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003eThe homepage also lists the popular topics and organizations, and links to recently active packages, articles, and maintainers. \u003ca href=\"https://r-universe.dev\"\u003eGive it a try\u003c/a\u003e and search for any topic, author, or organization!\u003c/p\u003e\u003ch2 id=\"using-package-keywords\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#using-package-keywords\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUsing package keywords\u003c/h2\u003e\u003cp\u003eThe search index matches words against package names, titles, descriptions, authors and vignette titles. Package authors can further improve discoverability of software and articles by setting \u003cstrong\u003ekeywords\u003c/strong\u003e.\u003c/p\u003e\u003cp\u003eThere are two ways to specify keywords for a package: if the R package is hosted on GitHub you can add keywords by configuring \u003ca href=\"https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/classifying-your-repository-with-topics\"\u003erepository topics\u003c/a\u003e. This is the best way, because topics also make your package more discoverable on GitHub itself. For packages not hosted on GitHub, you can specify keywords in the \u003ccode\u003eX-schema.org-keywords\u003c/code\u003e field in your package \u003ccode\u003eDESCRIPTION\u003c/code\u003e file. This field \u003ca href=\"https://cs.github.com/?q=org%3Acran+X-schema.org-keywords\"\u003eis permitted on CRAN\u003c/a\u003e as well.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://tidyverse.r-universe.dev/ui#packages\"\u003e\u003cimg src=\"/blog/2022/03/23/runiverse-search/keywords.png\" alt=\"screenshot a universe with keywords highlighted\"\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003eKeywords both help the package show up in search results, and are also displayed as labels in the packages tab. These labels are again clickable to easily discover other packages with the same keyword which may also be interesting.\u003c/p\u003e\u003cp\u003eIn addition to manually specified keywords, the build system may also add some keywords automatically based on analysis of the package, including the names of \u003ca href=\"https://r-universe.dev/sysdeps/\"\u003esystem libraries\u003c/a\u003e that the package links to such as \u003ca href=\"https://r-universe.dev/search/#gdal\"\u003e\u003ccode\u003egdal\u003c/code\u003e\u003c/a\u003e, or language tags such as \u003ca href=\"https://r-universe.dev/search/#c++\"\u003e\u003ccode\u003ec++\u003c/code\u003e\u003c/a\u003e or \u003ca href=\"https://r-universe.dev/search/#openmp\"\u003e\u003ccode\u003eopenmp\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"publishing-your-packages-and-articles-to-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#publishing-your-packages-and-articles-to-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePublishing your packages and articles to R universe\u003c/h2\u003e\u003cp\u003eCurrently, r-universe is serving 3324 packages and 3291 articles by 929 maintainers. Want to add your own packages? Signing up is easy and only takes a minute. Packages on r-universe may be, but don\u0026rsquo;t need to be on CRAN. In fact, packages that are not on CRAN may especially benefit from the extra visibility by publishing them on r-universe!\u003c/p\u003e\u003cp\u003eFor more details read our blog post: \u003ca href=\"/blog/2021/06/22/setup-runiverse/\"\u003ehow to create your personal CRAN-like repository on R-universe\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/03/23/runiverse-search/","date_published":"2022-03-23T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/7g8dk-ndk19","title":"Safeguards and Backups for GitHub Organizations","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]}],"tags":["tech notes","github"],"content_html":"\u003cp\u003eAt rOpenSci, much of our code, content and infrastructure is hosted on GitHub over several organizations \u0026ndash; described on our \u003ca href=\"/resources/\"\u003eresources page\u003c/a\u003e.This post summarizes some steps we\u0026rsquo;ve taken to safeguard our GitHub organizations.\u003c/p\u003e\u003ch2 id=\"paying-attention-to-access-rights--individual-security-setup\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#paying-attention-to-access-rights--individual-security-setup\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePaying attention to access rights \u0026amp; individual security setup\u003c/h2\u003e\u003cp\u003eGitHub defines several possible \u003ca href=\"https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization\"\u003eroles for organizations\u003c/a\u003e.The principal ones are:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003eOrganization owners\u003c/em\u003e who have all rights;\u003c/li\u003e\u003cli\u003e\u003cem\u003eOrganization members\u003c/em\u003e who only have basic rights and access to specific repositories (more on that later!);\u003c/li\u003e\u003cli\u003e\u003cem\u003eOutside collaborators\u003c/em\u003e who only have access to specific repositories.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eTo decide what role to give someone we use the \u003ca href=\"https://en.wikipedia.org/wiki/Principle_of_least_privilege\"\u003e\u003cstrong\u003eprinciple of least privilege\u003c/strong\u003e\u003c/a\u003e \u0026ndash; obviously balanced with trust\u0026hellip; and some consideration of the \u003ca href=\"https://en.wikipedia.org/wiki/Bus_factor\"\u003ebus factor\u003c/a\u003e.We want everyone to be able to do their job (for instance, accessing all repo settings), to have more than one person able to perform something (in case of vacation and other vacancy reasons), but we do not want to give people unnecessary access to sensitive settings and information.\u003c/p\u003e\u003cp\u003eNote that GitHub organization repositories have more fine grained access rights than \u003ca href=\"https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-github-user-account/managing-access-to-your-personal-repositories\"\u003erepositories hosted in individual accounts\u003c/a\u003e.This might be taken into account if you\u0026rsquo;re on the fence about creating a GitHub organization to host a package repository.\u003c/p\u003e\u003ch3 id=\"organization-owners\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#organization-owners\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOrganization owners\u003c/h3\u003e\u003cp\u003eWe enforce \u003ca href=\"https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication\"\u003etwo-factor authentication (2FA)\u003c/a\u003e for all GitHub organization owners.Making sure someone has enabled 2FA means asking but also answering questions from those not familiar with 2FA yet!As an organization owner, one can see whether organization owners and members have enabled 2FA for their account.\u003c/p\u003e\u003ch4 id=\"short-two-factor-authentication-2fa-primer\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#short-two-factor-authentication-2fa-primer\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eShort two-factor authentication (2FA) primer\u003c/h4\u003e\u003cp\u003eBefore any 2FA specific advice, do you use a password manager?Is it unlikely someone could gain access to that password manager? (for instance, is it protected by a strong password, is it not left open on a mobile device with no PIN code)Is your password database synced up somewhere on the cloud?If not, solving those three challenges will also increase the safety of your accounts, and your peace of mind.\u003c/p\u003e\u003cp\u003eNow to 2FA\u0026hellip;\u003c/p\u003e\u003cp\u003eOnce \u003ca href=\"https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication\"\u003e2FA has been enabled\u003c/a\u003e, new log-ins necessitate both a password \u0026ndash; hopefully stored in a password manager\u0026ndash; and a temporary code produced by an app like Duo Mobile.So there are two log-in things, the password and the temporary code: these are the two factors!\u003c/p\u003e\u003cp\u003eIf the device with the app is unavailable (imagine your dog steals it :crying_cat:), then the user needs to enter a recovery code that had been given by GitHub when the user enabled 2FA.Hopefully the recovery codes also live in the password manager.\u003c/p\u003e\u003cp\u003eSome 2FA apps will offer some sort of cloud synchronization so you could for example more easily change phones (like \u003ca href=\"https://guide.duo.com/duo-restore\"\u003eDuoMobile\u0026rsquo;s \u0026ldquo;Duo Restore\u0026rdquo;\u003c/a\u003e).\u003c/p\u003e\u003ch3 id=\"organization-members\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#organization-members\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOrganization members\u003c/h3\u003e\u003cp\u003eWe prefer package regular contributors to be organization members rather than outside collaborators because it\u0026rsquo;s more \u003ca href=\"https://devdevguide.netlify.app/collaboration.html#welcoming-collaborators-to-ropensci\"\u003ewelcoming\u003c/a\u003e.In practice, it means they can \u003ca href=\"https://docs.github.com/en/enterprise-server@3.2/admin/user-management/managing-organizations-in-your-enterprise/configuring-visibility-for-organization-membership\"\u003epublicize their organization membership\u003c/a\u003e on their GitHub profile.\u003c/p\u003e\u003cp\u003eNow, in our case, organization members have \u003ca href=\"https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/setting-base-permissions-for-an-organization\"\u003eno base permissions\u003c/a\u003e.Other organizations might choose to let every organization member have write access to all repositories. Additional member privileges can be \u003ca href=\"https://docs.github.com/en/organizations/managing-organization-settings\"\u003etweaked\u003c/a\u003e (repository creation, issue deletion, etc.).\u003c/p\u003e\u003cp\u003eWe add members to repositories via \u003ca href=\"https://docs.github.com/en/organizations/organizing-members-into-teams/about-teams\"\u003eGitHub teams\u003c/a\u003e.We make sure maintainers of packages have admin rights on their repositories, as the package, is, well, theirs. 🙂\u003c/p\u003e\u003cp\u003eWe also encourage members to enable 2FA for their account, via a \u003ca href=\"https://devguide.ropensci.org/package-development-security-best-practices.html#miscellaneous\"\u003enote in our development guide\u003c/a\u003e.If you\u0026rsquo;re reading this and haven\u0026rsquo;t enabled 2FA for your GitHub account yet, take the time to \u003ca href=\"#short-two-factor-authentication-2fa-primer\"\u003edo it\u003c/a\u003e. \u0026#x1f609;\u003c/p\u003e\u003ch2 id=\"backing-up-github-repositories\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#backing-up-github-repositories\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBacking up GitHub repositories\u003c/h2\u003e\u003cp\u003eDespite the aforementioned safeguards, something could still go wrong: data loss via an accident (deleting an upstream repository instead of a fork, force-pushing when one shouldn\u0026rsquo;t) or a hacked account.How to limit the consequences of a GitHub disaster?\u003c/p\u003e\u003ch3 id=\"pushing-to-several-remotes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pushing-to-several-remotes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePushing to several remotes\u003c/h3\u003e\u003cp\u003eOne strategy to not lose the content of git repos is to push to several remotes (say, a GitHub \u003cem\u003eand\u003c/em\u003e a GitLab repository).It is also great to have a remote to push to when one of them, say GitHub, is down.\u003c/p\u003e\u003ch3 id=\"backing-up-entire-repositories-issues-included\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#backing-up-entire-repositories-issues-included\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBacking up entire repositories (issues included!)\u003c/h3\u003e\u003cp\u003eThe GitHub documentation explains that \u003ca href=\"https://docs.github.com/en/repositories/archiving-a-github-repository/backing-up-a-repository\"\u003e\u0026ldquo;To download an archive of your repository, you can use the API for user or organization migrations.\u0026rdquo;\u003c/a\u003e.The archives in question contains both the git repo (so, your code) but \u003cem\u003ealso issues and PRs\u003c/em\u003e as JSON data.Having a complete repository archive is crucial as a GitHub repository is used to not only store the code but also project management aspects of package maintenance.\u003c/p\u003e\u003cp\u003eUpdate: we\u0026rsquo;ve made the code we use to download archives of repositories available in the R package \u003ca href=\"https://docs.ropensci.org/gitcellar/\"\u003egitcellar\u003c/a\u003e.\u003c/p\u003e\u003ch4 id=\"listing-repositories-to-back-up\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#listing-repositories-to-back-up\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eListing repositories to back-up\u003c/h4\u003e\u003cp\u003eListing all repositories in an organization might look like\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003egh\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egh\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s\"\u003e\u0026#34;/orgs/{org}/repos\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eorg\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;ropensci\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;all\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eper_page\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e100\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003e.limit\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eInf\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u0026gt;\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003epurrr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003emap_chr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eHowever depending on the scope of your \u003ca href=\"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token\"\u003ePersonal Access Token\u003c/a\u003e, this might miss private repositories.You could manually list private repositories in something like a text file.\u003c/p\u003e\u003cp\u003eBy the way, regarding GitHub Personal Access Tokens and R especially with the \u003ccode\u003egh\u003c/code\u003e package, we recommend\u003c/p\u003e\u003cul\u003e\u003cli\u003ethe \u003ca href=\"https://usethis.r-lib.org/articles/git-credentials.html\"\u003eusethis vignette \u0026ldquo;Managing Git(Hub) Credentials\u0026rdquo;\u003c/a\u003e;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://blog.djnavarro.net/posts/2021-08-08_git-credential-helpers/\"\u003eDanielle Navarro\u0026rsquo;s blog post \u0026ldquo;Managing GitHub credentials from R, difficulty level linux\u0026rdquo;\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eNo matter where you run your code that uses a GitHub Personal Access Token, ensure that PAT is safe (for example, store it as a GitHub Actions secret, not in clear text in the repository).\u003c/p\u003e\u003ch4 id=\"creating-and-collecting-repo-archives\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#creating-and-collecting-repo-archives\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCreating and collecting repo archives\u003c/h4\u003e\u003cp\u003eWe\u0026rsquo;ve found that it\u0026rsquo;s best to launch one migration per repository:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emagick_migration\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003egh\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egh\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s\"\u003e\u0026#34;POST /orgs/{org}/migrations\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eorg\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;ropensci\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003erepositories\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eas.list\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;magick\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eas opposed to creating one gigantic migration archive per organization.\u003c/p\u003e\u003cp\u003eThis code snippet above launches the creation of the GitHub archive.After waiting a bit one can inquire about its status, and once it\u0026rsquo;s exported, download the archive:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003emigration_url\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003emigration[[\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;url\u0026#34;\u003c/span\u003e\u003cspan class=\"n\"\u003e]]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erepo\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;ropensci_magick\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eget_migration_state\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emigration_url\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003estatus\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003egh\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003egh\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emigration_url\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003estatus\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003estate\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kr\"\u003ewhile\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eget_migration_state\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emigration_url\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e!=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;exported\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Waiting for export to complete...\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eSys.sleep\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e60\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Download\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ehandle\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ecurl\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ehandle_setheaders\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003ecurl\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003enew_handle\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efollowlocation\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s\"\u003e\u0026#34;Authorization\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003epaste\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;token\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eSys.getenv\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;GITHUB_PAT\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s\"\u003e\u0026#34;Accept\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;application/vnd.github.v3+json\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eurl\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esprintf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;%s/archive\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emigration_url\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ereq\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ecurl\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ecurl_fetch_memory\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eurl\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ehandle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ehandle\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eheaders\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ecurl\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eparse_headers_list\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ereq\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eheaders\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efinal_url\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003eheaders\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003elocation\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003earchive_folder\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esprintf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;archive-%s\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erepo\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efs\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003edir_create\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003earchive_folder\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecurl\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ecurl_download\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003efinal_url\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efile.path\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003earchive_folder\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003esprintf\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;%s_migration_archive.tar.gz\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erepo\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAbove we downloaded each repo archive in a specific folder, \u003ccode\u003earchive-ropensci_magick/ropensci_magick_migration_archive.tar.gz\u003c/code\u003e as it was the file structure that worked best with the S3 storage we then uploaded the archive to.\u003c/p\u003e\u003ch3 id=\"saving-repository-archives\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#saving-repository-archives\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSaving repository archives\u003c/h3\u003e\u003cp\u003eTo store the backups online, there are several cheap and convenient storage services with an S3 compatible API, such as \u003ca href=\"https://blog.djnavarro.net/posts/2022-03-17_using-aws-s3-in-r/\"\u003eAmazon S3\u003c/a\u003e or \u0026ldquo;Digital Ocean spaces\u0026rdquo;.These services can be interfaced using any S3 client, including R packages such as arrow.\u003c/p\u003e\u003ch3 id=\"regularly-running-all-these-steps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#regularly-running-all-these-steps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRegularly running all these steps\u003c/h3\u003e\u003cp\u003eIdeally the backups should be fairly regular.We opted for weekly backups.The scripts creating, downloading and uploading the archives could run on GitHub Actions (which should work until a GitHub disaster \u0026#x1f605;) or some other service.\u003c/p\u003e\u003cp\u003eAll in all it could be quite cheap to run the code and store the archives.As a bonus one could imagine using the archives for analyses over one or a few GitHub organizations: after having collected all issues as JSON files, no need to perform GitHub API calls to identify the most prolific bug reporters. \u0026#x1f4ca;\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn summary, we recommend balancing trust with security when choosing what rights to give to indidivual organization members (what role for this person? what \u0026ldquo;base permission\u0026rdquo; for all organization members?).We also recommend promoting two-factor authentication (2FA) as well as the use of password managers.Lastly, we suggest regularly backing up GitHub repositories via using GitHub V3 API migration endpoint and a cloud storage service.\u003c/p\u003e\u003cp\u003eWhat are your own safeguards? Maybe you use a self-hosted GitLab instance and have more control?In any case, we welcome comments below!\u003c/p\u003e","url":"https://ropensci.org/blog/2022/03/22/safeguards-and-backups-for-github-organizations/","date_published":"2022-03-22T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/3p0b2-4s604","title":"rOpenSci News Digest, March 2022","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2022/03/18/ropensci-news-digest-march-2022\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"r-universe-gets-advanced-search\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#r-universe-gets-advanced-search\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eR-universe gets advanced search!\u003c/h3\u003e\u003cp\u003eThe landing page for rOpenSci\u0026rsquo;s \u003ca href=\"https://r-universe.dev\"\u003eR-universe\u003c/a\u003e platform has gotten a makeover to facilitate easy searching through thousands of available R packages and articles. Discover new content by searching for keywords in package descriptions, authors, topics, vignettes, etc.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/03/18/ropensci-news-digest-march-2022/landing.jpeg\"\t\t\talt=\"New R-universe landing page. There is a search bar. Below it are the logos of organizations. Above it is an animated rocket icon.\"\u003e\u003c/figure\u003e\u003cp\u003eGive it a try at \u003ca href=\"https://r-universe.dev\"\u003ehttps://r-universe.dev\u003c/a\u003e!\u003c/p\u003e\u003ch3 id=\"next-coworking-sessions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#next-coworking-sessions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNext coworking sessions\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on first Tuesdays! Hosted by Steffi LaZerte and various community hosts. Everyone welcome. No RSVP needed. Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cp\u003eOur next sessions are:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2022-04/\"\u003eTuesday, 05 April 2022 9 AM Australian Western / 1:00 UTC \u003c/a\u003e \u0026ldquo;Making figures sparkle\u0026rdquo; \u003cem\u003eHosted by \u003ca href=\"/author/nicholas-tierney/\"\u003eNick Tierney\u003c/a\u003e and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eCowork on a project of your choice;\u003c/li\u003e\u003cli\u003eWork on some figures to make them glitter;\u003c/li\u003e\u003cli\u003eOr ask our community host, Nick Tierney (author of data visualization packages including rOpenSci package \u003ca href=\"https://docs.ropensci.org/visdat/\"\u003evisdat\u003c/a\u003e) for some tips to make your figures sparkle!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2022-05/\"\u003eTuesday, 03 May 2022 9 AM North American Pacific / 16:00 UTC\u003c/a\u003e \u0026ldquo;Why be a reviewer of R packages?\u0026rdquo; \u003cem\u003eHosted by a community host (TBA) and \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eCowork on a project of your choice;\u003c/li\u003e\u003cli\u003ePrepare an R package for rOpenSci software review, work on reviewer comments, or review a package;\u003c/li\u003e\u003cli\u003eOr ask our community host (TBA) what it\u0026rsquo;s like to review packages!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out about more \u003ca href=\"/events\"\u003eevents\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following four packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/commonmark\"\u003ecommonmark\u003c/a\u003e, developed by Jeroen Ooms: The CommonMark specification defines a rationalized version of markdown syntax. This package uses the cmark reference implementation for converting markdown text into various formats including html, latex and groff man. In addition it exposes the markdown parse tree in xml format. Also includes opt-in support for GFM extensions including tables, autolinks, and strikethrough text.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=commonmark\"\u003eCRAN\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/gendercoder\"\u003egendercoder\u003c/a\u003e, developed by Emily Kothe together with Jennifer Beaudry, Felix Singleton Thorn, Rhydwyn McGuire, Nicholas Tierney, and Mathew Ling: Provides functions and dictionaries for recoding of freetext gender responses into more consistent categories. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/435\"\u003ereviewed\u003c/a\u003e by Julia Silge, and Elin Waring.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/occCite\"\u003eoccCite\u003c/a\u003e, developed by Hannah L. Owens together with Cory Merow, Brian Maitner, Jamie M. Kass, Vijay Barve, and Robert P. Guralnick: Facilitates the gathering of biodiversity occurrence data from disparate sources. Metadata is managed throughout the process to facilitate reporting and enhanced ability to repeat analyses.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=occCite\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/407\"\u003ereviewed\u003c/a\u003e by Damiano Oldoni.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/universe\"\u003euniverse\u003c/a\u003e, developed by Jeroen Ooms: Utilities to interact with the R-universe platform. Includes functions to manage local package repositories, as well as API wrappers for retrieving data and metadata about packages in r-universe.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following ten packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/commonmark\" title=\"High Performance CommonMark and Github Markdown Rendering in R\"\u003ecommonmark\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/commonmark/releases/tag/v1.8.0\"\u003e\u003ccode\u003ev1.8.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/biomartr\" title=\"Genomic Data Retrieval\"\u003ebiomartr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/biomartr/releases/tag/v1.0.2\"\u003e\u003ccode\u003ev1.0.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/git2r\" title=\"Provides Access to Git Repositories\"\u003egit2r\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/git2r/releases/tag/v0.30.1\"\u003e\u003ccode\u003ev0.30.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/jqr\" title=\"Client for jq, a JSON Processor\"\u003ejqr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/jqr/releases/tag/v1.2.3\"\u003e\u003ccode\u003ev1.2.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nasapower\" title=\"NASA POWER API Client\"\u003enasapower\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nasapower/releases/tag/v4.0.6\"\u003e\u003ccode\u003ev4.0.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/occCite\" title=\"Querying and Managing Large Biodiversity Occurrence Datasets\"\u003eoccCite\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/occCite/releases/tag/v0.5.2\"\u003e\u003ccode\u003ev0.5.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rsnps\" title=\"Get SNP (Single-Nucleotide Polymorphism) Data on the Web\"\u003ersnps\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rsnps/releases/tag/v0.5.0\"\u003e\u003ccode\u003ev0.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.5.0\"\u003e\u003ccode\u003e0.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Workflows\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/0.11.0\"\u003e\u003ccode\u003e0.11.0\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/tic\" title=\"CI-Agnostic Workflow Definitions\"\u003etic\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tic/releases/tag/v0.12.0\"\u003e\u003ccode\u003ev0.12.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are seventeen recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/474\"\u003equalR\u003c/a\u003e, An R package to download Sao Paulo and Rio de Janeiro air pollution data. Submitted by \u003ca href=\"http://randroll.wordpress.com\"\u003eMario Gavidia Calderón\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/435\"\u003egendercoder\u003c/a\u003e, Recodes Sex/Gender Descriptions Into A Standard Set. Submitted by \u003ca href=\"http://emilykothe.com\"\u003eEmily Kothe\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/407\"\u003eoccCite\u003c/a\u003e, Querying and Managing Large Biodiversity Occurrence Datasets. Submitted by \u003ca href=\"http://hannahlowens.weebly.com/\"\u003eHannah Owens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/498\"\u003eEDIutils\u003c/a\u003e, An API Client for the Environmental Data Initiative Repository. Submitted by \u003ca href=\"https://github.com/clnsmth\"\u003eColin Smith\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/492\"\u003egbifdb\u003c/a\u003e, Local Database Interface to GBIF. Submitted by \u003ca href=\"http://carlboettiger.info\"\u003eCarl Boettiger\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/470\"\u003etidyqpcr\u003c/a\u003e, Quantitative PCR Analysis with the Tidyverse. Submitted by \u003ca href=\"https://scholar.google.co.uk/citations?user=7FLIJBAAAAAJ\u0026amp;hl=en\"\u003eEdward Wallace\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/471\"\u003eOmicsMetaData\u003c/a\u003e, OmicsMetaData: an R-package for interoperable and re-usable biodiversity \u0026lsquo;omics (meta)data. Submitted by \u003ca href=\"https://github.com/msweetlove\"\u003eMaxime Sweetlove\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román-Palacios\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/418\"\u003eepair\u003c/a\u003e, Grabs data from EPA API, simplifies getting pollutant data. Submitted by \u003ca href=\"https://github.com/GLOrozcoM\"\u003eLeo Orozco-Mulfinger\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/475\"\u003ecanaper\u003c/a\u003e, Categorical Analysis of Neo- And Paleo-Endemism. Submitted by \u003ca href=\"https://joelnitta.com\"\u003eJoel Nitta\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/433\"\u003eROriginStamp\u003c/a\u003e, Interface to OriginStamp API to Obtain Trusted Time Stamps. Submitted by \u003ca href=\"https://github.com/rkrug\"\u003eRainer M Krug\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/505\"\u003enpi\u003c/a\u003e, Access the U.S. National Provider Identifier Registry API. Submitted by \u003ca href=\"https://frankfarach.com\"\u003eFrank Farach\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"http://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/443\"\u003erdbhapi\u003c/a\u003e, Interface to DBH-API. Submitted by \u003ca href=\"https://hkdir.no/\"\u003eMarija Ninic\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eOne use case of our packages and resources has been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://discuss.ropensci.org/t/use-rtweet-to-manage-lists-and-who-you-follow/2830\"\u003eUse rtweet to manage lists and who you follow\u003c/a\u003e. Reported by Steph Locke.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eThe \u003ca href=\"https://docs.ropensci.org/rrricanes/\"\u003errricanes package\u003c/a\u003e is looking for a new maintainer!rrricanes is a web scraper for Atlantic and east Pacific hurricanes and tropical storms.See \u003ca href=\"https://github.com/ropensci/rrricanes/issues/127\"\u003ethe corresponding GitHub issue\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eYou can refer to:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://devguide.ropensci.org/changing-maintainers.html\"\u003eour guidance on \u003cem\u003eChanging package maintainers\u003c/em\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://devguide.ropensci.org/curationpolicy.html\"\u003eour \u003cem\u003ePackage Curation Policy\u003c/em\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"get-inspired-by-the-tidyverse-spring-cleaning\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#get-inspired-by-the-tidyverse-spring-cleaning\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGet inspired by the tidyverse spring cleaning\u003c/h3\u003e\u003cp\u003eThe tidyverse packages have been undergoing spring cleaning helped by a \u003ca href=\"https://github.com/r-lib/usethis/blob/19c9e5e43ab430ca0ff3e3075b43b869270e01f0/R/tidy-upkeep.R?rgh-link-date=2022-03-04T14%3A53%3A56Z#L31\"\u003epublic checklist\u003c/a\u003e that is worth a read (example in the \u003ca href=\"https://github.com/tidymodels/recipes/issues/922\"\u003etidymodels package repository\u003c/a\u003e).Some items are specific to tidyverse-affiliated packages, but not all of them.Others have equivalent e.g. you could run \u003ccode\u003edesc::desc_normalize()\u003c/code\u003e instead of \u003ccode\u003eusethis::use_tidy_description()\u003c/code\u003e.How many boxes could you already check, how many could you check in a short time for packages of yours? \u0026#x1f609;\u003c/p\u003e\u003cp\u003eOn a more meta level, the idea of checklists in issues like with \u003ccode\u003eusethis::use_release_issue()\u003c/code\u003e is quite neat and generalizable.\u003c/p\u003e\u003ch3 id=\"roxygen2-tips\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#roxygen2-tips\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eroxygen2 tips\u003c/h3\u003e\u003cp\u003eOne of the items in the aforementioned checklist is \u003ccode\u003eusethis::use_roxygen_md()\u003c/code\u003e for switching to use Markdown in roxygen2 docs.Much easier for adding bold text, code, etc.\u003c/p\u003e\u003cp\u003eAnother good thing to know is that the roxygen2 pkgdown website has guidance on \u003ca href=\"https://roxygen2.r-lib.org/articles/rd.html#do-repeat-yourself\"\u003erepeating yourself\u003c/a\u003e in your docs (\u003ca href=\"https://www.writethedocs.org/blog/newsletter-april-2020/#book-club-an-intro-to-every-page-is-page-one\"\u003e\u0026ldquo;Every page is page one\u0026rdquo;\u003c/a\u003e! Or, as written in our \u003ca href=\"https://devguide.ropensci.org/building.html\"\u003epackaging guide\u003c/a\u003e, \u0026ldquo;the principle of multiple points of entry i.e. to take into account the fact that any piece of documentation may be the first encounter the user has with the package and/or the tool/data it wraps.\u0026rdquo;).See also the blog post \u003ca href=\"https://www.garrickadenbuie.com/blog/dry-vignette-and-readme/\"\u003e\u0026ldquo;Reuse Rmd fragments in package vignettes, README, blog posts and more\u0026rdquo;\u003c/a\u003e by Garrick Aden-Buie.\u003c/p\u003e\u003cp\u003eLastly, do you know about katex by Jeroen Ooms for \u003ca href=\"https://docs.ropensci.org/katex/reference/math_to_rd.html\"\u003edisplaying math in R documentation\u003c/a\u003e?\u003c/p\u003e\u003ch3 id=\"alternativescomplements-to-pkgdown-for-package-docs\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#alternativescomplements-to-pkgdown-for-package-docs\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAlternatives/complements to pkgdown for package docs?\u003c/h3\u003e\u003cp\u003eDocumentation websites for rOpenSci packages are happily built with pkgdown.However depending on your preferences or needs (e.g. what if you want to integrate the docs of your R packages with docs of other non R elements of your pipeline) you might like:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/r2readthedocs/\"\u003er2readthedocs\u003c/a\u003e by Mark Padgham to convert R package documentation to a ‘readthedocs’ website. It is used for documenting \u003ca href=\"https://readthedocs.org/projects/ropensci-review-tools/\"\u003erOpenSci review tools\u003c/a\u003e.\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://altdoc.etiennebacher.com/#/\"\u003ealtdoc\u003c/a\u003e by Etienne Bacher, that provides helper functions to use docute, docsify, and mkdocs.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/03/18/ropensci-news-digest-march-2022/","date_published":"2022-03-18T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/39e8t-q2b94","title":"rOpenSci News Digest, February 2022","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2022/02/18/ropensci-news-digest-february-2022\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"ropensci-is-hiring-its-next-community-manager\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-is-hiring-its-next-community-manager\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci is hiring its next Community Manager!\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eCome be part of making our great community even better;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eHelp start a new program promoting diverse leadership in open source;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eJoin a remote, flexible, global, friendly community and team!\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eMore details \u003ca href=\"/careers/community-manager-2022/\"\u003ein the job ad\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"next-coworking-sessions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#next-coworking-sessions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNext coworking sessions\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on 1st Tuesdays! Hosted by Steffi LaZerte and various community hosts. Everyone welcome. No RSVP needed. Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cp\u003eOur next sessions are:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2022-03/\"\u003eTuesday, 01 March 2022, 9 AM North American Pacific / 17:00 UTC\u003c/a\u003e \u0026ldquo;Changing package maintainers\u0026rdquo;, \u003cem\u003eHosted by Steffi LaZerte and Hannah Owens\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eCowork on a project of your choice;\u003c/li\u003e\u003cli\u003eTake this time to ensure your packages are understandable to potential collaborators (or future maintainers);\u003c/li\u003e\u003cli\u003eOr ask our community host, Hannah Owens, about her experience taking over maintenance of the rOpenSci spocc package.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2022-04/\"\u003eTuesday, 05 April 2022 9 AM Australian Western / 1:00 UTC \u003c/a\u003e \u0026ldquo;Making figures sparkle\u0026rdquo; \u003cem\u003eHosted by Steffi LaZerte and Nick Tierney\u003c/em\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003eCowork on a project of your choice;\u003c/li\u003e\u003cli\u003eWork on some figures to make them glitter;\u003c/li\u003e\u003cli\u003eOr ask our community host, Nick Tierney (author of data visualization packages including rOpenSci package \u003ca href=\"https://docs.ropensci.org/visdat/\"\u003evisdat\u003c/a\u003e) for some tips to make your figures sparkle!\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out about more \u003ca href=\"/events\"\u003eevents\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"suggested-reading\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#suggested-reading\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSuggested reading\u003c/h3\u003e\u003cp\u003e\u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e (Research Software Engineer with rOpenSci) and \u003ca href=\"/author/karthik-ram/\"\u003eKarthik Ram\u003c/a\u003e (rOpenSci executive director) authored a commentary \u003ca href=\"https://journal.r-project.org/archive/2021/RJ-2021-110/index.html\"\u003e\u0026ldquo;The R Developer Community Does Have a Strong Software Engineering Culture\u0026rdquo;\u003c/a\u003e in the latest issue of The R Journal edited by Di Cook,as a response to the discussion paper \u003ca href=\"https://journal.r-project.org/archive/2021/RJ-2021-108/index.html\"\u003e\u0026ldquo;Software Engineering and R Programming: A Call for Research\u0026rdquo;\u003c/a\u003e by \u003ca href=\"author/melina-vidoni/\"\u003eMelina Vidoni\u003c/a\u003e (who\u0026rsquo;s an Associate editor of rOpenSci Software Peer Review).\u003c/p\u003e\u003cp\u003eReady for more? Two other interesting reads are the commentaries \u003ca href=\"https://journal.r-project.org/archive/2021/RJ-2021-109/index.html\"\u003e\u0026ldquo;We Need Trustworthy R Packages\u0026rdquo;\u003c/a\u003e by \u003ca href=\"/author/will-landau/\"\u003eWill Landau\u003c/a\u003e (who maintains rOpenSci packages \u003ca href=\"https://docs.ropensci.org/targets/\"\u003etargets\u003c/a\u003e and \u003ca href=\"https://docs.ropensci.org/drake/\"\u003edrake\u003c/a\u003e), and \u003ca href=\"https://journal.r-project.org/archive/2021/RJ-2021-111/index.html\"\u003e\u0026ldquo;The R Quest: from Users to Developers\u0026rdquo;\u003c/a\u003e by Simon Urbanek.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following three packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/frictionless\"\u003efrictionless\u003c/a\u003e, developed by Peter Desmet together with Damiano Oldoni: Read and write Frictionless Data Packages. A Data Package (\u003ca href=\"https://specs.frictionlessdata.io/data-package/\"\u003ehttps://specs.frictionlessdata.io/data-package/\u003c/a\u003e) is a simple container format and standard to describe and package a collection of (tabular) data. It is typically used to publish FAIR (\u003ca href=\"https://www.go-fair.org/fair-principles/\"\u003ehttps://www.go-fair.org/fair-principles/\u003c/a\u003e) and open datasets.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=frictionless\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/495\"\u003ereviewed\u003c/a\u003e by Beatriz Milz, and João Martins.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/rfema\"\u003erfema\u003c/a\u003e, developed by Dylan Turner: \u003ccode\u003erfema\u003c/code\u003e allows users to access The Federal Emergency Management Agencys (FEMA) publicly available data through their API. The package provides a set of functions to easily navigate and access data from the National Flood Insurance Program along with FEMAs various disaster aid programs, including the Hazard Mitigation Grant Program, the Public Assistance Grant Program, and the Individual Assistance Grant Program. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/484\"\u003ereviewed\u003c/a\u003e by François Michonneau, and Marcus Beck.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/tidytags\"\u003etidytags\u003c/a\u003e, developed by K. Bret Staudt Willet together with Joshua M. Rosenberg: The tidytags package coordinates the simplicity of collecting tweets over time with a Twitter Archiving Google Sheet (TAGS; \u003ca href=\"https://tags.hawksey.info/\"\u003ehttps://tags.hawksey.info/\u003c/a\u003e) and the utility of the rtweet package (\u003ca href=\"https://docs.ropensci.org/rtweet/\"\u003ehttps://docs.ropensci.org/rtweet/\u003c/a\u003e) for processing and preparing additional Twitter metadata. tidytags also introduces functions developed to facilitate systematic yet flexible analyses of data from Twitter. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/382\"\u003ereviewed\u003c/a\u003e by Lluís Revilla Sancho, and Marion Louveaux.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following fifteen packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/frictionless\" title=\"Read and Write Frictionless Data Packages\"\u003efrictionless\u003c/a\u003e (\u003ca href=\"https://github.com/frictionlessdata/frictionless-r/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/av\" title=\"Working with Audio and Video in R\"\u003eav\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/av/releases/tag/v0.7.0\"\u003e\u003ccode\u003ev0.7.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/c14bazAAR\" title=\"Download and Prepare C14 Dates from Different Source Databases\"\u003ec14bazAAR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/c14bazAAR/releases/tag/3.4.0\"\u003e\u003ccode\u003e3.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gittargets\" title=\"Data Version Control for the Targets Package\"\u003egittargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gittargets/releases/tag/0.0.3\"\u003e\u003ccode\u003e0.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/katex\" title=\"Rendering Math to HTML, MathML, or R-Documentation Format\"\u003ekatex\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/katex/releases/tag/v1.4.0\"\u003e\u003ccode\u003ev1.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nasapower\" title=\"NASA POWER API Client\"\u003enasapower\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nasapower/releases/tag/v4.0.4\"\u003e\u003ccode\u003ev4.0.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmdata\" title=\"Import OpenStreetMap Data as Simple Features or Spatial Objects\"\u003eosmdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmdata/releases/tag/v0.1.9\"\u003e\u003ccode\u003ev0.1.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/parzer\" title=\"Parse Messy Geographic Coordinates\"\u003eparzer\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/parzer/releases/tag/v0.4.1\"\u003e\u003ccode\u003ev0.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pdftools\" title=\"Text Extraction, Rendering and Converting of PDF Documents\"\u003epdftools\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/pdftools/releases/tag/v3.1.0\"\u003e\u003ccode\u003ev3.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rfema\" title=\"Access the openFEMA API\"\u003erfema\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rfema/releases/tag/v1.0.0\"\u003e\u003ccode\u003ev1.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rgbif\" title=\"Interface to the Global Biodiversity Information Facility API\"\u003ergbif\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rgbif/releases/tag/v3.7.0\"\u003e\u003ccode\u003ev3.7.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/riem\" title=\"Accesses Weather Data from the Iowa Environment Mesonet\"\u003eriem\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/riem/releases/tag/v0.3.0\"\u003e\u003ccode\u003ev0.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/terrainr\" title=\"Landscape Visualizations in R and Unity\"\u003eterrainr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/terrainr/releases/tag/v0.6.0\"\u003e\u003ccode\u003ev0.6.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tic\" title=\"CI-Agnostic Workflow Definitions\"\u003etic\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tic/releases/tag/v0.11.4\"\u003e\u003ccode\u003ev0.11.4\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/tidytags\" title=\"Importing and Analyzing Twitter Data Collected with Twitter Archiving Google Sheets\"\u003etidytags\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidytags/releases/tag/v0.3.0\"\u003e\u003ccode\u003ev0.3.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are twenty recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/495\"\u003efrictionless\u003c/a\u003e, Read and Write Frictionless Data Packages. Submitted by \u003ca href=\"https://orcid.org/0000-0002-8442-8025\"\u003ePeter Desmet\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/484\"\u003erfema\u003c/a\u003e, Access the openFEMA API. Submitted by \u003ca href=\"http://dylanturner.org\"\u003eDylan Turner\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/382\"\u003etidytags\u003c/a\u003e, Simple Collection and Powerful Analysis of Twitter Data. Submitted by \u003ca href=\"http://bretsw.com\"\u003eBret Staudt Willet\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/492\"\u003egbifdb\u003c/a\u003e, Local Database Interface to GBIF. Submitted by \u003ca href=\"http://carlboettiger.info\"\u003eCarl Boettiger\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/470\"\u003etidyqpcr\u003c/a\u003e, Quantitative PCR Analysis with the Tidyverse. Submitted by \u003ca href=\"https://scholar.google.co.uk/citations?user=7FLIJBAAAAAJ\u0026amp;hl=en\"\u003eEdward Wallace\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/435\"\u003egendercoder\u003c/a\u003e, Recodes Sex/Gender Descriptions Into A Standard Set. Submitted by \u003ca href=\"http://emilykothe.com\"\u003eEmily Kothe\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/474\"\u003equalR\u003c/a\u003e, An R package to download Sao Paulo and Rio de Janeiro air pollution data. Submitted by \u003ca href=\"http://randroll.wordpress.com\"\u003eMario Gavidia Calderón\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/471\"\u003eOmicsMetaData\u003c/a\u003e, OmicsMetaData: an R-package for interoperable and re-usable biodiversity \u0026lsquo;omics (meta)data. Submitted by \u003ca href=\"https://github.com/msweetlove\"\u003eMaxime Sweetlove\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román-Palacios\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/418\"\u003eepair\u003c/a\u003e, Grabs data from EPA API, simplifies getting pollutant data. Submitted by \u003ca href=\"https://github.com/GLOrozcoM\"\u003eLeo Orozco-Mulfinger\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSix at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/498\"\u003eEDIutils\u003c/a\u003e, An API Client for the Environmental Data Initiative Repository. Submitted by \u003ca href=\"https://github.com/clnsmth\"\u003eColin Smith\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/485\"\u003eReLTER\u003c/a\u003e, An interface to the eLTER for the R statistical programming environment. Submitted by \u003ca href=\"https://www.cnr.it/people/alessandro.oggioni\"\u003eAlessandro Oggioni\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/475\"\u003ecanaper\u003c/a\u003e, Categorical Analysis of Neo- And Paleo-Endemism. Submitted by \u003ca href=\"https://joelnitta.com\"\u003eJoel Nitta\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/433\"\u003eROriginStamp\u003c/a\u003e, Interface to OriginStamp API to Obtain Trusted Time Stamps. Submitted by \u003ca href=\"https://github.com/rkrug\"\u003eRainer M Krug\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/407\"\u003eoccCite\u003c/a\u003e, Querying and Managing Large Biodiversity Occurrence Datasets. Submitted by \u003ca href=\"http://hannahlowens.weebly.com/\"\u003eHannah Owens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/502\"\u003eoctolog\u003c/a\u003e, Better Github Action Logging. Submitted by \u003ca href=\"https://github.com/assignUser\"\u003eJacob Wujciak-Jens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"http://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/443\"\u003erdbhapi\u003c/a\u003e, Interface to DBH-API. Submitted by \u003ca href=\"https://hkdir.no/\"\u003eMarija Ninic\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"other-topics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-topics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOther topics\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2022/02/15/gghdr\"\u003eA Journey to gghdr\u003c/a\u003e by Sayani Gupta. gghdr: An R package for graphing highest density regions in ggplot2.\u003cfigure\u003e\u003cimg src=\"/blog/2022/02/18/ropensci-news-digest-february-2022/opengraph.png\" width=\"400\"\u003e\u003c/figure\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/01/31/package-build-failures\"\u003eA Blend of Package Build Failures\u003c/a\u003e by Maëlle Salmon. Some common and less common problems we saw in logs of package and pkgdown website builds.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/02/01/pkgcheck-action\"\u003epkgcheck now available as a GitHub action!\u003c/a\u003e by Mark Padgham, and Jacob Wujciak-Jens. All packages submitted for peer-review with rOpenSci are checked by our   pkgcheck package. This post describes a new GitHub action which can be used to run pkgcheck..\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eOne use cases of our packages and resources have been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://discuss.ropensci.org/t/calculating-us-residential-segregation-indices-in-a-reproducible-pipeline/2815\"\u003eCalculating US Residential Segregation Indices in A Reproducible Pipeline\u003c/a\u003e. Reported by Boyi Guo.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"make-the-best-out-of-your-package-logo\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#make-the-best-out-of-your-package-logo\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMake the best out of your package logo\u003c/h3\u003e\u003cp\u003eHave you designed (or commissioned) a beautiful logo for your package?Use \u003ca href=\"https://usethis.r-lib.org/reference/use_logo.html\"\u003e\u003ccode\u003eusethis::use_logo()\u003c/code\u003e\u003c/a\u003e that will enforce a specific size and save it under \u003ccode\u003eman/figures/logo.png\u003c/code\u003e, as well as providing you with the Markdown code to insert your logo in your package repo README.Why do this? This has two advantages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eIf you have a package-level doc (i.e. a manual page for \u003ccode\u003e?package-name\u003c/code\u003e), or create one via \u003ca href=\"https://usethis.r-lib.org/reference/use_package_doc.html\"\u003e\u003ccode\u003eusethis::use_package_doc()\u003c/code\u003e\u003c/a\u003e, roxygen2 will automatically add the logo to that doc page. Type \u003ccode\u003e?usethis\u003c/code\u003e in your R console for an example.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eIf you use \u003ca href=\"https://www.tidyverse.org/blog/2021/12/pkgdown-2-0-0/#bootstrap-5\"\u003epkgdown BS5 templates\u003c/a\u003e, which is the case if your package is part of rOpenSci suite, your package logo will appear on all pages, as well as in social media cards.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"resources-about-testing\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#resources-about-testing\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eResources about testing\u003c/h3\u003e\u003cp\u003eSome links about testing your package\u0026hellip;\u003c/p\u003e\u003cul\u003e\u003cli\u003eWhen wondering what good tests look like (spoiler: they look obvious): \u003ca href=\"https://mtlynch.io/good-developers-bad-tests/\"\u003eWhy Good Developers Write Bad Unit Tests\u003c/a\u003e (seen via \u003ca href=\"https://github.com/hadley/r-pkgs/issues/551\"\u003ean issue in the R packages book repo\u003c/a\u003e).\u003c/li\u003e\u003cli\u003eWhen things go well in one testing context (say, \u003ccode\u003edevtools::test()\u003c/code\u003e) but not in another one (say, \u003ccode\u003edevtools::check()\u003c/code\u003e): \u003ca href=\"https://github.com/hadley/r-pkgs/issues/483\"\u003ea conversation around usual suspects\u003c/a\u003e. One prevention strategy is to read and apply the advice in testthat \u003ca href=\"https://testthat.r-lib.org/articles/test-fixtures.html\"\u003eTest fixtures vignette\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eWhen having to put helper code somewhere: \u003ca href=\"https://blog.r-hub.io/2020/11/18/testthat-utility-belt/\"\u003eHelper code and files for your testthat tests\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eThat interacts with a database: \u003ca href=\"https://docs.ropensci.org/dittodb/\"\u003edittodb by Jonathan Keane and Mauricio Vargas\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eThat interacts with a web resource: \u003ca href=\"https://books.ropensci.org/http-testing\"\u003eHTTP testing in R\u003c/a\u003e (or the more recent \u003ca href=\"https://enpiar.com/httptest2/\"\u003ehttptest2 package\u003c/a\u003e that is like httptest, but for \u003ca href=\"https://httr2.r-lib.org/\"\u003ehttr2\u003c/a\u003e).\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"the-state-of-continuous-integration-ci-for-r-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-state-of-continuous-integration-ci-for-r-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe state of continuous integration (CI) for R packages\u003c/h3\u003e\u003cp\u003eWe no longer recommend using \u003ca href=\"https://ropensci.org/blog/2020/11/19/moving-away-travis/\"\u003eTravis CI\u003c/a\u003e.The development version of our dev guide has \u003ca href=\"https://devdevguide.netlify.app/ci.html\"\u003eupdated advice on CI\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you adopt GitHub Actions,\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eHave a look at the \u003ca href=\"https://github.com/r-lib/actions/releases\"\u003echangelog for r-lib/actions\u003c/a\u003e if these are the actions you use;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eDo not miss the tech note \u003ca href=\"/blog/2022/02/01/pkgcheck-action/\"\u003e\u0026ldquo;pkgcheck now available as a GitHub action!\u0026rdquo;\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"miscellaneous-package-building-advice\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#miscellaneous-package-building-advice\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMiscellaneous package building advice\u003c/h3\u003e\u003cp\u003eSee the tech note \u003ca href=\"/blog/2022/01/31/package-build-failures/\"\u003eA Blend of Package Build Failures\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/02/18/ropensci-news-digest-february-2022/","date_published":"2022-02-18T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/scs7p-rnd48","title":"A Journey to gghdr","language":"en","authors":[{"name":"Sayani Gupta","url":"https://orcid.org/0000-0003-0643-5358","avatar":"https://github.com/Sayani07.png","_role":["author"]}],"tags":["data visualization","graphical summaries","highest density region","hdrcde","R","packages","ozunconf","community"],"content_html":"\u003cblockquote\u003e\u003cp\u003eThey may forget what you said, but they will never forget how you made them feel.\u003c/p\u003e\u003cfooter\u003eCarl W. Buehner\u003c/footer\u003e\u003c/blockquote\u003e\u003cp\u003eThis was how being a newcomer to \u003ca href=\"https://ozunconf19.ropensci.org/\"\u003erOpenSci OzUnconf 2019\u003c/a\u003e felt. It was incredible to be a part of such a diverse, welcoming and inclusive environment. I thought it would be fun to blog about how it all began, and the twists and turns we experienced along the way as we developed the \u003ca href=\"https://sayani07.github.io/gghdr/\"\u003egghdr\u003c/a\u003e package. The package provides tools for plotting \u003ca href=\"https://www.jstor.org/stable/2684423?seq=1\"\u003ehighest density regions\u003c/a\u003e with ggplot2 and was inspired by the package \u003ca href=\"https://cran.r-project.org/web/packages/hdrcde/index.html\"\u003ehdrcde\u003c/a\u003e developed by \u003ca href=\"https://robjhyndman.com/\"\u003eRob J Hyndman\u003c/a\u003e. The highest density region approach of summarizing a distribution is useful for analyzing multimodal distributions and can be composed of numerous disjoint subsets. For example, the histogram of the highway mileage (\u003ccode\u003ehwy\u003c/code\u003e) data from the mpg dataset (a) shows that cars with 6 cylinders (\u003ccode\u003ecyl\u003c/code\u003e) are bimodally distributed, which is reflected in the highest density region (HDR) boxplot (c) but not in the standard boxplot (b). Hence, we see that HDRs are useful in displaying multimodality in the distribution.\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/02/15/gghdr/mpgBox1-1.png\"\t\t\talt=\"Three plots showing the distribution of hwy by value of cyl. The first plot shows histograms by cyl, the second boxplots by cyl and the third shows highest density region plots. These look like boxes with the edges fading to nothing.\"\u003e\u003c/figure\u003e\u003cp\u003eThe other authors of this package include\u003ca href=\"https://github.com/mitchelloharawild\"\u003eMitchell O\u0026rsquo;Hara-Wild\u003c/a\u003e, \u003ca href=\"https://github.com/sparce\"\u003eStephen Pearce\u003c/a\u003e, \u003ca href=\"https://github.com/Ryo-N7\"\u003eRyo Nakagawara\u003c/a\u003e, \u003ca href=\"https://github.com/dvanic\"\u003eDarya Vanichkina\u003c/a\u003e, \u003ca href=\"https://emitanaka.org/\"\u003eEmi Tanaka\u003c/a\u003e, \u003ca href=\"https://github.com/thomas-fung\"\u003eThomas Fung\u003c/a\u003e and \u003ca href=\"https://github.com/robjhyndman/\"\u003eRob J Hyndman\u003c/a\u003e.\u003c/p\u003e\u003ch1 id=\"initiation\"\u003eInitiation\u003c/h1\u003e\u003c!-- Initially, the aim was to visualize _Highest Density Regions_ (HDR) in one and two dimensions under the [ggplot2](https://ggplot2.tidyverse.org/) framework.  --\u003e\u003cp\u003eSince Rob\u0026rsquo;s paper describing highest density regions was written almost 25 years ago and the package came 15 years ago, the need to reexamine it through the ggplot2 lenses had been lurking around for a while. While I read the paper and attempted using hdrcde, it did feel less powerful not being able to use ggplot2 and the flexibilities that come along with it. Rob himself suggested it would be great to have a ggplot2 framework. I tried it but didn\u0026rsquo;t get a chance to put it all together. There was even a point where \u003ca href=\"https://blog.mitchelloharawild.com/\"\u003eMitch O\u0026rsquo;Hara-Wild\u003c/a\u003e was threatening me that he would get this done overnight if I didn’t (and I bet he would have had he not been raising chickens and bees)! But one fine day, he suggested that the rOpensci ozunconf could be the right place to do this together. I thought this was a brilliant idea as I had read about \u003ca href=\"/author/nicholas-tierney/\"\u003eNick Tierney\u0026rsquo;s\u003c/a\u003e \u003ca href=\"/blog/2017/10/31/ozunconf2017/\"\u003eexperience\u003c/a\u003e earlier and was thrilled to be a part of it.\u003c/p\u003e\u003cp\u003eThis event is quite different from other conferences in the sense that it is mostly invite-only, where past attendees can recommend new ones. Mitch was a participant at \u003ca href=\"https://ozunconf18.ropensci.org/#about\"\u003eOzUnconf 2018\u003c/a\u003e, so he could invite me to work on this project with him at ozunconf 2019. Soon I had applied and we were accepted. Thanks go to the organizers of the ozunconf for the opportunity and excellent management of what has turned out to be a highly stimulating experience.\u003c/p\u003e\u003ch1 id=\"planning-and-execution\"\u003ePlanning and execution\u003c/h1\u003e\u003cp\u003eShortly after we were accepted, Mitch posted the idea on the \u003ca href=\"https://github.com/ropensci/ozunconf19/issues\"\u003erOpenSci Github issues page\u003c/a\u003e. Posting an issue like this is a great place to start a discussion on a rough idea or to learn more or comment on any idea that you find exciting. We brainstormed for a couple of days on how \u003ca href=\"https://github.com/robjhyndman/hdrcde\"\u003ehdrcde\u003c/a\u003e worked and what potential functions and features we would like to have or improve in the new package. The discussion led to a workflow which pretty much looked like this:\u003c/p\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/02/15/gghdr/board.jpg\"\t\t\talt=\"A white board with flow diagrams worked out in red marker. gghdr is in the centre with arrows leading to sections for confint, boxplot, bxplot2d, scatter and cde\"\u003e\u003c/figure\u003e\u003cp\u003eDoing a bit of brainstorming on the project ahead of time helped us to set the expectations, and communicate them to potential team members. Although it is worth mentioning that projects don\u0026rsquo;t need to be fully fleshed out ahead of time - the ozunconf organisers strongly encourage working on projects that you thought of even on that very day.\u003c/p\u003e\u003cp\u003eFast-forward to the first day of the conference! The participants had already suggested ideas (\u003ca href=\"https://github.com/ropensci/ozunconf19/issues\"\u003ethere were many brilliant ones\u003c/a\u003e) and then voting started for the projects people were excited to be associated with. Little did we know that time there would be more enthusiasts who would be as eager to contribute to this project and learn about ggplot2 internals (very aptly put by Mitch while advertising the project. Smart move mate)! Oh, and what a fun and collaborative team to work with!\u003c/p\u003e\u003cp\u003eAt the end of the two days, we had established the following:\u003c/p\u003e\u003col\u003e\u003cli\u003e\u003ccode\u003egeom_hdr_boxplot()\u003c/code\u003e to replace \u003ccode\u003ehdr.boxplot()\u003c/code\u003e to calculate HDR boxplots in one dimension.\u003c/li\u003e\u003c/ol\u003e\u003cdiv class = \"row\"\u003e\u003cdiv class = \"col-md-6\"\u003e\u003cp\u003e\u003cstrong\u003eBefore:\u003c/strong\u003e\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ehdrcde\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ehdr.boxplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efaithful\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eeruptions\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eprob\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e99\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e95\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e50\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eall.modes\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/02/15/gghdr/hdrcde-boxplot-1.png\"\t\t\talt=\"A HDR boxplot of the variable eruptions from the faithful data set constructed through the hdrcde package. The plot shows the highest density region boxplots split into two disjoint boxes, with a global mode represented by a line in the first box. Each box has one or more shades corresponding to different HDR probability coverages. The boxes have three shades of gray, with the dark, medium, and light shades corresponding to 50%, 95%, and 99% probability coverage, respectively. \"\u003e\u003c/figure\u003e\u003c/div\u003e\u003cdiv class = \"col-md-6\"\u003e\u003cp\u003e\u003cstrong\u003eAfter:\u003c/strong\u003e\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egghdr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eggplot2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efaithful\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eeruptions\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_hdr_boxplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eprob\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e0.5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.95\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.99\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                   \u003cspan class=\"n\"\u003eall.modes\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/02/15/gghdr/gghdr-boxplot-1.png\"\t\t\talt=\"A HDR boxplot of the variable eruptions from the faithful data set constructed through the gghdr package. It appears identical to the previous plot, however any other geom may be readily added to this display using the ggplot2 framework.\"\u003e\u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003col start=\"2\"\u003e\u003cli\u003eThe interval bars in \u003ccode\u003ehdr.den()\u003c/code\u003e to be replaced with a rug plot to display HDRs of 1d marginal distributions in \u003ccode\u003egeom_hdr_rug()\u003c/code\u003e. \u003ccode\u003egeom_density()\u003c/code\u003e could then be added to the resultant plot to get plots equivalent to \u003ccode\u003ehdr.den()\u003c/code\u003e.\u003c/li\u003e\u003c/ol\u003e\u003cdiv class = \"row\"\u003e\u003cdiv class = \"col-md-6\"\u003e\u003cp\u003e\u003cstrong\u003eBefore:\u003c/strong\u003e\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ehdrcde\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ehdr.den\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efaithful\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eeruptions\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003ecol\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;skyblue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;slateblue2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;slateblue4\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/02/15/gghdr/hdrcde-den-1.png\"\t\t\talt=\"A density plot with the highest density regions constructed through the hdrcde package. The plot shows the density of the eruptions variable from the faithful data set and the highest density regions with different probability coverages are represented with horizontal bars at the bottom of the density plot. The ends of the bars are joined to the densities using dotted lines. Similar to HDR box plots, HDR density plots can be shown for different colors corresponding to different HDR probability coverages.\"\u003e\u003c/figure\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#\u0026gt; $hdr#\u0026gt;         [,1]     [,2]     [,3]     [,4]#\u0026gt; 99% 1.325006 2.819318 3.150488 5.281301#\u0026gt; 95% 1.501086 2.520411 3.499998 5.090902#\u0026gt; 50% 1.922811 2.023740 3.946274 4.769700#\u0026gt; #\u0026gt; $mode#\u0026gt; [1] 4.379524#\u0026gt; #\u0026gt; $falpha#\u0026gt;         1%         5%        50% #\u0026gt; 0.06665753 0.15244145 0.36339705\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdiv class = \"col-md-6\"\u003e\u003cp\u003e\u003cstrong\u003eAfter:\u003c/strong\u003e\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egghdr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eggplot2\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ehdrc_bw\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ehdrcde\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ehdrbw\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efaithful\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eeruptions\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003emean\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e0.5\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.95\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0.99\u003c/span\u003e\u003cspan class=\"p\"\u003e)))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efaithful\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eeruptions\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_density\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1001\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ebw\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ehdrc_bw\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_hdr_rug\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efill\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e  \u003cspan class=\"s\"\u003e\u0026#34;blue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003exlim\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e0.6833018\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e6.0166982\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/02/15/gghdr/gghdr-den-1.png\"\t\t\talt=\"Density and HDR rug plots of the variable eruptions from the faithful data set constructed through the gghdr package. It appears identical to the previous plot, but any of the bars at the bottom are replaced by rug plots with local modes shown, and there are no dotted lines connecting the rugs and densities.\"\u003e\u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003cp\u003eAlso, the display of 1d marginal distributions for both variables could be a useful feature to have through \u003ccode\u003egeom_hdr_rug()\u003c/code\u003e.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efaithful\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eeruptions\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ewaiting\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_hdr_rug\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esides\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;trbl\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efill\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;blue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/02/15/gghdr/unnamed-chunk-1-1.png\"\t\t\talt=\"HDR rug and scatter plots in two dimensions constructed through the gghdr package. The variables eruptions and waiting time from the faithful data set are shown. The rugs have three shades of gray, with the dark, medium, and light shades corresponding to 50%, 95%, and 99% probability coverage with local modes represented by lines inside the rugs.\"\u003e\u003c/figure\u003e\u003col start=\"3\"\u003e\u003cli\u003e\u003ccode\u003ehdr_bin()\u003c/code\u003e to replace \u003ccode\u003ehdrscatterplot()\u003c/code\u003e. This would not be an independent geom, but rather a function to add in the aesthetic color with each color representing an HDR with a specified coverage.\u003c/li\u003e\u003c/ol\u003e\u003cdiv class = \"row\"\u003e\u003cdiv class = \"col-md-6\"\u003e\u003cp\u003e\u003cstrong\u003eBefore:\u003c/strong\u003e\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ehdrscatterplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efaithful\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ewaiting\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e               \u003cspan class=\"n\"\u003efaithful\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eeruptions\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/02/15/gghdr/hdrcde-scatterplot-1.png\"\t\t\talt=\"The scatterplot shows the highest density regions constructed through the hdrcde package. The variables eruptions is shown on the y-axis and waiting time shown on the x-axis. The points are colored according to the bivariate HDRs for probability coverages 50%, 95%, 99% and \u0026gt;99%.\"\u003e\u003c/figure\u003e\u003c/div\u003e\u003cdiv class = \"col-md-6\"\u003e\u003cp\u003e\u003cstrong\u003eAfter:\u003c/strong\u003e\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efaithful\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e       \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ewaiting\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eeruptions\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egeom_point\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecolour\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ehdr_bin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ewaiting\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                                  \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eeruptions\u003c/span\u003e\u003cspan class=\"p\"\u003e)))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/02/15/gghdr/gghdr-scatterplot-1.png\"\t\t\talt=\"A HDR scatterplot similar to the last plot constructed through the gghdr package.\"\u003e\u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003col start=\"4\"\u003e\u003cli\u003e\u003ccode\u003egeom_hdr_boxplot()\u003c/code\u003e with both \u003ccode\u003ex\u003c/code\u003e and \u003ccode\u003ey\u003c/code\u003e variables to replace \u003ccode\u003ehdr.cde()\u003c/code\u003e which is used in HDRs for a conditional density estimate. Modes for the conditional density estimates are represented through lines instead of dots.\u003c/li\u003e\u003c/ol\u003e\u003cdiv class = \"row\"\u003e\u003cdiv class = \"col-md-6\"\u003e\u003cp\u003e\u003cstrong\u003eBefore:\u003c/strong\u003e\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efaithful.cde\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ecde\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efaithful\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eeruptions\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efaithful\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ewaiting\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efaithful.cde\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eplot.fn\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;hdr\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e     \u003cspan class=\"n\"\u003exlab\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;eruptions\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eylab\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;waiting\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/02/15/gghdr/hdrcde-cde-1.png\"\t\t\talt=\"Highest density regions of waiting times (on y-axis) conditional on different values of eruptions (on x-axis) constructed through the hdrcde package. The plot consists of side-by-side bars with each bar corresponding to a conditional highest density region for probability coverages of 50%, 95%, and 99%. The mode for each conditional density is represented by a black dot.\"\u003e\u003c/figure\u003e\u003c/div\u003e\u003cdiv class = \"col-md-6\"\u003e\u003cp\u003e\u003cstrong\u003eAfter:\u003c/strong\u003e\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eggplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efaithful\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003eaes\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eeruptions\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ey\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ewaiting\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003egeom_hdr_boxplot\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003efill\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;steelblue\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003etheme_minimal\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/02/15/gghdr/gghdr-cde-1.png\"\t\t\talt=\"Highest density regions of waiting times (on y-axis) conditional on different values of eruptions (on x-axis) constructed through the gghdr package. It appears similar to the last plot, with lines representing the modes for the conditional density estimate instead of dots.\"\u003e\u003c/figure\u003e\u003c/div\u003e\u003c/div\u003e\u003col start=\"5\"\u003e\u003cli\u003e\u003cp\u003eWe also deliberated on names of potential functions at the brainstorming stage which led to the idea of a \u003ca href=\"https://github.com/ropensci/ozunconf19/issues/19\"\u003epackage design collaboration corner\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eDocumentation, testing and illustrative followed along the way to make it CRAN ready.\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003ch1 id=\"bottlenecks-along-the-way\"\u003eBottlenecks along the way\u003c/h1\u003e\u003cp\u003eNow where there\u0026rsquo;s a will, there\u0026rsquo;s a way. Except that soon we could say where there is a merge, there is a conflict.  While most times we use \u003ca href=\"https://github.com/\"\u003eGitHub\u003c/a\u003e for code-sharing, publishing software and collaborating with our future self, this was the time to show how we collaborate with others. It took almost 2 hours with both GitKraken and Mitch helping us to deal with the merge conflicts!\u003c/p\u003e\u003c!-- ```r --\u003e\u003c!-- knitr::include_graphics(\"conflict-tree.png\") --\u003e\u003c!-- ``` --\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/02/15/gghdr/conflict-tree.png\"\t\t\talt=\"This photograph shows a conflict tree displaying a list of Github commits made by various team members. It also demonstrates how the commits are connected, which may lead to conflicts when two team members make contradictory changes to the same line of a file or when one team member edits a file while another person deletes the same file.\"\u003e\u003c/figure\u003e\u003c!-- - Extending ggplot2 (https://cran.r-project.org/web/packages/ggplot2/vignettes/extending-ggplot2.html). __(Writing about the scale problem that was faced.)__ --\u003e\u003ch1 id=\"where-to-from-here\"\u003eWhere to from here?\u003c/h1\u003e\u003cp\u003eWe still have one thing to do (replace the \u003ccode\u003ehdr.boxplot.2d()\u003c/code\u003e with \u003ccode\u003egeom_hdr_boxplot.2d()\u003c/code\u003e, which would calculate and plot HDRs in two dimensions), but are happy to announce that with some embellishments and review, the current version is on CRAN. Kudos team!! You can learn about our package gghdr at \u003ca href=\"https://Sayani07.github.io/gghdr/\"\u003ethe package website\u003c/a\u003e, and the \u003ca href=\"https://Sayani07.github.io/gghdr/\"\u003eGithub repo\u003c/a\u003e.\u003c/p\u003e\u003c!-- # ```r --\u003e\u003c!-- # knitr::include_graphics(\"team.jpg\") --\u003e\u003c!-- # ``` --\u003e\u003c!-- #  --\u003e\u003c!-- #  --\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2022/02/15/gghdr/team.jpg\"\t\t\talt=\"This photograph shows all the team members posing and smiling together.\"\u003e\u003c/figure\u003e","url":"https://ropensci.org/blog/2022/02/15/gghdr/","date_published":"2022-02-15T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/ts50x-ncp16","title":"pkgcheck now available as a GitHub action!","language":"en","authors":[{"name":"Jacob Wujciak-Jens","url":"https://orcid.org/0000-0002-7281-3989","avatar":"https://github.com/assignUser.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]}],"tags":["ropensci-review-bot","pkgcheck","tech notes"],"content_html":"\u003ch2 id=\"what-is-pkgcheck\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-pkgcheck\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is pkgcheck?\u003c/h2\u003e\u003cp\u003eThe \u003ca href=\"https://github.com/ropensci-review-tools/pkgcheck\"\u003epkgcheck package\u003c/a\u003e hasbeen developed by rOpenSci to automate the process of checking all packages onsubmission. The \u003ccode\u003eropensci-review-bot\u003c/code\u003e automatically runs pkgcheck on all submissions, and checks can also be called at any time by editors using the command:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e@\u003c/span\u003e\u003cspan class=\"n\"\u003eropensci\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ereview\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003ebot\u003c/span\u003e \u003cspan class=\"n\"\u003echeck\u003c/span\u003e \u003cspan class=\"n\"\u003epackage\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe bot will return a list of checks which should ideally look like this:\u003c/p\u003e\u003cfigure\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/463#issuecomment-921010197\"\u003e\u003cimg src=\"/blog/2022/02/01/pkgcheck-action/cffr-pkgcheck.png\"\t\t\talt=\"pkgcheck results for recent submission\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003eTo be ready for peer review, pkgcheck should return a series of ✔, indicating successful checks, and there shouldn\u0026rsquo;t be any ✘ symbols, which indicate failed checks. Anybody preparing a package to submit is recommended to \u003ca href=\"https://devguide.ropensci.org/authors-guide.html\"\u003e\u0026ldquo;use pkgcheck\u0026rdquo;\u003c/a\u003e to confirm that a package is indeed ready to submit. Until now, this has only been possible through locally \u003ca href=\"https://devguide.ropensci.org/authors-guide.html\"\u003einstalling the package and running the \u003ccode\u003epkgcheck()\u003c/code\u003e command\u003c/a\u003e. Local checks suffer two important disadvantages:\u003c/p\u003e\u003col\u003e\u003cli\u003eResults may only be reproducible on a local system, rather than be generally reproducible; and\u003c/li\u003e\u003cli\u003eThe checks run by pkgcheck include all checks run by \u003ca href=\"https://r-lib.github.io/rcmdcheck/\"\u003ethe rcmdcheck package\u003c/a\u003e which may take quite some time to run.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eJust like the \u003ca href=\"https://github.com/r-lib/actions/blob/v2-branch/examples/check-standard.yaml\"\u003eGitHub rcmdcheck action\u003c/a\u003e which can be easily installed with one of \u003ca href=\"https://usethis.r-lib.org/reference/github_actions.html\"\u003ethe \u003ccode\u003euse_github_action_check_...\u003c/code\u003e functions from the \u003ccode\u003eusethis\u003c/code\u003e package\u003c/a\u003e, pkgcheck now also has a GitHub action which overcomes both of these disadvantages through running remotely (on GitHub), and generating reproducible results.\u003c/p\u003e\u003ch2 id=\"the-github-pkgcheck-action\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-github-pkgcheck-action\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe GitHub pkgcheck-action\u003c/h2\u003e\u003cp\u003eThis post is the \u0026ldquo;official\u0026rdquo; release announcement of pkgcheck-action, a GitHub action which enables checks to be run every time code is pushed to GitHub. The action was developed by one of us (Jacob), and can be found \u003ca href=\"https://github.com/ropensci-review-tools/pkgcheck-action\"\u003eon GitHub at ropensci-review-tools/pkgcheck-action\u003c/a\u003e. The easiest way to use this action in your own repository is to install \u003ca href=\"https://docs.ropensci.org/pkgcheck/#installation\"\u003ethe pkgcheck package\u003c/a\u003e, and run \u003ca href=\"https://docs.ropensci.org/pkgcheck/reference/use_github_action_pkgcheck.html\"\u003ethe \u003ccode\u003euse_github_action_pkgcheck()\u003c/code\u003e function\u003c/a\u003e. That will place a new file in the \u003ccode\u003e.github/workflows\u003c/code\u003e directory of your package called \u0026ldquo;pkgcheck.yaml\u0026rdquo;, an example of which is shown on \u003ca href=\"https://github.com/ropensci-review-tools/pkgcheck-action#usage\"\u003ethe main README of the pkgcheck-action repository\u003c/a\u003e. The action consists of the single job expressed in the final lines:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003ejobs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003echeck\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eruns-on\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eubuntu-latest\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003esteps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003euses\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eropensci-review-tools/pkgcheck-action@main\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThere are several parameters also described in that main README, which can either be passed as parameters to \u003ca href=\"https://docs.ropensci.org/pkgcheck/reference/use_github_action_pkgcheck.html\"\u003ethe \u003ccode\u003euse_github_action_pkgcheck()\u003c/code\u003e function\u003c/a\u003e, or added to the YAML workflow file as also described in the README. Once the action has been created in your repository, it can be activated by adding it in a git commit and pushing to GitHub.\u003c/p\u003e\u003ch3 id=\"posting-pkgcheck-results-to-a-github-issue\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#posting-pkgcheck-results-to-a-github-issue\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePosting pkgcheck results to a GitHub issue\u003c/h3\u003e\u003cp\u003eIn addition to the workflow printing the full details returned by the main pkgcheck function, the output of pkgcheck can also be posted to a GitHub issue, where it will appear precisely like the example shown above. Once the workflow has finished, you\u0026rsquo;ll receive a notification, and be able to view the check results (with a \u003ccode\u003esummary-only\u003c/code\u003e parameter determining whether only a summary of results like shown above will be posted to the issue, or whether full results will be posted which include the summary followed by quite a bit more detail). The workflow will only succeed when all pkgcheck checks have been passed.\u003c/p\u003e\u003ch2 id=\"using-pkgcheck-action-to-prepare-for-submission\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#using-pkgcheck-action-to-prepare-for-submission\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUsing pkgcheck-action to prepare for submission\u003c/h2\u003e\u003cp\u003eThis action makes preparing packages for submission to peer review with rOpenSci much easier, by automatically confirming whether a package the general requirements for rOpenSci submissions. You can use pkgcheck-action to confirm that a package is ready for submission by following these three easy steps:\u003c/p\u003e\u003col\u003e\u003cli\u003eInsert the action into your repository with \u003ca href=\"https://docs.ropensci.org/pkgcheck/reference/use_github_action_pkgcheck.html\"\u003e\u003ccode\u003epkgcheck::use_github_action_pkgcheck()\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\u003cli\u003eAdd and commit the action script to your git index, and push to GitHub to activate it.\u003c/li\u003e\u003cli\u003eExamine results in the automatically-created issue of your GitHub repository, modify the repository to address any failing checks, and iterate.\u003c/li\u003e\u003cli\u003eOnce the action passes, you\u0026rsquo;ll see \u0026ldquo;✔ This package may be submitted.\u0026rdquo;\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eYou can also put a pkgcheck} badge in your README by inserting a modified version of these lines:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-md\" data-lang=\"md\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e[\u003cspan class=\"nt\"\u003e![pkgcheck\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://github.com/\u0026lt;org\u0026gt;/\u0026lt;repo\u0026gt;/workflows/pkgcheck/badge.svg\u003c/span\u003e)](https://github.com/\u0026lt;org\u0026gt;/\u0026lt;repo\u0026gt;/actions?query=workflow%3Apkgcheck)\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eOnce your package passes all tests, the badge will turn green and look like this:\u003c/p\u003e\u003csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"128\" height=\"20\"\u003e  \u003cdefs\u003e    \u003clinearGradient id=\"workflow-fill\" x1=\"50%\" y1=\"0%\" x2=\"50%\" y2=\"100%\"\u003e      \u003cstop stop-color=\"#444D56\" offset=\"0%\"\u003e\u003c/stop\u003e      \u003cstop stop-color=\"#24292E\" offset=\"100%\"\u003e\u003c/stop\u003e    \u003c/linearGradient\u003e    \u003clinearGradient id=\"state-fill\" x1=\"50%\" y1=\"0%\" x2=\"50%\" y2=\"100%\"\u003e      \u003cstop stop-color=\"#34D058\" offset=\"0%\"\u003e\u003c/stop\u003e      \u003cstop stop-color=\"#28A745\" offset=\"100%\"\u003e\u003c/stop\u003e    \u003c/linearGradient\u003e  \u003c/defs\u003e  \u003cg fill=\"none\" fill-rule=\"evenodd\"\u003e    \u003cg font-family=\"\u0026#39;DejaVu Sans\u0026#39;,Verdana,Geneva,sans-serif\" font-size=\"11\"\u003e      \u003cpath id=\"workflow-bg\" d=\"M0,3 C0,1.3431 1.3552,0 3.02702703,0 L102,0 L102,20 L3.02702703,20 C1.3552,20 0,18.6569 0,17 L0,3 Z\" fill=\"url(#workflow-fill)\" fill-rule=\"nonzero\"\u003e\u003c/path\u003e      \u003ctext fill=\"#010101\" fill-opacity=\".3\"\u003e        \u003ctspan x=\"22.1981982\" y=\"15\"\u003epkgcheck\u003c/tspan\u003e      \u003c/text\u003e      \u003ctext fill=\"#FFFFFF\"\u003e        \u003ctspan x=\"22.1981982\" y=\"14\"\u003epkgcheck\u003c/tspan\u003e      \u003c/text\u003e    \u003c/g\u003e    \u003cg transform=\"translate(79)\" font-family=\"\u0026#39;DejaVu Sans\u0026#39;,Verdana,Geneva,sans-serif\" font-size=\"11\"\u003e      \u003cpath d=\"M0 0h46.939C48.629 0 50 1.343 50 3v14c0 1.657-1.37 3-3.061 3H0V0z\" id=\"state-bg\" fill=\"url(#state-fill)\" fill-rule=\"nonzero\"\u003e\u003c/path\u003e      \u003ctext fill=\"#010101\" fill-opacity=\".3\"\u003e        \u003ctspan x=\"4\" y=\"15\"\u003epassing\u003c/tspan\u003e      \u003c/text\u003e      \u003ctext fill=\"#FFFFFF\"\u003e        \u003ctspan x=\"4\" y=\"14\"\u003epassing\u003c/tspan\u003e      \u003c/text\u003e    \u003c/g\u003e    \u003cpath fill=\"#959DA5\" d=\"M11 3c-3.868 0-7 3.132-7 7a6.996 6.996 0 0 0 4.786 6.641c.35.062.482-.148.482-.332 0-.166-.01-.718-.01-1.304-1.758.324-2.213-.429-2.353-.822-.079-.202-.42-.823-.717-.99-.245-.13-.595-.454-.01-.463.552-.009.946.508 1.077.718.63 1.058 1.636.76 2.039.577.061-.455.245-.761.446-.936-1.557-.175-3.185-.779-3.185-3.456 0-.762.271-1.392.718-1.882-.07-.175-.315-.892.07-1.855 0 0 .586-.183 1.925.718a6.5 6.5 0 0 1 1.75-.236 6.5 6.5 0 0 1 1.75.236c1.338-.91 1.925-.718 1.925-.718.385.963.14 1.68.07 1.855.446.49.717 1.112.717 1.882 0 2.686-1.636 3.28-3.194 3.456.254.219.473.639.473 1.295 0 .936-.009 1.689-.009 1.925 0 .184.131.402.481.332A7.011 7.011 0 0 0 18 10c0-3.867-3.133-7-7-7z\"\u003e\u003c/path\u003e  \u003c/g\u003e\u003c/svg\u003e\u003cp\u003eYou\u0026rsquo;ll then know that your package is good to submit!\u003c/p\u003e\u003cp\u003eAnd finally, feel free to ask any questions about using pkgcheck-action, or report any bugs, at \u003ca href=\"https://github.com/ropensci-review-tools/pkgcheck-action/issues\"\u003ehttps://github.com/ropensci-review-tools/pkgcheck-action/issues\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/02/01/pkgcheck-action/","date_published":"2022-02-01T00:00:00+00:00","date_modified":"2025-05-15T20:47:00-03:00"},{"id":"https://doi.org/10.59350/qj4jf-9xz03","title":"A Blend of Package Build Failures","language":"en","authors":[{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]}],"tags":["r-universe","tech notes"],"content_html":"\u003cp\u003eThe \u003ca href=\"https://ropensci.r-universe.dev/\"\u003erOpenSci R-universe\u003c/a\u003e is a bit special as, compared to other R-universes, it \u003ca href=\"/blog/2021/09/03/runiverse-docs/\"\u003ebuilds docs\u003c/a\u003e for all the packages in our \u003ca href=\"/packages\"\u003esuite\u003c/a\u003e.Looking at the dashboard helps us identify failures in building the packages as well as in building the pkgdown websites.We then help authors fix these issues in order to comply with our \u003ca href=\"https://devguide.ropensci.org/curationpolicy.html\"\u003epackage curation policy\u003c/a\u003e.As a package author you should also rely on \u003ca href=\"https://devdevguide.netlify.app/ci.html\"\u003econtinuous integration\u003c/a\u003e in your own repo for catching e.g. \u003ccode\u003eR CMD check\u003c/code\u003e problems.Following one of our latest rounds of monitoring, we summarize some common and less common mistakes.Many of them are \u003cem\u003enot\u003c/em\u003e specific to our build system.\u003c/p\u003e\u003ch2 id=\"before-we-start-how-to-debug\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#before-we-start-how-to-debug\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBefore we start: how to debug\u003c/h2\u003e\u003cp\u003eIf you maintain an rOpenSci package and notice an error for your package in the dashboard and the error message is not clear enough,\u003c/p\u003e\u003cul\u003e\u003cli\u003eFor pkgdown errors try installing the latest pkgdown version from CRAN then run \u003ccode\u003epkgdown::build_site()\u003c/code\u003e.\u003c/li\u003e\u003cli\u003eIf that does not reproduce the error install \u003ca href=\"https://docs.ropensci.org/rotemplate/\"\u003erotemplate\u003c/a\u003e then run \u003ccode\u003erotemplate::build_ropensci_docs()\u003c/code\u003e (it might generate a logo and favicons that you\u0026rsquo;d have to delete).\u003c/li\u003e\u003cli\u003eFor any tricky aspect of building your docs or packages on R-universe, feel free to ping us e.g. in the \u003ca href=\"https://contributing.ropensci.org/resources.html#channels-slack\"\u003eSlack #package-maintenance channel\u003c/a\u003e, we\u0026rsquo;ll be happy to help (and to collect anonymous examples for our next failures round-up \u0026#x1f609;)! If not an rOpenSci package author, you can post your package development questions on our \u003ca href=\"https://discuss.ropensci.org/c/package-development/29\"\u003eforum\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"problems-building-vignettes-or-articles\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#problems-building-vignettes-or-articles\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eProblems building vignettes or articles\u003c/h2\u003e\u003ch3 id=\"missing-dependencies-or-credentials\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#missing-dependencies-or-credentials\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMissing dependencies or credentials\u003c/h3\u003e\u003cp\u003ePackages needed in the vignettes should be listed in the \u003ccode\u003eSuggests\u003c/code\u003e dependency field of \u003ccode\u003eDESCRIPTION\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eFor packages needed in articles (vignettes that are \u003ccode\u003e.Rbuildignore\u003c/code\u003ed) you can (at least for the rOpenSci docs building) use the \u003ccode\u003eextra_packages\u003c/code\u003e field in \u003ca href=\"https://github.com/ropensci/weathercan/blob/bf667a694c54a04c70b51435c03a0139048e16fe/_pkgdown.yml#L2\"\u003e\u003ccode\u003e_pkgdown.yml\u003c/code\u003e\u003c/a\u003e as the docs building system will install those too.\u003c/p\u003e\u003cp\u003eFor system dependencies needed in the vignettes, you can also list \u003ca href=\"https://github.com/ropensci/virtuoso/blob/7693bf77d28f3f11efe00d597048fec946771e66/_pkgdown.yml#L4\"\u003eAPT packages in \u003ccode\u003e_pkgdown.yml\u003c/code\u003e\u003c/a\u003e. Alternatively, your code could also automatically install any dependency on pkgdown or CI (cf \u003ca href=\"https://github.com/ropensci/rdataretriever/pull/296/files\"\u003eexample in rdataretriever\u003c/a\u003e).\u003c/p\u003e\u003cp\u003eRemember that your vignette cannot be built if it\u0026rsquo;s missing other necessary information (e.g. credentials), as those are not available on R-universe.Therefore, you need to resort to \u003ca href=\"/blog/2019/12/08/precompute-vignettes/\"\u003epre-computing your vignette or article\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"unbalanced-chunk-delimiters-in-vignettes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#unbalanced-chunk-delimiters-in-vignettes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUnbalanced chunk delimiters in vignettes\u003c/h3\u003e\u003cp\u003eBefore knitr 1.35, a chunk like the one below, with 4 opening back ticks but only 3 closing back ticks, would have been valid:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e```\u003cspan class=\"sb\"\u003e`r\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sb\"\u003e1 + 1\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sb\"\u003e`\u003c/span\u003e``\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWell \u003ca href=\"https://yihui.org/en/2021/10/unbalanced-delimiters/\"\u003eit no longer is\u003c/a\u003e so a vignette with such a chunk will no longer be rendered!Thankfully since \u003ca href=\"https://yihui.org/en/2022/01/knitr-news/#unbalanced-chunk-delimiters\"\u003eknitr 1.37\u003c/a\u003e the error message is quite clear and it is rather straightforward to find the lines to fix.\u003c/p\u003e\u003ch2 id=\"wrong-newsmd-structure\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#wrong-newsmd-structure\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWrong \u003ccode\u003eNEWS.md\u003c/code\u003e structure\u003c/h2\u003e\u003cp\u003eIn order for pkgdown to build your website changelog, your package changelog in \u003ca href=\"https://pkgdown.r-lib.org/reference/build_news.html\"\u003e\u003ccode\u003eNEWS.md\u003c/code\u003e\u003c/a\u003e needs to be structured with h1 or h2, optionally with lesser headings below each version heading.If you e.g. have no heading, you\u0026rsquo;ll get an error message such as\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"n\"\u003ex\u003c/span\u003e \u003cspan class=\"n\"\u003ecallr\u003c/span\u003e \u003cspan class=\"n\"\u003esubprocess\u003c/span\u003e \u003cspan class=\"n\"\u003efailed\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003eInvalid\u003c/span\u003e \u003cspan class=\"n\"\u003eNEWS.md\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003einconsistent\u003c/span\u003e \u003cspan class=\"n\"\u003euse\u003c/span\u003e \u003cspan class=\"n\"\u003eof\u003c/span\u003e \u003cspan class=\"n\"\u003esection\u003c/span\u003e \u003cspan class=\"n\"\u003eheadings.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eℹ \u003cspan class=\"n\"\u003eTop\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003elevel\u003c/span\u003e \u003cspan class=\"n\"\u003eheadings\u003c/span\u003e \u003cspan class=\"n\"\u003emust\u003c/span\u003e \u003cspan class=\"n\"\u003ebe\u003c/span\u003e \u003cspan class=\"n\"\u003eeither\u003c/span\u003e \u003cspan class=\"n\"\u003eall\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eh1\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eor\u003c/span\u003e \u003cspan class=\"n\"\u003eall\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eh2\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"n\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eℹ\u003c/span\u003e \u003cspan class=\"n\"\u003eSee\u003c/span\u003e \u003cspan class=\"o\"\u003e?\u003c/span\u003e\u003cspan class=\"n\"\u003ebuild_news\u003c/span\u003e \u003cspan class=\"kr\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003emore\u003c/span\u003e \u003cspan class=\"n\"\u003edetails.\u003c/span\u003e \u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"whacky-use-of-temporary-directories\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#whacky-use-of-temporary-directories\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhacky use of temporary directories\u003c/h2\u003e\u003cp\u003eIf you use temporary directories in your examples or tests, do not use \u003ccode\u003etempdir()\u003c/code\u003e directly but rather a subdirectory of it.Also make sure to always clean after yourself.Otherwise you might end up with a hard-to-debug error.For more info, refer to the excellent \u003ca href=\"https://testthat.r-lib.org/articles/test-fixtures.html\"\u003e\u0026ldquo;Test fixtures\u0026rdquo; testthat vignette by Jenny Bryan\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"changed-upstream-data-source\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#changed-upstream-data-source\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eChanged upstream data source\u003c/h2\u003e\u003cp\u003eIf you have tests or vignettes depending on non-cached API queries, and the API changes, you might end up with an error (e.g., if a data station changes IDs).Thankfully these errors are rather straightforward to fix.For tests, find more guidance in \u003ca href=\"https://books.ropensci.org/http-testing/\"\u003eHTTP testing in R\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"dead-upstream-data-source\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#dead-upstream-data-source\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDead upstream data source\u003c/h2\u003e\u003cp\u003eNow, if the API your package was wrapping no longer exists, the easiest way forward is to \u003ca href=\"https://devguide.ropensci.org/curationpolicy.html#archivalguidance\"\u003earchive\u003c/a\u003e your package\u0026hellip; and maybe create another one for an alternative API if there\u0026rsquo;s one?\u003c/p\u003e\u003ch2 id=\"treacheous-gitignore\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#treacheous-gitignore\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTreacheous \u003ccode\u003e.gitignore\u003c/code\u003e\u003c/h2\u003e\u003cp\u003eWhen things work perfectly on your computer but not on R-universe or any other continuous integration, one potential problem is \u003ccode\u003e.gitignore\u003c/code\u003e if it lists a folder or file that\u0026rsquo;s actually necessary for building the package or its docs!In that case, either fix \u003ccode\u003e.gitignore\u003c/code\u003e or the way that folder/file is used.\u003c/p\u003e\u003ch2 id=\"invalid-markdown-files\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#invalid-markdown-files\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eInvalid Markdown files\u003c/h2\u003e\u003cp\u003epkgdown will build \u003ca href=\"https://pkgdown.r-lib.org/reference/build_home.html\"\u003eany Markdown files in your package in \u003ccode\u003e./\u003c/code\u003e or \u003ccode\u003e./.github\u003c/code\u003e\u003c/a\u003e.If you have e.g. an old issue template from when these files contained only HTML comments, there will be a pkgdown failure.The fix is to fix, move or delete the Markdown file.\u003c/p\u003e\u003ch2 id=\"undetected-readme-badges\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#undetected-readme-badges\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUndetected README badges\u003c/h2\u003e\u003cp\u003eThis isn\u0026rsquo;t a failure but is slightly annoying: If your README badges aren\u0026rsquo;t moved to the sidebar by pkgdown, check the \u003ca href=\"https://pkgdown.r-lib.org/reference/build_home.html#dev-badges\"\u003estructure of your badges paragraph\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we provided you with a bouquet of some mistakes to avoid when developing a package.If you enjoyed this content, subscribe to our \u003ca href=\"/news\"\u003emonthly newsletter\u003c/a\u003e that features a Package Development Corner section with tips!\u003c/p\u003e","url":"https://ropensci.org/blog/2022/01/31/package-build-failures/","date_published":"2022-01-31T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/x5jn2-2a763","title":"rOpenSci News Digest, January 2022","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2022/01/21/ropensci-news-digest-january-2022\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003c!-- to be curated manually --\u003e\u003ch3 id=\"co-working-events\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#co-working-events\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCo-working events\u003c/h3\u003e\u003c!-- Can use same coworking text every month and ping Steffi to ask if there are any special guests to add --\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on 1st Tuesdays! Hosted by Steffi LaZerte and Nick Tierney. Everyone welcome. No RSVP needed. Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cp\u003eOur next sessions are:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2022-02/\"\u003eMonday, 31 January 2022 17:00 PST\u003c/a\u003e (Tuesday, Feb 1st 09:00 Australian Western);\u003c/li\u003e\u003cli\u003e\u003ca href=\"/events/coworking-2022-03/\"\u003eTuesday, 01 March 2022 09:00 PST\u003c/a\u003e (17:00 UTC).\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out about more \u003ca href=\"/events\"\u003eevents\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"community-management-transition-for-ropensci\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-management-transition-for-ropensci\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity Management transition for rOpenSci\u003c/h3\u003e\u003cp\u003eThe fantastic Stefanie Butland has moved on from her position as rOpenSci\u0026rsquo;s community manager.Her \u003ca href=\"/blog/2022/01/14/msg-from-stefanie/\"\u003eblog post\u003c/a\u003e summarized the incredible work she\u0026rsquo;s done over the last 5.5 years.As for rOpenSci\u0026rsquo;s future new community manager, it might be you: keep an eye out for a job posting in February and even before that, email \u003ca href=\"mailto:info@ropensci.org\"\u003einfo@ropensci.org\u003c/a\u003e if you think you might be interested.\u003c/p\u003e\u003ch3 id=\"an-update-on-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#an-update-on-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAn update on R-universe\u003c/h3\u003e\u003cp\u003eWe are making steady progress on the development of \u003ca href=\"https://r-universe.dev\"\u003eR-universe\u003c/a\u003e, rOpenSci’s open platform for publishing and discovering R packages and other research material. Currently R-universe is tracking 3548 R packages and 3602 \u003ca href=\"https://r-universe.dev/articles/\"\u003earticles\u003c/a\u003e from 851 \u003ca href=\"https://r-universe.dev/maintainers/\"\u003emaintainers\u003c/a\u003e in 384 \u003ca href=\"https://r-universe.dev/organizations/\"\u003ecranlike repositories\u003c/a\u003e. Over the past months we have added several new API\u0026rsquo;s and front-end features, including \u003ca href=\"/blog/2021/10/14/runiverse-badges/\"\u003esupport for badges\u003c/a\u003e, \u003ca href=\"/blog/2021/11/24/runiverse-badges/\"\u003erss feeds\u003c/a\u003e, \u003ca href=\"https://twitter.com/opencpu/status/1468323209770582018\"\u003eorcid links\u003c/a\u003e, and \u003ca href=\"/blog/2022/01/06/runiverse-renv/\"\u003esupport for renv\u003c/a\u003e to restore packages from R-universe for reproducibility purposes.\u003c/p\u003e\u003cp\u003eUnder the hood we made a \u003ca href=\"https://twitter.com/opencpu/status/1468323209770582018\"\u003efundamental change\u003c/a\u003e to give maintainers a more central role in R-universe: the dashboards and APIs for \u003ca href=\"https://hadley.r-universe.dev\"\u003e\u003ccode\u003ehttps://{user}.r-universe.dev\u003c/code\u003e\u003c/a\u003e now also include packages and articles from other organizations that are maintained by that user, while cross-linking maintainers and organizations. This should make it easier to browse content help you discover interesting researchers and material.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following  package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/gittargets\"\u003egittargets\u003c/a\u003e, developed by William Michael Landau: Pipelines with the targets R package (2021, \u003ca href=\"doi:10.21105/joss.02959\"\u003edoi:10.21105/joss.02959\u003c/a\u003e) skip steps that are up to already date. Although this behavior reduces the runtime of subsequent runs, it comes at the cost of overwriting previous results. So if the pipeline source code is under version control, and if you revert to a previous commit or branch, the data will no longer be up to date with the code you just checked out. Ordinarily, you would need to rerun the pipeline in order to recover the targets you had before. However, gittargets preserves historical output, creating version control snapshots of data store. Each data snapshot remembers the contemporaneous Git commit of the pipeline source code, so you can recover the right data when you navigate the Git history. In other words, gittargets makes it possible to switch commits or branches without invalidating the pipeline. You can simply check out the up-to-date targets from the past instead of taking the time to recompute them from scratch.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=gittargets\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/486\"\u003ereviewed\u003c/a\u003e by Saras Windecker, and David Neuzerling.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following twenty-two packages have had an update since the last newsletter: \u003ca href=\"https://docs.ropensci.org/rotemplate\" title=\"pkgdown template and utilities for rOpenSci docs\"\u003erotemplate\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-org/rotemplate/releases/tag/bs3-final\"\u003e\u003ccode\u003ebs3-final\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/aRxiv\" title=\"Interface to the arXiv API\"\u003eaRxiv\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/aRxiv/releases/tag/0.6\"\u003e\u003ccode\u003e0.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (cff) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v0.2.1\"\u003e\u003ccode\u003ev0.2.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/chirps\" title=\"API Client for CHIRPS and CHIRTS\"\u003echirps\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/chirps/releases/tag/v0.1.4\"\u003e\u003ccode\u003ev0.1.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/essurvey\" title=\"Download Data from the European Social Survey on the Fly\"\u003eessurvey\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/essurvey/releases/tag/v1.0.8\"\u003e\u003ccode\u003ev1.0.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/excluder\" title=\"Checks for Exclusion Criteria in Online Data\"\u003eexcluder\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/excluder/releases/tag/v0.3.3\"\u003e\u003ccode\u003ev0.3.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/fingertipsR\" title=\"Fingertips Data for Public Health\"\u003efingertipsR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/fingertipsR/releases/tag/v1.0.8\"\u003e\u003ccode\u003ev1.0.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gittargets\" title=\"Data Version Control for the Targets Package\"\u003egittargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gittargets/releases/tag/0.0.1\"\u003e\u003ccode\u003e0.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/jagstargets\" title=\"Targets for JAGS Workflows\"\u003ejagstargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/jagstargets/releases/tag/1.0.1\"\u003e\u003ccode\u003e1.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lingtypology\" title=\"Linguistic Typology and Mapping\"\u003elingtypology\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lingtypology/releases/tag/v1.1.8\"\u003e\u003ccode\u003ev1.1.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nasapower\" title=\"NASA POWER API Client\"\u003enasapower\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nasapower/releases/tag/v4.0.3\"\u003e\u003ccode\u003ev4.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.7.0\"\u003e\u003ccode\u003ev0.7.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/opentripplanner\" title=\"Setup and connect to OpenTripPlanner\"\u003eopentripplanner\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/opentripplanner/releases/tag/0.4.0\"\u003e\u003ccode\u003e0.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/riem\" title=\"Accesses Weather Data from the Iowa Environment Mesonet\"\u003eriem\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/riem/releases/tag/v2.0.0\"\u003e\u003ccode\u003ev2.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rotl\" title=\"Interface to the Open Tree of Life API\"\u003erotl\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rotl/releases/tag/v3.0.12\"\u003e\u003ccode\u003ev3.0.12\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.4.1\"\u003e\u003ccode\u003e0.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Workflows\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/0.10.0\"\u003e\u003ccode\u003e0.10.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/terrainr\" title=\"Landscape Visualizations in R and Unity\"\u003eterrainr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/terrainr/releases/tag/v0.5.1\"\u003e\u003ccode\u003ev0.5.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tesseract\" title=\"Open Source OCR Engine\"\u003etesseract\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tesseract/releases/tag/v5.0.0\"\u003e\u003ccode\u003ev5.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tic\" title=\"CI-Agnostic Workflow Definitions\"\u003etic\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tic/releases/tag/v0.11.3\"\u003e\u003ccode\u003ev0.11.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/weathercan\" title=\"Download Weather Data from Environment and Climate Change Canada\"\u003eweathercan\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/weathercan/releases/tag/v0.6.2\"\u003e\u003ccode\u003ev0.6.2\u003c/code\u003e\u003c/a\u003e), and \u003ca href=\"https://docs.ropensci.org/webchem\" title=\"Chemical Information from the Web\"\u003ewebchem\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/webchem/releases/tag/v1.1.2\"\u003e\u003ccode\u003ev1.1.2\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are nineteen recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/486\"\u003egittargets\u003c/a\u003e, Data Version Control for the Targets Package. Submitted by \u003ca href=\"https://wlandau.github.io\"\u003eWill Landau\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/484\"\u003erfema\u003c/a\u003e, Access the openFEMA API. Submitted by \u003ca href=\"http://dylanturner.org\"\u003eDylan Turner\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/435\"\u003egendercoder\u003c/a\u003e, Recodes Sex/Gender Descriptions Into A Standard Set. Submitted by \u003ca href=\"http://emilykothe.com\"\u003eEmily Kothe\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román-Palacios\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/418\"\u003eepair\u003c/a\u003e, Grabs data from EPA API, simplifies getting pollutant data. Submitted by \u003ca href=\"https://github.com/GLOrozcoM\"\u003eLeo Orozco-Mulfinger\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/382\"\u003etidytags\u003c/a\u003e, Simple Collection and Powerful Analysis of Twitter Data. Submitted by \u003ca href=\"http://bretsw.com\"\u003eDr. Bret Staudt Willet\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eEight at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/495\"\u003efrictionless\u003c/a\u003e, Read and Write Frictionless Data Packages. Submitted by \u003ca href=\"https://orcid.org/0000-0002-8442-8025\"\u003ePeter Desmet\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/492\"\u003egbifdb\u003c/a\u003e, Local Database Interface to GBIF. Submitted by \u003ca href=\"http://carlboettiger.info\"\u003eCarl Boettiger\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/475\"\u003ecanaper\u003c/a\u003e, Categorical Analysis of Neo- And Paleo-Endemism. Submitted by \u003ca href=\"https://joelnitta.com\"\u003eJoel Nitta\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/474\"\u003equalR\u003c/a\u003e, An R package to download Sao Paulo and Rio de Janeiro air pollution data. Submitted by \u003ca href=\"http://randroll.wordpress.com\"\u003eMario Gavidia Calderón\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/471\"\u003eOmicsMetaData\u003c/a\u003e, OmicsMetaData: an R-package for interoperable and re-usable biodiversity \u0026lsquo;omics (meta)data. Submitted by \u003ca href=\"https://github.com/msweetlove\"\u003eMaxime Sweetlove\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/433\"\u003eROriginStamp\u003c/a\u003e, Interface to OriginStamp API to Obtain Trusted Time Stamps. Submitted by \u003ca href=\"https://github.com/rkrug\"\u003eRainer M Krug\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/407\"\u003eoccCite\u003c/a\u003e, Querying and Managing Large Biodiversity Occurrence Datasets. Submitted by \u003ca href=\"http://hannahlowens.weebly.com/\"\u003eHannah Owens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/498\"\u003eEDIutils\u003c/a\u003e, An API Client for the Environmental Data Initiative Repository. Submitted by \u003ca href=\"https://github.com/clnsmth\"\u003eColin Smith\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/489\"\u003ebssm\u003c/a\u003e, Bayesian Inference of Non-Linear and Non-Gaussian State Space. Submitted by \u003ca href=\"http://jounihelske.netlify.app\"\u003eJouni Helske\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/485\"\u003eReLTER\u003c/a\u003e, An interface to the eLTER for the R statistical programming environment. Submitted by \u003ca href=\"https://www.cnr.it/people/alessandro.oggioni\"\u003eAlessandro Oggioni\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/443\"\u003erdbhapi\u003c/a\u003e, Interface to DBH-API. Submitted by \u003ca href=\"https://hkdir.no/\"\u003eMarija Ninic\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/12/17/thank-you-2021\"\u003eThank You to the rOpenSci Community, 2021\u003c/a\u003e by Stefanie Butland, and Steffi LaZerte. Thank you for another amazing year at rOpenSci.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/12/20/inclusive-leadership-program\"\u003erOpenSci Announces $400k Award from the Chan Zuckerberg Initiative to Empower Historically Excluded Groups as Community Leaders in Scientific Open Source Projects\u003c/a\u003e by Stefanie Butland, Karthik Ram, Noam Ross, and Maëlle Salmon. Funding for new rOpenSci community champions program for historically excluded groups.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/01/11/ropensci-forum\"\u003eGather on the rOpenSci Forum\u003c/a\u003e by The rOpenSci Team. Why and how participate in the rOpenSci forum; descriptions of current categories.\u003cfigure\u003e\u003cimg src=\"/blog/2022/01/21/ropensci-news-digest-january-2022/convo.jpg\"\t\t\talt=\"Two paper message balloons on a pink background\" width=\"400\"\u003e\u003c/figure\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/01/13/conduct2022\"\u003erOpenSci Code of Conduct Annual Review\u003c/a\u003e by Stefanie Butland, Mark Padgham, Kara Woo, and Megan Carter. Updates for version 2.3 of rOpenSci\u0026rsquo;s Code of Conduct.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/01/13/transparency2021\"\u003erOpenSci 2021 Code of Conduct Transparency Report\u003c/a\u003e by Stefanie Butland, Mark Padgham, and Kara Woo. No Code of Conduct incidents reported in 2021.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2022/01/14/msg-from-stefanie\"\u003eCommunity Management Transition for rOpenSci. A Message from Stefanie Butland\u003c/a\u003e by Stefanie Butland.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2022/01/06/runiverse-renv\"\u003eHow renv restores packages from r-universe for reproducibility or production\u003c/a\u003e by Jeroen Ooms. The latest version of renv now supports restoring packages that were installed from r-universe. In this post we explain how this works, and why it has to work this way.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eOne use cases of our packages and resources have been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://discuss.ropensci.org/t/evaluating-semi-parametric-nowcasts-of-covid-19-hospital-admissions-in-germany/2715\"\u003eEvaluating semi-parametric nowcasts of COVID-19 hospital admissions in Germany\u003c/a\u003e. Reported by Sam Abbott.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eThere are no open calls for new maintainers at this point but you can refer to our \u003ca href=\"https://contributing.ropensci.org/\"\u003econtributing guide\u003c/a\u003e for finding ways to get involved!As the maintainer of an rOpenSci package, feel free to contact us on Slack or email \u003ccode\u003einfo@ropensci.org\u003c/code\u003e to get your call for maintainer featured in the next newsletter.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"to-quote-or-not-to-quote-non-existing-words-in-description\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#to-quote-or-not-to-quote-non-existing-words-in-description\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTo quote or not to quote (non-existing words in DESCRIPTION)?\u003c/h3\u003e\u003cp\u003eTo avoid spelling NOTEs, it is recommended to \u003ca href=\"https://r-pkgs.org/description.html\"\u003e\u003cem\u003e\u0026ldquo;Put the names of R packages, software, and APIs inside single quotes.\u0026rdquo;\u003c/em\u003e in \u003ccode\u003eDESCRIPTION\u003c/code\u003e\u003c/a\u003e (as phrased in the R packages book by Hadley Wickham and Jenny Bryan).\u003c/p\u003e\u003cp\u003eNow, there is a hack allowing you to not add the quotes, as seen in e.g. \u003ca href=\"https://github.com/cran/RPostgres/tree/master/.aspell\"\u003eRPostgres\u003c/a\u003e.Say you use the non-existing words \u0026ldquo;changelog\u0026rdquo; and \u0026ldquo;versioning\u0026rdquo; in the \u003ccode\u003eDESCRIPTION\u003c/code\u003e of your package \u003ccode\u003ecoolstuff\u003c/code\u003e.Two steps!\u003c/p\u003e\u003cul\u003e\u003cli\u003eRun \u003ccode\u003esaveRDS(c(\u0026quot;versioning\u0026quot;, \u0026quot;changelog\u0026quot;), file = \u0026quot;.aspell/coolstuff.rds\u0026quot;, version = 2)\u003c/code\u003e which will create a file with these words!\u003c/li\u003e\u003cli\u003eAdd a script \u003ccode\u003e.aspell/defaults.R\u003c/code\u003e that will refer to both the standard dictionary (\u0026ldquo;en_stats\u0026rdquo;) and the one you just created (\u0026ldquo;coolstuff\u0026rdquo;).\u003c/li\u003e\u003c/ul\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eRd_files\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003evignettes\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003eR_files\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eencoding\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;UTF-8\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"n\"\u003elanguage\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;en\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e         \u003cspan class=\"n\"\u003edictionaries\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;en_stats\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;coolstuff\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eVoilà, goodbye quotes in \u003ccode\u003eDESCRIPTION\u003c/code\u003e!Thanks to \u003ca href=\"https://github.com/cynkra/fledge/pull/171#discussion_r762045958\"\u003eJim Hester and Kirill Müller\u003c/a\u003e for this cool trick that\u0026rsquo;s not \u003ca href=\"https://github.com/search?q=user%3Acran+extension%3Ards+path%3A.aspell\u0026amp;type=Code\u0026amp;l=\u0026amp;l=\"\u003eused a lot\u003c/a\u003e (yet?).It \u003cem\u003eis\u003c/em\u003e documented in R, see the sentence beginning with \u0026ldquo;Suitable values for\u0026rdquo; in \u003ca href=\"https://stat.ethz.ch/R-manual/R-patched/library/utils/html/aspell-utils.html\"\u003ehttps://stat.ethz.ch/R-manual/R-patched/library/utils/html/aspell-utils.html\u003c/a\u003e\u003c/p\u003e\u003ch3 id=\"potools-translate-your-package-user-facing-communications-like-messages-warnings-and-errors\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#potools-translate-your-package-user-facing-communications-like-messages-warnings-and-errors\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003epotools: Translate your package user-facing communications like messages, warnings, and errors\u003c/h3\u003e\u003cp\u003eYour package might be used by people at ease in different languages than the one you initially wrote e.g. error messages in.The \u003ca href=\"https://michaelchirico.github.io/potools/index.html\"\u003epotools package\u003c/a\u003e maintained by \u003ca href=\"https://github.com/MichaelChirico\"\u003eMichael Chirico\u003c/a\u003e provides \u0026ldquo;Tools for Portability and Internationalization of R packages\u0026rdquo;.It features great vignettes including one for \u003ca href=\"https://michaelchirico.github.io/potools/articles/developers.html\"\u003epackage developers\u003c/a\u003e and one for \u003ca href=\"https://michaelchirico.github.io/potools/articles/translators.html\"\u003epackage translators\u003c/a\u003e.The potools package is used in particular in the pkgdown package (\u003ca href=\"https://pkgdown.r-lib.org/articles/pkgdown.html?q=language#language\"\u003euser-facing docs for the language option\u003c/a\u003e).\u003c/p\u003e\u003ch3 id=\"how-to-provide-tibbles-only-to-those-who-like-them\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-provide-tibbles-only-to-those-who-like-them\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to provide tibbles only to those who like them\u003c/h3\u003e\u003cp\u003e\u0026ldquo;Only use tibbles if tibble installed\u0026rdquo;: this sounds great, doesn\u0026rsquo;t it?It\u0026rsquo;s the title of a \u003ca href=\"https://github.com/allisonhorst/palmerpenguins/pull/25\"\u003ePR by Hadley Wickham\u003c/a\u003e to the palmerpenguins package maintained by Allison Horst.Key to this PR is the use of \u003ccode\u003edelayedAssign()\u003c/code\u003e in \u003ccode\u003edata/penguins.R\u003c/code\u003e.The code changes are small enough to make this a really cool trick!\u003c/p\u003e\u003c!-- To be curated by hand --\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/01/21/ropensci-news-digest-january-2022/","date_published":"2022-01-21T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/mcme2-hdz10","title":"Community Management Transition for rOpenSci. A Message from Stefanie Butland","language":"en","authors":[{"name":"Stefanie Butland","url":"https://orcid.org/0000-0002-5427-8951","avatar":"https://ropensci.org/img/team/stefanie_butland.jpg","_role":["author"]}],"tags":["community"],"content_html":"\u003cp\u003eI’m writing to share news that I’m moving on from my position as rOpenSci’s Community Manager. Friday, January 14th is my last day.Being rOpenSci’s first Community Manager has been my dream job. You have all given me such joy over the past 5.5 years.I love collaborating to create new things, so it’s time for me to step away and take some time to explore what might come next.\u003c/p\u003e\u003cp\u003eI have always been driven to share knowledge, connect people, and help them recognize the value they bring to a project.Not surprisingly, themes in my work with rOpenSci have been true to my “personal brand”.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eThe value of welcome.\u003c/strong\u003e This one resonates with a lot of people.I’m proud of the ways in which I’ve embedded the value of welcome: in our Slack \u003ca href=\"/blog/2017/07/18/value-of-welcome/\"\u003e#welcome channel\u003c/a\u003e (thanks to R-Ladies for the inspiration); \u003ca href=\"/blog/2017/12/01/unconf-welcome/\"\u003epre-unconf questionnaires and chats\u003c/a\u003e with new community members; and the \u003ca href=\"/blog/2018/11/01/icebreaker/\"\u003eunconf ice breaker\u003c/a\u003e that got people opening up about their perceptions of where they fit in the broader R community.I tried to put the heart and soul of rOpenSci (and some of mine too) in the \u003ca href=\"https://contributing.ropensci.org/\"\u003erOpenSci Community Contributing Guide\u003c/a\u003e so that anyone can find where they fit.rOpenSci has a reputation as a welcoming community that is trusted by many.Living the value of welcome has given other people and organizations the freedom to embrace it too.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eGetting people attention for their work.\u003c/strong\u003e Contributing to rOpenSci activities is optional.When people participate in software peer review or share their use case for a package, for example, they\u0026rsquo;re \u0026ldquo;going the extra mile\u0026rdquo;.That is critical but less visible work, so I found ways to leverage rOpenSci\u0026rsquo;s large and influential audience to get these folks more attention.These days, more than half of all blog posts are by community members telling their own stories.My favorite will always be this joyful piece of detective work: \u003ca href=\"https://ropensci.org/blog/2019/04/18/wild-standards/\"\u003eWhen Standards Go Wild - Software Review for a Manuscript\u003c/a\u003e.It started with reading a tweet and led to a post co-created with a PhD researcher / package developer, their supervisor, a manuscript reviewer, the handling editor, and a journal staff person.Now it\u0026rsquo;s out there so others can see what is possible.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eExposing knowledge and fostering an appreciation of community engagement.\u003c/strong\u003e All along, I’ve tried to expose \u003cem\u003ehow\u003c/em\u003e and \u003cem\u003ewhy\u003c/em\u003e I’ve done things and sometimes advised others about adapting them for their own communities.Thus, the many blog posts linked above and in our \u003ca href=\"/author/stefanie-butland/\"\u003earchive\u003c/a\u003e.Community Calls have been a great low-barrier way to connect people with rOpenSci and each other.They have been \u003ca href=\"/blog/2021/02/02/ropensci-community-calls/\"\u003eintentionally set up\u003c/a\u003e (again borrowing from other organizations) to ease people into feeling like the invited speakers are there to inform the discussion, but that everyone has expertise and questions worth sharing.It was a thrill to see more than 160 people join \u003ca href=\"/commcalls/dec2020-datarepos/\"\u003ea call about data repositories\u003c/a\u003e, but it was perhaps the call with only 15 people attending - \u003ca href=\"/commcalls/2019-06-28/\"\u003eInvolving Multilingual Communities\u003c/a\u003e - that had the biggest impact.Over time and consistent efforts of the Latin American R community and our software peer review team, this ultimately led to rOpenSci’s \u003ca href=\"/blog/2021/07/27/censo2017-es/\"\u003efirst Spanish-language software peer review\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eA community engagement \u003ca href=\"/blog/2017/01/03/aaas-cefp/\"\u003efellowship\u003c/a\u003e early in my tenure had a huge influence on my work and has led to ongoing collaborations between rOpenSci and the Center for Scientific Collaboration and Community Engagement.These include the work that led to my useR! 2021 talk \u0026ldquo;rOpenSci’s Model for Managing a Federated Open Source Software Community\u0026rdquo; (\u003ca href=\"https://docs.google.com/presentation/d/1W4DepLd6FvunkGsTloyn-be_X5jI7dS-gAVtpsJb6iM/edit#slide=id.p\"\u003eslides\u003c/a\u003e, \u003ca href=\"https://www.youtube.com/watch?v=2B7H8WJOX40\u0026amp;list=PL4IzsxWztPdmHhzrXDAOpq4zS_peAVty2\u0026amp;index=19\u0026amp;t=1048s\"\u003evideo\u003c/a\u003e), creating the \u003ca href=\"https://doi.org/10.5281/zenodo.5033282\"\u003eCSCCE Community Profile of rOpenSci\u003c/a\u003e, and a new community champions program (linked below).\u003c/p\u003e\u003ch2 id=\"pray-thank-you\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#pray-thank-you\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e\u0026#x1f64f; Thank you\u003c/h2\u003e\u003cp\u003eThank you for making this novice R user feel like I\u0026rsquo;m part of \u003cem\u003eyour\u003c/em\u003e community.\u003c/p\u003e\u003cp\u003eI\u0026rsquo;ve been fortunate to join an organization and team that was community-focused from its start.Everything I created or accomplished was gleaned from or influenced by the ideas and work of the rOpenSci founders, staff, advisors, and community members.The thing that will last is the relationships we all have now, whether we connected only through an emoji-response to a Slack message (I notice these!), developed professional connections, or lasting friendships.\u003c/p\u003e\u003ch2 id=\"this-may-be-your-dream-job\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#this-may-be-your-dream-job\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThis may be your dream job!\u003c/h2\u003e\u003cp\u003eKeep an eye out for a job posting in February!rOpenSci is in an exciting phase in its evolution, from developing R packages, to helping people create their own by developing standards, guides, technical infrastructure, and scaffolded access to a community of peers.With \u003ca href=\"/blog/2021/12/20/inclusive-leadership-program/\"\u003enew funding\u003c/a\u003e to empower community leaders from historically excluded groups, and the opportunity to work with a lovely community-minded team, this is someone’s new dream job. Email info@ropensci.org if you think you might be interested.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/01/14/msg-from-stefanie/","date_published":"2022-01-14T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/w2fgn-c0883","title":"rOpenSci 2021 Code of Conduct Transparency Report","language":"en","authors":[{"name":"Kara Woo","url":"https://ropensci.org/author/kara-woo/","avatar":"https://github.com/karawoo.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Stefanie Butland","url":"https://orcid.org/0000-0002-5427-8951","avatar":"https://ropensci.org/img/team/stefanie_butland.jpg","_role":["author"]}],"tags":["community","code of conduct","governance"],"content_html":"\u003cp\u003eThe rOpenSci community is supported by our \u003ca href=\"/code-of-conduct\"\u003eCode of Conduct\u003c/a\u003e with a clear description of unacceptable behaviors, instructions on how to make a report, and information on how reports are handled. We, the Code of Conduct Committee, are responsible for receiving, investigating, deciding, enforcing and reporting on all reports of potential violations of our Code. We are committed to transparency with our community while upholding the privacy of people who experience or report incidents.\u003c/p\u003e\u003cp\u003eIn 2021, we did not receive any Code of Conduct incident reports.\u003c/p\u003e\u003cp\u003eWe acknowledge that a lack of incident reports does not mean everyone feels comfortable participating. This code of conduct belongs to the community. We welcome your feedback at any time by emailing conduct at ropensci.org.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/01/13/transparency2021/","date_published":"2022-01-13T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/bn1fe-67237","title":"rOpenSci Code of Conduct Annual Review","language":"en","authors":[{"name":"Kara Woo","url":"https://ropensci.org/author/kara-woo/","avatar":"https://github.com/karawoo.png","_role":["author"]},{"name":"Mark Padgham","url":"https://orcid.org/0000-0003-2172-5265","avatar":"https://ropensci.org/img/team/mark-padgham.jpg","_role":["author"]},{"name":"Megan Carter","url":"https://ropensci.org/author/megan-carter/","avatar":"https://ropensci.org/img/community/megan-carter.jpg","_role":["author"]},{"name":"Stefanie Butland","url":"https://orcid.org/0000-0002-5427-8951","avatar":"https://ropensci.org/img/team/stefanie_butland.jpg","_role":["author"]}],"tags":["code of conduct","governance","community"],"content_html":"\u003cp\u003eOur community is our best asset. It’s so important to us, it’s in our \u003ca href=\"https://ropensci.org/about/\"\u003emission statement\u003c/a\u003e. We recognize that communities are not inclusive by default; they require deliberate attention, including an enforceable \u003ca href=\"/code-of-conduct\"\u003eCode of Conduct\u003c/a\u003e.\u003c/p\u003e\u003cp\u003erOpenSci is committed to providing a safe, inclusive, welcoming, and harassment-free experience for everyone. We welcome people of all backgrounds and identities, including but not limited to gender, gender identity and expression, age, sexual orientation, disability, physical appearance, body size, race, ethnicity, religion (or lack thereof), or technology choices. We are anti-racist. We welcome anyone, no matter their technical expertise, career stage, or work sector.\u003c/p\u003e\u003cp\u003eWe are supported by rOpenSci’s Code of Conduct that applies to all people participating in the rOpenSci community, including rOpenSci staff and leadership. It applies to all modes of interaction online including GitHub project repositories, the rOpenSci discussion forum, Slack, Community Calls, and, should the pandemic ever permit, in person at rOpenSci-hosted events or events officially endorsed by rOpenSci, including social gatherings affiliated with the event. It is developed and enforced by a committee including rOpenSci staff and an independent community member.\u003c/p\u003e\u003cp\u003eHere we report on our annual review of rOpenSci\u0026rsquo;s Code of Conduct, reporting process, and internal guidelines for handling reports and enforcement.\u003c/p\u003e\u003ch2 id=\"updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdates\u003c/h2\u003e\u003col\u003e\u003cli\u003eA change to the committee. We welcome Megan Carter, ESIP Community Director, as a new independent member. \u003ca href=\"https://karawoo.com/\"\u003eKara Woo\u003c/a\u003e (independent community member) is on leave from the committee until May 2022. After serving on the Code of Conduct Committee for three years, Stefanie Butland is stepping down. Committee members for 2022 are \u003ca href=\"/author/mark-padgham\"\u003eMark Padgham\u003c/a\u003e (rOpenSci Software Research Scientist) and \u003ca href=\"https://www.esipfed.org/about/people/megan-carter\"\u003eMegan Carter\u003c/a\u003e (independent community member). We are responsible for receiving, investigating, deciding, enforcing and reporting on all reports of potential violations of our Code.\u003c/li\u003e\u003cli\u003eNo changes have been made to the text of the Code.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eWith this change of committee members, this will be version 2.3, dated January 13, 2021.\u003c/p\u003e\u003cp\u003eWe welcome your feedback by email to conduct at ropensci.org, and we thank you for continuing to work with us to make rOpenSci a safe, enjoyable, friendly and enriching experience for everyone who participates.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/01/13/conduct2022/","date_published":"2022-01-13T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/bf1vh-b2w72","title":"Gather on the rOpenSci Forum","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["forum","help"],"content_html":"\u003cp\u003eDo you have an account on the \u003ca href=\"https://discuss.ropensci.org\"\u003erOpenSci forum\u003c/a\u003e?As underlined in our \u003ca href=\"https://contributing.ropensci.org/resources.html#channels\"\u003econtributing guide\u003c/a\u003e, our forum is where we encourage \u003cstrong\u003eQ\u0026amp;A and exploration of ideas on a various range of topics\u003c/strong\u003e.Compared to our \u003ca href=\"https://contributing.ropensci.org/resources.html#channels\"\u003eSlack\u003c/a\u003e semi-open workspace, the forum is \u003cstrong\u003eentirely open and much easier to search\u003c/strong\u003e, so a great place to gather some collaborative knowledge!We have recently \u003cstrong\u003estreamlined categories\u003c/strong\u003e so that it might be easier for you to find where to post, and what to follow.In this post we shall present current forum categories, and ways for you to keep up-to-date with the activity without getting overwhelmed.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003ca href=\"https://www.pexels.com/photo/two-white-message-balloons-1111368/\"\u003e\u003cimg src=\"/blog/2022/01/11/ropensci-forum/convo.jpg\"\t\t\talt=\"Two paper message balloons on a pink background\" width=\"500px\"\u003e\u003c/a\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003ePicture by \u003ca href=\"https://www.pexels.com/fr-fr/@padrinan\"\u003eMiguel Á. Padriñán on Pexels\u003c/a\u003e.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"forum-categories\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#forum-categories\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eForum categories\u003c/h2\u003e\u003cp\u003eFirst note that forum categories are there to serve users, not the other way round!So if you post in the \u0026ldquo;wrong\u0026rdquo; category, no problem!If necessary, we can transfer the post to a more relevant category to make it more visible, but really no harm done!\u003c/p\u003e\u003ch3 id=\"package-use-questions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-use-questions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage Use Questions\u003c/h3\u003e\u003cp\u003eWonder how to \u003ca href=\"https://discuss.ropensci.org/t/magick-combining-several-images-into-one-while-controlling-their-relative-position/2697/3\"\u003ecombine images with magick\u003c/a\u003e?Or how to \u003ca href=\"https://discuss.ropensci.org/t/updating-resources-with-ckanr/2631/6\"\u003eupdate resources with ckanr\u003c/a\u003e?\u003ca href=\"https://discuss.ropensci.org/c/packages/7\"\u003ePackage Use Questions\u003c/a\u003e is the category for Q\u0026amp;A on any of our \u003ca href=\"/packages\"\u003epackages\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"wishlist\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#wishlist\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWishlist\u003c/h3\u003e\u003cp\u003eWhat if you wish that, or wonder whether, a certain package existed?Post in the \u003ca href=\"https://discuss.ropensci.org/c/wishlist/6\"\u003eWishlist category\u003c/a\u003e!\u003c/p\u003e\u003ch3 id=\"package-development\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage Development\u003c/h3\u003e\u003cp\u003eDo you maintain or contribute to an R package, rOpenSci-affiliated or not?You can ask questions in the \u003ca href=\"https://discuss.ropensci.org/c/package-development/29\"\u003ePackage Development category\u003c/a\u003e!\u003c/p\u003e\u003ch3 id=\"general-qa\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#general-qa\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGeneral Q\u0026amp;A\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://discuss.ropensci.org/c/general-qa/17\"\u003eQ\u0026amp;A category\u003c/a\u003e is good for asking about any topic related to R, rOpenSci, reproducible and transparent science, etc.\u003c/p\u003e\u003ch3 id=\"jobs\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#jobs\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eJobs\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://discuss.ropensci.org/c/jobs/22\"\u003eJobs category\u003c/a\u003e welcomes job postings!Please keep your posts limited to jobs that seem like a good fit for our community. That is, jobs relating to software + science.\u003c/p\u003e\u003ch3 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse Cases\u003c/h3\u003e\u003cp\u003eUse (\u0026#x1f609;) the \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003eUse Cases category\u003c/a\u003e for reporting examples of how our \u003ca href=\"/packages\"\u003epackages\u003c/a\u003e or resources (e.g. our \u003ca href=\"https://devguide.ropensci.org\"\u003edev guide\u003c/a\u003e or \u003ca href=\"https://contributing.ropensci.org\"\u003econtributing guide\u003c/a\u003e) have been used in the wild.We then extract use cases as JSON and present them in a nice table on \u003ca href=\"/usecases\"\u003ethis very website\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBlog\u003c/h3\u003e\u003cp\u003eThis is the category you\u0026rsquo;d end up in via the blog itself, as it\u0026rsquo;s used for commenting!\u003c/p\u003e\u003ch3 id=\"code-of-conduct\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#code-of-conduct\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCode of Conduct\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://discuss.ropensci.org/c/conduct/25\"\u003eCode of Conduct category\u003c/a\u003e is reserved for transparency reports made by our \u003ca href=\"/code-of-conduct\"\u003ecode of conduct committee\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"meta\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#meta\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMeta\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://discuss.ropensci.org/c/meta/3\"\u003eMeta category\u003c/a\u003e is the home for questions and ideas related to the forum itself!\u003c/p\u003e\u003ch3 id=\"antarctic\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#antarctic\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAntarctic\u003c/h3\u003e\u003cp\u003eIf you want to discuss R in Antarctic and Southern Ocean science, use the \u003ca href=\"https://discuss.ropensci.org/c/antarctic/23\"\u003eAntarctic category\u003c/a\u003e!\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003ca href=\"https://www.pexels.com/photo/pink-background-with-speech-bubble-1111369/\"\u003e\u003cimg src=\"/blog/2022/01/11/ropensci-forum/bubble.jpeg\"\t\t\talt=\"Speech bubble on a pink background\" width=\"500px\"\u003e\u003c/a\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003ePicture by \u003ca href=\"https://www.pexels.com/fr-fr/@padrinan\"\u003eMiguel Á. Padriñán on Pexels\u003c/a\u003e.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"how-to-follow-the-forum\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-follow-the-forum\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to follow the forum?\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eVisiting the forum everyday as part of your morning routine might not be exactly doable nor efficient.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eExploring other topics every time you \u003cem\u003epost\u003c/em\u003e a job posting or a package use question might be a great way to informally keep in touch!\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eYou can subscribe to each category via the bell icon that\u0026rsquo;s at the top right. Then in your email service you could create a filter to have all emails from the forum arrive in a folder that you\u0026rsquo;d open when you have time to engage.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eYou can add the RSS feed of each category to your feed reader. The link to the RSS feed is the URL to the category plus \u003ccode\u003e.rss\u003c/code\u003e e.g. \u003ccode\u003ehttps://discuss.ropensci.org/c/package-development/29.rss\u003c/code\u003e (but if you copy-paste the URL \u003ccode\u003ehttps://discuss.ropensci.org/c/package-development/29\u003c/code\u003e in e.g. Feedly the actual feed will be found without your help).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eIn our \u003ca href=\"https://contributing.ropensci.org/resources.html#channels\"\u003esemi-open slack workspace\u003c/a\u003e, there\u0026rsquo;s a channel, \u003ccode\u003e#discuss-ropensci\u003c/code\u003e with all activity from the forum, but that\u0026rsquo;s probably not optimal for casual forum use.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSubscribing to our \u003ca href=\"/news\"\u003enewsletter\u003c/a\u003e would mean you indirectly gain information from the forum as we summarized recent use cases, and digest package development tips.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cfigure class=\"center\"\u003e\u003ca href=\"https://www.pexels.com/photo/white-bubble-illustration-1111372/\"\u003e\u003cimg src=\"/blog/2022/01/11/ropensci-forum/cloud.jpg\"\t\t\talt=\"Thought cloud bubble on a pink background\" width=\"500px\"\u003e\u003c/a\u003e\u003cfigcaption\u003e\t\t\t\u003cp\u003ePicture by \u003ca href=\"https://www.pexels.com/fr-fr/@padrinan\"\u003eMiguel Á. Padriñán on Pexels\u003c/a\u003e.\u003c/p\u003e\t\t\u003c/figcaption\u003e\u003c/figure\u003e\u003ch2 id=\"not-forum-categories\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#not-forum-categories\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNot forum categories\u003c/h2\u003e\u003cp\u003eThe following topics used to be forum categories and they\u0026rsquo;re still there as an archive, but all new discussions have moved.\u003c/p\u003e\u003cp\u003eDiscussions about \u003ca href=\"/r-universe\"\u003eR-universe\u003c/a\u003e are encouraged in \u003ca href=\"https://github.com/r-universe-org/help/discussions\"\u003ehttps://github.com/r-universe-org/help/discussions\u003c/a\u003e \u0026amp; bug reports to \u003ca href=\"https://github.com/r-universe-org/help/issues\"\u003ehttps://github.com/r-universe-org/help/issues\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eDiscussions about \u003ca href=\"/software-review/\"\u003estatistical software review\u003c/a\u003e have moved to \u003ca href=\"https://github.com/ropensci/statistical-software-review-book/discussions\"\u003ehttps://github.com/ropensci/statistical-software-review-book/discussions\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we presented the new streamlined categories used on our public forum.We hope some are of interest to you and that you\u0026rsquo;ll take advantage of them and contribute to the conversations!\u003c/p\u003e","url":"https://ropensci.org/blog/2022/01/11/ropensci-forum/","date_published":"2022-01-11T00:00:00+00:00","date_modified":"2026-02-23T09:39:21+01:00"},{"id":"https://doi.org/10.59350/rpxqc-1gk81","title":"How renv restores packages from r-universe for reproducibility or production","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","tech notes","reproducibility","renv"],"content_html":"\u003ch2 id=\"what-is-renv\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-is-renv\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat is renv\u003c/h2\u003e\u003cp\u003eRStudio\u0026rsquo;s \u003ca href=\"https://rstudio.github.io/renv/\"\u003erenv\u003c/a\u003e package is a powerful dependency management toolkit for R. It allows you to create a \u003cem\u003elockfile\u003c/em\u003e that records the exact versions of R packages used in a given project, and provides tooling to install exactly those same versions on another machine, or at a later point in time. This is very useful to create an isolated project environment for reproducibility or production purposes.\u003c/p\u003e\u003cp\u003eThe \u003ca href=\"https://rstudio.github.io/renv/news/index.html#renv-0150\"\u003elatest version of renv (0.15.0)\u003c/a\u003e now supports restoring packages that were installed from r-universe. In this post we explain how this works, and why it has to work this way.\u003c/p\u003e\u003ch2 id=\"why-r-universe-is-not-an-archive\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-r-universe-is-not-an-archive\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy r-universe is not an archive\u003c/h2\u003e\u003cp\u003eThe letter A in CRAN stands for \u0026lsquo;archive\u0026rsquo;: the source code for all versions of all packages that were ever released on CRAN are stored indefinitely on an ever-growing ftp server. The CRAN homepage for each package has a link to \u0026ldquo;Old sources\u0026rdquo; which lists all the source packages (with timestamps) in the archive, \u003ca href=\"https://cran.r-project.org/src/contrib/Archive/Matrix/\"\u003esome dating back over 20 years\u003c/a\u003e. This is a fantastic service, but quite expensive. For this reason CRAN has to limit the size of source packages and release frequency per package.\u003c/p\u003e\u003cp\u003eA fundamental difference between \u003ca href=\"https://r-universe.dev\"\u003er-universe\u003c/a\u003e and CRAN is that r-universe has \u003cem\u003erolling\u003c/em\u003e development model. The system automatically tracks the upstream git repositories and continuously builds and deploys from the latest commits, sometimes many times per day per package. We do not archive all of these versions in r-universe, but instead rely on the upstream git repositories to provide historical sources.\u003c/p\u003e\u003cp\u003eBecause packages published in r-universe are by definition built from a public git server, R and renv can treat such packages the same way as packages installed directly from git using e.g. \u003ccode\u003einstall_github()\u003c/code\u003e. Effectively, r-universe serves a gateway to content on git, and if we know the upstream git-url and commit-id, it is unimportant how the package was installed exactly.\u003c/p\u003e\u003ch2 id=\"how-it-works\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-it-works\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow it works\u003c/h2\u003e\u003cp\u003eFor every R package on r-universe, the build system adds some extra fields to the DESCRIPTION file with details on where the package was installed from. This includes the cranlike repository on r-universe, and the upstream Git url, branch and commit that the package was built from.\u003c/p\u003e\u003cp\u003eFor example, have a look at the DESCRIPTION file from the gert package:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Download gert source package and extract the DESCRIPTION file\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003egert\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003edownload.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;gert\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;.\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;source\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;https://r-lib.r-universe.dev\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003euntar\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egert[\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;gert/DESCRIPTION\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etar\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#39;internal\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ereadLines\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;gert/DESCRIPTION\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe following fields were added by r-universe:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## ...\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [30] \u0026#34;Repository: https://r-lib.r-universe.dev\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [31] \u0026#34;RemoteUrl: https://github.com/r-lib/gert\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [32] \u0026#34;RemoteRef: HEAD\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [33] \u0026#34;RemoteSha: b9dcd4c00449702cf70e782dc28eabf80c8d5971\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWe can also retrieve the same data though the r-universe APIs, for example:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epkg\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ejsonlite\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003efromJSON\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;https://r-lib.r-universe.dev/packages/gert/any/src\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epkg\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eRemoteSha\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [1] \u0026#34;b9dcd4c00449702cf70e782dc28eabf80c8d5971\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNow this gives us an unambiguous reference to the exact source code, in this case:\u003c/p\u003e\u003cpre\u003e\u003ccode\u003ehttps://github.com/r-lib/gert/tree/b9dcd4c00449702cf70e782dc28eabf80c8d5971\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis provides renv and similar tools with the required information for installing precisely this same version on another machine. There is no way to cheat: any change in source code will result in a different sha, even if the version number in the description file stays the same.\u003c/p\u003e\u003ch2 id=\"how-renv-restores-from-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-renv-restores-from-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow renv restores from r-universe\u003c/h2\u003e\u003cp\u003e\u003cimg src=\"/blog/2022/01/06/runiverse-renv/diagram.svg\" alt=\"flow chart from upstream git server to r\"\u003e\u003c/p\u003e\u003cp\u003eDepending on where a package originates from, renv uses different methods for finding an older source. For CRAN packages, it uses the CRAN archive, and for packages installed with \u003ccode\u003einstall_github()\u003c/code\u003e it will checkout the old version from git based on the commit hash.\u003c/p\u003e\u003cp\u003eFor r-universe it uses a hybrid approach: it first checks if the required version is available from the cranlike repository that was mentioned in the package \u003ccode\u003eRepository\u003c/code\u003e field, i.e. \u003ccode\u003ehttps://r-lib.r-universe.dev\u003c/code\u003e for the \u003ccode\u003egert\u003c/code\u003e example above. The benefit of using the cranlike repository is that binary packages are available for Windows and Mac, which will ease the installation a bit.\u003c/p\u003e\u003cp\u003eIf the package is no longer available on r-universe, renv will clone and checkout the source code from the \u003ccode\u003eRemoteUrl\u003c/code\u003e and \u003ccode\u003eRemoteSha\u003c/code\u003e values, in the same way as for packages installed with \u003ccode\u003einstall_github()\u003c/code\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2022/01/06/runiverse-renv/","date_published":"2022-01-06T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/7nkx7-k7j42","title":"rOpenSci Announces $400k Award from the Chan Zuckerberg Initiative to Empower Historically Excluded Groups as Community Leaders in Scientific Open Source Projects","language":"en","authors":[{"name":"Karthik Ram","url":"https://ropensci.org/author/karthik-ram/","avatar":"https://ropensci.org/img/team/karthik-ram.png","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["author"]},{"name":"Stefanie Butland","url":"https://orcid.org/0000-0002-5427-8951","avatar":"https://ropensci.org/img/team/stefanie_butland.jpg","_role":["author"]}],"tags":["funding","champions program","cscce","diversity","belonging"],"content_html":"\u003cp\u003eWe are thrilled to have been awarded new funding as part of the Chan Zuckerberg Initiative \u003ca href=\"https://czi.co/OpenScience\"\u003eOpen Science program\u0026rsquo;s\u003c/a\u003e education and capacity building strategy. This $400K grant will support a new project to enable more members of historically excluded groups to participate in, benefit from, and become leaders in the R, research software engineering, and open source and open science communities.\u003c/p\u003e\u003cp\u003eDevelopers in the R and open source communities are overwhelmingly white, male, from a handful of countries, primarily English-speaking, and do not use assistive technologies to participate. Research software should serve everyone in our communities. It needs to be sustainable and open and \u003cstrong\u003ebuilt by and for all groups\u003c/strong\u003e.\u003c/p\u003e\u003ch3 id=\"developing-embedded-community-champions-and-peer-mentorship-groups\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#developing-embedded-community-champions-and-peer-mentorship-groups\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDeveloping embedded community champions and peer mentorship groups\u003c/h3\u003e\u003cp\u003eA community champion is defined by the Center for Scientific Collaboration and Community Engagement (\u003ca href=\"http://www.cscce.org/\"\u003eCSCCE\u003c/a\u003e) as “an emergent leadership role within a community in which a community member takes on more responsibility for the success, sustainability, and/or running of the community”\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e. In collaboration with the CSCCE, we will design, implement, and evaluate a program to increase the diversity of contributors across all channels and levels of participation in rOpenSci by supporting two cohorts of community champions from historically excluded groups.\u003c/p\u003e\u003cp\u003eEach cohort will receive training on (1) how to plan and facilitate engaging and inclusive workshops to support participants’ success (by CSCCE), (2) channels through which new members can engage in and contribute to rOpenSci and R projects, and (3) technical skills in software development and review. This series of 90-minute sessions will be supplemented by ongoing peer connection in a private Slack channel so that champions expand their own professional support networks while gaining new skills. After training, champions will organize peer groups in communities in which they are embedded. They will promote participation in peer review and contribution to rOpenSci open source software, infrastructure, and documentation and gather feedback on where rOpenSci’s current programming might be improved to meet the needs of all who wish to participate. The tenure and responsibilities of each cohort will have clear start and end dates and champions will receive an honorarium.\u003c/p\u003e\u003cp\u003eWe will develop \u003cem\u003epeer mentorship groups\u003c/em\u003e to support participants from historically excluded groups in their first technical contributions. Peer-mentorship groups will be facilitated by rOpenSci technical and community management staff, and also by community champions after Year One. Facilitators will provide training for technical activities (preparing a pull request, reviewing a package, preparing a package for submission or publication on rOpenSci infrastructure). Training will be followed by group \u0026ldquo;office hours\u0026rdquo;, 1-on-1 support, and closed group chats to support first-time participants in making their first open-source contributions through rOpenSci.\u003c/p\u003e\u003ch3 id=\"expanding-documentation-beyond-the-english-language\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#expanding-documentation-beyond-the-english-language\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExpanding documentation beyond the English language\u003c/h3\u003e\u003cp\u003eOne of our most successful efforts is our \u003ca href=\"https://ropensci.org/software-review/\"\u003eSoftware Peer Review System\u003c/a\u003e\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e. In 2021, we successfully \u003ca href=\"https://ropensci.org/blog/2021/07/27/censo2017-es/\"\u003epiloted Spanish-language software peer review\u003c/a\u003e in which the submission itself, and all reviews and editorial responses were in Spanish. While Spanish-language review is now available, our documentation is still only available in English. We will translate our \u003ca href=\"https://devguide.ropensci.org/\"\u003eDev Guide\u003c/a\u003e “rOpenSci Packages: Development, Maintenance, and Peer Review” and associated components of the peer-review system (e.g., submission forms, bug report templates), and produce guidance for authors on including non-English documentation in their software packages. As part of Year Two activities, we will explore the potential for expansion beyond Spanish to other languages, soliciting community input on demand and conducting pilot reviews.\u003c/p\u003e\u003ch3 id=\"gratitude-for-those-who-do-the-hard-work\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#gratitude-for-those-who-do-the-hard-work\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eGratitude for those who do the hard work\u003c/h3\u003e\u003cp\u003eWe would like to thank organizations like \u003ca href=\"https://mircommunity.com/\"\u003eMinorities in R\u003c/a\u003e for those who are often the \u0026ldquo;only ones in the room\u0026rdquo;, the \u003ca href=\"http://lacion.rbind.io/talk/2020_user2020_panel/\"\u003eLatin American R community\u003c/a\u003e, \u003ca href=\"https://africa-r.org/#home\"\u003eAfricaR\u003c/a\u003e, the nascent AsiaR community,  \u003ca href=\"https://rladies.org/about-us/\"\u003eR-Ladies\u003c/a\u003e for women and other gender minorities, \u003ca href=\"https://forwards.github.io/\"\u003eForwards\u003c/a\u003e and \u003ca href=\"https://user2021.r-project.org/blog/2021/11/04/accessibility_interview_liz_hare/\"\u003eprojects that encourage implementing accessibility standards\u003c/a\u003e\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e. Their members do the hard work and show us the way.\u003c/p\u003e\u003cp\u003eLook for an rOpenSci champions project launch announcement in 2022.\u003c/p\u003e\u003ch3 id=\"references\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#references\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReferences\u003c/h3\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eWoodley L. and Pratt K. (2021). Center for Scientific Collaboration and Community Engagement. (2021) The CSCCE Community Participation Model - Exploring the Champion mode. \u003ca href=\"https://doi.org/10.5281/zenodo.5275270\"\u003e10.5281/zenodo.5275270\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eRam K., Boettiger C., Chamberlain S., Ross N., Salmon M. and Butland S. (2019) \u0026ldquo;A Community of Practice Around Peer Review for Long-Term Research Software Sustainability,\u0026rdquo; in Computing in Science \u0026amp; Engineering, vol. 21, no. 2, pp. 59-65, \u003ca href=\"https://doi.org/10.1109/MCSE.2018.2882753\"\u003e10.1109/MCSE.2018.2882753\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eHow To Improve Conference Accessibility For Screen-Reader Users — An Interview With Liz Hare \u003ca href=\"https://user2021.r-project.org/blog/2021/11/04/accessibility_interview_liz_hare/\"\u003ehttps://user2021.r-project.org/blog/2021/11/04/accessibility_interview_liz_hare/\u003c/a\u003e accessed Dec 13, 2021\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2021/12/20/inclusive-leadership-program/","date_published":"2021-12-20T00:00:00+00:00","date_modified":"2025-03-24T15:06:22+01:00"},{"id":"https://doi.org/10.59350/nrksz-pzw16","title":"Thank You to the rOpenSci Community, 2021","language":"en","authors":[{"name":"Stefanie Butland","url":"https://orcid.org/0000-0002-5427-8951","avatar":"https://ropensci.org/img/team/stefanie_butland.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]}],"tags":["community","thank you"],"content_html":"\u003cp\u003eCan you think of an rOpenSci community member that you\u0026rsquo;d like to thank?\u003c/p\u003e\u003cul\u003e\u003cli\u003eA reviewer who helped you improve your package?\u003c/li\u003e\u003cli\u003eSomeone who answered your question?\u003c/li\u003e\u003cli\u003eA community call speaker from whom you gained insight?\u003c/li\u003e\u003cli\u003eSomeone who encouraged you behind the scenes?\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eConsider leaving them a note in the comments below expressing your gratitude.We often \u003cem\u003ethink\u003c/em\u003e our thank yous, but \u003cem\u003eexpressing\u003c/em\u003e thank yous can be incredibly meaningful.Try to be specific.What did they do?What impact did their actions have?\u003c/p\u003e\u003cp\u003eOn that note, we also want to take a moment to say \u003cstrong\u003ethank you\u003c/strong\u003e, to YOU.Thank you so much for making the rOpenSci community that much more awesome.\u003c/p\u003e\u003cp\u003eAlthough it\u0026rsquo;s been another hard year across the globe, this community has continued to come together to build good things.We\u0026rsquo;ve had 20 packages successfully complete \u003ca href=\"/software-review/\"\u003esoftware peer review\u003c/a\u003e\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e with the help of about 40 \u003ca href=\"https://devguide.ropensci.org/softwarereviewintro.html#reviewers\"\u003ereviewers\u003c/a\u003e and 11 \u003ca href=\"/about/#team\"\u003eeditors\u003c/a\u003e, including 3 \u003ca href=\"/blog/2021/10/12/editors2021/\"\u003enew editors\u003c/a\u003e.Many people contributed code or documentation. Similar to last year, 85 people made their first code contribution to rOpenSci this year!Others shared 88 new \u003ca href=\"/usecases/\"\u003euse cases\u003c/a\u003e to help package authors see how their work is being used and help other users imagine how they can apply it.\u003c/p\u003e\u003cp\u003eOur community has benefited from the voices of many different people this year. Our \u003ca href=\"/archive/\"\u003eblog\u003c/a\u003e had 34 community member authors, including 13 first-time authors, \u003ca href=\"/commcalls/\"\u003eCommunity Calls\u003c/a\u003e were attended by over 200 people in 27 countries on 5 continents, and virtual \u003ca href=\"/blog/2021/08/17/coworking-sessions/\"\u003esocial coworking and office hours\u003c/a\u003e brought together people from at least 12 countries to get their own work done and to join in some spirited scavenger hunts!Many others have continued to cite our software, ask or answer questions, open issues to report bugs or request features, make pull requests to fix things, weigh in on standards and best practices, invited us to talk about our work, or mentioned us in a presentation, a post, or on Twitter.\u003c/p\u003e\u003cp\u003eSome people’s volunteer contributions this year warrant a special mention (alphabetically sorted by first name):\u003c/p\u003e\u003cul\u003e\u003cli\u003eEditors for \u003ca href=\"/software-review/\"\u003eSoftware Peer Review\u003c/a\u003e: \u003ca href=\"/author/adam-sparks/\"\u003eAdam Sparks\u003c/a\u003e, \u003ca href=\"/author/anna-krystalli/\"\u003eAnna Krystalli\u003c/a\u003e, \u003ca href=\"/emily-riederer/\"\u003eEmily Riederer\u003c/a\u003e, \u003ca href=\"/author/laura-decicco/\"\u003eLaura DeCicco\u003c/a\u003e, \u003ca href=\"/author/jeff-hollister/\"\u003eJeff Hollister\u003c/a\u003e, \u003ca href=\"/author/julia-gustavsen/\"\u003eJulia Gustavsen\u003c/a\u003e, \u003ca href=\"/author/mauro-lepore/\"\u003eMauro Lepore\u003c/a\u003e, \u003ca href=\"/author/melina-vidoni/\"\u003eMelina Vidoni\u003c/a\u003e, plus rOpenSci team members who volunteer as Editors, \u003ca href=\"/author/karthik-ram/\"\u003eKarthik Ram\u003c/a\u003e, \u003ca href=\"/author/noam-ross/\"\u003eNoam Ross\u003c/a\u003e, \u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e and alumnus \u003ca href=\"/author/brooke-anderson/\"\u003eBrooke Anderson\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eAdvisory Board and Editors for \u003ca href=\"/software-review/\"\u003eStatistical Software Peer Review\u003c/a\u003e: \u003ca href=\"https://ms.mcmaster.ca/~bolker/\"\u003eBen Bolker\u003c/a\u003e, \u003ca href=\"/author/leonardo-collado-torres/\"\u003eLeonardo Collado-Torres\u003c/a\u003e, \u003ca href=\"http://www.paulamoraga.com/\"\u003ePaula Moraga\u003c/a\u003e, \u003ca href=\"/author/rebecca-killick/\"\u003eRebecca Killick\u003c/a\u003e, \u003ca href=\"https://www.stephaniehicks.com/\"\u003eStephanie Hicks\u003c/a\u003e, \u003ca href=\"https://tdhock.github.io/\"\u003eToby Hocking\u003c/a\u003e, and alumni \u003ca href=\"https://www.roswellpark.org/martin-morgan\"\u003eMartin Morgan\u003c/a\u003e, \u003ca href=\"http://appliedpredictivemodeling.com/\"\u003eMax Kuhn\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eContributors to fine tuning of our processes and tools for \u003ca href=\"/software-review/\"\u003eStatistical Software Peer Review\u003c/a\u003e: \u003ca href=\"/author/christoph-sax/\"\u003eChristoph Sax\u003c/a\u003e, \u003ca href=\"https://jounihelske.netlify.app/\"\u003eJouni Helske\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eNew maintainers of existing rOpenSci packages: \u003ca href=\"https://github.com/AlbanSagouis\"\u003eAlban Sagouis\u003c/a\u003e, \u003ca href=\"https://github.com/bmkramer\"\u003eBianca Kramer\u003c/a\u003e, \u003ca href=\"https://wiernik.org/\"\u003eBrenton Wiernik\u003c/a\u003e, \u003ca href=\"https://github.com/djhocking\"\u003eDaniel Hocking\u003c/a\u003e, \u003ca href=\"https://selbydavid.com/\"\u003eDavid Selby\u003c/a\u003e, \u003ca href=\"https://github.com/gavinsimpson\"\u003eGavin Simpson\u003c/a\u003e, \u003ca href=\"https://github.com/hannahlowens\"\u003eHannah Owens\u003c/a\u003e, \u003ca href=\"https://github.com/jhnwllr\"\u003eJohn Waller\u003c/a\u003e, \u003ca href=\"https://llrs.dev/\"\u003eLluís Revilla Sancho\u003c/a\u003e, \u003ca href=\"https://www.lunasare.com/\"\u003eLuna Reyes\u003c/a\u003e, \u003ca href=\"https://github.com/mbojan\"\u003eMichał Bojanowski\u003c/a\u003e, \u003ca href=\"https://github.com/njahn82\"\u003eNajko Jahn\u003c/a\u003e, \u003ca href=\"https://github.com/naupaka\"\u003eNaupaka Zimmerman\u003c/a\u003e, \u003ca href=\"https://github.com/rfhb\"\u003eRalf Herold\u003c/a\u003e, \u003ca href=\"https://github.com/rmendels\"\u003eRoy Mendelssohn\u003c/a\u003e, \u003ca href=\"https://github.com/salix-d\"\u003eSalix Dubois\u003c/a\u003e, \u003ca href=\"https://www.sharlagelfand.com/\"\u003eSharla Gelfand\u003c/a\u003e, \u003ca href=\"https://github.com/vijaybarve\"\u003eVijay Barve\u003c/a\u003e, \u003ca href=\"https://www.gbif.org/\"\u003ethe GBIF team\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eParticipants in our \u003ca href=\"https://github.com/ropensci/software-review/issues/414\"\u003epilot software peer review entirely in Spanish\u003c/a\u003e: \u003ca href=\"https://pacha.dev/\"\u003eMauricio Vargas Sepúlveda (Pachá)\u003c/a\u003e, \u003ca href=\"https://github.com/FvD\"\u003eFrans van Dunné\u003c/a\u003e, \u003ca href=\"https://github.com/mpaulacaldas\"\u003eMaria Paula Caldas\u003c/a\u003e, \u003ca href=\"/author/melina-vidoni/\"\u003eMelina Vidoni\u003c/a\u003e, \u003ca href=\"/author/mauro-lepore/\"\u003eMauro Lepore\u003c/a\u003e, and \u003ca href=\"https://yabellini.netlify.app/\"\u003eYanina Bellini Saibene\u003c/a\u003e for \u003ca href=\"https://discuss.ropensci.org/t/language-documentation-for-a-package/2221\"\u003eencouraging us\u003c/a\u003e;\u003c/li\u003e\u003cli\u003ePresenters in our Community Calls: \u003ca href=\"/author/alex-hayes/\"\u003eAlex Hayes\u003c/a\u003e, \u003ca href=\"/author/anna-krystalli/\"\u003eAnna Krystalli\u003c/a\u003e, \u003ca href=\"/author/arfon-smith/\"\u003eArfon Smith\u003c/a\u003e, \u003ca href=\"/author/christoph-sax/\"\u003eChristoph Sax\u003c/a\u003e, \u003ca href=\"/author/hugo-gruson/\"\u003eHugo Gruson\u003c/a\u003e, \u003ca href=\"/author/john-sakaluk/\"\u003eJohn Sakaluk\u003c/a\u003e, \u003ca href=\"/author/juliane-manitz/\"\u003eJuliane Manitz\u003c/a\u003e, \u003ca href=\"/author/rebecca-killick/\"\u003eRebecca Killick\u003c/a\u003e, and the many many people who commented in our shared docs;\u003c/li\u003e\u003cli\u003eContributors to our guides\u003cul\u003e\u003cli\u003e\u003ca href=\"https://stats-devguide.ropensci.org/\"\u003erOpenSci Statistical Software Peer Review\u003c/a\u003e: \u003ca href=\"/author/christoph-sax/\"\u003eChristoph Sax\u003c/a\u003e, \u003ca href=\"https://github.com/Nowosad\"\u003eJakub Nowosad\u003c/a\u003e, \u003ca href=\"https://github.com/jsta\"\u003eJem Stachelek\u003c/a\u003e, and stats peer review Editors;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://devguide.ropensci.org/\"\u003erOpenSci Packages: Development, Maintenance, and Peer Review\u003c/a\u003e: \u003ca href=\"\"\u003eChristophe Dervieux\u003c/a\u003e, \u003ca href=\"https://github.com/FvD\"\u003eFrans van Dunné\u003c/a\u003e, \u003ca href=\"/author/hugo-gruson/\"\u003eHugo Gruson\u003c/a\u003e, \u003ca href=\"https://llrs.dev/\"\u003eLluís Revilla Sancho\u003c/a\u003e, and peer review Editors;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://contributing.ropensci.org/\"\u003erOpenSci Community Contributing Guide\u003c/a\u003e: \u003ca href=\"https://www.carloscamara.es/\"\u003eCarlos Cámara\u003c/a\u003e, \u003ca href=\"https://github.com/jonas-hag\"\u003eJonas Hagenberg\u003c/a\u003e, \u003ca href=\"https://github.com/Lenostatos\"\u003eLeon Lenostatos\u003c/a\u003e;\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eExternal member of our Code of Conduct Committee, \u003ca href=\"/author/kara-woo/\"\u003eKara Woo\u003c/a\u003e;\u003c/li\u003e\u003cli\u003erOpenSci Strategic Advisors, \u003ca href=\"/author/carl-boettiger/\"\u003eCarl Boettiger\u003c/a\u003e, \u003ca href=\"/author/jenny-bryan/\"\u003eJenny Bryan\u003c/a\u003e, \u003ca href=\"/author/rich-fitzjohn/\"\u003eRich FitzJohn\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe extend a special thank you to staff alumnus and rOpenSci co-founder Scott Chamberlain for his decade of contributions to rOpenSci and the R community.\u003c/p\u003e\u003cp\u003eThank you \u003cstrong\u003eall\u003c/strong\u003e for making rOpenSci. Wishing you a 2022 in which we all feel like we belong.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eall numbers reported in this post are from Dec 1, 2020 to Nov 30, 2021\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2021/12/17/thank-you-2021/","date_published":"2021-12-17T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/1qbfh-qbv10","title":"rOpenSci News Digest, November 2021","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2021/11/30/ropensci-news-digest-november-2021\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"community-call-ropensci-review-bot-help\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call-ropensci-review-bot-help\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity call: @ropensci-review-bot help!\u003c/h3\u003e\u003cp\u003eTuesday, 07 December 2021 17:00 UTC we\u0026rsquo;ll share how we are \u003ca href=\"/commcalls/dec2021-automation/\"\u003e\u003cstrong\u003eEnhancing Software Peer Review with GitHub Automation\u003c/strong\u003e\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eSpeakers \u003ca href=\"https://www.arfon.org/\"\u003eArfon Smith\u003c/a\u003e, \u003ca href=\"/author/karthik-ram\"\u003eKarthik Ram\u003c/a\u003e, \u003ca href=\"/author/ma%C3%ABlle-salmon\"\u003eMaëlle Salmon\u003c/a\u003e and \u003ca href=\"/author/noam-ross\"\u003eNoam Ross\u003c/a\u003e will discuss how rOpenSci has worked with \u003ca href=\"https://joss.theoj.org/\"\u003eThe Journal of Open Source Software (JOSS)\u003c/a\u003e to extend their approach of \u003ca href=\"https://www.arfon.org/chatops-driven-publishing\"\u003echatops-driven publishing\u003c/a\u003e into a new GitHub chat-bot that manages our editorial process: assigning tasks, tagging issues, running tests on software submissions, and returning reports to reviewers and editors, all from the comfort of a GitHub issue comment. Chat-ops automation has been critical to JOSS’s success, and shows huge promise for automating even more tedious tasks like frequent software checks and compliance with best practices. We will show how our new review bot improves the author and editor experience, \u003cstrong\u003eexplain how other teams can use and customize the bot\u003c/strong\u003e, and discuss how this approach can be extended to tackle other automation, code review, and reproducibility challenges.\u003c/p\u003e\u003cp\u003eCome join the conversation, we\u0026rsquo;ll have lots of time for Q \u0026amp; A.\u003c/p\u003e\u003ch3 id=\"ropensci-help-wanted-issues\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-help-wanted-issues\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci help wanted issues\u003c/h3\u003e\u003cp\u003eHelp Wanted issues have a home: our website\u0026rsquo;s new \u003ca href=\"/help-wanted/\"\u003ehelp-wanted page\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eThis page lists ALL recent(ish) issues from rOpenSci R packages labelled \u0026ldquo;help wanted\u0026rdquo;. We\u0026rsquo;ll still \u003ca href=\"https://twitter.com/search?q=from%3Aropensci%20%5Bhelp%20wanted%5D\u0026amp;f=live\"\u003etweet new issues\u003c/a\u003e, but this is a great place to see what\u0026rsquo;s out there that needs your help.\u003c/p\u003e\u003cp\u003eOn the page you can easily find issues relevant to you by:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eSorting (e.g, find all the issues labelled \u0026ldquo;good first issue\u0026rdquo;);\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSearching (e.g., look for issues in your favourite packages).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"next-co-working-sessions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#next-co-working-sessions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNext co-working sessions\u003c/h3\u003e\u003cp\u003eJoin us for social coworking \u0026amp; office hours monthly on 1st Tuesdays! Hosted by Steffi LaZerte, Nick Tierney, and Stefanie Butland. Everyone welcome. No RSVP needed. Consult our \u003ca href=\"/events\"\u003eEvents\u003c/a\u003e page to find your local time and how to join.\u003c/p\u003e\u003cp\u003eOur next sessions are\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2021-12/\"\u003eMonday, 06 December 2021 17:00 PST\u003c/a\u003e (9 AM Australian Western);\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/events/coworking-2022-01/\"\u003eTuesday, 04 January 2022 09:00 PST\u003c/a\u003e (9 AM North American Pacific).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out about more \u003ca href=\"/events\"\u003eevents\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following three packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/cffr\"\u003ecffr\u003c/a\u003e, developed by Diego Hernangómez: The Citation File Format version 1.2.0 \u003ca href=\"doi:10.5281/zenodo.5171937\"\u003edoi:10.5281/zenodo.5171937\u003c/a\u003e is a human and machine readable file format which provides citation metadata for software. This package provides core utilities to generate and validate this metadata.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=cffr\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/463\"\u003ereviewed\u003c/a\u003e by João Martins, Scott Chamberlain.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/excluder\"\u003eexcluder\u003c/a\u003e, developed by Jeffrey R. Stevens: Data that are collected through online sources such as Mechanical Turk may require excluding rows because of IP address duplication, geolocation, or completion duration. This package facilitates exclusion of these data for Qualtrics datasets.  It is available on \u003ca href=\"https://CRAN.R-project.org/package=excluder\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/455\"\u003ereviewed\u003c/a\u003e by Joseph O\u0026rsquo;Brien, Julia Silge.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/mctq\"\u003emctq\u003c/a\u003e, developed by Daniel Vartanian together with Ana Amelia Benedito-Silva, Mario Pedrazzoli: A complete and consistent toolkit to process the Munich ChronoType Questionnaire (MCTQ) for its three versions (standard, micro, and shift). MCTQ is a quantitative and validated tool to assess chronotypes using peoples\u0026rsquo; sleep behavior, originally presented by Till Roenneberg, Anna Wirz-Justice, and Martha Merrow (2003, \u003ca href=\"doi:10.1177/0748730402239679\"\u003edoi:10.1177/0748730402239679\u003c/a\u003e).  It is available on \u003ca href=\"https://CRAN.R-project.org/package=mctq\"\u003eCRAN\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/434\"\u003ereviewed\u003c/a\u003e by Jonathan Keane, Mario Andre Leocadio-Miguel.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following twenty-three packages have had an update since the latest newsletter: \u003ca href=\"https://docs.ropensci.org/gert\" title=\"Simple Git Client for R\"\u003egert\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/gert/releases/tag/v1.4.2\"\u003e\u003ccode\u003ev1.4.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pkgstats\" title=\"Metrics of R Packages\"\u003epkgstats\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/pkgstats/releases/tag/v0.0.3\"\u003e\u003ccode\u003ev0.0.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/cffr\" title=\"Generate Citation File Format (cff) Metadata for R Packages\"\u003ecffr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/cffr/releases/tag/v0.1.1\"\u003e\u003ccode\u003ev0.1.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/crul\" title=\"HTTP Client\"\u003ecrul\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/crul/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/excluder\" title=\"Checks for Exclusion Criteria in Online Data\"\u003eexcluder\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/excluder/releases/tag/v0.3.2\"\u003e\u003ccode\u003ev0.3.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/git2rdata\" title=\"Store and Retrieve Data.frames in a Git Repository\"\u003egit2rdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/git2rdata/releases/tag/v0.3.1\"\u003e\u003ccode\u003ev0.3.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/gitignore\" title=\"Create Useful .gitignore Files for your Project\"\u003egitignore\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/gitignore/releases/tag/v0.1.5\"\u003e\u003ccode\u003ev0.1.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/jagstargets\" title=\"Targets for JAGS Workflows\"\u003ejagstargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/jagstargets/releases/tag/0.0.1\"\u003e\u003ccode\u003e0.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/jqr\" title=\"Client for jq, a JSON Processor\"\u003ejqr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/jqr/releases/tag/v1.2.2\"\u003e\u003ccode\u003ev1.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lightr\" title=\"Read Spectrometric Data and Metadata\"\u003elightr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lightr/releases/tag/v1.6.2\"\u003e\u003ccode\u003ev1.6.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/mapscanner\" title=\"Print Maps, Draw on Them, Scan Them Back in\"\u003emapscanner\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/mapscanner/releases/tag/v0.0.6\"\u003e\u003ccode\u003ev0.0.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/mctq\" title=\"Tools to Process the Munich ChronoType Questionnaire (MCTQ)\"\u003emctq\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/mctq/releases/tag/v0.1.0\"\u003e\u003ccode\u003ev0.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.5.0\"\u003e\u003ccode\u003ev0.5.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmextract\" title=\"Download and Import Open Street Map Data Extracts\"\u003eosmextract\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmextract/releases/tag/v0.4.0\"\u003e\u003ccode\u003ev0.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/patentsview\" title=\"An R Client to the PatentsView API\"\u003epatentsview\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/patentsview/releases/tag/v0.3.0\"\u003e\u003ccode\u003ev0.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/PostcodesioR\" title=\"API Wrapper Around Postcodes.io\"\u003ePostcodesioR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/PostcodesioR/releases/tag/cran\"\u003e\u003ccode\u003ecran\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rcites\" title=\"R Interface to the Species+ Database\"\u003ercites\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rcites/releases/tag/v1.2.0\"\u003e\u003ccode\u003ev1.2.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rerddap\" title=\"General Purpose Client for ERDDAP Servers\"\u003ererddap\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rerddap/releases/tag/v0.8.0\"\u003e\u003ccode\u003ev0.8.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rmangal\" title=\"Mangal Client\"\u003ermangal\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rmangal/releases/tag/v2.1.0\"\u003e\u003ccode\u003ev2.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rnoaa\" title=\"NOAA Weather Data from R\"\u003ernoaa\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rnoaa/releases/tag/c1.3.7\"\u003e\u003ccode\u003ec1.3.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stplanr\" title=\"Sustainable Transport Planning\"\u003estplanr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stplanr/releases/tag/v0.8.5\"\u003e\u003ccode\u003ev0.8.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.3.2\"\u003e\u003ccode\u003e0.3.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Workflows\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/0.8.1\"\u003e\u003ccode\u003e0.8.1\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are eighteen recently closed and active submissions and 5 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/463\"\u003ecffr\u003c/a\u003e, Generate Citation File Format (cff) Metadata for R Packages. Submitted by \u003ca href=\"http://dieghernan.github.io\"\u003eDiego H.\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/455\"\u003eexcluder\u003c/a\u003e, Checks for Exclusion Criteria in Online Data. Submitted by \u003ca href=\"https://decisionslab.unl.edu/\"\u003eJeffrey Stevens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/434\"\u003emctq\u003c/a\u003e, An R Package for the Munich ChronoType Questionnaire. Submitted by \u003ca href=\"https://danielvartan.netlify.app\"\u003eDaniel Vartanian\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/435\"\u003egendercoder\u003c/a\u003e, Recodes Sex/Gender Descriptions Into A Standard Set. Submitted by \u003ca href=\"http://emilykothe.com\"\u003eEmily Kothe\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/418\"\u003eepair\u003c/a\u003e, Grabs data from EPA API, simplifies getting pollutant data. Submitted by \u003ca href=\"https://github.com/GLOrozcoM\"\u003eLeo Orozco-Mulfinger\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eSeven at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/484\"\u003erfema\u003c/a\u003e, Access the openFEMA API. Submitted by \u003ca href=\"http://dylanturner.org\"\u003eDylan Turner\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/474\"\u003equalR\u003c/a\u003e, An R package to download Sao Paulo and Rio de Janeiro air pollution data. Submitted by \u003ca href=\"http://randroll.wordpress.com\"\u003eMario Gavidia Calderón\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/470\"\u003etidyqpcr\u003c/a\u003e, Quantitative PCR Analysis with the Tidyverse. Submitted by \u003ca href=\"https://scholar.google.co.uk/citations?user=7FLIJBAAAAAJ\u0026amp;hl=en\"\u003eEdward Wallace\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román-Palacios\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/433\"\u003eROriginStamp\u003c/a\u003e, Interface to OriginStamp API to Obtain Trusted Time Stamps. Submitted by \u003ca href=\"https://github.com/rkrug\"\u003eRainer M Krug\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/407\"\u003eoccCite\u003c/a\u003e, Querying and Managing Large Biodiversity Occurrence Datasets. Submitted by \u003ca href=\"http://hannahlowens.weebly.com/\"\u003eHannah Owens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/486\"\u003egittargets\u003c/a\u003e, Data Version Control for the Targets Package. Submitted by \u003ca href=\"https://wlandau.github.io\"\u003eWill Landau\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/471\"\u003eOmicsMetaData\u003c/a\u003e, OmicsMetaData: an R-package for interoperable and re-usable biodiversity \u0026lsquo;omics (meta)data. Submitted by \u003ca href=\"https://github.com/msweetlove\"\u003eMaxime Sweetlove\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/485\"\u003eReLTER\u003c/a\u003e, An interface to the eLTER for the R statistical programming environment. Submitted by \u003ca href=\"https://www.cnr.it/people/alessandro.oggioni\"\u003eAlessandro Oggioni\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/475\"\u003ecanaper\u003c/a\u003e, Categorical Analysis of Neo- And Paleo-Endemism. Submitted by \u003ca href=\"https://joelnitta.com\"\u003eJoel Nitta\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/443\"\u003erdbhapi\u003c/a\u003e, Interface to DBH-API. Submitted by \u003ca href=\"https://hkdir.no/\"\u003eMarija Ninic\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/11/18/devguide-0.7.0\"\u003erOpenSci Dev Guide 0.7.0: Updates\u003c/a\u003e by Maëlle Salmon, Laura DeCicco, Julia Gustavsen, Jeff Hollister, Anna Krystalli, Mauro Lepore, Karthik Ram, Emily Riederer, Noam Ross, Adam Sparks, Melina Vidoni. Updates in version 0.7.0 of the online book \u0026lsquo;rOpenSci Packages: Development, Maintenance, and Peer Review rOpenSci Packages: Development, Maintenance, and Peer Review\u0026rsquo;.\u003cfigure\u003e\u003cimg src=\"/blog/2021/11/30/ropensci-news-digest-november-2021/cover.png\"\t\t\talt=\"cover of rOpenSci dev guide, showing a package production line with small humans discussing, examining and promoting packages\" width=\"400\"\u003e\u003c/figure\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/11/23/cffr\"\u003ecffr: Create a CITATION.cff File for your R Package\u003c/a\u003e by Diego Hernangómez. cffr, a package for creating valid CITATION.cff files using the metadata of any R package.\u003cfigure\u003e\u003cimg src=\"/blog/2021/11/30/ropensci-news-digest-november-2021/brain-network.png\"\t\t\talt=\"The cffr package\" width=\"400\"\u003e\u003c/figure\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"other-topics\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-topics\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOther topics\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2021/11/16/how-to-cite-r-and-r-packages\"\u003eHow to Cite R and R Packages\u003c/a\u003e by Steffi LaZerte. A short primer on how to cite R and R packages to support developers and ensure repeatable science.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/11/23/how-i-test-cffr\"\u003eHow I Test cffr on (about) 2,000 Packages using GitHub Actions and R-universe\u003c/a\u003e by Diego Hernangómez.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/11/24/runiverse-badges\"\u003eRSS feeds of package updates in r-universe\u003c/a\u003e by Jeroen Ooms. A major difference between r-universe and static repositories like CRAN and BioConductor is continuous deployment: packages in r-universe are continuously built in CI and immediately deployed to our package server. This package server stores binaries and metadata in a database, which enables us to dynamically query and expose all the package data through APIs, dashboards, feeds, etc. Based on some suggestions from twitter users, we have added support for RSS feeds of package updates.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003c!--` snakecase::to_sentence_case(english(length(usecases)))` use cases of our packages and resources have been reported since we sent the last newsletter.--\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eThere\u0026rsquo;s no open call for new maintainers at this point but you can refer to our \u003ca href=\"https://contributing.ropensci.org/\"\u003econtributing guide\u003c/a\u003e for finding ways to get involved!As the maintainer of an rOpenSci package, feel free to contact us on Slack or email \u003ccode\u003einfo@ropensci.org\u003c/code\u003e to get your call for maintainer featured in the next newsletter.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"only-use-the-best-dependencies\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#only-use-the-best-dependencies\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOnly use the best dependencies!\u003c/h3\u003e\u003cp\u003eSome dependencies are better than others: in particular, it\u0026rsquo;s best not to depend on unmaintained packages or packages scheduled for retirement.\u003c/p\u003e\u003cp\u003eIn our dev guide we have some \u003ca href=\"https://devdevguide.netlify.app/building.html#recommended-scaffolding\"\u003escaffolding advice\u003c/a\u003e (note this is a link to the development version of the dev guide!):\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eFor HTTP requests we recommend using \u003ca href=\"https://github.com/jeroen/curl/\"\u003ecurl\u003c/a\u003e, \u003ca href=\"https://github.com/ropensci/crul/\"\u003ecrul\u003c/a\u003e, \u003ca href=\"https://httr.r-lib.org\"\u003ehttr\u003c/a\u003e or \u003ca href=\"https://httr2.r-lib.org\"\u003ehttr2\u003c/a\u003e over \u003ca href=\"https://cran.rstudio.com/web/packages/RCurl/\"\u003eRCurl\u003c/a\u003e. If you like low level clients for HTTP, \u003ca href=\"https://github.com/jeroen/curl/\"\u003ecurl\u003c/a\u003e is best, whereas \u003ca href=\"https://github.com/ropensci/crul/\"\u003ecrul\u003c/a\u003e or \u003ca href=\"https://httr.r-lib.org\"\u003ehttr\u003c/a\u003e or \u003ca href=\"https://httr2.r-lib.org\"\u003ehttr2\u003c/a\u003e are better for higher level access.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFor parsing JSON, use \u003ca href=\"https://github.com/jeroen/jsonlite\"\u003ejsonlite\u003c/a\u003e instead of \u003ca href=\"https://cran.rstudio.com/web/packages/rjson/\"\u003erjson\u003c/a\u003e or \u003ca href=\"https://cran.rstudio.com/web/packages/RJSONIO/\"\u003eRJSONIO\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFor parsing, creating, and manipulating XML, we strongly recommend \u003ca href=\"https://cran.rstudio.com/web/packages/xml2/\"\u003exml2\u003c/a\u003e for most cases. \u003ca href=\"https://gist.github.com/nuest/3ed3b0057713eb4f4d75d11bb62f2d66\"\u003eYou can refer to Daniel Nüst\u0026rsquo;s notes about migration from XML to xml2\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFor spatial data, the \u003ca href=\"https://github.com/edzer/sp/\"\u003esp\u003c/a\u003e package should be considered deprecated in favour of \u003ca href=\"https://r-spatial.github.io/sf/\"\u003esf\u003c/a\u003e, and the packages \u003ca href=\"https://cran.r-project.org/web/packages/rgdal/index.html\"\u003ergdal\u003c/a\u003e, \u003ca href=\"https://cran.r-project.org/web/packages/maptools/index.html\"\u003emaptools\u003c/a\u003e, and \u003ca href=\"https://cran.r-project.org/web/packages/rgeos/index.html\"\u003ergeos\u003c/a\u003e will be retired by the end of 2023. We recommend use of the spatial suites developed by the \u003ca href=\"https://github.com/r-spatial\"\u003er-spatial\u003c/a\u003e and \u003ca href=\"https://github.com/rspatial\"\u003erspatial\u003c/a\u003e communities. See \u003ca href=\"https://github.com/ropensci/software-review-meta/issues/47\"\u003ethis GitHub issue\u003c/a\u003e for relevant discussions.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFurthermore, in the recent \u003ca href=\"https://www.tidyverse.org/blog/2021/11/cli-3-1-0/#what-about-the-crayon-package\"\u003erelease notes of r-lib cli\u003c/a\u003e it was interesting to note \u0026ldquo;Our focus will be on improving the cli package in the future, and crayon will only receive important bug fixes. If you already use both cli and crayon, then it might make sense to completely switch to cli.\u0026rdquo;.\u003c/p\u003e\u003cp\u003eAs a package developer, informing users of the lifecycle is crucial.It\u0026rsquo;s part of our \u003ca href=\"https://stats-devguide.ropensci.org/standards.html#general-standards\"\u003estandards for statistical software\u003c/a\u003e: \u0026ldquo;Statistical Software should include a Life Cycle Statement describing current and anticipated future states of development\u0026rdquo;.\u003c/p\u003e\u003cp\u003eFor more general posts about dependencies, see\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://recology.info/2018/10/limiting-dependencies/\"\u003elimiting dependencies in R package development\u003c/a\u003e by rOpenSci co-founder Scott Chamberlain;\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://www.tidyverse.org/blog/2019/05/itdepends/\"\u003eIt depends - A dialog about dependencies\u003c/a\u003e by Jim Hester;\u003c/li\u003e\u003cli\u003eour dev guide\u0026rsquo;s section about \u003ca href=\"https://devguide.ropensci.org/building.html#pkgdependencies\"\u003epackage dependencies\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"list-of-awesome-r-package-development-tools-maintained-by-indrajeet-patil\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#list-of-awesome-r-package-development-tools-maintained-by-indrajeet-patil\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eList of \u0026ldquo;Awesome R package development\u0026rdquo; tools maintained by Indrajeet Patil\u003c/h3\u003e\u003cp\u003e\u003ca href=\"https://github.com/IndrajeetPatil\"\u003eIndrajeet Patil\u003c/a\u003e created a list \u003ca href=\"https://indrajeetpatil.github.io/awesome-r-pkgtools/\"\u003e\u0026ldquo;Awesome R package development\u0026rdquo;\u003c/a\u003e.Browse it to check you already know all of the awesome things!\u003c/p\u003e\u003ch3 id=\"shim-files\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#shim-files\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eShim files\u003c/h3\u003e\u003cp\u003eDo you know what shim files are?If you use \u003ccode\u003edevtools::load_all()\u003c/code\u003e, chances are you do know \u003cem\u003eof\u003c/em\u003e them, cf \u003ca href=\"https://r-lib.github.io/pkgload/reference/load_all.html#shim-files\"\u003epkgload docs\u003c/a\u003e.\u0026ldquo;\u003ccode\u003eload_all()\u003c/code\u003e also inserts shim functions into the imports environmentof the loaded package. It presently adds a replacement version of\u003ccode\u003esystem.file()\u003c/code\u003e which returns different paths from\u003ccode\u003ebase::system.file()\u003c/code\u003e. This is needed because installed and uninstalledpackage sources have different directory structures. Note that this is nota perfect replacement for \u003ccode\u003ebase::system.file()\u003c/code\u003e.\u0026rdquo;\u003c/p\u003e\u003cp\u003eThis is different from \u003ca href=\"https://en.wikipedia.org/wiki/Monkey_patch\"\u003emonkey-patching\u003c/a\u003e that is \u003ca href=\"https://books.ropensci.org/http-testing/vcr-intro.html?q=monkey#hooks-into-http-clients\"\u003enot allowed in R\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"function-specific-and-package-specific-environments\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#function-specific-and-package-specific-environments\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFunction-specific and package-specific environments\u003c/h3\u003e\u003cp\u003eIf you are curious about the use of private environments for functions and packages, have a read of this \u003ca href=\"https://www.mail-archive.com/r-package-devel@r-project.org/msg07413.html\"\u003enice R-package-devel thread\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2021/11/30/ropensci-news-digest-november-2021/","date_published":"2021-11-30T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/b5k5n-8dn69","title":"RSS feeds of package updates in r-universe","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","rss","feeds","tech notes"],"content_html":"\u003ch2 id=\"continuous-deployment-in-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#continuous-deployment-in-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eContinuous deployment in r-universe\u003c/h2\u003e\u003cp\u003eA major difference between \u003ca href=\"https://r-universe.dev\"\u003er-universe\u003c/a\u003e and static repositories like CRAN and BioConductor is continuous deployment: packages in r-universe are continuously built in CI and immediately deployed to our \u003ca href=\"https://github.com/r-universe-org/cranlike-server/\"\u003epackage server\u003c/a\u003e. This package server stores binaries and metadata in a database, which enables us to dynamically query and expose all the package data through APIs, dashboards, feeds, etc.\u003c/p\u003e\u003cp\u003eThe package server also makes it relatively easy to add new functionality to expose information about R packages from the database in some other way. For example, we recently added a \u003ca href=\"/blog/2021/10/14/runiverse-badges/\"\u003ebadges API\u003c/a\u003e to display package versions and totals in the form of a small badge image that can be embedded in webpages.\u003c/p\u003e\u003cp\u003eBased on suggestions from our early adopters, we have now added support for RSS feeds of package updates in a cran-like repository.\u003c/p\u003e\u003ch2 id=\"why-rss-feeds-in-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-rss-feeds-in-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy RSS feeds in r-universe\u003c/h2\u003e\u003cp\u003eOpen science means that content is not locked in to some platform, but be made accessible in a variety of standard formats. Therefore all of the information that you can see in the r-universe dashboards, and much more, can also be retrieved through machine readable APIs.\u003c/p\u003e\u003cp\u003eThe RSS format sadly lost popularity to social media platforms in recent years, but it is still the most widely used open standard for publishing feeds of regularly updated content. It actually seems to be making a bit of a \u003ca href=\"https://www.theverge.com/2021/5/20/22445284/google-rss-chrome-android-feature-test\"\u003ecome-back\u003c/a\u003e with applications like Chrome and Slack now supporting it again.\u003c/p\u003e\u003cp\u003eThis week we added experimental support of RSS feeds to the package server: the \u003ccode\u003e/feed.xml\u003c/code\u003e endpoint on any r-universe domain now gives an RSS feed of recent R package updates in the repository:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://ropensci.r-universe.dev/feed.xml\"\u003e\u003ccode\u003ehttps://ropensci.r-universe.dev/feed.xml\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://tidyverse.r-universe.dev/feed.xml\"\u003e\u003ccode\u003ehttps://tidyverse.r-universe.dev/feed.xml\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"https://jeroen.r-universe.dev/feed.xml\"\u003e\u003ccode\u003ehttps://jeroen.r-universe.dev/feed.xml\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eEach feed item contains the name and version of the updated R package, along with a timestamp and a link to the build log of the most recent commit. The feed also contains some additional metadata such as the package description, and a list of the articles (vignettes) contained in the package.\u003c/p\u003e\u003cp\u003eThe dashboard for any universe also includes a link to this same URL, such that users can easily find and subscribe to your feed.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://ropensci.r-universe.dev\"\u003e\u003cimg src=\"/blog/2021/11/24/runiverse-badges/dashboard-feed.png\" alt=\"screenshot of dashboard highlighting the new rss icon\"\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003eThere is also a global feed \u003ca href=\"https://r-universe.dev/feed.xml\"\u003e\u003ccode\u003ehttps://r-universe.dev/feed.xml\u003c/code\u003e\u003c/a\u003e which lists package updates across all universes, similarly to the \u003ca href=\"https://r-universe.dev/builds/\"\u003ebuilds tab\u003c/a\u003e on the website.\u003c/p\u003e\u003ch2 id=\"example-slack-integration\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#example-slack-integration\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eExample: Slack integration\u003c/h2\u003e\u003cp\u003eWhat would you use an RSS feed for in 2021? For example, if you use Slack, you can install the \u003ca href=\"https://slack.com/help/articles/218688467-Add-RSS-feeds-to-Slack\"\u003eSlack RSS app\u003c/a\u003e to subscribe to any number of RSS feeds. Thereby you can get a notification when your packages, or those of your favorite maintainers, have been updated in r-universe.\u003c/p\u003e\u003cp\u003eDo you have suggestions for other RSS use cases, or completely different functionality that the package server should expose? Let us know in the comments or on twitter!\u003c/p\u003e","url":"https://ropensci.org/blog/2021/11/24/runiverse-badges/","date_published":"2021-11-24T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/p37gh-f4s56","title":"cffr: Create a CITATION.cff File for your R Package","language":"en","authors":[{"name":"Diego Hernangómez","url":"https://orcid.org/0000-0001-8457-4658","avatar":"https://github.com/dieghernan.png","_role":["author"]}],"tags":["cffr","citations","codemeta","community","cran","github","metadata","packages","R","Software Peer Review","zenodo"],"content_html":"\u003c!--html_preserve--\u003e\u003cfigure class=\"pull-right\"\u003e\u003ca href=\"https://docs.ropensci.org/cffr/\"\u003e\u003cimg src=\"/blog/2021/11/23/cffr/logo.png\"\t\t\talt=\"Hex sticker for the cffr package. White background with a blue outline and blue text reading \u0026#39;cffr\u0026#39; above a blue network diagram in the shape of a brain\" width=\"150\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003c!--/html_preserve--\u003e\u003cp\u003eA new R package, \u003ca href=\"https://docs.ropensci.org/cffr/\"\u003ecffr\u003c/a\u003e, has been\u003ca href=\"https://github.com/ropensci/cffr\"\u003edeveloped\u003c/a\u003e,\u003ca href=\"https://github.com/ropensci/software-review/issues/463\"\u003epeer-reviewed\u003c/a\u003e byrOpenSci and accepted by \u003ca href=\"https://CRAN.R-project.org/package=cffr\"\u003eCRAN\u003c/a\u003e. Thispackage has a single purpose: to create a valid CITATION.cff file using themetadata of any R package.\u003c/p\u003e\u003ch2 id=\"citationcff-files-and-why-they-matter\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#citationcff-files-and-why-they-matter\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCITATION.cff files and why they matter\u003c/h2\u003e\u003cp\u003eA \u003ca href=\"https://citation-file-format.github.io/\"\u003eCitation File Format (CFF)\u003c/a\u003e is aplain text file with human- and machine-readable citation information forsoftware (and datasets)\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eUnder the hood, a CFF file is a YAML file. YAML has the advantage of beingeasily understood by any user, and can also be easily converted to another dataserialization language, such as JSON or XML. This is an example of the minimalcontent of a valid CITATION.cff file:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003ecff-version\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e1.2.0\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003emessage\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;To cite package \u0026#34;cffr\u0026#34; in publications use:\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003etitle: \u0026#39;cffr\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eGenerate Citation File Format (\u0026#39;\u0026#39;cff\u0026#39;\u0026#39;) Metadata for R Packages\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003eauthors\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e- \u003cspan class=\"nt\"\u003efamily-names\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eHernangómez\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003egiven-names\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eDiego\u003c/span\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eIn this example, the identification of the software and the author is quitestraightforward, as it is provided by the fields \u003ccode\u003etitle\u003c/code\u003e and \u003ccode\u003eauthors\u003c/code\u003e. Theinformation that can be included on a CFF file can be further enriched withadditional fields (like \u003ccode\u003eversion\u003c/code\u003e, \u003ccode\u003eyear\u003c/code\u003e or \u003ccode\u003edoi\u003c/code\u003e), as the \u003ca href=\"https://github.com/citation-file-format/citation-file-format/blob/main/schema-guide.md#valid-keys\"\u003eCitation FileFormat schema version1.2.0\u003c/a\u003eaccepts \u003ca href=\"#valid-keys\"\u003e21 different keys\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"why-do-cff-files-matter\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-do-cff-files-matter\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy do CFF files matter?\u003c/h3\u003e\u003cp\u003eCiting a book, an article, or a thesis is not difficult. The title, authors andpublication date are easily identifiable in most of the cases. However, softwareis rarely cited on research projects. One of the reasons is \u0026ldquo;\u003cem\u003ethe lack of aclear citation information from package developers\u0026rdquo;\u003c/em\u003e, as already mentioned in aprevious post (\u003ca href=\"/blog/2021/02/16/package-citation/\"\u003eMake Your R Package Easier toCite\u003c/a\u003e). Developers spend thousand of hourson developing new and exciting software or adding new features to existing ones,so citing software is a matter of giving credit where credit is due. For morereasons why it is important to cite R software see \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffiLaZerte\u003c/a\u003e\u0026rsquo;s blog post \u003ca href=\"/blog/2021/11/16/how-to-cite-r-and-r-packages/\"\u003eHow to Cite R and RPackages\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIn July 2021, GitHub announced a \u003ca href=\"https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-citation-files\"\u003ebuilt-in citationfeature\u003c/a\u003ethat enables any software user to cite any repository in\u003ca href=\"https://apastyle.apa.org/style-grammar-guidelines/references/examples/journal-article-references#1\"\u003eAPA\u003c/a\u003eor \u003ca href=\"http://www.bibtex.org/Using/\"\u003eBibTeX\u003c/a\u003e style.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eWe’ve just added built-in citation support to GitHub so researchers and scientists can more easily receive acknowledgments for their contributions to software.\u003c/p\u003e\u003cp\u003eJust push a CITATION.cff file and we’ll add a handy widget to the repo sidebar for you.\u003c/p\u003e\u003cp\u003eEnjoy! 🎉 pic.twitter.com/L85MS5pY2Y— Nat Friedman July 27, 2021This built-in feature heavily relies on the CFF format, rendering theinformation of the CITATION.cff file into the aforementioned styles.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThis built-in feature heavily relies on the CFF format, rendering theinformation of the CITATION.cff file into the aforementioned styles.\u003c/p\u003e\u003cp\u003eThis announcement was, in my very personal opinion, a game-changer for thesoftware citation ecosystem. As a proof of that, on the two following days\u003ca href=\"https://zenodo.org/\"\u003eZenodo\u003c/a\u003e and \u003ca href=\"https://www.zotero.org/\"\u003eZotero\u003c/a\u003e announcedsupport for CITATION.cff files in their GitHub integration:\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eWe’ve just added support for CITATION.cff files in our GitHub integration.\u003c/p\u003e\u003cp\u003eJust push a CITATION.cff file in your repo and we’ll use it when registering the DOI via the ZENODO GitHub integration.\u003c/p\u003e\u003cp\u003eEnjoy! 🎉— Zenodo July 28, 2021\u003c/p\u003e\u003c/blockquote\u003e\u003cblockquote\u003e\u003cp\u003eWe’ve added support for GitHub’s new citation feature. When saving GitHub repos to your library, Zotero can now use the enhanced metadata provided by developers.\u003c/p\u003e\u003cp\u003eIf there’s no citation file, Zotero will continue to use the existing repo metadata (Company, Prog. Language, etc.) — Zotero - July 28, 2021\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eIntegration with Zenodo means that when creating a Digital Object Identifier(\u003ca href=\"https://www.doi.org/\"\u003eDOI\u003c/a\u003e) for a GitHub repository via Zenodo, the DOI wouldbe generated according to the metadata included in the CITATION.cff file of therepository. This feature saves developers the extra effort of making both DOIand software consistent in terms of metadata. See an example of the \u003ca href=\"https://www.doi.org/10.5281/zenodo.5646626\"\u003eDOI ofcffr\u003c/a\u003e, whose title, description andauthor has been gathered from the \u003ca href=\"https://github.com/ropensci/cffr/blob/main/CITATION.cff\"\u003ecffr CITATION.cfffile\u003c/a\u003e.\u003c/p\u003e\u003c!--html_preserve--\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"zotero.png\"         alt=\"Screenshot of Zotero importing citation information for GitHub repo\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 188; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  \u003c!--/html_preserve--\u003e\u003cp\u003eIn the case of Zotero (reference management software), the information in theCITATION.cff file of any repository is detected when adding that repository to alibrary from a url.\u003c/p\u003e\u003cp\u003eThis handy feature means that a GitHub repository can effectively behave as aDOI, ISBN or arXiv ID. Zotero will recognize the author, title, date and otherrelevant metadata of the repository, including it in the personal Zoteroreference library of the user.\u003c/p\u003e\u003c!--html_preserve--\u003e                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003c!--/html_preserve--\u003e\u003cp\u003eAnd there is still more! \u003ca href=\"https://citeas.org/\"\u003eCiteAs\u003c/a\u003e service also supports CFFfiles\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e, and in the future more platforms such as\u003ca href=\"https://github.com/JabRef/jabref/issues/7945\"\u003eJabRef\u003c/a\u003e or\u003ca href=\"https://gitlab.com/gitlab-org/gitlab/-/issues/337368\"\u003eGitLab\u003c/a\u003e\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e may addsupport to CITATION.cff files, (and why not \u003ca href=\"https://twitter.com/egonwillighagen/status/1456322595096170503\"\u003eCRAN orBioConductor\u003c/a\u003e?).\u003c/p\u003e\u003ch3 id=\"other-software-citation-projects\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#other-software-citation-projects\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOther software citation projects\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://codemeta.github.io/\"\u003eCodeMeta Project\u003c/a\u003e\u003csup id=\"fnref:4\"\u003e\u003ca href=\"#fn:4\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e4\u003c/a\u003e\u003c/sup\u003e creates a conceptvocabulary that can be used to standardize the exchange of software metadataacross repositories and organizations. One of the many uses of a codemeta.jsonfile is to provide citation metadata such as title, authors, publication year orversion. The \u003ca href=\"https://docs.ropensci.org/codemetar/\"\u003ecodemetar\u003c/a\u003e package\u003csup id=\"fnref:5\"\u003e\u003ca href=\"#fn:5\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e5\u003c/a\u003e\u003c/sup\u003eallows you to generate codemeta.json files from R package metadata.\u003c/p\u003e\u003ch2 id=\"using-cffr\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#using-cffr\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUsing cffr\u003c/h2\u003e\u003cp\u003eGetting started with cffr is pretty easy. There is a main function (likely theonly one you would need for an in-development package) named\u003ca href=\"https://docs.ropensci.org/cffr/reference/cff_write.html\"\u003e\u003ccode\u003ecff_write()\u003c/code\u003e\u003c/a\u003e thatextracts the metadata of your package (already included in your DESCRIPTION andinst/CITATION files), converts it into a CITATION.cff file and validates itagainst the latest \u003ca href=\"https://github.com/citation-file-format/citation-file-format/blob/main/schema.json\"\u003eCFF validationschema\u003c/a\u003eusing \u003ca href=\"https://docs.ropensci.org/jsonvalidate/\"\u003ejsonvalidate\u003c/a\u003e\u003csup id=\"fnref:6\"\u003e\u003ca href=\"#fn:6\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e6\u003c/a\u003e\u003c/sup\u003e:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecffr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# For in-development packages\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ecff_write\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre\u003e\u003ccode\u003e#\u0026gt; #\u0026gt; CITATION.cff generated#\u0026gt;#\u0026gt; cff_validate results-----#\u0026gt; Congratulations! This .cff file is valid\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"working-with-cff-objects\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#working-with-cff-objects\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWorking with \u003ccode\u003ecff\u003c/code\u003e objects\u003c/h3\u003e\u003cp\u003eIt is also possible to create a \u003ccode\u003ecff\u003c/code\u003e object (a regular R list with a customprinting method) for any package installed locally on your machine. In the nextexample I create a \u003ccode\u003ecff\u003c/code\u003e object for the\u003ca href=\"https://docs.ropensci.org/jsonvalidate/\"\u003ertweet\u003c/a\u003e\u003csup id=\"fnref:7\"\u003e\u003ca href=\"#fn:7\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e7\u003c/a\u003e\u003c/sup\u003e package:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecffr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecff_rtweet\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003ecff_create\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;rtweet\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecff_rtweet\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#\u0026gt; cff-version: 1.2.0#\u0026gt; message: \u0026#39;To cite package \u0026#34;rtweet\u0026#34; in publications use:\u0026#39;#\u0026gt; type: software#\u0026gt; license: MIT#\u0026gt; title: \u0026#39;rtweet: Collecting Twitter Data\u0026#39;#\u0026gt; version: 0.7.0#\u0026gt; doi: 10.21105/joss.01829#\u0026gt; abstract: \u0026#39;An implementation of calls designed to collect and organize Twitter data#\u0026gt;   via Twitter\u0026#39;\u0026#39;s REST and stream Application Program Interfaces (API), which can be#\u0026gt;   found at the following URL: \u0026lt;https://developer.twitter.com/en/docs\u0026gt;. This package#\u0026gt;   has been peer-reviewed by rOpenSci (v. 0.6.9).\u0026#39;#\u0026gt; authors:#\u0026gt; - family-names: Kearney#\u0026gt;   given-names: Michael W.#\u0026gt;   email: kearneymw@missouri.edu#\u0026gt;   orcid: https://orcid.org/0000-0002-0730-4694#\u0026gt; preferred-citation:#\u0026gt;   type: article#\u0026gt;   title: \u0026#39;rtweet: Collecting and analyzing Twitter data\u0026#39;#\u0026gt;   authors:#\u0026gt;   - family-names: Kearney#\u0026gt;     given-names: Michael W.#\u0026gt;   year: \u0026#39;2019\u0026#39;#\u0026gt;   journal: Journal of Open Source Software#\u0026gt;   volume: \u0026#39;4\u0026#39;#\u0026gt;   number: \u0026#39;42\u0026#39;#\u0026gt;   pages: \u0026#39;1829\u0026#39;#\u0026gt;   doi: 10.21105/joss.01829#\u0026gt;   url: https://joss.theoj.org/papers/10.21105/joss.01829#\u0026gt; repository: https://CRAN.R-project.org/package=rtweet#\u0026gt; repository-code: https://github.com/ropensci/rtweet#\u0026gt; url: https://CRAN.R-project.org/package=rtweet#\u0026gt; date-released: \u0026#39;2020-01-08\u0026#39;#\u0026gt; contact:#\u0026gt; - family-names: Kearney#\u0026gt;   given-names: Michael W.#\u0026gt;   email: kearneymw@missouri.edu#\u0026gt;   orcid: https://orcid.org/0000-0002-0730-4694#\u0026gt; keywords:#\u0026gt; - r#\u0026gt; - twitter\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNote the special field,\u003ca href=\"https://github.com/citation-file-format/citation-file-format/blob/main/schema-guide.md#preferred-citation\"\u003e\u003ccode\u003epreferred-citation\u003c/code\u003e\u003c/a\u003e,that would be used to generate the citation information on GitHub. If this fieldis not present, GitHub would reuse other keys in the file to auto-generate acitation reference.\u003c/p\u003e\u003cp\u003eAs already mentioned, cffr uses information from the DESCRIPTION (via the\u003ca href=\"https://github.com/r-lib/desc\"\u003edesc\u003c/a\u003e\u003csup id=\"fnref:8\"\u003e\u003ca href=\"#fn:8\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e8\u003c/a\u003e\u003c/sup\u003e package) and the inst/CITATION file toextract the metadata. I will focus now on comparing the citation info fromrtweet and the information generated by cffr:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etoBibtex\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ecitation\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;rtweet\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#\u0026gt; @Article{rtweet-package,#\u0026gt;   title = {rtweet: Collecting and analyzing Twitter data},#\u0026gt;   author = {Michael W. Kearney},#\u0026gt;   year = {2019},#\u0026gt;   note = {R package version 0.7.0},#\u0026gt;   journal = {Journal of Open Source Software},#\u0026gt;   volume = {4},#\u0026gt;   number = {42},#\u0026gt;   pages = {1829},#\u0026gt;   doi = {10.21105/joss.01829},#\u0026gt;   url = {https://joss.theoj.org/papers/10.21105/joss.01829},#\u0026gt; }\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecff_rtweet\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003e`preferred-citation`\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#\u0026gt; type: article#\u0026gt; title: \u0026#39;rtweet: Collecting and analyzing Twitter data\u0026#39;#\u0026gt; authors:#\u0026gt; - family-names: Kearney#\u0026gt;   given-names: Michael W.#\u0026gt; year: \u0026#39;2019\u0026#39;#\u0026gt; journal: Journal of Open Source Software#\u0026gt; volume: \u0026#39;4\u0026#39;#\u0026gt; number: \u0026#39;42\u0026#39;#\u0026gt; pages: \u0026#39;1829\u0026#39;#\u0026gt; doi: 10.21105/joss.01829#\u0026gt; url: https://joss.theoj.org/papers/10.21105/joss.01829\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWe can check that the core information of the rtweet citation has been includedin the \u003ccode\u003ecff\u003c/code\u003e object, and we can also check fields included in the DESCRIPTIONfile of rtweet:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003epackageDescription\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;rtweet\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003efields\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s\"\u003e\u0026#34;Title\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Description\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Author\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Version\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;URL\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#\u0026gt; Title: Collecting Twitter Data#\u0026gt; Description: An implementation of calls designed to collect and organize Twitter#\u0026gt;          data via Twitter\u0026#39;s REST and stream Application Program Interfaces#\u0026gt;          (API), which can be found at the following URL:#\u0026gt;          \u0026lt;https://developer.twitter.com/en/docs\u0026gt;.  This package has been#\u0026gt;          peer-reviewed by rOpenSci (v. 0.6.9).#\u0026gt; Author: Michael W. Kearney [aut, cre] (\u0026lt;https://orcid.org/0000-0002-0730-4694\u0026gt;),#\u0026gt;          Andrew Heiss [rev] (\u0026lt;https://orcid.org/0000-0002-3948-3914\u0026gt;), Francois#\u0026gt;          Briatte [rev]#\u0026gt; Version: 0.7.0#\u0026gt; URL: https://CRAN.R-project.org/package=rtweet#\u0026gt; #\u0026gt; -- File: C:/Users/diego/Documents/R/win-library/4.1/rtweet/Meta/package.rds #\u0026gt; -- Fields read: Title, Description, Author, Version, URL\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIn the next chunk I compare it with the corresponding fields from the \u003ccode\u003ecff\u003c/code\u003eobject:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eas.cff\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecff_rtweet[\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;title\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;abstract\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;authors\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;version\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#\u0026gt; title: \u0026#39;rtweet: Collecting Twitter Data\u0026#39;#\u0026gt; abstract: \u0026#39;An implementation of calls designed to collect and organize Twitter data#\u0026gt;   via Twitter\u0026#39;\u0026#39;s REST and stream Application Program Interfaces (API), which can be#\u0026gt;   found at the following URL: \u0026lt;https://developer.twitter.com/en/docs\u0026gt;. This package#\u0026gt;   has been peer-reviewed by rOpenSci (v. 0.6.9).\u0026#39;#\u0026gt; authors:#\u0026gt; - family-names: Kearney#\u0026gt;   given-names: Michael W.#\u0026gt;   email: kearneymw@missouri.edu#\u0026gt;   orcid: https://orcid.org/0000-0002-0730-4694#\u0026gt; version: 0.7.0#\u0026gt; url: https://CRAN.R-project.org/package=rtweet\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"valid-keys\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#valid-keys\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eValid keys\u003c/h3\u003e\u003cp\u003eHere is a list of all the valid keys of the CFF schema. Most of them have anexplicit mapping with the fields (or a combination of fields) in the DESCRIPTIONand inst/CITATION files:\u003c/p\u003e\u003ctable\u003e\t\u003cthead\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003cth style=\"text-align: left\"\u003e\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: left\"\u003e\u003c/th\u003e\t\t\t\t\t\u003cth style=\"text-align: left\"\u003e\u003c/th\u003e\t\t\t\u003c/tr\u003e\t\u003c/thead\u003e\t\u003ctbody\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eabstract\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eidentifiers\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003erepository\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eauthors\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003ekeywords\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003erepository-artifact\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003ecff-version\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003elicense\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003erepository-code\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003ecommit\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003elicense-url\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003etitle\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003econtact\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003emessage\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003etype\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003edate-released\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003epreferred-citation\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eurl\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\t\t\u003ctr\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003edoi\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003ereferences\u003c/td\u003e\t\t\t\t\t\u003ctd style=\"text-align: left\"\u003eversion\u003c/td\u003e\t\t\t\u003c/tr\u003e\t\u003c/tbody\u003e\u003c/table\u003e\u003cp\u003eThe cffr package also includes an extensive\u003ca href=\"https://docs.ropensci.org/cffr/articles/crosswalk.html\"\u003evignette\u003c/a\u003e describinghow these fields are computed with several examples.\u003c/p\u003e\u003ch3 id=\"validating-a-cff-object\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#validating-a-cff-object\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eValidating a \u003ccode\u003ecff\u003c/code\u003e object\u003c/h3\u003e\u003cp\u003eOnce we have created an \u003ccode\u003ecff\u003c/code\u003e object, we can check its validity using the\u003ccode\u003ecff_validate()\u003c/code\u003e function. This function can be used with \u003ccode\u003ecff\u003c/code\u003e objects and withCITATION.cff files. If there are any errors, output messages will help us debugour object:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ecff_validate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecff_rtweet\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#\u0026gt; #\u0026gt; cff_validate results-----\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#\u0026gt; Congratulations! This cff object is valid\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Creating a CITATION.cff file from an cff object and validating it\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecff_rtweet\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# Write it to a tempfile\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecff_write\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etempfile\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;CITATION\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003efileext\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;.cff\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003everbose\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003evalidate\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eFALSE\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecff_validate\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#\u0026gt; #\u0026gt; cff_validate results-----#\u0026gt; Congratulations! This cff object is valid\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Create a deliberated error and use the validator\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Override the defaults with keys param\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ewrong_keys\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003elist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eurl\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;I am not an url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003edoi\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;I am not a doi\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ecff_create\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;rtweet\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ekeys\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ewrong_keys\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecff_validate\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#\u0026gt; #\u0026gt; cff_validate results-----\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#\u0026gt; Oops! This  cff object has the following errors:\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#\u0026gt;      field                          message#\u0026gt; 1 data.doi referenced schema does not match#\u0026gt; 2 data.url referenced schema does not match\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eValidation of the initial \u003ccode\u003ecff\u003c/code\u003e object is satisfactory, as seen in the messages.But in the second example, where I forced some invalid values using the \u003ccode\u003ekeys\u003c/code\u003eparameter, we can see that the \u003ccode\u003edoi\u003c/code\u003e and \u003ccode\u003eurl\u003c/code\u003e field are flagged as errors, asthe text strings do not correspond with the expected patterns for those fields(e.g \u0026ldquo;http*\u0026rdquo; for urls and \u0026ldquo;10XXXX/XXXX\u0026rdquo; for DOIs).\u003c/p\u003e\u003ch3 id=\"keeping-your-citationcff-file-up-to-date\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#keeping-your-citationcff-file-up-to-date\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eKeeping your CITATION.cff file up-to-date\u003c/h3\u003e\u003cp\u003eA CITATION.cff includes relevant information about the version, the release dateand the DOI of your package, so you would want to keep this informationup-to-date. cffr includes a \u003ca href=\"https://github.com/ropensci/cffr/blob/main/.github/workflows/update-citation-cff.yaml\"\u003eGitHubAction\u003c/a\u003ethat does the work for you.\u003c/p\u003e\u003cp\u003eIt can be installed in your repo with the\u003ca href=\"https://docs.ropensci.org/cffr/reference/cff_gha_update.html\"\u003e\u003ccode\u003ecff_gha_update()\u003c/code\u003e\u003c/a\u003eor copied to your \u003ccode\u003e.github/workflows\u003c/code\u003e folder, and it would update yourCITATION.cff file on the following events:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eWhen you publish a new release of the package on your GitHub repo.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eEach time that you modify your DESCRIPTION or inst/CITATION files.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eAdditionally, the action can be run also manually.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThis will ensure that the citation of your package is always accurate.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eOver the last few months, support of CITATION.cff files has increasingly grownin the scientific citation ecosystem. The cffr package allows any R-packagedeveloper to easily integrate citation information with a wide variety ofservices via the creation of a CITATION.cff file leveraging the supportintroduced by GitHub.\u003c/p\u003e\u003ch2 id=\"acknowledgments\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#acknowledgments\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAcknowledgments\u003c/h2\u003e\u003cp\u003eI would like to thank \u003ca href=\"/author/carl-boettiger/\"\u003eCarl Boettiger\u003c/a\u003e, \u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlleSalmon\u003c/a\u003e and the rest of contributors of the\u003ca href=\"https://docs.ropensci.org/codemetar/\"\u003ecodemetar\u003c/a\u003e package. This package was theprimary inspiration for developing cffr and shares a common goal of increasingawareness of the efforts of software developers.\u003c/p\u003e\u003cp\u003eI would also like to thank \u003ca href=\"https://zambujo.github.io/\"\u003eJoão Martins\u003c/a\u003e and \u003ca href=\"/author/scott-chamberlain/\"\u003eScottChamberlain\u003c/a\u003e for thorough reviews, which helpedimprove the package and the documentation, as well as \u003ca href=\"/author/emily-riederer\"\u003eEmilyRiederer\u003c/a\u003e for handling the \u003ca href=\"https://github.com/ropensci/software-review/issues/463\"\u003ereviewprocess\u003c/a\u003e.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eDruskat, S., Spaaks, J. H., Chue Hong, N., Haines, R., Baker, J., Bliven,S., Willighagen, E., Pérez-Suárez, D., \u0026amp; Konovalov, A. (2021). Citation FileFormat (Version 1.2.0) [Computer software].\u003ca href=\"https://doi.org/10.5281/zenodo.5171937\"\u003ehttps://doi.org/10.5281/zenodo.5171937\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eDu, C., Cohoon, J., Priem, J., Piwowar, H., Meyer, C., \u0026amp; Howison, J.(2021, October 23). CiteAs: Better Software through Sociotechnical Changefor Better Software Citation. \u003cem\u003eCompanion Publication of the 2021 Conferenceon Computer Supported Cooperative Work and Social Computing\u003c/em\u003e. ACM.\u003ca href=\"http://doi.org/10.1145/3462204.3482889\"\u003ehttp://doi.org/10.1145/3462204.3482889\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eDruskat, Stephan. (2021, September 27). Making software citation easi(er)\u0026ndash; The Citation File Format and its integrations. \u003cem\u003eZenodo\u003c/em\u003e.\u003ca href=\"https://doi.org/10.5281/zenodo.5529914\"\u003ehttps://doi.org/10.5281/zenodo.5529914\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:4\"\u003e\u003cp\u003eMatthew B. Jones, Carl Boettiger, Abby Cabunoc Mayes, Arfon Smith, PeterSlaughter, Kyle Niemeyer, Yolanda Gil, Martin Fenner, Krzysztof Nowak, MarkHahnel, Luke Coy, Alice Allen, Mercè Crosas, Ashley Sands, Neil Chue Hong,Patricia Cruse, Daniel S. Katz, Carole Goble. 2017. CodeMeta: an exchangeschema for software metadata. Version 2.0. KNB Data Repository.\u003ca href=\"https://doi.org/10.5063/schema/codemeta-2.0\"\u003ehttps://doi.org/10.5063/schema/codemeta-2.0\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:4\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:5\"\u003e\u003cp\u003eCarl Boettiger and Maëlle Salmon (2021). codemetar: Generate \u0026lsquo;CodeMeta\u0026rsquo;Metadata for R Packages. \u003ca href=\"https://github.com/ropensci/codemetar\"\u003ehttps://github.com/ropensci/codemetar\u003c/a\u003e,\u003ca href=\"https://docs.ropensci.org/codemetar/\"\u003ehttps://docs.ropensci.org/codemetar/\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:5\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:6\"\u003e\u003cp\u003eRich FitzJohn, Rob Ashton, Mathias Buus and Evgeny Poberezkin (2021).jsonvalidate: Validate \u0026lsquo;JSON\u0026rsquo; Schema. \u003cem\u003eR package version 1.3.2\u003c/em\u003e.\u003ca href=\"https://CRAN.R-project.org/package=jsonvalidate\"\u003ehttps://CRAN.R-project.org/package=jsonvalidate\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:6\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:7\"\u003e\u003cp\u003eKearney, M. (2019, October 24). rtweet: Collecting and analyzing Twitterdata. \u003cem\u003eJournal of Open Source Software\u003c/em\u003e. The Open Journal.\u003ca href=\"http://doi.org/10.21105/joss.01829\"\u003ehttp://doi.org/10.21105/joss.01829\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:7\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:8\"\u003e\u003cp\u003eGábor Csárdi, Kirill Müller and Jim Hester (2021). desc: ManipulateDESCRIPTION Files. \u003cem\u003eR package version 1.4.0\u003c/em\u003e.\u003ca href=\"https://CRAN.R-project.org/package=desc\"\u003ehttps://CRAN.R-project.org/package=desc\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:8\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2021/11/23/cffr/","date_published":"2021-11-23T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/8bpby-4aw08","title":"How I Test cffr on (about) 2,000 Packages using GitHub Actions and R-universe","language":"en","authors":[{"name":"Diego Hernangómez","url":"https://orcid.org/0000-0001-8457-4658","avatar":"https://github.com/dieghernan.png","_role":["author"]}],"tags":["cffr","CI","community","GitHub Actions","r-universe","tech notes","testing","testthat"],"content_html":"\u003cp\u003eWhen GitHub announced \u003ca href=\"https://twitter.com/natfriedman/status/1420122675813441540\"\u003esupport for CITATION.cfffiles\u003c/a\u003e I though ofcreating a package that would assist R developers in this matter. I was alreadyusing \u003ca href=\"https://docs.ropensci.org/codemetar/\"\u003ecodemetar\u003c/a\u003e for most of my packages,so I was familiar with the creation of these kind of metadata files.\u003c/p\u003e\u003cp\u003eI borrowed some ideas from codemetar, although I decided to create most of mycode from scratch (I enjoy challenging myself, and there is no better way oflearning). Finally, the first working version of\u003ca href=\"https://docs.ropensci.org/cffr/\"\u003ecffr\u003c/a\u003e was released on September 15, 2021.\u003c/p\u003e\u003ch2 id=\"the-challenge\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-challenge\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe challenge\u003c/h2\u003e\u003cp\u003eOne of the things I had always in mind is that cffr should be able to work withany R package, no matter if it was available on CRAN, Bioconductor, the\u003ca href=\"/r-universe/\"\u003eR-universe\u003c/a\u003e or exclusively on GitHub/GitLab. So when I finishedthe initial version, I needed to test it with the largest possible number ofpackages.\u003c/p\u003e\u003cp\u003eI started setting up a \u003ca href=\"https://testthat.r-lib.org/\"\u003etestthat\u003c/a\u003e\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e test \u003ca href=\"https://github.com/ropensci/cffr/blob/main/tests/testthat/test_ci/test-full_cff.R\"\u003ein aseparatefolder\u003c/a\u003e which I ignored in .Rbuildignore. This test was basically a\u003ca href=\"https://github.com/ropensci/cffr/blob/6260303668303010c0c90ff381518960299a18f0/tests/testthat/test_ci/test-full_cff.R#L35:L61\"\u003eloop\u003c/a\u003eover \u003ca href=\"https://github.com/ropensci/cffr/blob/6260303668303010c0c90ff381518960299a18f0/tests/testthat/test_ci/test-full_cff.R#L4:L7\"\u003eall the R packages installedlocally\u003c/a\u003e,where I created the corresponding \u003ccode\u003ecff\u003c/code\u003e object for each package and validatedit. Finally, the test created a \u003ca href=\"https://github.com/ropensci/cffr/blob/6260303668303010c0c90ff381518960299a18f0/tests/testthat/test_ci/test-full_cff.R#L64:L100\"\u003esmall report inMarkdown\u003c/a\u003ewith the summary of the results.\u003c/p\u003e\u003cp\u003eThis setup was fine and worked locally, I just needed to run:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Load package\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edevtools\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eload_all\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Run the tests\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etestthat\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003etest_dir\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;tests/testthat/test_ci\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAnd voilà! The Markdown report was created in\u003ccode\u003etests/testthat/test_ci/_snaps/full_cff.md\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eHowever I was not completely comfortable with this setup. Locally, I haveinstalled ~200 packages, and it seemed to me like a small sample (CRAN hostsmore than 18,300 packages), so I needed to enlarge that sample. Also, I didn\u0026rsquo;twant to install more packages on my computer just for testing, so the questionwas: \u003cstrong\u003ehow do I achieve this?\u003c/strong\u003e\u003c/p\u003e\u003ch2 id=\"the-solution-continuous-integration-ci\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-solution-continuous-integration-ci\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe solution: Continuous Integration (CI)\u003c/h2\u003e\u003cp\u003eThe alternative approach seemed pretty obvious: using CI with GitHub Actions. Sobasically I created \u003ca href=\"https://github.com/ropensci/cffr/blob/main/.github/workflows/test-ci.yaml\"\u003ethisworkflow\u003c/a\u003eintegrating the previous script\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eBut still there were some open questions, such as: \u003cstrong\u003ehow do I select ameaningful sample of R packages?\u003c/strong\u003e\u003c/p\u003e\u003ch3 id=\"initial-steps\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#initial-steps\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eInitial steps\u003c/h3\u003e\u003cp\u003eThe action\u003ca href=\"https://github.com/r-lib/actions/tree/master/setup-r-dependencies\"\u003e\u003ccode\u003er-lib/actions/setup-r-dependencies\u003c/code\u003e\u003c/a\u003ewas already included in my workflow, so I started using the \u003ccode\u003eextra-packages\u003c/code\u003eoption to install the tidyverse and tidymodels. I decided to start with thesetwo packages as they import some of the most popular R packages. Also, extrapoints for \u003ccode\u003er-lib/actions/setup-r-dependencies\u003c/code\u003e as it uses caching for theinstalled packages, meaning that subsequent deploys would be significantlyfaster.\u003c/p\u003e\u003cp\u003eSo it was a good start in my quest to test cffr on a large sample of packages,but I was still not there\u0026hellip;\u003c/p\u003e\u003ch3 id=\"working-with-cran-task-views\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#working-with-cran-task-views\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWorking with CRAN Task Views\u003c/h3\u003e\u003cp\u003eDo you know \u003ca href=\"https://cran.r-project.org/web/views/\"\u003eCRAN Task Views\u003c/a\u003e? These areuseful collections of packages classified by relevant topics. With the\u003ca href=\"https://cran.r-project.org/web/packages/ctv/index.html\"\u003ectv\u003c/a\u003e package\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e, it isquite straightforward to install the packages included in each of those views. Idecided then to install the core packages of all views, in order to increase mypackage sample:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Install core packages of all views\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eoptions\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eCRAN\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;https://cloud.r-project.org\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eallviews\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003ectv\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eavailable.views\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epacks\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003elapply\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eseq_len\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003elength\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eallviews\u003c/span\u003e\u003cspan class=\"p\"\u003e)),\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eallviews[[x]]\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003epackagelist\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epacks\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ebind_rows\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epacks\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ecore\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epacks\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecore\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eOut of interest, there are a total of \u003cstrong\u003e4,276\u003c/strong\u003e packages included in the CRANTask Views (in the \u003ccode\u003epacks\u003c/code\u003e object) and \u003cstrong\u003e286\u003c/strong\u003e core packages (in the \u003ccode\u003ecore\u003c/code\u003eobject).\u003c/p\u003e\u003ch3 id=\"increasing-the-number-with-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#increasing-the-number-with-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eIncreasing the number with R-universe\u003c/h3\u003e\u003cp\u003e\u003ca href=\"/r-universe/\"\u003eR-universe\u003c/a\u003e by \u003ca href=\"/author/jeroen-ooms/\"\u003eJeroen Ooms\u003c/a\u003e is a wonderfulproject that, apart of the functionality of acting as a CRAN-like repo, includesseveral other components. One of those components is a specific \u003ca href=\"https://ropensci.r-universe.dev/ui#api\"\u003eAPIEndpoint\u003c/a\u003e for every R-universe with somevery useful resources, such as the ability to retrieve a \u003ca href=\"https://ropensci.r-universe.dev/packages\"\u003elist of all thepackages included in each R-universe\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThis fit perfectly with my needs, so my next step was to retrieve packages ofselected R-universes:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://ropensci.r-universe.dev/\"\u003erOpenSci\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://r-lib.r-universe.dev/\"\u003er-lib\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://r-forge.r-universe.dev/\"\u003eR-Forge\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://rstudio.r-universe.dev/\"\u003eRStudio\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://r-spatial.r-universe.dev/\"\u003er-spatial\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eI selected these well-known organizations as they host a lot of popular packagesamong use\u003cstrong\u003eR\u003c/strong\u003es. Also, my hope was that other developers would have at somepoint checked the DESCRIPTION and the inst/CITATION of many of these packages asthe starting point for developing their own (as I usually do 😁), so thesepackages could be considered representative enough.\u003c/p\u003e\u003cp\u003eExtracting a list of packages from an R-universe is as easy as:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# rOpenSci packages from R-universe\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eropensci\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eunlist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejsonlite\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eread_json\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://ropensci.r-universe.dev/packages\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eropenscireviewtools\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eunlist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejsonlite\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eread_json\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://ropenscireviewtools.r-universe.dev/packages\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# r-lib packages\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erlib\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eunlist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejsonlite\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eread_json\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://r-lib.r-universe.dev/packages\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# R-Forge packages\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erforge\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eunlist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejsonlite\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eread_json\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://r-forge.r-universe.dev/packages\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# RStudio packages\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erstudio\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eunlist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejsonlite\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eread_json\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://rstudio.r-universe.dev/packages\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# r-spatial packages\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erspatial\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eunlist\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejsonlite\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eread_json\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://r-spatial.r-universe.dev/packages\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAnd I joined all the retrieved packages into a single object \u003ccode\u003eall\u003c/code\u003e:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eall\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esort\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eunique\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecore\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eropensci\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eropenscireviewtools\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erlib\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erforge\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erstudio\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erspatial\u003c/span\u003e\u003cspan class=\"p\"\u003e)))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThat makes a grand total of \u003cstrong\u003e925 packages\u003c/strong\u003e. At this point, I was quite happywith the sample, since it included a large set of relevant packages.\u003c/p\u003e\u003ch2 id=\"final-steps-installing-the-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#final-steps-installing-the-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFinal steps: installing the packages\u003c/h2\u003e\u003cp\u003eI was almost there! Now, the last step was just to install these packages andtest them.\u003c/p\u003e\u003cp\u003eWith the aim of improving performance, I filtered out the packages alreadyinstalled on the system like this:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Check packages not installed yet\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003einstpack\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003eas.character\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003einstalled.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"n\"\u003e[\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Package\u0026#34;\u003c/span\u003e\u003cspan class=\"n\"\u003e]\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etoinstall\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003esetdiff\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eall\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003einstpack\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eI also decided to install most of the packages directly from CRAN, except thosebelonging to rOpenSci. For these packages, I decided to use the R-universeserver, so I would have a mix of CRAN and R-universe packages in my sample fortesting purposes:\u003c/p\u003e\u003cp\u003eThe following script does the trick:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Install\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eoptions\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erepos\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eropensci\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;https://ropensci.r-universe.dev\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eropenscireviewtools\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;https://ropensci-review-tools.r-universe.dev\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eCRAN\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;https://cloud.r-project.org\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003einstall.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etoinstall\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003edependencies\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003everbose\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003equiet\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;binary\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Update\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eupdate.packages\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;binary\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNote that I installed the packages using \u003ccode\u003edependencies = TRUE\u003c/code\u003e. This forces theinstallation of the packages from Depends, Imports and Suggest, so by doing thisI was substantially increasing the overall number of packages installed by myGitHub Actions. Thanks to caching, on a regular run the previous process ofinstalling packages takes less than 4 minutes on GitHub. That, in my opinion, ismore than satisfactory\u003csup id=\"fnref:4\"\u003e\u003ca href=\"#fn:4\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e4\u003c/a\u003e\u003c/sup\u003e.\u003c/p\u003e\u003cp\u003eThen, it was just a matter of running the first chunk presented in this blogpost as part of the GitHub Actions:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Load package\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edevtools\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eload_all\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Run the tests\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003etestthat\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003etest_dir\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;tests/testthat/test_ci\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eI also created a step (named \u0026ldquo;Display results\u0026rdquo;) that basically prints the outputof the Markdown report. The last bits were to include a scheduled run via\u003ca href=\"https://docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows#scheduled-events\"\u003ecron\u003c/a\u003eand to use the action\u003ca href=\"https://github.com/actions/upload-artifact\"\u003e\u003ccode\u003eactions/upload-artifact@v2\u003c/code\u003e\u003c/a\u003e toupdate the final report after each run.\u003c/p\u003e\u003cp\u003eSee here an extract of the results of the last run:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e# Test ALL installed packages\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ## Sessioninfo \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    R version 4.1.2 (2021-11-01)\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    Platform: x86_64-w64-mingw32/x64 (64-bit)\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    Running under: Windows Server x64 (build 17763)\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    Matrix products: default\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    locale:\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    [1] LC_COLLATE=C                          \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    [2] LC_CTYPE=English_United States.1252   \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    [3] LC_MONETARY=English_United States.1252\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    [4] LC_NUMERIC=C                          \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    [5] LC_TIME=English_United States.1252    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt; omitted \u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ## Summary \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    [1] \u0026#34;testing a sample of 1930 installed packages\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ---\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ## OK rate \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    [1] \u0026#34;99.74%\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ---\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ## Errors \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u0026lt; omitted \u0026gt;\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ...\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"the-result\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-result\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe result\u003c/h2\u003e\u003cp\u003eAt this stage, I was ready to check cffr with a broad number of packages. Thisworkflow has been really useful for detecting corner cases not initially coveredin the first release, so after several iterations I now feel comfortable withthe compatibility of cffr with a large number of representative R packages.\u003c/p\u003e\u003cp\u003eOn subsequent runs (once the packages are cached) the whole workflow run takes~13 minutes on Windows and ~8 minutes on macOS. This allows me to rapidly testany improvement of the package.\u003c/p\u003e\u003ch2 id=\"lessons-learned\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#lessons-learned\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLessons learned\u003c/h2\u003e\u003cp\u003eAfter validating the metadata of hundreds of packages, there are some thoughtsthat I would like to share:\u003c/p\u003e\u003col\u003e\u003cli\u003e\u003cp\u003ecffr was able to produce valid \u003ccode\u003ecff\u003c/code\u003e objects for \u003cstrong\u003e1,925 packages\u003c/strong\u003e out of1,930\u003csup id=\"fnref:5\"\u003e\u003ca href=\"#fn:5\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e5\u003c/a\u003e\u003c/sup\u003e. I opened a couple of\u003ca href=\"https://github.com/selva86/InformationValue/pull/5\"\u003epull\u003c/a\u003e\u003ca href=\"https://github.com/ropensci/photosearcher/pull/13\"\u003erequests\u003c/a\u003e on some of thefailing packages where I saw a clear mistake in the metadata. So in someways this exercise could be also used to improve other packages by detectingtypos, etc. in the metadata.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe DESCRIPTION files are \u003ca href=\"https://cran.r-project.org/doc/manuals/r-release/R-exts.html#The-DESCRIPTION-file\"\u003eprettystandardized\u003c/a\u003eand usually they are not a problem for cffr. However,\u003ca href=\"https://cran.r-project.org/doc/manuals/r-release/R-exts.html#CITATION-files\"\u003einst/CITATION\u003c/a\u003eare tricky (\u003cem\u003eDo you have a inst/CITATION? Do you still use\u003ca href=\"https://rdrr.io/r/utils/citEntry.html\"\u003e\u003ccode\u003ecitEntry()\u003c/code\u003e\u003c/a\u003e instead of\u003ca href=\"https://rdrr.io/r/utils/bibentry.html\"\u003e\u003ccode\u003ebibentry()\u003c/code\u003e\u003c/a\u003e? Maybe you use \u003ccode\u003emeta\u003c/code\u003einformation from your DESCRIPTION or you use\u003ca href=\"https://rdrr.io/r/utils/citation.html\"\u003e\u003ccode\u003ecitation(auto = meta)\u003c/code\u003e\u003c/a\u003e?\u003c/em\u003e). Thiswas the most difficult issue to solve when developing the package.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThere are differences between the accepted keys on \u003ccode\u003ebibentry()\u003c/code\u003e, BibTeX andthe\u003ca href=\"https://github.com/citation-file-format/citation-file-format/blob/main/schema-guide.md#preferred-citation\"\u003e\u003ccode\u003epreferred-citation\u003c/code\u003e\u003c/a\u003efield of a CITATION.cff file. I tried to map those as best I could,suggestions welcomed!\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eOne thing I did after completing this process was to make use of the\u003ccode\u003ebibentry()\u003c/code\u003e function instead of \u003ccode\u003ecitEntry()\u003c/code\u003e in the inst/CITATION files of allmy packages. I chose this since the syntax is very similar to BibTeX, and thefunction also provides guidance on the possible entry types, as well as specificvalidity checks.\u003c/p\u003e\u003cp\u003eAnd that\u0026rsquo;s all! If you have any suggestions for how to improve the currentvalidation workflow, I would be glad to hear it and include it in my checks.\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003eWickham H (2011). \u0026ldquo;testthat: Get Started with Testing.\u0026rdquo; \u003cem\u003eThe R Journal\u003c/em\u003e,\u003cstrong\u003e3\u003c/strong\u003e, 5\u0026ndash;10.\u003ca href=\"https://journal.r-project.org/archive/2011-1/RJournal_2011-1_Wickham.pdf\"\u003ehttps://journal.r-project.org/archive/2011-1/RJournal_2011-1_Wickham.pdf\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eThe workflow is derived from\u003ca href=\"https://github.com/r-lib/actions/tree/master/examples\"\u003er-lib/actions/tree/master/examples\u003c/a\u003e.\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eZeileis A (2005). \u0026ldquo;CRAN Task Views.\u0026rdquo; \u003cem\u003eR News\u003c/em\u003e, \u003cstrong\u003e5\u003c/strong\u003e(1), pp. 39\u0026ndash;40.\u003ca href=\"https://CRAN.R-project.org/doc/Rnews/\"\u003ehttps://CRAN.R-project.org/doc/Rnews/\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:4\"\u003e\u003cp\u003eNote also the use of \u003ccode\u003etype = \u0026quot;binary\u0026quot;\u003c/code\u003e. The workflow runs on Windows andmacOS, so in order to speed up the process I instructed to install theprecompiled versions. For that very same reason, I didn\u0026rsquo;t run this full teston Linux, since it would be necessary to compile every package from source.\u0026#160;\u003ca href=\"#fnref:4\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:5\"\u003e\u003cp\u003eAt the moment of writing, CRAN hosted \u003cstrong\u003e18,369 packages\u003c/strong\u003e, so the testingsample is ~10.5% of the overall number of packages on CRAN.\u0026#160;\u003ca href=\"#fnref:5\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2021/11/23/how-i-test-cffr/","date_published":"2021-11-23T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/2qq83-jhj37","title":"rOpenSci Dev Guide 0.7.0: Updates","language":"en","authors":[{"name":"Adam Sparks","url":"https://ropensci.org/author/adam-sparks/","avatar":"https://github.com/adamhsparks.png","_role":["author"]},{"name":"Anna Krystalli","url":"https://ropensci.org/author/anna-krystalli/","avatar":"https://github.com/annakrystalli.png","_role":["author"]},{"name":"Emily Riederer","url":"https://ropensci.org/author/emily-riederer/","avatar":"https://github.com/emilyriederer.png","_role":["author"]},{"name":"Jeff Hollister","url":"https://ropensci.org/author/jeff-hollister/","avatar":"https://github.com/jhollist.png","_role":["author"]},{"name":"Julia Gustavsen","url":"https://orcid.org/0000-0002-4764-4802","avatar":"https://ropensci.org/img/team/julia-gustavsen.jpg","_role":["author"]},{"name":"Karthik Ram","url":"https://ropensci.org/author/karthik-ram/","avatar":"https://ropensci.org/img/team/karthik-ram.png","_role":["author"]},{"name":"Laura DeCicco","url":"https://ropensci.org/author/laura-decicco/","avatar":"https://github.com/ldecicco-usgs.png","_role":["author"]},{"name":"Mauro Lepore","url":"https://orcid.org/0000-0002-1986-7988","avatar":"https://ropensci.org/img/team/mauro-lepore.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]},{"name":"Melina Vidoni","url":"https://ropensci.org/author/melina-vidoni/","avatar":"https://github.com/melvidoni.png","_role":["author"]},{"name":"Noam Ross","url":"https://orcid.org/0000-0002-2136-0000","avatar":"https://ropensci.org/img/team/noam_ross.png","_role":["author"]}],"tags":["Software Peer Review","dev guide"],"content_html":"\u003cp\u003erOpenSci Software Peer Review\u0026rsquo;s guidance is gathered in \u003ca href=\"https://devguide.ropensci.org/\"\u003ean online book\u003c/a\u003e and keeps improving!To find out what\u0026rsquo;s new in our dev guide 0.7.0, you can \u003ca href=\"https://devguide.ropensci.org/booknews.html\"\u003eread the changelog\u003c/a\u003e,or this blog post for more digested information.\u003c/p\u003e\u003ch2 id=\"ropensci-review-bot-help-less-todos-more-simple-commands\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-review-bot-help-less-todos-more-simple-commands\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003e@ropensci-review-bot help: less TODOs, more simple commands!\u003c/h2\u003e\u003cp\u003eA big change brought in this release is the retirement of some of our multiple TODOs for editors in favor of simple bot commands such as \u003ccode\u003e@ropensci-review-bot check package\u003c/code\u003e.Our \u003ca href=\"https://devguide.ropensci.org/editorguide.html\"\u003eeditor guide\u003c/a\u003e is now simpler!\u003c/p\u003e\u003cp\u003eFor context, rOpenSci has worked with The \u003ca href=\"https://joss.theoj.org/\"\u003eJournal of Open Source Software\u003c/a\u003e to extend JOSS’s approach of \u003ca href=\"https://www.arfon.org/chatops-driven-publishing\"\u003echatops-driven publishing\u003c/a\u003e into a new GitHub chat-bot, that manages our editorial process: assigning tasks, tagging issues, running tests on software submissions, and returning reports to reviewers and editors, logging reviews in an external (Airtable) database, all from the comfort of a GitHub issue comment.Chat-ops automation has been critical to JOSS’s success, and shows huge promise for automating even more tedious tasks like frequent software checks and compliance with best practices.\u003c/p\u003e\u003cp\u003eIf you are curious about this topic, do not miss our next \u003ca href=\"/dec2021-automation/\"\u003ecommunity call: Enhancing Software Peer Review with GitHub Automation\u003c/a\u003e!As usual resources and a close-captioned recording will be posted afterwards.\u003c/p\u003e\u003ch2 id=\"still-some-work-for-editors-\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#still-some-work-for-editors-\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStill some work for editors 😉\u003c/h2\u003e\u003cp\u003eFear not, software peer review volunteer \u003ca href=\"https://ropensci.org/software-review/\"\u003eeditors\u003c/a\u003e still participate a lot in the process.We\u0026rsquo;ve formalized \u003ca href=\"https://devguide.ropensci.org/editorguide.html#editors-responsabilities\"\u003eeditor responsabilities\u003c/a\u003e, in particular outlining editor etiquette around submissions handled by other editors.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eYou do not have to keep track of other submissions, but if you do notice an issue with a package that is being handled by another editor, feel free to raise that issue directly with the other editor, or post the concern to editors-only channel on slack.\u003c/p\u003e\u003c/blockquote\u003e\u003cp\u003eThanks to the new statistical software peer-review editor \u003ca href=\"https://github.com/tdhock\"\u003eToby Dylan Hocking\u003c/a\u003e we\u0026rsquo;ve made it explicit that editors have to look for \u003cstrong\u003etwo\u003c/strong\u003e reviewers.\u003c/p\u003e\u003cp\u003eAnother element we\u0026rsquo;ve formalized a bit more is the list of human checks to be \u003ca href=\"https://devguide.ropensci.org/editortemplate.html\"\u003emade by editors\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;ve also added a whole chapter dedicated to \u003ca href=\"https://devguide.ropensci.org/editorialmanagement.html\"\u003eeditorial management\u003c/a\u003e with guidance for inviting, onboarding and offboarding editors.Recruiting new editors and maintaining a sufficient and well-balanced editorial board is a responsibility of the \u003ca href=\"https://ropensci.org/about/#team\"\u003eSoftware Review Lead\u003c/a\u003e (\u003ca href=\"https://www.noamross.net/\"\u003eNoam Ross\u003c/a\u003e at this point in software review history 😀), with support and advice from the editorial board.\u003c/p\u003e\u003cp\u003eAs with the rest of the Dev Guide, we hope this section helps make our own processes more transparent, and is of use to other organizations managing peer review.\u003c/p\u003e\u003ch2 id=\"a-new-form-for-volunteer-reviewing\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#a-new-form-for-volunteer-reviewing\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eA new form for volunteer reviewing!\u003c/h2\u003e\u003cp\u003eIn an effort to gather more relevant data about potential reviewers, we\u0026rsquo;ve improved our \u003ca href=\"https://airtable.com/shrnfDI2S9uuyxtDw\"\u003eform for volunteering\u003c/a\u003e.It has more detailed questions about technical knowledge and domain expertise.\u003c/p\u003e\u003cp\u003eThanks a lot to all who either updated their data or filled the form for the first time, we are very thankful for your willingness to participate to Software Peer Review!\u003c/p\u003e\u003cp\u003eTo go with the new useful data we\u0026rsquo;ve updated the guidance for editors to \u003ca href=\"https://devguide.ropensci.org/editorguide.html#how-to-look-for-reviewers\"\u003elook for reviewers\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eIf you want your info removed from the database, please send an email to \u003ccode\u003einfo@ropensci.org\u003c/code\u003e.\u003c/p\u003e\u003ch2 id=\"mention-relevant-ropensci-projects\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#mention-relevant-ropensci-projects\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMention relevant rOpenSci projects\u003c/h2\u003e\u003cp\u003eWe\u0026rsquo;ve sprinkled the dev guide with mentions of rOpenSci projects relevant to software review participants:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eWe\u0026rsquo;ve linked to Statistical Software Peer Review from the \u003ca href=\"https://devguide.ropensci.org/softwarereviewintro.html\"\u003esoftware review introduction\u003c/a\u003e and from the \u003ca href=\"https://devguide.ropensci.org/index.html\"\u003every first page of the book\u003c/a\u003e,\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eWe present the \u003ca href=\"https://docs.ropensci.org/pkgcheck/\"\u003epkgcheck\u003c/a\u003e package created and maintained by Mark Padgham in the author guide as using it enables authors to ensure their package is ready for submission.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eIn the packaging guide, we now give precise examples of \u003ca href=\"https://devguide.ropensci.org/building.html#readme\"\u003etools for installation instructions\u003c/a\u003e: the r-lib remotes and pak packages but also \u003ca href=\"/r-universe/\"\u003eR-universe\u003c/a\u003e!\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"setting-up-your-package-to-foster-a-community\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#setting-up-your-package-to-foster-a-community\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSetting up your package to foster a community\u003c/h2\u003e\u003cp\u003eFollowing our community call \u003ca href=\"/commcalls/apr2021-pkg-community/\"\u003e\u0026ldquo;Set Up Your Package to Foster a Community\u0026rdquo;\u003c/a\u003e that has been \u003ca href=\"/blog/2021/04/28/commcall-pkg-community/\"\u003esummarized by  Sina Rüeger\u003c/a\u003e, we\u0026rsquo;ve added guidance to our \u003ca href=\"https://devguide.ropensci.org/collaboration.html\"\u003ecollaboration guide\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"updates-to-reviewer-guidance\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#updates-to-reviewer-guidance\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUpdates to reviewer guidance\u003c/h2\u003e\u003cp\u003eThe work on pkgcheck and \u003ca href=\"/commcalls/dec2021-automation/\"\u003eautomation\u003c/a\u003e means we were able to remove some elements from reviewers\u0026rsquo; guidance:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eWe no longer ask reviewers to run covr but we ask them to pay attentions to skipped tests.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eWe no longer ask reviewers to run goodpractice as goodpractice is run by the pkgcheck package whose checks are triggered on the cloud by the bot.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe are thrilled to remove some workload from reviewers as we are aware that reviewing a package is a lot of work.Thanks to all reviewers for their incredible contributions to Software Peer Review!\u003c/p\u003e\u003ch2 id=\"miscellaneous-guidance-updates\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#miscellaneous-guidance-updates\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eMiscellaneous guidance updates\u003c/h2\u003e\u003cp\u003eThe requirement to have a vignette is now more precise, there has to be at least one \u003cem\u003eHTML\u003c/em\u003e vignette.That requirement is part of pkgcheck checks.\u003c/p\u003e\u003cp\u003eThanks to an idea of editor \u003ca href=\"https://github.com/annakrystalli\"\u003eAnna Krystalli\u003c/a\u003e, the dev guide now includes an explicit \u003ca href=\"https://devguide.ropensci.org/building.html#version-control\"\u003esubsection about version control\u003c/a\u003e, and pkgcheck\u0026rsquo;s checks include looking for \u0026ldquo;scrap files\u0026rdquo; such as \u003ccode\u003e.DS_Store\u003c/code\u003e files, that should be \u003ccode\u003e.gitignore\u003c/code\u003e\u0026rsquo;d.\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;ve added some more guidance on \u003ca href=\"https://devguide.ropensci.org/building.html#version-control\"\u003emaking packages easier to cite\u003c/a\u003e following our \u003ca href=\"/blog/2021/02/16/package-citation/\"\u003eblog post on the same topic\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"policy-update-scope-clarification-for-data-extraction-and-munging\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#policy-update-scope-clarification-for-data-extraction-and-munging\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePolicy update: scope clarification for data extraction and munging\u003c/h2\u003e\u003cp\u003eWe\u0026rsquo;ve clarified the definition of the \u003ca href=\"https://devguide.ropensci.org/policies.html#package-categories\"\u003ecategories\u003c/a\u003e \u0026ldquo;data extraction\u0026rdquo; and \u0026ldquo;data munging\u0026rdquo; by adding examples.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we summarized the changes incorporated into our book \u003ca href=\"https://devguide.ropensci.org/\"\u003e\u0026ldquo;rOpenSci Packages: Development, Maintenance, and Peer Review\u0026rdquo;\u003c/a\u003e over the last months.We are thankful for all contributions that shaped this release.We are already working on the next version, such as pondering \u003ca href=\"https://github.com/ropensci/dev_guide/issues/340\"\u003ewhether to make the review template an R Markdown file\u003c/a\u003e and \u003ca href=\"https://github.com/ropensci/dev_guide/issues/334\"\u003ewhether to make a distinct chapter out of contributing guide standards\u003c/a\u003e\u003c/p\u003e","url":"https://ropensci.org/blog/2021/11/18/devguide-0.7.0/","date_published":"2021-11-18T00:00:00+00:00","date_modified":"2026-06-29T17:18:38+02:00"},{"id":"https://doi.org/10.59350/t79xt-tf203","title":"How to Cite R and R Packages","language":"en","authors":[{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]}],"tags":["citations","packages","reproducibility","repeatability"],"content_html":"\u003cp\u003eI teach R to a lot of scientists, those that are new to science (i.e. students)as well as more established scientists, new to R.I find that after all their struggles of dealing with dates,or remembering where to put the comma, they\u0026rsquo;re so grateful to actual have an analysis,that they often forget or aren\u0026rsquo;t aware of the next steps.\u003c/p\u003e\u003cp\u003eMany scientists don\u0026rsquo;t know that they should be citing R packages let alone R,and, if they do know, they often struggle with how.So here\u0026rsquo;s a short primer on why and how to get started!\u003c/p\u003e\u003ch2 id=\"why-cite\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#why-cite\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhy cite?\u003c/h2\u003e\u003cp\u003eIt\u0026rsquo;s extremely important to cite both R and R packages for several reasons:\u003c/p\u003e\u003col\u003e\u003cli\u003e\u003cstrong\u003eDeveloper Credit\u003c/strong\u003e\u003cbr\u003eMany developers of R packages for science are themselves scientists.They may be developing packages in their own time, or are trying to fit it into a busy schedule.Without citations, most scientists don\u0026rsquo;t get credit for their work.This makes it hard to prioritize work on open software projects.If we want to ensure that high-quality open software continues,it\u0026rsquo;s important that the developers get credit for their work\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003e\u003cspan\u003e\u003c/span\u003e\u003c/p\u003e\u003col start=\"2\"\u003e\u003cli\u003e\u003cstrong\u003eRepeatable Science\u003c/strong\u003e\u003cbr\u003eIf it isn\u0026rsquo;t clear how you did a thing or how/where you got your data, your work isn\u0026rsquo;t repeatable.The lack of citations of software in scientific publications has become a problem to the extent that working groups, such as \u003ca href=\"https://www.force11.org/group/software-citation-implementation-working-group\"\u003eFORCE11 Software Citation Implementation Working Group\u003c/a\u003e, have been created to establish guidelines\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e and standards\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e for citing software.Software (like R), R packages, and their versions are important information to include in a manuscript.It not only helps other scientists understand and repeat your work, but helps share important and useful tools.Including versions is also really important as a way of recording the context of your manuscriptwhen software changes.\u003cbr\u003e\u003cstrong\u003eNote:\u003c/strong\u003e \u003cem\u003eRepeatability\u003c/em\u003e isn\u0026rsquo;t the same as \u003cem\u003ereproducibility\u003c/em\u003e.If you\u0026rsquo;re interested in ensuring your \u003cem\u003eanalysis is reproducible\u003c/em\u003e (as opposed to your \u003cem\u003eresearch being repeatable\u003c/em\u003e), you should look into more rigorous ways of keeping trackof software dependencies (see below, \u003ca href=\"#reproducible-science\"\u003eReproducible science\u003c/a\u003e).\u003c/li\u003e\u003c/ol\u003e\u003cp\u003e\u003cspan\u003e\u003c/span\u003e\u003c/p\u003e\u003col start=\"3\"\u003e\u003cli\u003e\u003cstrong\u003eGratitude\u003c/strong\u003e\u003cbr\u003eCiting developer\u0026rsquo;s work is also a way of showing gratitude and thanks for (often) unpaid hard work.I know that every citation I get for my \u003ca href=\"https://docs.ropensci.org/weathercan\"\u003eweathercan\u003c/a\u003e package warms my heart 😻 (and helps my CV)!R packages have made my life so much easier, and it makes me happy to know that at least I can publicly acknowledge the hard work of the developers by citing them in my manuscripts.\u003c/li\u003e\u003c/ol\u003e\u003ch2 id=\"which-packages-should-i-cite\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#which-packages-should-i-cite\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhich packages should I cite?\u003c/h2\u003e\u003cp\u003eA question I often hear is, \u0026ldquo;Okay, I understand I should cite R packages, but do I cite them all?\u0026rdquo;.This is a tricky question, and to be honest, I\u0026rsquo;m not really sure of the best answer,and sometimes it may depend on many factors.\u003c/p\u003e\u003cp\u003eI always advise citing statistical packages, no question, and any package that is specific to a scientific domain or methodology (i.e. if you used \u003ca href=\"https://docs.ropensci.org/magick\"\u003emagick\u003c/a\u003e to process images before analysis,or if you used \u003ca href=\"https://docs.ropensci.org/tidyhydat\"\u003etidyhydat\u003c/a\u003e to retrieve hydrology data, definitely cite those packages).\u003c/p\u003e\u003cp\u003eThe tricky bit is packages that are used generally, like data munging packages,or packages like \u003ca href=\"https://docs.ropensci.org/osfr\"\u003eosfr\u003c/a\u003e which are used as part of the scientific process(i.e. connecting to \u003ca href=\"https://osf.io/\"\u003eOSF, the Open Science Framework\u003c/a\u003e),but not necessarily for the analysis specifically.In an ideal world, everything we use would be cited, but with word and reference limits and editors less aware of the importance of citing software, it\u0026rsquo;s often hard to justify citing everything in a manuscript.\u003c/p\u003e\u003cp\u003eThe \u003ca href=\"https://peerj.com/articles/cs-86/#discussion\"\u003egeneral advice\u003c/a\u003e by the FORCE11 Software Citation Implementation Working Group is to include software important to the research outcome.I would also add that it\u0026rsquo;s not a bad thing to cite open-source software that was a major part of your workflow (for the purposes of credit, if not repeatability).Anything else, try to make sure it\u0026rsquo;s prominently displayed in your scripts and if possible include your scripts as supplemental to the manuscript. This way any curious readers will be exposed to the packages if nothing else. For packages like osfr, you could share your OSF page/DOI, and perhaps mention that it was managed with osfr.However, it\u0026rsquo;s important to note that it \u003cem\u003eis not\u003c/em\u003e sufficient to mention packages in supplemental materials, but if that\u0026rsquo;s all you can do, this makes the best of a bad situation.\u003c/p\u003e\u003cp\u003eNow that I\u0026rsquo;ve convinced you of the importance of citing packages, and you\u0026rsquo;ve had a chance to consider which ones you want to cite,the next step is gathering citations.Luckily, there are standard ways of citing R packages, most of which you can access directly from your R console!\u003c/p\u003e\u003ch2 id=\"how-to-cite-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-cite-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to cite R\u003c/h2\u003e\u003cp\u003eCiting R is pretty straightforward.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ecitation\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## ## To cite R in publications use:## ##   R Core Team (2021). R: A language and environment for statistical##   computing. R Foundation for Statistical Computing, Vienna, Austria.##   URL https://www.R-project.org/.## ## A BibTeX entry for LaTeX users is## ##   @Manual{,##     title = {R: A Language and Environment for Statistical Computing},##     author = {{R Core Team}},##     organization = {R Foundation for Statistical Computing},##     address = {Vienna, Austria},##     year = {2021},##     url = {https://www.R-project.org/},##   }## ## We have invested a lot of time and effort in creating R, please cite it## when using it for data analysis. See also \u0026#39;citation(\u0026#34;pkgname\u0026#34;)\u0026#39; for## citing R packages.\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe next thing you\u0026rsquo;ll want is the version of R.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eversion\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003eversion.string\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## [1] \u0026#34;R version 4.1.2 (2021-11-01)\u0026#34;\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eIn the text of a manuscript, I generally suggest something like the following.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eAll analyses were performed using R Statistical Software(v4.1.2; R Core Team 2021)\u003c/p\u003e\u003c/blockquote\u003e\u003ch2 id=\"how-to-cite-r-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-to-cite-r-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow to cite R packages\u003c/h2\u003e\u003cp\u003eCitation information for R packages can also be accessed through R.\u003c/p\u003e\u003cp\u003eSome developers have books or articles that they want you to use as the citation.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ecitation\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;weathercan\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## ## To cite \u0026#39;weathercan\u0026#39; in publications, please use:## ##   LaZerte, Stefanie E and Sam Albers (2018). weathercan: Download and##   format weather data from Environment and Climate Change Canada. The##   Journal of Open Source Software 3(22):571. doi:10.21105/joss.00571.## ## A BibTeX entry for LaTeX users is## ##   @Article{,##     title = {{weathercan}: {D}ownload and format weather data from Environment and Climate Change Canada},##     author = {Stefanie E LaZerte and Sam Albers},##     journal = {The Journal of Open Source Software},##     volume = {3},##     number = {22},##     pages = {571},##     year = {2018},##     url = {https://joss.theoj.org/papers/10.21105/joss.00571},##   }\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSome have you cite the software directly.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ecitation\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;magick\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## ## To cite package \u0026#39;magick\u0026#39; in publications use:## ##   Jeroen Ooms (2021). magick: Advanced Graphics and Image-Processing in##   R. R package version 2.7.3. https://CRAN.R-project.org/package=magick## ## A BibTeX entry for LaTeX users is## ##   @Manual{,##     title = {magick: Advanced Graphics and Image-Processing in R},##     author = {Jeroen Ooms},##     year = {2021},##     note = {R package version 2.7.3},##     url = {https://CRAN.R-project.org/package=magick},##   }\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou can get version information with the \u003ccode\u003epackageVersion()\u003c/code\u003e function.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003epackageVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;weathercan\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## [1] \u0026#39;0.6.2\u0026#39;\u003c/code\u003e\u003c/pre\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003epackageVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;magick\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## [1] \u0026#39;2.7.3\u0026#39;\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eFor R packages, I generally recommend text along these lines in a manuscript.\u003c/p\u003e\u003cblockquote\u003e\u003cp\u003eAll analyses were performed using R Statistical Software(v4.1.2; R Core Team 2021).Temperature data was obtained from Environment and Climate Change Canadavia the weathercan R package (v0.6.2; LaZerte and Albers 2018).Vegetation photos were simplified and processed prior to analysis using the magick R package (v2.7.3; Ooms 2021).\u003c/p\u003e\u003c/blockquote\u003e\u003ch2 id=\"reproducible-workflow-for-managing-citations\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#reproducible-workflow-for-managing-citations\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReproducible workflow for managing citations\u003c/h2\u003e\u003cp\u003eBeing ready to cite the packages you\u0026rsquo;ve used will be so much easier if you keeptrack of packages and package versions as part of your workflow.\u003c/p\u003e\u003cp\u003eConsider keeping compiled reports of your analysis scripts(either rendering your scripts with the \u003ca href=\"https://rmarkdown.rstudio.com/articles_report_from_r_script.html\"\u003eRStudio\u0026rsquo;s Compile Report\u003c/a\u003e button,\u0026lsquo;spinning\u0026rsquo; your scripts via rmarkdown and knitr\u003csup id=\"fnref:4\"\u003e\u003ca href=\"#fn:4\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e4\u003c/a\u003e\u003c/sup\u003e,or using Rmd files and knitting them.)\u003c/p\u003e\u003cp\u003eThis way you can include a call to \u003ccode\u003esessionInfo()\u003c/code\u003e or \u003ccode\u003edevtools::session_info()\u003c/code\u003e,at the end of your script.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edevtools\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003esession_info\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## ─ Session info ───────────────────────────────────────────────────────────────##  setting  value                       ##  version  R version 4.1.2 (2021-11-01)##  os       Ubuntu 20.04.3 LTS          ##  system   x86_64, linux-gnu           ##  ui       X11                         ##  language en_CA:en                    ##  collate  en_CA.UTF-8                 ##  ctype    en_CA.UTF-8                 ##  tz       America/Winnipeg            ##  date     2021-11-09                  ## ## ─ Packages ───────────────────────────────────────────────────────────────────##  package     * version    date       lib source                     ##  assertthat    0.2.1      2019-03-21 [1] CRAN (R 4.1.0)             ##  bslib         0.3.0      2021-09-02 [1] CRAN (R 4.1.1)             ##  cachem        1.0.6      2021-08-19 [1] CRAN (R 4.1.1)             ##  callr         3.7.0      2021-04-20 [1] CRAN (R 4.1.0)             ##  cli           3.1.0      2021-10-27 [1] CRAN (R 4.1.2)             ##  crayon        1.4.2      2021-10-29 [1] CRAN (R 4.1.2)             ##  desc          1.4.0      2021-09-28 [1] CRAN (R 4.1.1)             ##  devtools      2.4.1      2021-05-05 [1] CRAN (R 4.1.0)             ##  digest        0.6.28     2021-09-23 [1] CRAN (R 4.1.1)             ##  ellipsis      0.3.2      2021-04-29 [1] CRAN (R 4.1.0)             ##  emo           0.0.0.9000 2021-06-04 [1] Github (hadley/emo@3f03b11)##  evaluate      0.14       2019-05-28 [1] CRAN (R 4.1.0)             ##  fastmap       1.1.0      2021-01-25 [1] CRAN (R 4.1.0)             ##  fs            1.5.0      2020-07-31 [1] CRAN (R 4.1.0)             ##  generics      0.1.0      2020-10-31 [1] CRAN (R 4.1.0)             ##  glue          1.5.0      2021-11-07 [1] CRAN (R 4.1.2)             ##  htmltools     0.5.2      2021-08-25 [1] CRAN (R 4.1.1)             ##  jquerylib     0.1.4      2021-04-26 [1] CRAN (R 4.1.0)             ##  jsonlite      1.7.2      2020-12-09 [1] CRAN (R 4.1.0)             ##  knitr         1.36       2021-09-29 [1] CRAN (R 4.1.2)             ##  lifecycle     1.0.1      2021-09-24 [1] CRAN (R 4.1.1)             ##  lubridate     1.8.0      2021-10-07 [1] CRAN (R 4.1.1)             ##  magrittr      2.0.1      2020-11-17 [1] CRAN (R 4.1.0)             ##  memoise       2.0.0      2021-01-26 [1] CRAN (R 4.1.0)             ##  pkgbuild      1.2.0      2020-12-15 [1] CRAN (R 4.1.0)             ##  pkgload       1.2.3      2021-10-13 [1] CRAN (R 4.1.1)             ##  prettyunits   1.1.1      2020-01-24 [1] CRAN (R 4.1.0)             ##  processx      3.5.2      2021-04-30 [1] CRAN (R 4.1.0)             ##  ps            1.6.0      2021-02-28 [1] CRAN (R 4.1.0)             ##  purrr         0.3.4      2020-04-17 [1] CRAN (R 4.1.0)             ##  R6            2.5.1      2021-08-19 [1] CRAN (R 4.1.1)             ##  remotes       2.4.0      2021-06-02 [1] CRAN (R 4.1.0)             ##  rlang         0.4.12     2021-10-18 [1] CRAN (R 4.1.1)             ##  rmarkdown     2.11       2021-09-14 [1] CRAN (R 4.1.2)             ##  rprojroot     2.0.2      2020-11-15 [1] CRAN (R 4.1.0)             ##  rstudioapi    0.13       2020-11-12 [1] CRAN (R 4.1.0)             ##  sass          0.4.0      2021-05-12 [1] CRAN (R 4.1.0)             ##  sessioninfo   1.1.1      2018-11-05 [1] CRAN (R 4.1.0)             ##  stringi       1.7.5      2021-10-04 [1] CRAN (R 4.1.1)             ##  stringr       1.4.0      2019-02-10 [1] CRAN (R 4.1.0)             ##  testthat      3.1.0      2021-10-04 [1] CRAN (R 4.1.1)             ##  usethis       2.1.3      2021-10-27 [1] CRAN (R 4.1.2)             ##  withr         2.4.2      2021-04-18 [1] CRAN (R 4.1.0)             ##  xfun          0.28       2021-11-04 [1] CRAN (R 4.1.2)             ##  yaml          2.2.1      2020-02-01 [1] CRAN (R 4.1.0)             ## ## [1] /home/steffi/R/x86_64-pc-linux-gnu-library/4.1## [2] /usr/local/lib/R/site-library## [3] /usr/lib/R/site-library## [4] /usr/lib/R/library\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYour compiled report will then have a complete record of your workflow, packages,results \u003cem\u003eand\u003c/em\u003e package versions.\u003c/p\u003e\u003cp\u003eIf you want to get even fancier, you can add specific \u003ccode\u003eprint()\u003c/code\u003e commands to theend of your script which will output the citations themselves (but note that you\u0026rsquo;llprobably still need \u003ccode\u003esession_info()\u003c/code\u003e for package versions).\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ecitation\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;weathercan\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003estyle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;text\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## LaZerte S, Albers S (2018). \u0026#34;weathercan: Download and format weather## data from Environment and Climate Change Canada.\u0026#34; _The Journal of Open## Source Software_, *3*(22), 571. \u0026lt;URL:## https://joss.theoj.org/papers/10.21105/joss.00571\u0026gt;.\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOr do a bunch of packages:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003epurrr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ec\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;weathercan\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;magick\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;tidyhydat\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emap\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecitation\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eprint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estyle\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;text\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e## [[1]]## LaZerte S, Albers S (2018). \u0026#34;weathercan: Download and format weather## data from Environment and Climate Change Canada.\u0026#34; _The Journal of Open## Source Software_, *3*(22), 571. \u0026lt;URL:## https://joss.theoj.org/papers/10.21105/joss.00571\u0026gt;.## ## [[2]]## Ooms J (2021). _magick: Advanced Graphics and Image-Processing in R_. R## package version 2.7.3, \u0026lt;URL:## https://CRAN.R-project.org/package=magick\u0026gt;.## ## [[3]]## Albers S (2017). \u0026#34;tidyhydat: Extract and Tidy Canadian Hydrometric## Data.\u0026#34; _The Journal of Open Source Software_, *2*(20). doi:## 10.21105/joss.00511 (URL: https://doi.org/10.21105/joss.00511), \u0026lt;URL:## http://dx.doi.org/10.21105/joss.00511\u0026gt;.\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eYou may also consider using the \u003ccode\u003ecite_packages()\u003c/code\u003e function from the super cool \u003ca href=\"https://github.com/Pakillo/grateful\"\u003egrateful\u003c/a\u003e package to create a formatted bibliography of all the packages used in a project.\u003c/p\u003e\u003ch3 id=\"reproducible-science\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#reproducible-science\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eReproducible science\u003c/h3\u003e\u003cp\u003eFinally, if you\u0026rsquo;re getting \u003cstrong\u003eserious\u003c/strong\u003e about ensuring your work is not only \u003cem\u003erepeatable\u003c/em\u003e butalso \u003cem\u003ereproducible\u003c/em\u003e\u003csup id=\"fnref:5\"\u003e\u003ca href=\"#fn:5\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e5\u003c/a\u003e\u003c/sup\u003e, you might want to check out R packages that help controlpackage versions (like \u003ca href=\"https://rstudio.github.io/renv/\"\u003erenv\u003c/a\u003e),or sofware which helps control your build environment (like \u003ca href=\"https://journal.r-project.org/archive/2020/RJ-2020-007/index.html\"\u003eDocker containers\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"doing-more-with-citations\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#doing-more-with-citations\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDoing more with citations\u003c/h2\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eIf you want to go next level and start managing your citations in R, checkoutthe post \u003ca href=\"/blog/2020/05/07/rmd-citations/\"\u003eA Roundup of R Tools for Handling BibTeX\u003c/a\u003e\u003csup id=\"fnref:6\"\u003e\u003ca href=\"#fn:6\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e6\u003c/a\u003e\u003c/sup\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eStay tuned for an upcoming blog post on the recently reviewed \u003ca href=\"https://docs.ropensci.org/cffr\"\u003ecffr\u003c/a\u003e package for working with the \u003ca href=\"https://citation-file-format.github.io/\"\u003eCFF citation file format\u003c/a\u003e for your package or in general.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eAre you a package developer who would like to see their packages cited more readily?Check out the post \u003ca href=\"/blog/2021/02/16/package-citation/\"\u003eMake Your R Package Easier to Cite\u003c/a\u003efor tips and tricks.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"final-thoughts\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#final-thoughts\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFinal thoughts\u003c/h2\u003e\u003cp\u003eFree and Open Source Software (FOSS) is a magical thing.It equalizes financial disparity among scientific institutions and allows thedevelopment of highly specialized analysis in really specific domains.Citing R and R packages is not only important for complete and repeatable science, but is oh so meaningful to software developers.\u003c/p\u003e\u003cp\u003eIf we want them to keep doing what they do, the least we can do is cheer them on!\u003c/p\u003e\u003cdiv class=\"footnotes\" role=\"doc-endnotes\"\u003e\u003chr\u003e\u003col\u003e\u003cli id=\"fn:1\"\u003e\u003cp\u003e\u0026ldquo;Every great open source math library is built on the ashes of someone\u0026rsquo;sacademic career\u0026rdquo; - \u003ca href=\"https://njt-rse-unsw.netlify.app/#24\"\u003ehttps://njt-rse-unsw.netlify.app/#24\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:1\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:2\"\u003e\u003cp\u003eSoftware Citation Checklist for Authors \u003ca href=\"https://zenodo.org/record/3479199#.YYmfT73MKAk\"\u003ehttps://zenodo.org/record/3479199#.YYmfT73MKAk\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:2\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:3\"\u003e\u003cp\u003eSmith AM, Katz DS, Niemeyer KE, FORCE11 Software Citation Working Group. 2016. Software citation principles. PeerJ Computer Science 2:e86 \u003ca href=\"https://doi.org/10.7717/peerj-cs.86\"\u003ehttps://doi.org/10.7717/peerj-cs.86\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:3\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:4\"\u003e\u003cp\u003eThis is my favourite method as I can use a custom \u003ccode\u003ermarkdown::render()\u003c/code\u003eto make sure that the reports are dated and moved to a \u003ccode\u003eresults\u003c/code\u003e folder.For example:\u003cbr\u003e\u003ccode\u003ermarkdown::render(input = \u0026quot;Scripts/02_analysis.R\u0026quot;, output_dir = \u0026quot;Results\u0026quot;, output_file = paste0(\u0026quot;02_analysis_\u0026quot;, Sys.Date(), '.html'))\u003c/code\u003e\u003cbr\u003eAlso see \u003ca href=\"https://deanattali.com/2015/03/24/knitrs-best-hidden-gem-spin/\"\u003eDean Attali\u0026rsquo;s blog post\u003c/a\u003e on the subject.\u0026#160;\u003ca href=\"#fnref:4\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:5\"\u003e\u003cp\u003eRepeatable means others can \u003cem\u003erepeat\u003c/em\u003e an experiment and get the same results.Reproducible means others can \u003cem\u003ereproduce\u003c/em\u003e the same analysis exactly. See \u003ca href=\"https://www.nationalacademies.org/news/2019/09/reproducibility-and-replicability-in-research\"\u003ehttps://www.nationalacademies.org/news/2019/09/reproducibility-and-replicability-in-research\u003c/a\u003e\u0026#160;\u003ca href=\"#fnref:5\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003cli id=\"fn:6\"\u003e\u003cp\u003eAlso checkout the corresponding \u003ca href=\"https://twitter.com/rOpenSci/status/1258413143480365059\"\u003eTwitter thread\u003c/a\u003e listing even more tools!\u0026#160;\u003ca href=\"#fnref:6\" class=\"footnote-backref\" role=\"doc-backlink\"\u003e\u0026#x21a9;\u0026#xfe0e;\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e","url":"https://ropensci.org/blog/2021/11/16/how-to-cite-r-and-r-packages/","date_published":"2021-11-16T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/ca4hc-tnd05","title":"rOpenSci News Digest, October 2021","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2021/10/22/ropensci-news-digest-october-2021\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"community-call-about-the-statistical-software-review-project\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#community-call-about-the-statistical-software-review-project\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCommunity call about the statistical software review project\u003c/h3\u003e\u003cp\u003eA fantastic community call is coming up on Tuesday, 26 October 2021 18:00 UTC: \u003ca href=\"/commcalls/oct2021-statsreview02/\"\u003e\u003cstrong\u003eExpanding Software Peer Review: Statistical Package Standards at rOpenSci\u003c/strong\u003e\u003c/a\u003e!\u003c/p\u003e\u003cp\u003eThis 1-hour community call will address the bigger picture of \u003cstrong\u003ehow our community-informed development of standards for statistical packages meets a critical need of stakeholders\u003c/strong\u003e.\u003ca href=\"/author/noam-ross/\"\u003e\u003cstrong\u003eNoam Ross\u003c/strong\u003e\u003c/a\u003e (EcoHealth Alliance and rOpenSci Software Review Lead) will catch everyone up on the project.\u003ca href=\"/author/rebecca-killick/\"\u003e\u003cstrong\u003eRebecca Killick\u003c/strong\u003e\u003c/a\u003e (Lancaster University and rOpenSci Statistical Software Peer Review advisory committee) will offer insights into standardisation and the potential role our program might play in the future of statistical software and open source software in general.\u003ca href=\"/author/juliane-manitz/\"\u003e\u003cstrong\u003eJuliane Manitz\u003c/strong\u003e\u003c/a\u003e (EMD Serono and R Validation Hub) will offer a perspective on the use of open source software in regulated environments.\u003ca href=\"/author/christoph-sax/\"\u003e\u003cstrong\u003eChristoph Sax\u003c/strong\u003e\u003c/a\u003e (cynkra) will share his experience as the first person to submit a package, tsbox, for review and aligning his software with our standards.\u003c/p\u003e\u003cp\u003eFollow the \u003ca href=\"/commcalls/oct2021-statsreview02/\"\u003ecommunity call page link\u003c/a\u003e for practical information.\u003cstrong\u003eEveryone is welcome, no RSVP needed!\u003c/strong\u003e\u003c/p\u003e\u003ch3 id=\"november-2-social-coworking-and-office-hours\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#november-2-social-coworking-and-office-hours\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNovember 2 social coworking and office hours\u003c/h3\u003e\u003cp\u003eJoin us for \u003ca href=\"/events/coworking-2021-11/\"\u003emonthly coworking Tuesday, November 2nd at 16:00 UTC\u003c/a\u003e! No RSVP needed. In addition to the usual quiet and noisy rooms (for Q\u0026amp;A and meeting peers), \u003ca href=\"/author/mark-padgham/\"\u003eMark Pagham\u003c/a\u003e, co-Lead of our \u003ca href=\"/software-review/\"\u003eStatistical Software Peer Review project\u003c/a\u003e, will be there to help folks check their own package with our new automated checking system.\u003c/p\u003e\u003ch3 id=\"ropensci-at-nhs-r-conference\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-at-nhs-r-conference\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci at NHS-R conference\u003c/h3\u003e\u003cp\u003eJeroen Ooms, rOpenSci Lead Infrastructure Engineer, will give a talk on \u003ca href=\"/r-universe/\"\u003eThe r-universe project\u003c/a\u003e at the \u003ca href=\"https://nhsrcommunity.com/nhs-r-community-conference-2021/\"\u003eNHS-R 2021 virtual conference\u003c/a\u003e on November 9. \u003ca href=\"/events/nhsr-jeroen/\"\u003eDetails\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWill Landau, community member, will give a workshop on Reproducible computation at scale in R with \u003ca href=\"https://docs.ropensci.org/targets/\"\u003etargets\u003c/a\u003e on \u003ca href=\"https://nhsrcommunity.com/nhs-r-conference-2021-workshop-week/\"\u003eNovember 4\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe conference is free with registration. \u003ca href=\"https://nhsrcommunity.com/nhs-r-community-conference-2021/\"\u003eConference website\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eFind out about more \u003ca href=\"/events\"\u003eevents\u003c/a\u003e. You can subscribe to rOpenSci-lead events via our \u003ca href=\"/events/index.ics\"\u003eICS calendar\u003c/a\u003e (copy the link, add it to your calendar service e.g. \u003ca href=\"https://support.mozilla.org/en-US/kb/creating-new-calendars#w_on-the-network-connect-to-your-online-calendars\"\u003eThunderbird\u003c/a\u003e or Google Calendar). Please note that if you use Google Calendar you have to \u003ca href=\"https://calendar.google.com/calendar/u/0/syncselect\"\u003echeck synchronization is turned on\u003c/a\u003e; furthermore, synchronization might be delayed.\u003c/p\u003e\u003ch3 id=\"three-new-editors-for-software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#three-new-editors-for-software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThree new editors for software review\u003c/h3\u003e\u003cp\u003eWe are excited to welcome Emily Riederer, Adam Sparks, and Jeff Hollister to our team of \u003ca href=\"/software-review/#editors\"\u003eAssociate Editors\u003c/a\u003e for rOpenSci \u003ca href=\"/software-review/\"\u003eSoftware Peer Review\u003c/a\u003e.They join Laura DeCicco, Julia Gustavsen, Anna Krystalli, Mauro Lepore, Karthik Ram, Noam Ross, Maëlle Salmon, and Melina Vidoni.Find out more about the three new editors in our \u003ca href=\"/blog/2021/10/12/editors2021/\"\u003eintroduction blog post\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following  package recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://docs.ropensci.org/rsat\"\u003ersat\u003c/a\u003e, developed by Unai Pérez - Goya together with Manuel Montesino - SanMartin, Ana F Militino, Maria Dolores Ugarte: Downloading, customizing, and processing time series of satellite images for a region of interest. rsat functions allow a unified access to multispectral images from Landsat, MODIS and Sentinel repositories. rsat also offers capabilities for customizing satellite images, such as tile mosaicking, image cropping and new variables computation. Finally, rsat covers the processing, including cloud masking, compositing and gap-filling/smoothing time series of images (Militino et al., 2018 \u003ca href=\"doi:10.3390/rs10030398\"\u003edoi:10.3390/rs10030398\u003c/a\u003e and Militino et al., 2019 \u003ca href=\"doi:10.1109/TGRS.2019.2904193\"\u003edoi:10.1109/TGRS.2019.2904193\u003c/a\u003e). It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/437\"\u003ereviewed\u003c/a\u003e by Marc Weber, Kelly Hondula.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following nine packages have had an update since the latest newsletter: \u003ca href=\"https://docs.ropensci.org/gert\" title=\"Simple Git Client for R\"\u003egert\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/gert/releases/tag/v1.4.1\"\u003e\u003ccode\u003ev1.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/arkdb\" title=\"Archive and Unarchive Databases Using Flat Files\"\u003earkdb\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/arkdb/releases/tag/v0.0.14\"\u003e\u003ccode\u003ev0.0.14\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/GSODR\" title=\"Global Surface Summary of the Day (GSOD) Weather Data Client\"\u003eGSODR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/GSODR/releases/tag/v3.1.4\"\u003e\u003ccode\u003ev3.1.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/lingtypology\" title=\"Linguistic Typology and Mapping\"\u003elingtypology\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/lingtypology/releases/tag/v1.1.6\"\u003e\u003ccode\u003ev1.1.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmdata\" title=\"Import OpenStreetMap Data as Simple Features or Spatial Objects\"\u003eosmdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmdata/releases/tag/v0.1.7\"\u003e\u003ccode\u003ev0.1.7\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rglobi\" title=\"R Interface to Global Biotic Interactions\"\u003erglobi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rglobi/releases/tag/v0.2.26\"\u003e\u003ccode\u003ev0.2.26\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/ruODK\" title=\"An R Client for the ODK Central API\"\u003eruODK\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/ruODK/releases/tag/v1.3.0\"\u003e\u003ccode\u003ev1.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/stplanr\" title=\"Sustainable Transport Planning\"\u003estplanr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/stplanr/releases/tag/v0.8.4\"\u003e\u003ccode\u003ev0.8.4\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/USAboundariesData\" title=\"Datasets for the USAboundaries package\"\u003eUSAboundariesData\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/USAboundariesData/releases/tag/v0.4.0\"\u003e\u003ccode\u003ev0.4.0\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are fourteen recently closed and active submissions and 4 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/437\"\u003ersat\u003c/a\u003e, Tools for Downloading, Customizing, and Processing Time Series of Satellite Images from Landsat, MODIS, and Sentinel. Submitted by \u003ca href=\"https://unai-perez.github.io/\"\u003eUnai Pérez-Goya\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/455\"\u003eexcluder\u003c/a\u003e, Checks for Exclusion Criteria in Online Data. Submitted by \u003ca href=\"https://decisionslab.unl.edu/\"\u003eJeffrey Stevens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/434\"\u003emctq\u003c/a\u003e, An R Package for the Munich ChronoType Questionnaire. Submitted by \u003ca href=\"https://danielvartan.netlify.app\"\u003eDaniel Vartanian\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/435\"\u003egendercoder\u003c/a\u003e, Recodes Sex/Gender Descriptions Into A Standard Set. Submitted by \u003ca href=\"http://emilykothe.com\"\u003eEmily Kothe\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/418\"\u003eepair\u003c/a\u003e, Grabs data from EPA API, simplifies getting pollutant data. Submitted by \u003ca href=\"https://github.com/GLOrozcoM\"\u003eLeo Orozco-Mulfinger\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/329\"\u003echemspiderapi\u003c/a\u003e, R Wrapper for ChemSpider\u0026rsquo;s API Services. Submitted by \u003ca href=\"https://github.com/RaoulWolf\"\u003eRaoul Wolf\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/463\"\u003ecffr\u003c/a\u003e, Generate Citation File Format (cff) Metadata for R Packages. Submitted by \u003ca href=\"http://dieghernan.github.io\"\u003eDiego H.\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/433\"\u003eROriginStamp\u003c/a\u003e, Interface to OriginStamp API to Obtain Trusted Time Stamps. Submitted by \u003ca href=\"https://github.com/rkrug\"\u003eRainer M Krug\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/407\"\u003eoccCite\u003c/a\u003e, Querying and Managing Large Biodiversity Occurrence Datasets. Submitted by \u003ca href=\"http://hannahlowens.weebly.com/\"\u003eHannah Owens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/470\"\u003etidyqpcr\u003c/a\u003e, Quantitative PCR Analysis with the Tidyverse. Submitted by \u003ca href=\"https://scholar.google.co.uk/citations?user=7FLIJBAAAAAJ\u0026amp;hl=en\"\u003eEdward Wallace\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román-Palacios\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/443\"\u003erdbhapi\u003c/a\u003e, Interface to DBH-API. Submitted by \u003ca href=\"https://hkdir.no/\"\u003eMarija Ninic\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003ch3 id=\"software-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Review\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2021/10/12/editors2021\"\u003eAnnouncing New Software Peer Review Editors: Emily Riederer, Adam Sparks, and Jeff Hollister\u003c/a\u003e by Stefanie Butland. Introducing 3 new editors for rOpenSci software review.\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"/blog/2021/10/14/runiverse-badges\"\u003eGenerating and customizing badges in r-universe\u003c/a\u003e by Jeroen Ooms.\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eThree use cases of our packages and resources have been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/using-jsonvalidate-to-validate-the-packages-json-file-from-your-personal-universe/2643\"\u003eUsing jsonvalidate to validate the \u003ccode\u003epackages.json\u003c/code\u003e file from your personal universe\u003c/a\u003e. Reported by Hugo Gruson.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/creating-historical-congressional-maps-with-usaboundaries/2648\"\u003eCreating historical Congressional maps with USABoundaries\u003c/a\u003e. Reported by Andrew Heiss.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/predizendo-volume-de-eucalipto-com-tidymodels-xgboost-e-targets/2656\"\u003ePredizendo volume de eucalipto com tidymodels, XGBoost e targets\u003c/a\u003e. Reported by Theilon Macêdo.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eThere\u0026rsquo;s no open call for new maintainers at this point but you can refer to our \u003ca href=\"https://contributing.ropensci.org/\"\u003econtributing guide\u003c/a\u003e for finding ways to get involved!As the maintainer of an rOpenSci package, feel free to contact us on Slack or email \u003ccode\u003einfo@ropensci.org\u003c/code\u003e to get your call for maintainer featured in the next newsletter.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003ch3 id=\"naming-your-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#naming-your-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNaming your package\u003c/h3\u003e\u003cp\u003eDo you have a fantastic idea and plan for a package, but no name for it yet?We have some tips on this topic in our \u003ca href=\"https://devguide.ropensci.org/building.html#naming-your-package\"\u003edev guide\u003c/a\u003e!\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eWe strongly recommend short, descriptive names in lower case. If your package deals with one or more commercial services, please make sure the name does not violate branding guidelines. You can check if your package name is available, informative and not offensive by using the \u003ca href=\"https://github.com/ropenscilabs/available\"\u003e\u003ccode\u003eavailable\u003c/code\u003e package\u003c/a\u003e. In particular, do \u003cem\u003enot\u003c/em\u003e choose a package name that\u0026rsquo;s already used on CRAN or Bioconductor.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA more unique package name might be easier to track (for you and us to assess package use) and search (for users to find it and to find answers to their questions). Obviously a \u003cem\u003etoo\u003c/em\u003e unique package name might make the package less discoverable (e.g. it might be an argument for naming your package \u003ca href=\"https://github.com/ropensci/geojson\"\u003egeojson\u003c/a\u003e).Also note that removing random letter e.g. vowels from a common word to create a package name might make it less easy to remember!\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFind other interesting aspects of naming your package \u003ca href=\"https://www.njtierney.com/post/2018/06/20/naming-things/\"\u003ein this blog post by Nick Tierney\u003c/a\u003e, and in case you change your mind, find out \u003ca href=\"https://www.njtierney.com/post/2017/10/27/change-pkg-name/\"\u003ehow to rename your package in this other blog post of Nick\u0026rsquo;s\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"two-testthat-tips\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#two-testthat-tips\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTwo testthat tips\u003c/h3\u003e\u003cp\u003eThe testthat package has been supporting \u003ca href=\"https://www.tidyverse.org/blog/2020/10/testthat-3-0-0/#snapshot-testing\"\u003esnapshot tests\u003c/a\u003e that \u0026ldquo;record expected output in a separate human-readable file instead of using code to describe what the expected output looks like.\u0026rdquo; since its version 3.0.0.Their implementation is now stable.Note that they are skipped by default on CRAN.\u003c/p\u003e\u003cp\u003eNow what about \u003cem\u003einput files\u003c/em\u003e for tests?Maybe you can \u003ca href=\"https://blog.r-hub.io/2020/11/18/testthat-utility-belt/#create-fake-folders-and-text-files-from-your-tests\"\u003ecreate fake ones on the fly (and delete them)\u003c/a\u003e.Or you can store them under \u003ccode\u003etests/testthat\u003c/code\u003e and use \u003ca href=\"https://testthat.r-lib.org/reference/test_path.html\"\u003e\u003ccode\u003etestthat::test_path()\u003c/code\u003e\u003c/a\u003e when using them, to get a file path that \u0026ldquo;both interactively and during tests\u0026rdquo;.So to use \u003ccode\u003etests/testthat/examples/thing\u003c/code\u003e you\u0026rsquo;d write \u003ccode\u003etestthat::test_path(\u0026quot;examples\u0026quot;, \u0026quot;thing\u0026quot;)\u003c/code\u003e.Note that the vcr package for HTTP testing has a similar function you can use to locate cassettes, \u003ca href=\"https://docs.ropensci.org/vcr/reference/vcr_test_path.html\"\u003evcr_test_path()\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"passing-cran-url-checks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#passing-cran-url-checks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePassing CRAN URL checks\u003c/h3\u003e\u003cp\u003eCRAN \u003ca href=\"https://blog.r-hub.io/2020/12/01/url-checks/\"\u003echecks URL validity\u003c/a\u003e.As recently \u003ca href=\"https://twitter.com/JennyBryan/status/1450186196395520005\"\u003ereminded by Jenny Bryan on Twitter\u003c/a\u003e, the \u003ca href=\"https://github.com/r-lib/urlchecker/\"\u003eurlchecker package by Jim Hester\u003c/a\u003e is a great tool to help your package pass these checks.\u003c/p\u003e\u003ch3 id=\"styling-your-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#styling-your-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eStyling your package\u003c/h3\u003e\u003cp\u003eHow to enforce a style guide for your package, without too much human effort?Two suggestions:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eHaving a \u003ca href=\"https://github.com/r-lib/actions/tree/master/examples#commands-workflow\"\u003eGitHub Action workflow that allows you to call styler\u003c/a\u003e via typing \u003ccode\u003e/style\u003c/code\u003e in a PR comment (or amend the logic to have it work via applying a label to the PR). Or apply this idea to another continuous integration service! If for any reason your style differs from styler\u0026rsquo;s default, follow one of \u003ca href=\"https://styler.r-lib.org/dev/articles/\"\u003estyler articles for developers\u003c/a\u003e and tweak the workflow. \u003ca href=\"https://github.com/ropensci-review-tools/pkgcheck/blob/65fa9d4e77837bd122171d46177cb7db8028ac2e/.github/workflows/pr-commands.yaml#L60-L64\"\u003eExample\u003c/a\u003e, corresponding \u003ca href=\"https://github.com/ropensci-review-tools/spaceout\"\u003estyle guide package\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eUsing a service like \u003ca href=\"https://www.codefactor.io\"\u003eCodeFactor\u003c/a\u003e that integrates with GitHub directly. Thanks to \u003ca href=\"/author/rich-fitzjohn/\"\u003eRich FitzJohn\u003c/a\u003e for suggesting this in \u003ca href=\"https://contributing.ropensci.org/resources.html#channels\"\u003erOpenSci semi-open Slack workspace\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2021/10/22/ropensci-news-digest-october-2021/","date_published":"2021-10-22T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/g67kr-prx20","title":"Generating and customizing badges in r-universe","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","badges","tech notes"],"content_html":"\u003ch2 id=\"badges-in-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#badges-in-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBadges in r-universe\u003c/h2\u003e\u003cp\u003eAfter \u003ca href=\"/blog/2021/06/22/setup-runiverse/\"\u003ecreating your personal universe\u003c/a\u003e, the dashboard on \u003ccode\u003ehttps://{yourname}.r-universe.dev\u003c/code\u003e shows the version and other details for each package in your repository. We have also added a new \u003ca href=\"https://ropensci.r-universe.dev/ui#badges\"\u003etab\u003c/a\u003e that lists the available badges for the repository.\u003c/p\u003e\u003cfigure\u003e\u003ca href=\"https://ropensci.r-universe.dev/ui#badges\"\u003e\u003cimg src=\"/blog/2021/10/14/runiverse-badges/screenshot.png\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003eBadges provide a nice way to display the status of your repository or individual packages within external webpages, such as a README file, your homepage, or your \u003ca href=\"https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/managing-your-profile-readme\"\u003epersonal\u003c/a\u003e or \u003ca href=\"https://docs.github.com/en/organizations/collaborating-with-groups-in-organizations/customizing-your-organizations-profile\"\u003eorganization\u003c/a\u003e profile README on GitHub.\u003c/p\u003e\u003cp\u003eThere are currently two types of badges in r-universe: individual package badges showing the current package version, and global badges (where the endpoint is prefixed with \u003ccode\u003e:\u003c/code\u003e) that show the name, count, and status of the entire repository.\u003c/p\u003e\u003ch2 id=\"package-version-badges\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-version-badges\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage version badges\u003c/h2\u003e\u003cp\u003eThe \u003ccode\u003e/badges/{pkg}\u003c/code\u003e API yields a badge with the current version of the given package in the repository. A common place to display this badge is in the package README file, together with the package installation instructions.\u003c/p\u003e\u003cp\u003eIf the package is also on CRAN, you could position it next to a badge from \u003ca href=\"https://docs.r-hub.io/#badges-for-cran-packages\"\u003er-pkg.org\u003c/a\u003e to contrast it with the current CRAN version and installation instructions, see for example the \u003ca href=\"https://github.com/r-lib/gert/blob/master/README.md\"\u003egert package README\u003c/a\u003e:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-md\" data-lang=\"md\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e![\u003cspan class=\"nt\"\u003eruniverse-name example badge\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://ropensci.r-universe.dev/badges/:name\u003c/span\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e![\u003cspan class=\"nt\"\u003eruniverse-package example badge for gert package\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://ropensci.r-universe.dev/badges/gert\u003c/span\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e![\u003cspan class=\"nt\"\u003ecran-badge example for gert package\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttp://www.r-pkg.org/badges/version/gert\u003c/span\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWhich looks like below. Here users can immediately see from the README that the package is available from the ropensci universe, and that the version from r-universe is higher than the CRAN version.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://github.com/r-lib/gert\"\u003e\u003cimg src=\"/blog/2021/10/14/runiverse-badges/gert.png\" alt=\"README of the gert package showing the badge in use\"\u003e\u003c/a\u003e\u003c/p\u003e\u003ch2 id=\"repository-status-badges\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#repository-status-badges\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRepository status badges\u003c/h2\u003e\u003cp\u003eBesides badges for individual packages, the system also provides a few badges with information about the status of the entire package repository. For example:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003e/badges/:name\u003c/code\u003e the name of the universe, i.e. your github username\u003c/li\u003e\u003cli\u003e\u003ccode\u003e/badges/:total\u003c/code\u003e the total number of packages in the repository\u003c/li\u003e\u003cli\u003e\u003ccode\u003e/badges/:registry\u003c/code\u003e if the latest monorepo update was successful, i.e. if your package registry is OK\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe last badge in particular may be useful for yourself. If will go red when something is wrong with your package registry file. This usually means your \u003ca href=\"/blog/2021/06/22/setup-runiverse/#the-packagesjson-registry-file\"\u003epackages.json\u003c/a\u003e may reference git repositories or branches that do not exist, or the system did not find a proper package in the given location.\u003c/p\u003e\u003cp\u003eThis is what the badges look like for the ropensci universe:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-md\" data-lang=\"md\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e![\u003cspan class=\"nt\"\u003eruniverse-name\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://ropensci.r-universe.dev/badges/:name\u003c/span\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e![\u003cspan class=\"nt\"\u003eruniverse-registry\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://ropensci.r-universe.dev/badges/:registry\u003c/span\u003e)\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e![\u003cspan class=\"nt\"\u003eruniverse-total\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://ropensci.r-universe.dev/badges/:total\u003c/span\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cimg src=\"https://ropensci.r-universe.dev/badges/:name\" alt=\"Name badge\"\u003e\u003cimg src=\"https://ropensci.r-universe.dev/badges/:registry\" alt=\"Status badge\"\u003e\u003cimg src=\"https://ropensci.r-universe.dev/badges/:total\" alt=\"Badge with the number of packages\"\u003e\u003c/p\u003e\u003ch2 id=\"customize-the-badge-style\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#customize-the-badge-style\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCustomize the badge style\u003c/h2\u003e\u003cp\u003eOne of the early adopters of R-universe had \u003ca href=\"https://github.com/r-universe-org/help/issues/87\"\u003erequested\u003c/a\u003e some options to customize the visual appearance of the badges. We have added 3 http parameters to the badges API:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003escale\u003c/code\u003e the size of the badge (where 1 is the default);\u003c/li\u003e\u003cli\u003e\u003ccode\u003ecolor\u003c/code\u003e the color of a badge;\u003c/li\u003e\u003cli\u003e\u003ccode\u003estyle\u003c/code\u003e set to \u0026ldquo;flat\u0026rdquo; to get retro style badges.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFor example: \u003ccode\u003ehttps://ropensci.r-universe.dev/badges/:total?scale=2\u0026amp;color=pink\u0026amp;style=flat\u003c/code\u003e\u003c/p\u003e\u003cp\u003e\u003cimg src=\"https://ropensci.r-universe.dev/badges/:total?scale=2\u0026amp;color=pink\u0026amp;style=flat\" alt=\"example of badge with customized styling\"\u003e\u003c/p\u003e\u003cp\u003eThe \u003ca href=\"https://www.npmjs.com/package/badgen\"\u003ebadgen\u003c/a\u003e docs show more details about these parameters. Our \u003ca href=\"https://github.com/r-universe-org/cranlike-server/blob/master/routes/badges.js\"\u003ebackend\u003c/a\u003e for this API is fairly straight-forward, try sending a pull request if you have ideas for other useful badges.\u003c/p\u003e","url":"https://ropensci.org/blog/2021/10/14/runiverse-badges/","date_published":"2021-10-14T00:00:00+00:00","date_modified":"2025-09-15T09:26:00+02:00"},{"id":"https://doi.org/10.59350/nbts0-v9669","title":"Announcing New Software Peer Review Editors: Emily Riederer, Adam Sparks, and Jeff Hollister","language":"en","authors":[{"name":"Stefanie Butland","url":"https://orcid.org/0000-0002-5427-8951","avatar":"https://ropensci.org/img/team/stefanie_butland.jpg","_role":["author"]}],"tags":["Software Peer Review","editors","rOpenSci team"],"content_html":"\u003cp\u003eWe are excited to welcome Emily Riederer, Adam Sparks, and Jeff Hollister to our team of \u003ca href=\"/software-review/#editors\"\u003eAssociate Editors\u003c/a\u003e for rOpenSci \u003ca href=\"/software-review/\"\u003eSoftware Peer Review\u003c/a\u003e.They join Laura DeCicco, Julia Gustavsen, Anna Krystalli, Mauro Lepore, Karthik Ram, Noam Ross, Maëlle Salmon, and Melina Vidoni.\u003c/p\u003e\u003cp\u003erOpenSci has been running a rigorous and collegial software peer review system since 2015.Editors \u003ca href=\"https://devguide.ropensci.org/editorguide.html\"\u003emanage the review process\u003c/a\u003e, performing initial package checks, identifying reviewers, and moderating the process until the package is accepted by reviewers and transferred to rOpenSci.To address the scope and volume of packages submitted for review, it\u0026rsquo;s critical that we have a team of editors with complementary expertise.Adam brings his broad experience with API packages and his experience from agricultural research in academia, an international non-government organisation and government.Emily is known for openly sharing her processes-oriented approach to development based in her experience in industry.Jeff works hard at expanding open source tooling and skills in environmental science, particularly in government.\u003c/p\u003e\u003cp\u003eMeet our new editors!\u003c/p\u003e\u003ch2 id=\"emily-riederer\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#emily-riederer\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eEmily Riederer\u003c/h2\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"/img/team/emily-riederer.jpg\"         alt=\"headshot of Emily Riederer\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  Emily is a Senior Analytics Manager at Capital One, with degrees in Mathematics and Mathematical Decision Sciences (Statistics and Operations Research) from UNC Chapel Hill (USA).Emily leads a team focused on data enablement by developing \u0026ldquo;inner-source\u0026rdquo; analytical tools (including many R packages!) and designing better data structures. She enjoys sharing her thoughts on R and data on her \u003ca href=\"https://emilyriederer.netlify.com/\"\u003eblog\u003c/a\u003e and has contributed to two books (\u003ca href=\"https://bookdown.org/yihui/rmarkdown-cookbook/\"\u003eR Markdown Cookbook\u003c/a\u003e, \u003ca href=\"https://www.oreilly.com/library/view/97-things-every/9781492062400/\"\u003e97 Things Every Data Engineer Should Know\u003c/a\u003e). In her spare time, she maintains two open source R packages (\u003ca href=\"https://cran.r-project.org/package=projmgr\"\u003e\u003ccode\u003eprojmgr\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/emilyriederer/convo\"\u003e\u003ccode\u003econvo\u003c/code\u003e\u003c/a\u003e) and a dbt package (\u003ca href=\"https://github.com/emilyriederer/dbtplyr\"\u003e\u003ccode\u003edbtplyr\u003c/code\u003e\u003c/a\u003e).Emily reviewed the \u003ca href=\"https://github.com/ropensci/software-review/issues/274\"\u003etradestatistics\u003c/a\u003e package for rOpenSci, has guest-edited the review of \u003ca href=\"https://github.com/ropensci/software-review/issues/426\"\u003edataspice\u003c/a\u003e and is currently handling \u003ca href=\"https://github.com/ropensci/software-review/issues/463\"\u003ecffr\u003c/a\u003e for generating Citation File Format (\u0026lsquo;cff\u0026rsquo;) metadata for R Packages.                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003cp\u003eEmily on \u003ca href=\"https://github.com/emilyriederer\"\u003eGitHub\u003c/a\u003e, \u003ca href=\"https://twitter.com/emilyriederer\"\u003eTwitter\u003c/a\u003e, \u003ca href=\"https://emilyriederer.netlify.com/\"\u003eWebsite\u003c/a\u003e\u003c/p\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eI had the great fortune of stumbling upon rOpenSci relatively early in my career as an R programmer, and it\u0026rsquo;s not an exaggeration to say that this organization has had one of the single largest impacts on my career. rOpenSci\u0026rsquo;s meticulous documentation helped me to embrace best practices in my development work. Perhaps even more impactful is how watching rOpenSci work shaped my perspective on community building, leadership, and teamwork. I have always admired the well-oiled machine that rOpenSci has created \u0026ndash; sustaining massive value with limited individual overhead by clearly defining expectations, providing opinionated infrastructure, and cultivating a phenomenal community. I\u0026rsquo;m thrilled to be taking a formal role in an organization that has had such an impact on me.\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eEmily Riederer \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"adam-sparks\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#adam-sparks\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eAdam Sparks\u003c/h2\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"/img/team/adam-sparks.jpg\"         alt=\"headshot of Adam Sparks\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  Adam is a Senior Research Scientist in Bioeconomic Modelling for the \u003ca href=\"https://www.dpird.wa.gov.au/\"\u003eState of Western Australia\u003c/a\u003e in Perth and Adjunct Associate Professor in the Centre for Crop Health at the University of Southern Queensland and holds a PhD in epidemiology and ecology of plant pathogens from Kansas State University (USA).He specializes in simulation modelling and geographic information systems (GIS) and has developed or co-authored several R packages to help gather weather and climate data, simulate plant diseases and study pathogen populations. Adam has been active in rOpenSci software peer review since 2016, having five packages pass review: \u003ca href=\"https://docs.ropensci.org/bomrang\"\u003ebomrang\u003c/a\u003e; \u003ca href=\"https://docs.ropensci.org/getCRUCLdata\"\u003egetCRUCLdata\u003c/a\u003e; \u003ca href=\"https://docs.ropensci.org/GSODR\"\u003eGSODR\u003c/a\u003e; \u003ca href=\"https://docs.ropensci.org/nasapower\"\u003enasapower\u003c/a\u003e; and \u003ca href=\"https://docs.ropensci.org/chirps/\"\u003echirps\u003c/a\u003e as co-author.Adam has reviewed two rOpenSci packages \u003ca href=\"https://github.com/ropensci/software-review/issues/266\"\u003estats19\u003c/a\u003e, \u003ca href=\"https://github.com/ropensci/software-review/issues/298\"\u003ernassqs\u003c/a\u003e, \u003ca href=\"https://github.com/ropensci/software-review/issues/124\"\u003ebib2df\u003c/a\u003e, and guest edited the review of \u003ca href=\"https://github.com/ropensci/software-review/issues/436\"\u003eallodb\u003c/a\u003e.                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003cp\u003eAdam on \u003ca href=\"https://github.com/adamhsparks\"\u003eGitHub\u003c/a\u003e, \u003ca href=\"https://twitter.com/adamhsparks\"\u003eTwitter\u003c/a\u003e, \u003ca href=\"https://adamhsparks.com/\"\u003eWebsite\u003c/a\u003e, \u003ca href=\"/author/adam-sparks/\"\u003erOpenSci\u003c/a\u003e\u003c/p\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eI became aware of rOpenSci several years ago when I started working on writing my own R packages. I had used R extensively for my PhD research and had even published a series of teaching documents on using R in the classroom for botanical epidemiology, but I\u0026rsquo;d not written my own R packages. That\u0026rsquo;s where rOpenSci came in. I had the good fortune to attend the first rOpenSci OzUnconf in Brisbane in 2016. While I was there \u003ca href=\"https://docs.ropensci.org/GSODR\"\u003eGSODR\u003c/a\u003e was accepted to CRAN and I met a great bunch of folks in the Australian R community. I then had GSODR reviewed and accepted by rOpenSci, that encouraged me and since then I\u0026rsquo;ve worked to make already open data more accessible through my packages and to assist with reproducibility. In the time that I\u0026rsquo;ve been involved with rOpenSci, the ideals and community helped inspire me to co-found \u003ca href=\"https://www.openplantpathology.org\"\u003eOpen Plant Pathology\u003c/a\u003e, which serves a similar in spirit but different purpose for the global plant pathology community. It\u0026rsquo;s an honour to be a part of the editorial board and given the chance to give back to the community that has given me so much.\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eAdam Sparks \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"jeff-hollister\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#jeff-hollister\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eJeff Hollister\u003c/h2\u003e\u003cdiv class=\"float-left\"\u003e\u003cfigure class=\"m-0\"\u003e\u003cimg src=\"/img/team/jeff-hollister.jpg\"         alt=\"headshot of Jeff Hollister\"ZgotmplZ           ZgotmplZ          ZgotmplZ          style=\"  object-fit: cover; object-position: center;  height: 250px;  width: 200; margin-right: 15px\"    /\u003e                 \u003cp\u003e                  Jeff is an ecologist with expertise in the spatial component of ecology and environmental sciences. He received his PhD in Environmental Science from the University of Rhode Island and works as a Research Ecologist with the US Environmental Protection Agency’s (USEPA) Office of Research and Development at the Atlantic Coastal Environmental Sciences Division in Narragansett, RI. His work focuses on lakes and harmful algal blooms, but a big part of his job is building tools in R for this research as well as growing the community of R users within the USEPA. Jeff maintains four packages on CRAN including \u003ca href=\"https://cran.r-project.org/package=elevatr\"\u003eelevatr\u003c/a\u003e, \u003ca href=\"https://cran.r-project.org/package=lakemorpho\"\u003elakemorpho\u003c/a\u003e, \u003ca href=\"https://cran.r-project.org/package=quickmapr\"\u003equickmapr\u003c/a\u003e, and \u003ca href=\"https://cran.r-project.org/package=dadjokeapi\"\u003edadjokeapi\u003c/a\u003e (arguably his most important contribution). He reviewed the \u003ca href=\"https://github.com/ropensci/camsRad\"\u003ecamsRad\u003c/a\u003e, \u003ca href=\"https://github.com/ropensci/osmplotr\"\u003eosmplotr\u003c/a\u003e, and \u003ca href=\"https://github.com/ropensci/NLMR\"\u003eNLMR\u003c/a\u003e packages for rOpenSci and most recently served as guest editor for the \u003ca href=\"https://github.com/ropensci/rsat\"\u003ersat\u003c/a\u003e package.                \u003c/p\u003e                \u003c/figure\u003e              \u003c/div\u003e\u003cdiv style=\"clear: both;\"\u003e\u003c/div\u003e\u003cp\u003eJeff on \u003ca href=\"https://github.com/jhollist\"\u003eGitHub\u003c/a\u003e, \u003ca href=\"https://twitter.com/jhollist\"\u003eTwitter\u003c/a\u003e, \u003ca href=\"https://jwhollister.com/\"\u003eWebsite\u003c/a\u003e, \u003ca href=\"/author/jeff-hollister/\"\u003erOpenSci\u003c/a\u003e\u003c/p\u003e\u003cblockquote class='blockquote text-left'\u003e  \u003cp class=\"mb-0\"\u003eMany years ago I first started hearing about \u0026ldquo;data science\u0026rdquo;, \u0026ldquo;reproducibility\u0026rdquo;, and \u0026ldquo;open science.\u0026rdquo; These terms were new to me, but seemed like they were going to be important in my fields of ecology and environmental science. Problem was, I struggled to to use these ideas and tools in my own work. Lucky for me, I soon stumbled across rOpenSci and quickly felt at home in this community and that rOpenSci was going to help incorporate all these ideas into my fields. In the years since, I have watched rOpenSci closely, participated in events, done package reviews, and generally been in awe of the progress, growth, and impact rOpenSci has had. Needless to say I was flattered to be asked to join the editorial board and am excited to have this chance to give back to the rOpenSci community.\u003c/p\u003e   \u003cfooter class=\"blockquote-footer\"\u003eJeff Hollister \u003c/footer\u003e\u003c/blockquote\u003e\u003ch2 id=\"submit-your-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#submit-your-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSubmit your package!\u003c/h2\u003e\u003cp\u003eAre you considering submitting your package for review? These resources will help.\u003c/p\u003e\u003cul\u003e\u003cli\u003eAbout \u003ca href=\"/software-review/\"\u003erOpenSci Software Peer Review\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eBrowse the online book \u003ca href=\"https://devguide.ropensci.org/\"\u003erOpenSci Packages: Development, Maintenance, and Peer Review\u003c/a\u003e;\u003c/li\u003e\u003cli\u003eRead public \u003ca href=\"https://github.com/ropensci/software-review/issues\"\u003esoftware review threads on GitHub\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e","url":"https://ropensci.org/blog/2021/10/12/editors2021/","date_published":"2021-10-12T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/t4556-r5k85","title":"rOpenSci News Digest, September 2021","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2021/09/30/ropensci-news-digest-september-2021\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003cp\u003eA first package was submitted to \u003ca href=\"/software-review/\"\u003erOpenSci Statistical Software Peer Review\u003c/a\u003e, two months after its \u003ca href=\"/blog/2021/07/23/ropensci-news-digest-july-2021/\"\u003eopening\u003c/a\u003e: the \u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox package\u003c/a\u003e by \u003ca href=\"https://github.com/christophsax\"\u003eChristoph Sax\u003c/a\u003e.We are very excited, and thankful for the opportunity to hone our new software review tooling!\u003c/p\u003e\u003cp\u003eWe\u0026rsquo;ve made it easier to browse our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e by adding some basic search from the navbar.The search isn\u0026rsquo;t on the full content, but on page titles and descriptions.We hope it\u0026rsquo;ll help you find what you\u0026rsquo;re after!Other ways to find an rOpenSci related thing you vaguely remember is by \u003ca href=\"https://contributing.ropensci.org/resources.html#channels\"\u003easking us\u003c/a\u003e, searching through \u003ca href=\"https://github.com/ropensci/roweb3/\"\u003eour website source\u003c/a\u003e or using your favourite search engine.\u003c/p\u003e\u003cp\u003eOur next Social Coworking and Office Hours is \u003ca href=\"/events/coworking-2021-10/\"\u003eTuesday, October 5th, 9 AM Australian Western / 1:00 UTC\u003c/a\u003e, and hosted by \u003ca href=\"/author/nicholas-tierney/\"\u003eNicholas Tierney\u003c/a\u003e.Find out about \u003ca href=\"/events\"\u003emore events\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003cp\u003eThe following three packages recently became a part of our software suite:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/allodb\"\u003eallodb\u003c/a\u003e, developed by Erika Gonzalez-Akre together with Camille Piponiot, Mauro Lepore, Kristina Anderson-Teixeira: Tool to standardize and simplify the tree biomass estimation process across globally distributed extratropical forests. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/436\"\u003ereviewed\u003c/a\u003e by Jeffrey Hanson, Jonas Stillhard.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/jagstargets\"\u003ejagstargets\u003c/a\u003e, developed by William Michael Landau: Bayesian data analysis usually incurs long runtimes and cumbersome custom code. A pipeline toolkit tailored to Bayesian statisticians, the jagstargets R package is leverages targets and R2jags to ease this burden. jagstargets makes it super easy to set up scalable JAGS pipelines that automatically parallelize the computation and skip expensive steps when the results are already up to date. Minimal custom code is required, and there is no need to manually configure branching, so usage is much easier than targets alone. For the underlying methodology, please refer to the documentation of targets \u003ca href=\"doi:10.21105/joss.02959\"\u003edoi:10.21105/joss.02959\u003c/a\u003e and JAGS (Plummer 2003) \u003ca href=\"https://www.r-project.org/conferences/DSC-2003/Proceedings/Plummer.pdf\"\u003ehttps://www.r-project.org/conferences/DSC-2003/Proceedings/Plummer.pdf\u003c/a\u003e. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/425\"\u003ereviewed\u003c/a\u003e by David Lawrence Miller,  Ernest Guevarra.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/slopes\"\u003eslopes\u003c/a\u003e, developed by Robin Lovelace together with Rosa Félix, Joey Talbot: Functions and example data to support research into the slope (also known as longitudinal gradient or steepness) of linear geographic entities such as roads \u003ca href=\"doi:10.1038/s41597-019-0147-x\"\u003edoi:10.1038/s41597-019-0147-x\u003c/a\u003e and rivers \u003ca href=\"doi:10.1016/j.jhydrol.2018.06.066\"\u003edoi:10.1016/j.jhydrol.2018.06.066\u003c/a\u003e. The package was initially developed to calculate the steepness of street segments but can be used to calculate steepness of any linear feature that can be represented as LINESTRING geometries in the sf class system. The package takes two main types of input data for slope calculation: vector geographic objects representing linear features, and raster geographic objects with elevation values (which can be downloaded using functionality in the package) representing a continuous terrain surface. Where no raster object is provided the package attempts to download elevation data using the ceramic package. It has been \u003ca href=\"https://github.com/ropensci/software-review/issues/420\"\u003ereviewed\u003c/a\u003e by Dan Olner, Andy Teucher.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDiscover \u003ca href=\"/packages\"\u003emore packages\u003c/a\u003e, read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following fifteen packages have had an update since the latest newsletter: \u003ca href=\"https://docs.ropensci.org/gert\" title=\"Simple Git Client for R\"\u003egert\u003c/a\u003e (\u003ca href=\"https://github.com/r-lib/gert/releases/tag/v1.4.0\"\u003e\u003ccode\u003ev1.4.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/pkgstats\" title=\"Metrics of R Packages\"\u003epkgstats\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci-review-tools/pkgstats/releases/tag/v0.0.1\"\u003e\u003ccode\u003ev0.0.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/beastier\" title=\"Call BEAST2\"\u003ebeastier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beastier/releases/tag/v2.4.8\"\u003e\u003ccode\u003ev2.4.8\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/c14bazAAR\" title=\"Download and Prepare C14 Dates from Different Source Databases\"\u003ec14bazAAR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/c14bazAAR/releases/tag/3.1.0\"\u003e\u003ccode\u003e3.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/DataSpaceR\" title=\"Interface to the CAVD DataSpace\"\u003eDataSpaceR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/DataSpaceR/releases/tag/v0.7.5\"\u003e\u003ccode\u003ev0.7.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/drake\" title=\"A Pipeline Toolkit for Reproducible Computation at Scale\"\u003edrake\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/drake/releases/tag/7.13.3\"\u003e\u003ccode\u003e7.13.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/europepmc\" title=\"R Interface to the Europe PubMed Central RESTful Web Service\"\u003eeuropepmc\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/europepmc/releases/tag/v0.4.1\"\u003e\u003ccode\u003ev0.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/NLMR\" title=\"Simulating Neutral Landscape Models\"\u003eNLMR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/NLMR/releases/tag/v0.6\"\u003e\u003ccode\u003ev0.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nlrx\" title=\"Setup, Run and Analyze NetLogo Model Simulations from R via XML\"\u003enlrx\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nlrx/releases/tag/v0.4.3\"\u003e\u003ccode\u003ev0.4.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/qualtRics\" title=\"Download Qualtrics Survey Data\"\u003equaltRics\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/qualtRics/releases/tag/v3.1.5\"\u003e\u003ccode\u003ev3.1.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rebird\" title=\"R Client for the eBird Database of Bird Observations\"\u003erebird\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rebird/releases/tag/v1.3.0\"\u003e\u003ccode\u003ev1.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rfishbase\" title=\"R Interface to FishBase\"\u003erfishbase\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rfishbase/releases/tag/slb-21.08\"\u003e\u003ccode\u003eslb-21.08\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.3.1\"\u003e\u003ccode\u003e0.3.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Workflows\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/0.8.0\"\u003e\u003ccode\u003e0.8.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tidyhydat\" title=\"Extract and Tidy Canadian Hydrometric Data\"\u003etidyhydat\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tidyhydat/releases/tag/0.5.4\"\u003e\u003ccode\u003e0.5.4\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are fifteen recently closed and active submissions and 5 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eThree at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A6/approved\"\u003e\u0026lsquo;6/approved\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/436\"\u003eallodb\u003c/a\u003e, Tree Biomass Estimation at Extratropical Forest Plots. Submitted by \u003ca href=\"https://sites.google.com/site/forestecoclimlab/home\"\u003eErika Gonzalez-Akre\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/425\"\u003ejagstargets\u003c/a\u003e, Targets for JAGS Workflows. Submitted by \u003ca href=\"https://wlandau.github.io\"\u003eWill Landau\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/420\"\u003eslopes\u003c/a\u003e, Calculate Slopes of Roads, Rivers and Trajectories. Submitted by \u003ca href=\"http://www.rosafelix.bike\"\u003eRFlx\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A5/awaiting-reviewer(s)-response\"\u003e\u0026lsquo;5/awaiting-reviewer(s)-response\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/437\"\u003ersat\u003c/a\u003e, Tools for Downloading, Customizing, and Processing Time Series of Satellite Images from Landsat, MODIS, and Sentinel. Submitted by \u003ca href=\"https://unai-perez.github.io/\"\u003eUnai Pérez-Goya\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/455\"\u003eexcluder\u003c/a\u003e, Checks for Exclusion Criteria in Online Data. Submitted by \u003ca href=\"https://decisionslab.unl.edu/\"\u003eJeffrey Stevens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/435\"\u003egendercoder\u003c/a\u003e, Recodes Sex/Gender Descriptions Into A Standard Set. Submitted by \u003ca href=\"http://emilykothe.com\"\u003eEmily Kothe\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/329\"\u003echemspiderapi\u003c/a\u003e, R Wrapper for ChemSpider\u0026rsquo;s API Services. Submitted by \u003ca href=\"https://github.com/RaoulWolf\"\u003eRaoul Wolf\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFour at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/463\"\u003ecffr\u003c/a\u003e, Generate Citation File Format (cff) Metadata for R Packages. Submitted by \u003ca href=\"http://dieghernan.github.io\"\u003eDiego H.\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/433\"\u003eROriginStamp\u003c/a\u003e, Interface to OriginStamp API to Obtain Trusted Time Stamps. Submitted by \u003ca href=\"https://github.com/rkrug\"\u003eRainer M Krug\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/418\"\u003eepair\u003c/a\u003e, Grabs data from EPA API, simplifies getting pollutant data. Submitted by \u003ca href=\"https://github.com/GLOrozcoM\"\u003eLeo Orozco-Mulfinger\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/407\"\u003eoccCite\u003c/a\u003e, Querying and Managing Large Biodiversity Occurrence Datasets. Submitted by \u003ca href=\"http://hannahlowens.weebly.com/\"\u003eHannah Owens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eOne at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A2/seeking-reviewer(s)\"\u003e\u0026lsquo;2/seeking-reviewer(s)\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román-Palacios\u003c/a\u003e.\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/464\"\u003etsbox\u003c/a\u003e, Class-Agnostic Time Series. Submitted by \u003ca href=\"http://www.cynkra.com\"\u003eChristoph Sax\u003c/a\u003e.  (Stats).\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/443\"\u003erdbhapi\u003c/a\u003e, Interface to DBH-API. Submitted by \u003ca href=\"https://hkdir.no/\"\u003eMarija Ninic\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e, including how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/09/21/creando-tu-r-universe\"\u003eCreando Tu R-universe\u003c/a\u003e by Yanina Bellini Saibene. En este post te explico como crear tu r-universe, a partir de la experiencia de crear el mio.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/09/28/rspatialdata\"\u003eThe Story Behind rspatialdata\u003c/a\u003e by Dilinie Seimon, Varsha Ujjinni Vijay Kumar. rspatialdata: tutorials for working with spatial data using R, featuring many rOpenSci packages.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cfigure\u003e\u003cimg src=\"/blog/2021/09/30/ropensci-news-digest-september-2021/rspatialdata-home-sm.jpg\"\t\t\talt=\"Screenshot of rspatialdata homepage featuring multicoloured tiles each outlining a different type of spatial data\" width=\"400\"\u003e\u003c/figure\u003e\u003ch3 id=\"tech-notes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#tech-notes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eTech Notes\u003c/h3\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/09/03/runiverse-docs\"\u003erOpenSci docs are now built on r-universe\u003c/a\u003e by Jeroen Ooms. As of today, the pkgdown sites for all rOpenSci packages on our docs server are built on r-universe.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/09/13/system-calls-R-package\"\u003eHow to Use System Commands in your R Script or Package\u003c/a\u003e by Jeroen Ooms, Maëlle Salmon. Ways (not) to call the system from your R package. This post was featured in the \u003ca href=\"https://share.fireside.fm/episode/87RSVeFz+YtoLm80R\"\u003eR Weekly Highlights podcast by Eric Nantz\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eThree use cases of our packages and resources have been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/bayesian-regression-analysis-with-rstanarm-with-gsodr-for-supporting-data/2603\"\u003eBayesian Regression Analysis with Rstanarm (with GSODR for supporting data)\u003c/a\u003e. Reported by Adam Sparks.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/slicing-an-image-with-magick-for-artistic-effect/2609\"\u003eSlicing an image with magick for artistic effect\u003c/a\u003e. Reported by Georgios Karamanis.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/using-stplanr-to-find-shortest-road-network-distance-to-a-tb-treatment-clinic-from-a-tb-patients-household/2621\"\u003eUsing stplanr to find shortest road network distance to a TB treatment clinic from a TB patients\u0026rsquo; household\u003c/a\u003e. Reported by McEwen Khundi.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eThere\u0026rsquo;s no open call for new maintainers at this point but you can refer to our \u003ca href=\"https://contributing.ropensci.org/\"\u003econtributing guide\u003c/a\u003e for finding ways to get involved!As the maintainer of an rOpenSci package, feel free to contact us on Slack or email \u003ccode\u003einfo@ropensci.org\u003c/code\u003e to get your call for maintainer featured in the next newsletter.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003cp\u003eShort anti-struggle list:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eStruggling to write \u003ca href=\"https://books.ropensci.org/http-testing/graceful.html\"\u003egraceful\u003c/a\u003e R package examples for CRAN?Let\u0026rsquo;s remind you of \u003ca href=\"https://roxygen2.r-lib.org/articles/rd.html#functions\"\u003e\u003ccode\u003e@examplesIf\u003c/code\u003e in the latest \u003ccode\u003eroxygen2\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eStruggling with GitHub Actions and dependencies installed from an additional repository? (E.g. \u003ca href=\"/blog/2021/06/22/setup-runiverse/\"\u003ean R-universe repository\u003c/a\u003e?)The r-lib setup-r action now has a \u003ca href=\"https://github.com/r-lib/actions/blob/8f28ffb1dc3d672a7d1beec9f4869f5d86168b10/setup-r/action.yml#L46\"\u003e\u003ccode\u003eextra-repositories\u003c/code\u003e input\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eStruggling with encoding in particular a NOTE about UTF-8 strings? Read the \u003ca href=\"https://discuss.ropensci.org/t/note-on-utf-8-strings-by-goodpractice-gp/2165\"\u003erelated thread on our forum\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eHow to test code run by \u003ca href=\"https://callr.r-lib.org/\"\u003ecallr\u003c/a\u003e, while having tests contribute to code coverage?\u003ca href=\"https://covr.r-lib.org/\"\u003ecovr\u003c/a\u003e modifies the code through injecting tracing symbols and running as its own temporary and definitely self-contained process.Any processes external to this, which includes anything via callr, cannot be traced.This is an entirely standard condition of any code tracing algorithm.A good tip is to ensure everything inside a callr call is bundled as a simple function that can be tested in tests without the callr wrapper.\u003c/p\u003e\u003cp\u003eAnother challenge for testing might be interactive behavior.For Shiny apps you might look into \u003ca href=\"https://rstudio.github.io/shinytest/\"\u003eshinytest\u003c/a\u003e, for anything happening in the browser you might enjoy \u003ca href=\"https://rstudio.github.io/chromote/\"\u003echromote\u003c/a\u003e or \u003ca href=\"https://rlesur.github.io/crrri/\"\u003ecrrri\u003c/a\u003e.You can also resort to \u003ca href=\"https://blog.r-hub.io/2019/10/29/mocking/\"\u003emocking\u003c/a\u003e.For code that\u0026rsquo;s supposed to be only run in interactive sessions, you might use \u003ca href=\"https://rlang.r-lib.org/reference/is_interactive.html\"\u003erlang functions in particular the \u003ccode\u003erlang::is_interactive()\u003c/code\u003e\u003c/a\u003e in code and tests.You can look at the \u003ca href=\"https://github.com/ropensci/targets/tree/main/tests/interactive\"\u003etargets testing suite for external processes\u003c/a\u003e and \u003ca href=\"https://github.com/r-lib/usethis/tree/master/tests/manual\"\u003eusethis manual tests\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eNow about real testers, i.e. the users! \u0026#x1f609;To help them use your package optimally, you have to write a nice interface, good docs (including system requirements), informative error messages, etc.Have you also considered adding some sort of sitrep (situation report) function?The devtools package has \u003ca href=\"https://devtools.r-lib.org/reference/dev_sitrep.html\"\u003e\u003ccode\u003edevtools::dev_sitrep()\u003c/code\u003e\u003c/a\u003e e.g. reports on the package development situation, with clear hints given if something is not quite right.The usethis package has \u003ca href=\"https://usethis.r-lib.org/reference/git_sitrep.html\"\u003e\u003ccode\u003eusethis::git_sitrep()\u003c/code\u003e\u003c/a\u003e (using the gert package under the hood!), blogdown has \u003ca href=\"https://alison.netlify.app/ares-kind-tools/#114\"\u003e\u003ccode\u003eblogdown::check_site()\u003c/code\u003e\u003c/a\u003e.Good candidates for checks are common pain points, so finding them might require some sort of external perspective on your package.\u003c/p\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2021/09/30/ropensci-news-digest-september-2021/","date_published":"2021-09-30T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/k3kdn-nk484","title":"The Story Behind rspatialdata","language":"en","authors":[{"name":"Dilinie Seimon","url":"https://ropensci.org/author/dilinie-seimon/","avatar":"https://github.com/dilinieseimon.png","_role":["author"]},{"name":"Varsha Ujjinni Vijay Kumar","url":"https://ropensci.org/author/varsha-ujjinni-vijay-kumar/","avatar":"https://api.dicebear.com/7.x/identicon/svg?seed=1648b5f75f091781fd1b34ac4b013f99&amp;rowColor=276dcc&amp;size=50","_role":["author"]}],"tags":["rnaturalearth","osmdata","MODIStsp","nasapower","rdhs","open-data","spatial","geospatial","tutorial","community"],"content_html":"\u003cp\u003eAs two postgrad students on summer vacation but with no travel plans (during this global pandemic of course), we took up an internship at King Abdullah University of Science and Technology (KAUST) last summer and ended up collaborating on a really cool project with \u003ca href=\"https://www.paulamoraga.com/\"\u003ePaula Moraga\u003c/a\u003e! Did we mention that we worked in Saudi Arabia, while living in Australia? All is well when we have the internet.\u003c/p\u003e\u003cp\u003eWe also ended up \u003ca href=\"https://www.youtube.com/watch?v=nLikORFBKgk\"\u003epresenting our project at useR! 2021\u003c/a\u003e, and winning an award for the most outstanding lightning talk! So, keep reading to see how we got there!\u003c/p\u003e\u003cp\u003eAlthough there is so much data being collected in multiple disciplines and made openly available, it may be difficult to find, retrieve and utilize these resources. Spatial and spatio-temporal data are two data types which are collected and used in research across a diverse array of domains.\u003c/p\u003e\u003cp\u003eWith the R programming language becoming increasingly popular among academics, researchers, and scientists, and because spatial data is easier to interpret when visualized, Paula thought it would be a great idea to create a repository of data sources and simple tutorials on how to retrieve and visualize spatial data using R, during our time as interns at KAUST.\u003c/p\u003e\u003cp\u003eThis idea became \u003ca href=\"https://rspatialdata.github.io/\"\u003erspatialdata\u003c/a\u003e - a collection of data sources and tutorials on downloading and visualising spatial data using R.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003ca href=\"https://rspatialdata.github.io/\"\u003e\u003cimg src=\"/blog/2021/09/28/rspatialdata/rspatialdata-home.jpg\"\t\t\talt=\"Screenshot of rspatialdata homepage featuring multicoloured tiles each outlining a different type of spatial data\" width=\"800\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003e\u003ca href=\"https://rspatialdata.github.io/\"\u003erspatialdata\u003c/a\u003e consists of a non-exhaustive list of R-packages which have been developed as clients for different spatio-temporal databases and APIs. It also consists of tutorials on how to use these R packages, understand the different types of spatial data objects available and create visualizations using them. After doing a lot of research, we managed to pick out a few R-packages which we were confident gave up-to-date data from reliable sources.\u003c/p\u003e\u003cp\u003eCoincidentally, much of what we picked out happened to be rOpenSci packages! We were amazed at how rich and easy to use most of these packages were. So here is our experience using those packages and some things we really enjoyed doing!\u003c/p\u003e\u003ch2 id=\"downloading-boundaries-of-countries-using-rnaturalearth\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#downloading-boundaries-of-countries-using-rnaturalearth\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDownloading boundaries of countries using \u003ca href=\"https://docs.ropensci.org/rnaturalearth\"\u003ernaturalearth\u003c/a\u003e\u003c/h2\u003e\u003cp\u003eThe rnaturalearth package (by \u003ca href=\"https://github.com/andysouth\"\u003eAndy South\u003c/a\u003e) facilitates communication with \u003ca href=\"http://www.naturalearthdata.com/\"\u003eNatural earth\u003c/a\u003e map data. It allows you to easily download and visualize boundaries of countries and boundaries of states within countries as well.\u003c/p\u003e\u003cp\u003eWe used rnaturalearth to download the boundaries of countries in many of our tutorials - including our tutorials on \u003ca href=\"https://rspatialdata.github.io/elevation.html\"\u003eelevation\u003c/a\u003e, \u003ca href=\"https://rspatialdata.github.io/rainfall.html\"\u003erainfall\u003c/a\u003e and \u003ca href=\"https://rspatialdata.github.io/humidity.html\"\u003ehumidity\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"visualizing-hospitals-in-lagos-nigeria-using-osmdata\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#visualizing-hospitals-in-lagos-nigeria-using-osmdata\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eVisualizing hospitals in Lagos, Nigeria using \u003ca href=\"https://docs.ropensci.org/osmdata/\"\u003eosmdata\u003c/a\u003e\u003c/h2\u003e\u003cp\u003eosmdata (by \u003ca href=\"/author/mark-padgham/\"\u003eMark Padgham\u003c/a\u003e, \u003ca href=\"/author/robin-lovelace/\"\u003eRobin Lovelace\u003c/a\u003e, \u003ca href=\"/author/ma%C3%ABlle-salmon/\"\u003eMaëlle Salmon\u003c/a\u003e and \u003ca href=\"/author/bob-rudis/\"\u003eBob Rudis\u003c/a\u003e) is an R package for downloading spatial data from \u003ca href=\"https://www.openstreetmap.org/\"\u003eOpenStreetMap (OSM)\u003c/a\u003e - a very cool open source project. We were amazed at the huge variety of spatial features available to us! We were able to download spatial data about almost anything from amenities such as colleges, cinemas, hospitals and banks, to different types of highways and streets such as walking and bicycle paths, residential streets, motorways and service lanes.\u003c/p\u003e\u003cp\u003eWe used the osmdata package to download and visualize hospitals in Lagos, Nigeria. Then we also downloaded spatial data for different types of highways, streets and waterways in Lagos, and created the following map entirely using data retrieved through osmdata!\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003ca href=\"https://rspatialdata.github.io/osm.html\"\u003e\u003cimg src=\"/blog/2021/09/28/rspatialdata/hospitals-lagos-nigeria.jpg\"\t\t\talt=\"A black and white map of Logos, Nigeria, showing highways in orange, smaller streets in grey, rivers in light blue, and navy blue shapes outlining hospital locations\" width=\"600\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003eHave a read through our \u003ca href=\"https://rspatialdata.github.io/osm.html\"\u003eOpen Street Map data tutorial\u003c/a\u003e for a complete tutorial on how to install the osmdata package, find what spatial features are available, learn how to download these features and also create some cool maps (including an interactive one)!\u003c/p\u003e\u003ch2 id=\"visualizing-vegetation-in-mongolia-and-land-cover-in-zimbabwe-using-modistsp\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#visualizing-vegetation-in-mongolia-and-land-cover-in-zimbabwe-using-modistsp\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eVisualizing vegetation in Mongolia and land cover in Zimbabwe using \u003ca href=\"https://docs.ropensci.org/MODIStsp/\"\u003eMODIStsp\u003c/a\u003e\u003c/h2\u003e\u003cp\u003e\u003ca href=\"https://modis.gsfc.nasa.gov/\"\u003eMODIS (Moderate Resolution Imaging Spectroradiometer)\u003c/a\u003e is an instrument aboard the NASA Terra and Aqua satellites, which orbit the entire Earth every 1-2 days, acquiring data at different spatial resolutions. The data acquired by MODIS describes features of the land, oceans and the atmosphere.\u003c/p\u003e\u003cp\u003eMODIStsp - an acronym for ‘MODIS Time Series Processing’ (by \u003ca href=\"https://github.com/lbusett\"\u003eLorenzo Busetto\u003c/a\u003e and \u003ca href=\"https://github.com/ranghetti\"\u003eLuigi Ranghetti\u003c/a\u003e), is an R package for downloading and pre-processing time series raster data from MODIS \u003ca href=\"https://modis.gsfc.nasa.gov/data/dataprod/\"\u003edata products\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe used the \u003ca href=\"https://modis.gsfc.nasa.gov/data/dataprod/mod13.php\"\u003eMODIS Vegetation Index Products (NDVI and EVI)\u003c/a\u003e, to visualize the Normalized Difference Vegetation Index in Mongolia.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003ca href=\"https://rspatialdata.github.io/vegetation.html\"\u003e\u003cimg src=\"/blog/2021/09/28/rspatialdata/vegetation-mongolia.jpg\"\t\t\talt=\"A map of Mongolia coloured by the Normalized Difference Vegetation Index(NDVI). The map shows the North of Mongolia to have a higher NDVI(coloured in yellow) compared to the South(coloured in dark blue)\" width=\"600\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003eWe also used the \u003ca href=\"https://modis.gsfc.nasa.gov/data/dataprod/mod12.php\"\u003eMODIS Land Cover Type Products\u003c/a\u003e to visualize the land cover classification in Zimbabwe.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003ca href=\"https://rspatialdata.github.io/land_cover.html\"\u003e\u003cimg src=\"/blog/2021/09/28/rspatialdata/land-cover-zimbabwe.JPG\"\t\t\talt=\"A map of Zimbabwe with its area colored by the corresponding land cover type - such as grasslands, croplands, barren etc.\" width=\"600\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003eUsing the MODIStsp package made it so much easier to find what data products were available and also directly download and save this data using R. Our \u003ca href=\"https://rspatialdata.github.io/vegetation.html\"\u003eVegetation\u003c/a\u003e and \u003ca href=\"https://rspatialdata.github.io/land_cover.html\"\u003eLand Cover\u003c/a\u003e tutorials explain how we used the MODIStsp R package to download data and create cool maps.\u003c/p\u003e\u003ch2 id=\"visualizing-rainfall-in-gansu-china-and-relative-humidity-in-western-australia-using-nasapower\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#visualizing-rainfall-in-gansu-china-and-relative-humidity-in-western-australia-using-nasapower\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eVisualizing rainfall in Gansu, China and relative humidity in Western Australia using \u003ca href=\"https://docs.ropensci.org/nasapower/\"\u003enasapower\u003c/a\u003e\u003c/h2\u003e\u003cp\u003enasapower (by \u003ca href=\"/author/adam-sparks/\"\u003eAdam Sparks\u003c/a\u003e) is a client for the \u0026lsquo;\u003ca href=\"https://power.larc.nasa.gov/\"\u003eNASA POWER\u003c/a\u003e\u0026rsquo; global meteorology, surface solar energy and climatology data API, and aims to make it quick and easy to download climatology data for analysis, visualization, modeling and many other purposes.\u003c/p\u003e\u003cp\u003eWe used the nasapower package to retrieve rainfall and humidity data, and it was such a simple task. We only had to submit the duration of data we needed along with the geographical location, and the package took care of all the hard work.\u003c/p\u003e\u003cp\u003eWe downloaded relative humidity and rainfall data and then visualized the relative humidity in Western Australia and the rainfall in Gansu, China.\u003c/p\u003e\u003cfigure class=\"center\"\u003e\u003ca href=\"https://rspatialdata.github.io/humidity.html\"\u003e\u003cimg src=\"/blog/2021/09/28/rspatialdata/relative-humidity-western-australia.jpg\"\t\t\talt=\"An outline map of Australia and its states. The area of Western Australia is coloured by its relative humidity, with the coastal regions colored in yellow showing higher relative humidity, and the central region of Australia colored in dark blue showing much lower relative humidity.\" width=\"600\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cfigure class=\"center\"\u003e\u003ca href=\"https://rspatialdata.github.io/rainfall.html\"\u003e\u003cimg src=\"/blog/2021/09/28/rspatialdata/rainfall-gansu-china.jpg\"\t\t\talt=\"An outline map of China and its states. The area of Gansu is coloured by its rainfall level, and shows a gradient from dark blue(low rainfall) to yellow(high rainfall) from North to South.\" width=\"600\"\u003e\u003c/a\u003e\u003c/figure\u003e\u003cp\u003eTake a look at our \u003ca href=\"https://rspatialdata.github.io/rainfall.html\"\u003erainfall\u003c/a\u003e and \u003ca href=\"https://rspatialdata.github.io/humidity.html\"\u003ehumidity\u003c/a\u003e tutorials for a complete guide on how to use the nasapower package to download data and how to create cool visualizations using the data.\u003c/p\u003e\u003ch2 id=\"retrieving-demographic-and-health-survey-data-using-rdhs\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#retrieving-demographic-and-health-survey-data-using-rdhs\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRetrieving demographic and health survey data using \u003ca href=\"https://docs.ropensci.org/rdhs/\"\u003erdhs\u003c/a\u003e\u003c/h2\u003e\u003cp\u003eThe rdhs package (by \u003ca href=\"/author/oj-watson/\"\u003eOJ Watson\u003c/a\u003e and \u003ca href=\"https://github.com/jeffeaton\"\u003eJeff Eaton\u003c/a\u003e) is an API client for \u003ca href=\"https://www.dhsprogram.com/\"\u003eDemographic and Health Surveys (DHS)\u003c/a\u003e data - which is a collection of population, health, HIV and nutrition data from more than 400 surveys in over 90 countries. This data is considered to be sensitive and hence requires one to set up an account with DHS and request permission to access the data.\u003c/p\u003e\u003cp\u003eAlthough this may look like a tedious process, the rdhs package makes it very smooth by allowing us to test out the functions of the package using model data. So one could even start on the analysis while waiting for data access rights!\u003c/p\u003e\u003cp\u003eRead through our tutorial on \u003ca href=\"https://rspatialdata.github.io/dhs-data.html\"\u003eDemographic and Health Surveys (DHS)\u003c/a\u003e for more details on how to use the rdhs package.\u003c/p\u003e\u003ch2 id=\"interested-in-more\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#interested-in-more\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eInterested in more?\u003c/h2\u003e\u003cp\u003eHave a look at our \u003ca href=\"https://rspatialdata.github.io/admin_boundaries.html\"\u003eadministrative boundaries tutorial\u003c/a\u003e which runs you through creating outline maps of countries and their administrative divisions, our \u003ca href=\"https://rspatialdata.github.io/population.html\"\u003epopulation tutorial\u003c/a\u003e which runs you through visualizing population estimates of countries using choropleth maps and cartograms, and our tutorials on  \u003ca href=\"https://rspatialdata.github.io/elevation.html\"\u003eelevation\u003c/a\u003e, \u003ca href=\"https://rspatialdata.github.io/temperature.html\"\u003etemperature\u003c/a\u003e, \u003ca href=\"https://rspatialdata.github.io/malaria.html\"\u003emalaria\u003c/a\u003e, and \u003ca href=\"https://rspatialdata.github.io/air_pollution.html\"\u003eair pollution\u003c/a\u003e for ideas on how to download and visualize each respective property.\u003c/p\u003e\u003cp\u003eYou just read through some of the things we enjoyed while creating \u003ca href=\"https://rspatialdata.github.io/\"\u003erspatialdata\u003c/a\u003e. We are excited for you to try it out too! So give it a go, get creative with it, and let us know how you did!\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eOur goal for rspatialdata is not to be a comprehensive list of R packages or tutorials, but to be a starting point for anyone to find and download spatial data related to different domains, and visualize different types of spatial data objects using different approaches.\u003c/strong\u003e\u003c/p\u003e\u003cp\u003eSo if you think of anymore R packages that would fit into this collection, ideas on new tutorials or cool spatial visualizations, do reach out to us! Let\u0026rsquo;s talk about how we can collaborate!\u003c/p\u003e","url":"https://ropensci.org/blog/2021/09/28/rspatialdata/","date_published":"2021-09-28T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/njkcp-mxb52","title":"How to Use System Commands in your R Script or Package","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]},{"name":"Maëlle Salmon","url":"https://orcid.org/0000-0002-2815-0399","avatar":"https://ropensci.org/img/team/maelle_salmon.jpg","_role":["author"]}],"tags":["tech notes","processx","sys"],"content_html":"\u003cp\u003eHave you ever found a command-line tool that\u0026rsquo;s perfect for getting your job done, and wanted to use it from an R script or package?E.g. some sort of scientific software providing a specific functionality made available though a command-line interface (CLI)?\u003c/p\u003e\u003cp\u003eIn this post, we have a look at a few options for writing such CLI wrappers in R.In particular, we compare the base R functions \u003ccode\u003esystem()\u003c/code\u003e and \u003ccode\u003esystem2()\u003c/code\u003e, the \u003ca href=\"https://cran.r-project.org/web/packages/sys/\"\u003esys\u003c/a\u003e package and the \u003ca href=\"https://cran.r-project.org/web/packages/processx/\"\u003eprocessx\u003c/a\u003e package.\u003c/p\u003e\u003cp\u003eBut we start with some words of caution about the limitations of this approach, and explaining why it may be better to \u003cem\u003enot\u003c/em\u003e shell out, and try to use an alternative interface if possible.\u003c/p\u003e\u003ch2 id=\"downsides-of-system-commands\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#downsides-of-system-commands\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDownsides of system commands\u003c/h2\u003e\u003cp\u003eWhen possible, it is usually better to use a C, C++ (or even JS, Python\u0026hellip;) interface to interact with external software, rather than calling a command-line interface (CLI).A CLI is mainly intended for interactive use by a human, with free-form text as input and output. To programmatically interface with external software, a foreign language API is typically more robust and performant.\u003c/p\u003e\u003cp\u003eThe core issue is that each CLI execution starts a new process.Because processes don\u0026rsquo;t share memory, the only interaction with the executing program is via free text streams (pipes) between R and the child process.This lack of structure makes it cumbersome to exchange data, handle exceptions, and control the program execution from R. Let\u0026rsquo;s explore these things in a bit more detail.\u003c/p\u003e\u003ch3 id=\"data-input-and-output\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#data-input-and-output\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eData input and output\u003c/h3\u003e\u003cp\u003eA C/C++ library has formal functions with one or more arguments and a return value, each consisting of typed data structures. You can call such a C/C++ API from an R package, passing data from R objects from memory into the library and back, in a similar way as when calling functions from the package itself.\u003c/p\u003e\u003cp\u003eOn the other hand, the only input to a shell command is a single string with the command line arguments.Most programs that need actual input data will need to read this from file(s) on disk, in some particular format, which can lead to performance overhead or read/write errors.\u003c/p\u003e\u003cp\u003eWhen the user has to provide the command arguments (such as filenames) that are to be passed to the command line program,you have to consider these names could contain spaces or non-ascii characters.This can again lead to bugs when they get joined into the shell command that is invoked by R.\u003c/p\u003e\u003ch3 id=\"progress-and-exception-handling\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#progress-and-exception-handling\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eProgress and exception handling\u003c/h3\u003e\u003cp\u003eThe output of a command line program only consists of an exit code (an integer indicating if the execution was successful) and two text streams which the program prints to the screen. When invoked from R, we can capture these text streams, which results in two large strings, in addition to the exit code. This is all that we get back from executing a system command.\u003c/p\u003e\u003cp\u003eHence, there is no return object, or exception handling if a problem appears in called program.This means that if we interface with a CLI tool in R and an error appears, the best we can do is to show the output text from the program to the user; we cannot programmatically handle errors. Also complications with signal handling can occur when the command is executed from a parallel (multicore) process in R (which can cause programs to die unexpectedly in some cases).\u003c/p\u003e\u003cp\u003eBecause we have no shared memory, there is also no good way for R to inspect or control the command line program while it is running. From the R point of view, the external program is basically a black box.\u003c/p\u003e\u003ch3 id=\"finding-the-program\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#finding-the-program\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFinding the program\u003c/h3\u003e\u003cp\u003eFinally, a practical issue with CLI wrappers is that the external program often has to be installed manually by the user, and that it is sometimes unclear if, and where, the program is installed on the user machine.\u003c/p\u003e\u003cp\u003eEspecially on Windows, many programs are not on the PATH, and the R wrapper may first need to find the installation path to execute the program. This is another major disadvantage in comparison with C/C++ libraries, which can be linked into the R package when it is built and do not require manual installation by the end-user. But when writing CLI wrappers you need to keep in mind that the program you are trying to execute may not even exist.\u003c/p\u003e\u003cp\u003eFor R packages with CLI wrappers it is important to name extra dependencies in the SystemRequirements field in the package description file. Thereby you formally declare that some additional piece of software is needed to make the package work, which also provides a hint for e.g. CI services to try and automate installation if possible.\u003c/p\u003e\u003ch2 id=\"the-alternative-foreign-language-interfaces\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-alternative-foreign-language-interfaces\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe alternative: foreign language interfaces\u003c/h2\u003e\u003cp\u003eIf the software you need has an alternative interface, or a similar program exists that does, this might be a better basis for an R package than a CLI tool.\u003c/p\u003e\u003cp\u003eWhen possible, the most robust way to interface with external libraries is via C or C++. Because R itself is written in C, calling a C or C++ library takes almost zero overhead. To get started with wrapping C libraries, check out \u003ca href=\"https://blog.davisvaughan.com/2019/03/02/now-you-c-me/\"\u003eDavis Vaughan\u0026rsquo;s blog post\u003c/a\u003e. For C++ dive into either \u003ca href=\"https://adv-r.hadley.nz/rcpp.html\"\u003eRcpp\u003c/a\u003e or the more recent \u003ca href=\"https://cpp11.r-lib.org/articles/cpp11.html\"\u003ecpp11\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eExamples of rOpenSci packages interfacing to C/C++ interfaces include \u003ca href=\"https://docs.ropensci.org/magick\"\u003emagick\u003c/a\u003e (imagemagick), \u003ca href=\"https://docs.ropensci.org/pdftools\"\u003epdftools\u003c/a\u003e (poppler), \u003ca href=\"https://docs.ropensci.org/ijtiff\"\u003eijtiff\u003c/a\u003e (libtiff), \u003ca href=\"https://docs.ropensci.org/gert\"\u003egert\u003c/a\u003e (libgit2), and many more. The \u0026ldquo;system dependencies\u0026rdquo; column in the \u003ca href=\"https://ropensci.r-universe.dev/\"\u003er-universe dashboard\u003c/a\u003e shows the C/C++ libraries that R package are interfacing with.\u003c/p\u003e\u003cp\u003eSome software does not have a C/C++ API but can be called via Python or JavaScript. In this case, you could use \u003ca href=\"https://rstudio.github.io/reticulate/\"\u003ereticulate\u003c/a\u003e or \u003ca href=\"https://cran.r-project.org/web/packages/V8/vignettes/v8_intro.html\"\u003eV8\u003c/a\u003e to create an R wrapper. Running external software through Python or JavaScript is not quite as performant as C/C++, but reticulate and V8 provide a solid bridge to exchange data and exceptions, so these packages are often more reliable than a CLI wrapper.\u003c/p\u003e\u003ch2 id=\"several-tools-for-calling-a-cli-program-from-r\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#several-tools-for-calling-a-cli-program-from-r\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSeveral tools for calling a CLI program from R\u003c/h2\u003e\u003cp\u003eNow that we have warned you, let\u0026rsquo;s move on to the main topic of this post: how to call a CLI program from R. We show 3 increasingly advanced ways to invoke a system command (a.k.a \u0026ldquo;shell out\u0026rdquo;) from R:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003ccode\u003esystem()\u003c/code\u003e or \u003ccode\u003esystem2()\u003c/code\u003e functions in base R\u003c/li\u003e\u003cli\u003ethe \u003ca href=\"https://cran.r-project.org/web/packages/sys/index.html\"\u003esys\u003c/a\u003e package\u003c/li\u003e\u003cli\u003ethe \u003ca href=\"https://cran.r-project.org/web/packages/processx/index.html\"\u003eprocessx\u003c/a\u003e package\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eDepending on your needs you may prefer one or another solution.\u003c/p\u003e\u003ch3 id=\"base-systemsystem2\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#base-systemsystem2\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBase system()/system2()\u003c/h3\u003e\u003cp\u003eBase-R includes functions \u003ccode\u003esystem()\u003c/code\u003e and \u003ccode\u003esystem2()\u003c/code\u003e. The R \u003ca href=\"https://github.com/wch/r-source/blob/c65ce1f39fa9b831490e384a567c3bcab7b81141/src/library/base/R/unix/system.unix.R#L19-L52\"\u003esource code\u003c/a\u003e for these functions is self-explanatory: all the arguments and options are combined into one big shell command, which is then passed to a local shell (\u003ccode\u003esh\u003c/code\u003e on unix or \u003ccode\u003ecmd\u003c/code\u003e on Windows).For example, if you run this in R:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003esystem2\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;whoami\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estdout\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estderr\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTRUE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [1] \u0026#34;jeroen\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eR will \u003ca href=\"https://github.com/wch/r-source/blob/c65ce1f39fa9b831490e384a567c3bcab7b81141/src/library/base/R/unix/system.unix.R#L80-L87\"\u003econvert this\u003c/a\u003e into the shell command that writes output to a temporary file, such as below. After the command exits with success, R tries to read the file and return the content.\u003c/p\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewhoami \u0026gt; /tmp/RtmpnMXhzK/fileef2a84a02fb68 2\u0026gt;\u0026amp;1\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eDuring the program execution, we don\u0026rsquo;t know what is going on; R blocks and waits for the command to finish, as long as it takes. This is fine for simple commands, but for complex long running programs, it can be nice to have more control over the progress or intermediate output from the running program.\u003c/p\u003e\u003ch3 id=\"the-sys-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-sys-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe sys package\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://github.com/jeroen/sys#sys\"\u003esys package\u003c/a\u003e by Jeroen Ooms is a small powerful package (mostly C code without dependencies) to run commands. The core of the package was designed to mimic the \u003ccode\u003esystem2()\u003c/code\u003e API, but the internals are very different to give more control over the running process.\u003c/p\u003e\u003cp\u003eInstead of combining all input in a large shell command that writes output to files in disk, sys invokes the target program directly, and manages input and output by creating in-memory pipes between R and the child process. This makes it possible to use callback functions to handle output from the program immediately while it is being printed, and finally return the exit code for the process. It can also safely be interrupted at any time by pressing ESC or ctrl+C:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eres\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003esys\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eexec_wait\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;ping\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;google.com\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estd_out\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kr\"\u003efunction\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e){\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecat\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Some output:\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"nf\"\u003erawToChar\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ex\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e})\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## Some output: 64 bytes from 142.251.36.46: icmp_seq=1 ttl=118 time=17.977 ms\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## Some output: 64 bytes from 142.251.36.46: icmp_seq=2 ttl=118 time=18.244 ms\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## ...\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eres\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [0]\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe package also supports binary (non text) stdout/stderr data, and has several other APIs that are useful when invoking complex programs. The \u003ccode\u003eexec_internal()\u003c/code\u003e function is a wrapper which buffers the stdout/stderr output in R (without writing to a file on disk) and finally returns it along with the exit code:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003esys\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003eexec_internal\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;whoami\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eout\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## $status\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [1] 0\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## $stdout\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [1] 6a 65 72 6f 65 6e 0a\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## $stderr\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## raw(0)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003erawToChar\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eout\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"n\"\u003estdout\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [1] \u0026#34;jeroen\\n\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eNote that stdout here is a raw vector, in order to supports commands that give binary output. Use \u003ccode\u003ebase::rawToChar()\u003c/code\u003e or \u003ccode\u003esys::as_text()\u003c/code\u003e to convert a raw vector into a string.\u003c/p\u003e\u003cp\u003eSys also includes functionality to spawn a background process with \u003ccode\u003eexec_background()\u003c/code\u003e however for this use case the processx package may be a better fit.\u003c/p\u003e\u003ch3 id=\"the-processx-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-processx-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe processx package\u003c/h3\u003e\u003cp\u003eThe \u003ca href=\"https://processx.r-lib.org/reference/index.html\"\u003eprocessx package\u003c/a\u003e by Gábor Csárdi is much more advanced. It implements a very powerful framework for executing and controlling many processes simultaneously from R. The \u003ccode\u003eprocessx::run()\u003c/code\u003e function implements the simple execute-and-wait scenario similar to base or sys, (but with \u003ca href=\"https://processx.r-lib.org/reference/run.html\"\u003emany more options\u003c/a\u003e):\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eprocessx\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;whoami\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## $status\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [1] 0\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## $stdout\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [1] \u0026#34;jeroen\\n\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## $stderr\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [1] \u0026#34;\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## $timeout\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [1] FALSE\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWhere processx really stands out is the capability to manage execution of many concurrent background processes, without blocking R. It has an \u003ca href=\"https://processx.r-lib.org/reference/process.html\"\u003eextensive API\u003c/a\u003e for launching and controlling processes through objects of a special \u003ccode\u003eprocess\u003c/code\u003e class.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eprocessx\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"n\"\u003eprocess\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003enew\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;sleep\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;2\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003eis_alive\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [1] TRUE\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## PROCESS \u0026#39;sleep\u0026#39;, running, pid 5376.\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003ekill\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003cspan class=\"o\"\u003e$\u003c/span\u003e\u003cspan class=\"nf\"\u003eis_alive\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e## [1] FALSE\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eProcessx makes it possible to implement \u003ca href=\"https://www.tidyverse.org/blog/2018/09/processx-3.2.0/#advanced-usage-background-processes\"\u003every advanced things in R\u003c/a\u003e, such as a multicore webserver or parallel processing framework, but it is much more complicated than base-R or sys. If you just need to execute a single command and get its output, depending on processx may be overkill, but for advanced applications it is definitely the most powerful of the three.\u003c/p\u003e\u003ch2 id=\"conclusion\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#conclusion\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eConclusion\u003c/h2\u003e\u003cp\u003eIn this post we compared several tools to execute system commands in R, and also explained some of the low-level mechanics and limitations of CLI wrappers. Depending on the degree of control you wish to have on the subprocess and output streams, you may prefer base-R, sys, or processx.\u003c/p\u003e\u003cp\u003eScientific Software Wrappers is a category in scope for \u003ca href=\"/software-review/\"\u003erOpenSci Software Peer-Review\u003c/a\u003e as explained in our \u003ca href=\"https://devguide.ropensci.org/policies.html#package-categories\"\u003edevguide\u003c/a\u003e:\u003c/p\u003e\u003cp\u003e\u003cem\u003ePackages that wrap non-R utility programs used for scientific research. These programs must be specific to research fields, not general computing utilities. Wrappers must be non-trivial, in that there must be significant added value above simple system() call or bindings, whether in parsing inputs and outputs, data handling, etc. Improved installation process, or extension of compatibility to more platforms, may constitute added value if installation is complex. This does not include wrappers of other R packages or C/C++ libraries that can be included in R packages. We strongly encourage wrapping open-source and open-licensed utilities - exceptions will be evaluated case-by-case, considering whether open-source options exist.\u003c/em\u003e\u003c/p\u003e\u003cp\u003eWe encourage authors of packages containing software wrappers to explore the options and make an informed decision on if, and how, to wrap CLI utilities in R packages.\u003c/p\u003e","url":"https://ropensci.org/blog/2021/09/13/system-calls-r-package/","date_published":"2021-09-13T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/8frpr-cqd95","title":"rOpenSci docs are now built on r-universe","language":"en","authors":[{"name":"Jeroen Ooms","url":"https://orcid.org/0000-0002-4035-0289","avatar":"https://ropensci.org/img/team/jeroen_ooms.jpg","_role":["author"]}],"tags":["r-universe","articles","docs","tech notes"],"content_html":"\u003cp\u003e\u003cstrong\u003eTLDR:\u003c/strong\u003e As of today, the pkgdown sites for all rOpenSci packages on our \u003ca href=\"https://docs.ropensci.org/\"\u003edocs server\u003c/a\u003e are built on \u003ca href=\"https://ropensci.r-universe.dev\"\u003er-universe\u003c/a\u003e. This is an internal change; no action is required for package maintainers.\u003c/p\u003e\u003ch2 id=\"from-jenkins-to-r-universe\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#from-jenkins-to-r-universe\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFrom Jenkins to r-universe\u003c/h2\u003e\u003cp\u003eFor the past 2 years we have been using a \u003ca href=\"/blog/2019/06/07/ropensci-docs/\"\u003eJenkins server\u003c/a\u003e to automatically build the pkgdown sites for all rOpenSci packages, which get published on \u003ca href=\"https://docs.ropensci.org\"\u003ehttps://docs.ropensci.org\u003c/a\u003e. By centralizing this process, we ensure that up-to-date documentation for all rOpenSci packages is available from a consistent URL with our personal branding, and without maintenance work for our package maintainers.\u003c/p\u003e\u003cp\u003eJenkins has served us very well to get this off the ground, because it is highly configurable and makes it easy to manage continuous integration (CI) for hundreds of projects at once.\u003c/p\u003e\u003cp\u003eHowever Jenkins took quite some maintenance because it requires managing a private server, which needs configuration, backups, updates, etc. So we are happy to fold this task into \u003ca href=\"https://ropensci.r-universe.dev/\"\u003er-universe\u003c/a\u003e, such that the pkgdown sites for all rOpenSci packages are now built together with the binary packages and articles, in single system that runs on GitHub public infrastructure.\u003c/p\u003e\u003ch2 id=\"how-it-works\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-it-works\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow it works\u003c/h2\u003e\u003cp\u003eBuilding pkgdown documentation is now just another step in the r-universe \u003ca href=\"https://github.com/r-universe/ropensci/blob/master/.github/workflows/build.yml\"\u003eworkflow\u003c/a\u003e which \u003ca href=\"https://ropensci.org/blog/2021/03/04/r-universe-buildsystem/\"\u003eautomatically runs\u003c/a\u003e each hour for every package in rOpenSci that has updates in its default branch (master/main). When the build is successful, the pkgdown site is immediately deployed to our docs server.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://github.com/r-universe/ropensci/actions/runs/1193900365\"\u003e\u003cimg src=\"/blog/2021/09/03/runiverse-docs/wf1.png\" alt=\"Screenshot of the diagram of steps in the r-universe workflow. The steps are building package source, building and deploying the GitHub documentation, setting the GitHub commit status.\"\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003eAfter each build, the workflow sets the \u0026ldquo;commit status\u0026rdquo; (red/green check) in the package repository on the target commit. If the build failed, the \u0026lsquo;details\u0026rsquo; link will directly take you to the build logs.\u003c/p\u003e\u003cp\u003e\u003cimg src=\"/blog/2021/09/03/runiverse-docs/status2.png\" alt=\"Screenshot of a GitHub repository after clicking on the green arrow next to the hash of the latest commit. This opened a small card with different checks including the docs building status.\"\u003e\u003c/p\u003e\u003cp\u003eThe \u003ca href=\"https://ropensci.r-universe.dev/ui#builds\"\u003er-universe dashboard\u003c/a\u003e for also shows a new column called \u0026ldquo;docs\u0026rdquo; which indicates for all our packages if the pkgdown site was successfully built for the latest commit.\u003c/p\u003e\u003ch2 id=\"debugging-failures\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#debugging-failures\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eDebugging failures\u003c/h2\u003e\u003cp\u003eIf your package documentation fails to build (e.g. due to a \u003ca href=\"/blog/2019/12/08/precompute-vignettes/\"\u003ebug in your vignettes\u003c/a\u003e) you can inspect the pkgdown build logs on GitHub. Navigate to the workflow output either through the dashboard or the red cross in the package commit status, and click on \u0026ldquo;build package documentation\u0026rdquo;.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://github.com/r-universe/ropensci/runs/3477708871?check_suite_focus=true\"\u003e\u003cimg src=\"/blog/2021/09/03/runiverse-docs/fail.png\" alt=\"Screenshot of a workflow that shows in red that the documentation has failed to build\"\u003e\u003c/a\u003e\u003c/p\u003e\u003cp\u003eIf this does not reveal the problem, you can replicate the entire build locally using the same \u003ca href=\"https://github.com/r-universe-org/build-docs\"\u003edocker image\u003c/a\u003e as used by our workflow. The container takes only one argument: the git url of an R package repository. For example to build the pkgdown site for the \u003ca href=\"https://docs.ropensci.org/pdftools\"\u003epdftools\u003c/a\u003e package:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Build docs for \u0026#39;pdftools\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker run runiverse/build-docs \u003cspan class=\"s2\"\u003e\u0026#34;https://github.com/ropensci/pdftools\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe \u003ca href=\"https://github.com/r-universe-org/build-docs\"\u003eruniverse/build-docs\u003c/a\u003e docker image has R and pkgdown preinstalled, and automatically installs other dependencies before building the pkgdown site. Alternatively, if you manually want to simulate the entire process outside of docker, you need the rodocs package:\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Build pdftools documentation locally\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eremotes\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003einstall_github\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#39;r-universe-org/build-docs\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003erodocs\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003ebuild_site\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://github.com/ropensci/pdftools\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe rodocs package contains the plumbing code that automatically installs package dependencies and then calls \u003ccode\u003epkgdown::build_site()\u003c/code\u003e using our custom rOpenSci pkgdown theme.\u003c/p\u003e\u003ch2 id=\"what-really-changes\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#what-really-changes\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eWhat really changes\u003c/h2\u003e\u003cp\u003eFrom the outside, the switch from Jenkins to r-universe does not change anything. Documentation for all rOpenSci packages will still be built and deployed automatically to \u003ca href=\"https://docs.ropensci.org\"\u003ehttps://docs.ropensci.org\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eWe hope that building our docs on r-universe will reduce complexity and maintenance work, and make the processes more transparent and easier to understand. There is now a single build workflow that generates package documentation, binaries and articles, and we can add more tasks to this list.\u003c/p\u003e\u003cp\u003eEverything runs on public GitHub infrastructure, so anyone can inspect the code that runs for each step in the workflow, and the sources of supporting R packages and docker images. And if the system works well for rOpenSci, we can try to support this functionality for other users and organizations in r-universe.\u003c/p\u003e\u003cscript\u003ewindow.onload=function(){    var img = $(\"img[src$='wf1.png']\");    img.mouseover(x =\u003e img.attr('src','wf2.png')).mouseout(x =\u003e img.attr('src','wf1.png'));}\u003c/script\u003e","url":"https://ropensci.org/blog/2021/09/03/runiverse-docs/","date_published":"2021-09-03T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/zwr83-mz346","title":"rOpenSci News Digest, August 2021","language":"en","authors":[{"name":"The rOpenSci Team","url":"https://ropensci.org/author/the-ropensci-team/","avatar":"https://github.com/ropensci.png","_role":["author"]}],"tags":["newsletter"],"content_html":"\u003c!-- Before sending DELETE THE INDEX_CACHE and re-knit! --\u003e\u003cp\u003eDear rOpenSci friends, it\u0026rsquo;s time for our monthly news roundup!\u003c/p\u003e\u003c!-- blabla --\u003e\u003cp\u003eYou can read this post \u003ca href=\"/blog/2021/08/31/ropensci-news-digest-august-2021\"\u003eon our blog\u003c/a\u003e.Now let\u0026rsquo;s dive into the activity at and around rOpenSci!\u003c/p\u003e\u003ch2 id=\"ropensci-hq\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#ropensci-hq\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003erOpenSci HQ\u003c/h2\u003e\u003ch3 id=\"recordings-of-user-2021\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#recordings-of-user-2021\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRecordings of useR! 2021\u003c/h3\u003e\u003cp\u003eRecordings of useR! 2021 are now available on the \u003ca href=\"https://user2021.r-project.org/recordings/\"\u003econference website\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eYou can watch contributions by rOpenSci staff:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eJeroen Ooms\u0026rsquo; keynote talk about the \u003ca href=\"https://www.youtube.com/watch?v=8cv2qsZ_xZw\u0026amp;list=PL4IzsxWztPdmHoJwIVa4um44w2GMjctmP\u0026amp;index=8\"\u003e\u003cstrong\u003eR-universe project\u003c/strong\u003e\u003c/a\u003e (\u003ca href=\"https://jeroen.github.io/user2021/#1\"\u003eslidedeck\u003c/a\u003e);\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eStefanie Butland\u0026rsquo;s talk \u003ca href=\"https://youtu.be/2B7H8WJOX40?t=1048\"\u003e\u003cstrong\u003erOpenSci\u0026rsquo;s Model for Managing a Federated Open Source Software Community\u003c/strong\u003e\u003c/a\u003e (\u003ca href=\"https://docs.google.com/presentation/d/1W4DepLd6FvunkGsTloyn-be_X5jI7dS-gAVtpsJb6iM\"\u003eslidedeck\u003c/a\u003e);\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eMark Padgham\u0026rsquo;s talk on \u003ca href=\"https://youtu.be/-PsaqMWfUIg?t=28\"\u003e\u003cstrong\u003eautotest\u003c/strong\u003e, a package for automatic testing of packages\u003c/a\u003e;\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eMaëlle Salmon\u0026rsquo;s tutorial \u003ca href=\"https://www.youtube.com/watch?v=tzQGg1kAzGs\"\u003e\u003cstrong\u003eGET better at testing your R package!\u003c/strong\u003e\u003c/a\u003e (\u003ca href=\"https://http-testing-r.netlify.app/\"\u003ematerials\u003c/a\u003e).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eAnd you can also discover contributions by community members about rOpenSci packages and peer review:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eAndrea Gilardi\u0026rsquo;s talk \u003ca href=\"https://youtu.be/8PMF7cBBH7k?t=3664\"\u003e\u003cstrong\u003eosmextract: An R package to download, convert, and import large OpenStreetMap datasets\u003c/strong\u003e\u003c/a\u003e (rOpenSci-reviewed \u003ca href=\"https://docs.ropensci.org/osmextract\"\u003eosmextract package\u003c/a\u003e);\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eMichael Mahoney\u0026rsquo;s talk \u003ca href=\"https://youtu.be/tbt8ZsHm5eA?t=2235\"\u003e\u003cstrong\u003eVirtual Environments: Using R as a Frontend for 3D Rendering of Digital Landscapes\u003c/strong\u003e\u003c/a\u003e (rOpenSci-reviewed \u003ca href=\"https://docs.ropensci.org/terrainr/\"\u003eterrainr package\u003c/a\u003e);\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eLluís Revilla Sancho\u0026rsquo;s talk \u003ca href=\"https://youtu.be/2B7H8WJOX40?t=3352\"\u003e\u003cstrong\u003ePackages submission and reviews; how does it work?\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThanks to the volunteers team behind useR! 2021 for their work before, during and after the conference!\u003c/p\u003e\u003ch3 id=\"recordings-of-aossco-soc-2021\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#recordings-of-aossco-soc-2021\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eRecordings of AOS/SCO-SOC 2021\u003c/h3\u003e\u003cp\u003erOpenSci staff presented at this year\u0026rsquo;s joint meeting of the American Ornithological Society and the Society of Canadian Ornithologists / Société des ornithologistes du Canada in the lightning symposium \u003ca href=\"https://steffilazerte.ca/presentations.html#Great-R-packages-for-Ornithologists\"\u003e\u0026ldquo;Great R packages for ornithologists\u0026rdquo;\u003c/a\u003e organized by Steffi LaZerte:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eSteffi LaZerte\u0026rsquo;s opening talk \u003ca href=\"https://steffilazerte.ca/Presentations/2021-08%20AOS%7CSOC%20-%20R%20Symposium/AOS_SCO_2021_LaZerte.mp4\"\u003e\u003cstrong\u003eHow can ornithologists find R packages?\u003c/strong\u003e\u003c/a\u003e (\u003ca href=\"https://steffilazerte.ca/Presentations/2021-08%20AOS%7CSOC%20-%20R%20Symposium/AOS_SCO_2021_LaZerte.html#1\"\u003eslidedeck\u003c/a\u003e);\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eMark Padgham\u0026rsquo;s talk \u003ca href=\"https://github.com/mpadge/presentations/releases/download/aos21/padgham.mp4\"\u003e\u003cstrong\u003eosmdata: Roadless areas and avian diversity\u003c/strong\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/mpadge/presentations/tree/main/2021/aos21\"\u003esource\u003c/a\u003e).\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch3 id=\"social-coworking\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#social-coworking\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSocial coworking!\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;re excited to announce that we\u0026rsquo;ll be hosting monthly social coworking + office hours sessions via Zoom, starting September 7th!Coworking is a great way to be productive and reduce feelings of social isolation (especially important over the last year)!Our first two sessions take place \u003cstrong\u003e\u003ca href=\"/events/coworking-2021-09/\"\u003eTuesday September 7th 2021 9-11am American Pacific\u003c/a\u003e\u003c/strong\u003e hosted by \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and \u003cstrong\u003e\u003ca href=\"/events/coworking-2021-10/\"\u003eTuesday October 5th 2021 9-11am Australian Western\u003c/a\u003e\u003c/strong\u003e hosted by \u003ca href=\"/author/nicholas-tierney/\"\u003eNick Tierney\u003c/a\u003e.Find more details in our \u003ca href=\"/blog/2021/08/17/coworking-sessions/\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"software-package\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-package\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware \u0026#x1f4e6;\u003c/h2\u003e\u003ch3 id=\"new-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew packages\u003c/h3\u003e\u003c!-- The following  package recently became a part of our software suite:--\u003e\u003cp\u003eNo new package this month, but you can browse \u003ca href=\"/packages\"\u003eour current suite of packages\u003c/a\u003e, and read more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e.\u003c/p\u003e\u003ch3 id=\"new-versions\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#new-versions\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eNew versions\u003c/h3\u003e\u003cp\u003eThe following seventeen packages have had an update since the latest newsletter: \u003ca href=\"https://docs.ropensci.org/beastier\" title=\"Call BEAST2\"\u003ebeastier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beastier/releases/tag/v2.4.5\"\u003e\u003ccode\u003ev2.4.5\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/beautier\" title=\"BEAUti from R\"\u003ebeautier\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/beautier/releases/tag/v2.6.2\"\u003e\u003ccode\u003ev2.6.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/c14bazAAR\" title=\"Download and Prepare C14 Dates from Different Source Databases\"\u003ec14bazAAR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/c14bazAAR/releases/tag/2.4.1\"\u003e\u003ccode\u003e2.4.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/exoplanets\" title=\"Access NASA's Exoplanet Archive Data\"\u003eexoplanets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/exoplanets/releases/tag/v0.2.2\"\u003e\u003ccode\u003ev0.2.2\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/helminthR\" title=\"Access London Natural History Museum Host-Helminth Record Database\"\u003ehelminthR\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/helminthR/releases/tag/v1.0.9\"\u003e\u003ccode\u003ev1.0.9\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/MODIStsp\" title=\"Find, Download and Process MODIS Land ProductsData\"\u003eMODIStsp\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/MODIStsp/releases/tag/v2.0.6\"\u003e\u003ccode\u003ev2.0.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nasapower\" title=\"NASA POWER API Client\"\u003enasapower\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nasapower/releases/tag/v4.0.0\"\u003e\u003ccode\u003ev4.0.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/nodbi\" title=\"NoSQL Database Connector\"\u003enodbi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/nodbi/releases/tag/v0.4.3\"\u003e\u003ccode\u003ev0.4.3\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmdata\" title=\"Import OpenStreetMap Data as Simple Features or Spatial Objects\"\u003eosmdata\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmdata/releases/tag/v0.1.6\"\u003e\u003ccode\u003ev0.1.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/osmextract\" title=\"Download and Import Open Street Map Data Extracts\"\u003eosmextract\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/osmextract/releases/tag/v0.3.1\"\u003e\u003ccode\u003ev0.3.1\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/piggyback\" title=\"Managing Larger Data on a GitHub Repository\"\u003epiggyback\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/piggyback/releases/tag/v0.1.0\"\u003e\u003ccode\u003ev0.1.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rerddap\" title=\"General Purpose Client for ERDDAP Servers\"\u003ererddap\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rerddap/releases/tag/v0.7.6\"\u003e\u003ccode\u003ev0.7.6\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rfishbase\" title=\"R Interface to FishBase\"\u003erfishbase\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rfishbase/releases/tag/slb-21.04\"\u003e\u003ccode\u003eslb-21.04\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/rglobi\" title=\"R Interface to Global Biotic Interactions\"\u003erglobi\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/rglobi/releases/tag/v0.2.25\"\u003e\u003ccode\u003ev0.2.25\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/tarchetypes\" title=\"Archetypes for Targets\"\u003etarchetypes\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/tarchetypes/releases/tag/0.3.0\"\u003e\u003ccode\u003e0.3.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/targets\" title=\"Dynamic Function-Oriented Make-Like Declarative Workflows\"\u003etargets\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/targets/releases/tag/0.7.0\"\u003e\u003ccode\u003e0.7.0\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"https://docs.ropensci.org/terrainr\" title=\"Landscape Visualizations in R and Unity\"\u003eterrainr\u003c/a\u003e (\u003ca href=\"https://github.com/ropensci/terrainr/releases/tag/v0.5.0-r\"\u003e\u003ccode\u003ev0.5.0-r\u003c/code\u003e\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"software-peer-review\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#software-peer-review\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSoftware Peer Review\u003c/h2\u003e\u003cp\u003eThere are twelve recently closed and active submissions and 6 submissions on hold. Issues are at different stages:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A4/review(s)-in-awaiting-changes\"\u003e\u0026lsquo;4/review(s)-in-awaiting-changes\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/437\"\u003ersat\u003c/a\u003e, Tools for Downloading, Customizing, and Processing Time Series of Satellite Images from Landsat, MODIS, and Sentinel. Submitted by \u003ca href=\"https://unai-perez.github.io/\"\u003eUnai Pérez-Goya\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/435\"\u003egendercoder\u003c/a\u003e, Recodes Sex/Gender Descriptions Into A Standard Set. Submitted by \u003ca href=\"http://emilykothe.com\"\u003eEmily Kothe\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/420\"\u003eslopes\u003c/a\u003e, Calculate Slopes of Roads, Rivers and Trajectories. Submitted by \u003ca href=\"http://www.rosafelix.bike\"\u003eRFlx\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/358\"\u003ehealthdatacsv\u003c/a\u003e, Access data in the healthdata.gov catalog. Submitted by \u003ca href=\"http://iecastro.netlify.com\"\u003eiecastro\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/329\"\u003echemspiderapi\u003c/a\u003e, R Wrapper for ChemSpider\u0026rsquo;s API Services. Submitted by \u003ca href=\"https://github.com/RaoulWolf\"\u003eRaoul Wolf\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eFive at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A3/reviewer(s)-assigned\"\u003e\u0026lsquo;3/reviewer(s)-assigned\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/455\"\u003eexcluder\u003c/a\u003e, Checks for Exclusion Criteria in Online Data. Submitted by \u003ca href=\"https://decisionslab.unl.edu/\"\u003eJeffrey Stevens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/436\"\u003eallodb\u003c/a\u003e, Tree Biomass Estimation at Extratropical Forest Plots. Submitted by \u003ca href=\"https://sites.google.com/site/forestecoclimlab/home\"\u003eErika Gonzalez-Akre\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/433\"\u003eROriginStamp\u003c/a\u003e, Interface to OriginStamp API to Obtain Trusted Time Stamps. Submitted by \u003ca href=\"https://github.com/rkrug\"\u003eRainer M Krug\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/425\"\u003ejagstargets\u003c/a\u003e, Targets for JAGS Workflows. Submitted by \u003ca href=\"https://wlandau.github.io\"\u003eWill Landau\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/407\"\u003eoccCite\u003c/a\u003e, Querying and Managing Large Biodiversity Occurrence Datasets. Submitted by \u003ca href=\"http://hannahlowens.weebly.com/\"\u003eHannah Owens\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eTwo at \u003ca href=\"https://github.com/ropensci/software-review/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A1/editor-checks\"\u003e\u0026lsquo;1/editor-checks\u0026rsquo;\u003c/a\u003e:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/458\"\u003ephruta\u003c/a\u003e, Phylogenetic Reconstruction and Time-dating. Submitted by \u003ca href=\"http://cromanpa94.github.io/cromanpa/\"\u003eCristian Román-Palacios\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://github.com/ropensci/software-review/issues/443\"\u003erdbhapi\u003c/a\u003e, Interface to DBH-API. Submitted by \u003ca href=\"https://hkdir.no/\"\u003eMarija Ninic\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eFind out more about \u003ca href=\"/software-review\"\u003eSoftware Peer Review\u003c/a\u003e and how to get involved.\u003c/p\u003e\u003ch2 id=\"on-the-blog\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#on-the-blog\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eOn the blog\u003c/h2\u003e\u003c!-- Do not forget to rebase your branch! --\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/07/27/censo2017\"\u003eThe Story Behind censo2017, the First rOpenSci Package to be Reviewed in Spanish\u003c/a\u003e by Pachá (aka Mauricio Vargas Sepúlveda). Chilean census tables at a glance.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/07/27/censo2017-es\"\u003eLa Historia de censo2017, el Primer Paquete de rOpenSci Revisado en Español\u003c/a\u003e by Pachá (aka Mauricio Vargas Sepúlveda). Las tablas del Censo de Chile al instante.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"/blog/2021/08/17/coworking-sessions\"\u003erOpenSci Introduces Monthly Social Coworking and Office Hours\u003c/a\u003e by Steffi LaZerte, Stefanie Butland, Nicholas Tierney. Work, meet other developers, get your questions answered, and/or socialize.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003ch2 id=\"citations\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#citations\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCitations\u003c/h2\u003e\u003cp\u003eNo new citations added to our database this month (\u003ca href=\"/citations\"\u003ebrowse all citations\u003c/a\u003e).\u003c/p\u003e\u003ch2 id=\"use-cases\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#use-cases\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUse cases\u003c/h2\u003e\u003cp\u003eFour use cases of our packages and resources have been reported since we sent the last newsletter.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/investigating-the-drought-in-the-canadian-prairies/2556\"\u003eInvestigating the drought in the Canadian prairies\u003c/a\u003e. Reported by Alex Koiter.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/targets-pipeline-with-rmarkdown-to-download-and-visualize-usgs-data/2559\"\u003etargets pipeline with RMarkdown to download and visualize USGS data\u003c/a\u003e. Reported by Lindsay Platt.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/answering-what-colour-is-london-with-magick-and-rtweet/2562\"\u003eAnswering \u0026lsquo;what colour is London?\u0026rsquo; with magick and rtweet\u003c/a\u003e. Reported by Matt Dray.\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"https://discuss.ropensci.org/t/informal-package-review-using-ropensci-review-template/2570\"\u003eInformal package review using rOpenSci review template\u003c/a\u003e. Reported by Hugo Gruson.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eExplore \u003ca href=\"/usecases\"\u003eother use cases\u003c/a\u003e and \u003ca href=\"https://discuss.ropensci.org/c/usecases/10\"\u003ereport your own\u003c/a\u003e!\u003c/p\u003e\u003ch2 id=\"call-for-maintainers\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#call-for-maintainers\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eCall for maintainers\u003c/h2\u003e\u003cp\u003eThere\u0026rsquo;s no open call for new maintainers at this point but you can refer to our \u003ca href=\"https://contributing.ropensci.org/\"\u003econtributing guide\u003c/a\u003e for finding ways to get involved!\u003c/p\u003e\u003cp\u003eAs the maintainer of an rOpenSci package, feel free to contact us on Slack or email \u003ccode\u003einfo@ropensci.org\u003c/code\u003e to get your call for maintainer featured in the next newsletter.\u003c/p\u003e\u003ch2 id=\"package-development-corner\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#package-development-corner\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003ePackage development corner\u003c/h2\u003e\u003cp\u003eSome useful tips for R package developers. \u0026#x1f440;\u003c/p\u003e\u003cp\u003eDo you maintain an R package on CRAN that has some tricky tests e.g. accessing a web API?With the tools presented in \u003ca href=\"https://books.ropensci.org/http-testing/\"\u003ethe online book \u0026ldquo;HTTP testing in R\u0026rdquo;\u003c/a\u003e you can build some more robustness in your tests by e.g. using cached API responses instead of hitting the actual web service.However, bad things can still happen on CRAN therefore a whole chapter is dedicated to \u003ca href=\"https://books.ropensci.org/http-testing/cran-preparedness.html\"\u003eCRAN preparedness\u003c/a\u003e, with the suggestion to skip a few tests or even all of them\u0026hellip; as long as you are running them regularly yourself on some CI service.\u003c/p\u003e\u003cp\u003eHave you ever gotten the R CMD check NOTE \u0026ldquo;Namespace in Imports field not imported from\u0026rdquo; on some CRAN check platform for instance?It might indicate you forgot to remove a dependency from DESCRIPTION after ditching it from actual code\u0026hellip; or that you are using it at the top-level rather than in the body of a function, which is where that check looks for usage!E.g. if you use \u003ca href=\"https://memoise.r-lib.org/\"\u003ememoise\u003c/a\u003e to create a memoised version of a function \u003ccode\u003em_bla \u0026lt;- memoise::memoise(bla)\u003c/code\u003e, you will have to add an explicit import statement e.g. \u003ccode\u003e#' @importFrom memoise memoise\u003c/code\u003e with roxygen2.Thanks to rOpenSci Mark Padgham, and to Jim Hester for chiming in \u003ca href=\"https://contributing.ropensci.org/resources.html#channels\"\u003erOpenSci semi-open slack\u003c/a\u003e.\u003c/p\u003e\u003c!-- To be curated by hand --\u003e\u003ch2 id=\"last-words\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#last-words\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eLast words\u003c/h2\u003e\u003cp\u003eThanks for reading! If you want to get involved with rOpenSci, check out our \u003ca href=\"https://contributing.ropensci.org\"\u003eContributing Guide\u003c/a\u003e that can help direct you to the right place, whether you want to make code contributions, non-code contributions, or contribute in other ways like sharing use cases.\u003c/p\u003e\u003cp\u003eIf you haven\u0026rsquo;t subscribed to our newsletter yet, you can \u003ca href=\"/news/\"\u003edo so via a form\u003c/a\u003e. Until it\u0026rsquo;s time for our next newsletter, you can keep in touch with us via our \u003ca href=\"/\"\u003ewebsite\u003c/a\u003e and \u003ca href=\"https://twitter.com/ropensci\"\u003eTwitter account\u003c/a\u003e.\u003c/p\u003e","url":"https://ropensci.org/blog/2021/08/31/ropensci-news-digest-august-2021/","date_published":"2021-08-31T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/w7ed3-myb08","title":"rOpenSci Introduces Monthly Social Coworking and Office Hours","language":"en","authors":[{"name":"Nicholas Tierney","url":"https://ropensci.org/author/nicholas-tierney/","avatar":"https://github.com/njtierney.png","_role":["author"]},{"name":"Stefanie Butland","url":"https://orcid.org/0000-0002-5427-8951","avatar":"https://ropensci.org/img/team/stefanie_butland.jpg","_role":["author"]},{"name":"Steffi LaZerte","url":"https://orcid.org/0000-0002-7690-8360","avatar":"https://github.com/steffilazerte.png","_role":["author"]}],"tags":["coworking","labelathon","events"],"content_html":"\u003cp\u003eWe\u0026rsquo;re excited to announce that we\u0026rsquo;ll be hosting monthly social coworking + office hours sessions via Zoom, starting September 7th!\u003c/p\u003e\u003cp\u003eCoworking is a great way to be productive and reduce feelings of social isolation (especially important over the last year)!\u003c/p\u003e\u003cp\u003eThese sessions will give you the opportunity to\u003c/p\u003e\u003cul\u003e\u003cli\u003eMeet other package developers and rOpenSci staff\u003c/li\u003e\u003cli\u003eCowork independently on work related to R (and perhaps focus on work that often gets neglected)\u003c/li\u003e\u003cli\u003eGet answers to your questions\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eWe will host sessions on the first Tuesday of each month, alternating times to accommodate different parts of the world.Come for the full 2 hrs or only as long as you need!\u003c/p\u003e\u003cp\u003eOur first two sessions take place \u003cstrong\u003e\u003ca href=\"/events/coworking-2021-09/\"\u003eTuesday September 7th 2021 9-11am American Pacific time\u003c/a\u003e\u003c/strong\u003e hosted by \u003ca href=\"/author/steffi-lazerte/\"\u003eSteffi LaZerte\u003c/a\u003e and \u003cstrong\u003e\u003ca href=\"/events/coworking-2021-10/\"\u003eTuesday October 5th 2021 9-11am Australian Western time\u003c/a\u003e\u003c/strong\u003e hosted by \u003ca href=\"/author/nicholas-tierney/\"\u003eNick Tierney\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"format\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#format\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eFormat\u003c/h2\u003e\u003cp\u003eWe\u0026rsquo;ll be following the format we developed during our experimental label-athons:\u003c/p\u003e\u003col\u003e\u003cli\u003eWe start with introductions, giving everyone a chance to socialize and network before getting down to business\u003c/li\u003e\u003cli\u003eWe work for 30min either in a Quiet or Noisy room\u003cul\u003e\u003cli\u003eMix and match as you like\u003c/li\u003e\u003cli\u003e\u0026lsquo;Noisy\u0026rsquo; room is for discussing problems, asking questions, and chatting\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003eWe have 5-min breaks with fun scavenger hunts to get you up and moving\u003c/li\u003e\u003cli\u003eRepeat! We\u0026rsquo;ll do a total of 3x 30min work blocks each separated by a 5-min break\u003c/li\u003e\u003cli\u003eWrap up, a chance to share what we did and say good bye\u003c/li\u003e\u003c/ol\u003e\u003ch2 id=\"building-on-our-successful-label-athon-experiment\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#building-on-our-successful-label-athon-experiment\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eBuilding on our successful Label-athon experiment\u003c/h2\u003e\u003cp\u003eIn case you missed it, as a follow up to the community call \u003ca href=\"/blog/2021/04/28/commcall-pkg-community/\"\u003eSet Up Your Package to Foster a Community\u003c/a\u003e,this past spring and summer we experimented with hosting four coworking label-athon events on Zoom.\u003c/p\u003e\u003cp\u003eDuring these events, participants introduced themselves and shared what they wanted to work on.We had two Zoom rooms, a quiet work room and a \u0026rsquo;noisy\u0026rsquo; chat room, where we could socialize, ask questions, or discuss our work.\u003c/p\u003e\u003cp\u003eIn line with the theme of the community call, we encouraged participants to work on making their packages more contributor friendly, such as labelling issues to invite contributions, or creating road maps.However, this wasn\u0026rsquo;t a requirement for participation and many people worked on other things such as general package development and organization, research and planning for future development, setting up personal GitHub READMEs and preparing useR! 2021 presentations.\u003c/p\u003e\u003cp\u003eWe set up a work-flow to identify rOpenSci packages with \u003ca href=\"https://github.com/search?q=org%3Aropensci+label%3A%22help+wanted%22+state%3Aopen\u0026amp;type=Issues\"\u003eissues labelled \u0026ldquo;help wanted\u0026rdquo;\u003c/a\u003e, so we can tweet anything that came out of the coworking events.\u003c/p\u003e\u003cp\u003eWe had quite an international turn out, with 3-8 participants per event from 12 countries.Feedback was overwhelmingly positive, with participants enjoying the opportunity to work on neglected projects, ask questions about package development, meet other devs and participate in the fun scavenger hunts 😸\u003c/p\u003e\u003cp\u003eThese were a few of their favorite things:\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003cem\u003e\u0026ldquo;The vibe. Welcoming, friendly, and down-to-business.\u0026rdquo;\u003c/em\u003e\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u0026ldquo;It was nice to be accountable and have friends around \u0026hellip;\u0026rdquo;\u003c/em\u003e\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u0026quot;[The organizers] “\u0026hellip;did a \u003cem\u003egreat\u003c/em\u003e job creating a welcoming environment and helping normalize that non-coding work, like documentation, is a valuable part of software development.\u0026quot;\u003c/em\u003e\u003c/li\u003e\u003cli\u003e\u003cem\u003e\u0026ldquo;Hearing what other people were working on. Being able to ask questions. A sense of community.\u0026rdquo;\u003c/em\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eCome join us!\u003c/p\u003e","url":"https://ropensci.org/blog/2021/08/17/coworking-sessions/","date_published":"2021-08-17T00:00:00+00:00","date_modified":"2025-02-13T13:42:17+01:00"},{"id":"https://doi.org/10.59350/2jakv-t6d66","title":"The Story Behind censo2017, the First rOpenSci Package to be Reviewed in Spanish","language":"en","authors":[{"name":"Mauricio Vargas Sepúlveda","url":"https://ropensci.org/author/mauricio-vargas-sep%C3%BAlveda/","avatar":"https://github.com/pachadotdev.png","_role":["author"]}],"tags":["open-science","reproducible-research","data-access","data-extraction","geospatial","community","software-peer-review","censo2017"],"content_html":"\u003ch2 id=\"summary\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#summary\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eSummary\u003c/h2\u003e\u003cp\u003e\u003ca href=\"https://docs.ropensci.org/censo2017\"\u003ecenso2017\u003c/a\u003e is an R package designed toorganize the \u003ca href=\"https://www.cepal.org/es/temas/redatam\"\u003eRedatam\u003c/a\u003e\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e filesprovided by the Chilean National Bureau of Statistics (Instituto Nacional deEstadísticas de Chile in spanish) in DVD format\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e. This package was inspiredby \u003ca href=\"https://github.com/ropensci/citedb\"\u003ecitesdb\u003c/a\u003e(\u003ca href=\"/author/noam-ross/\"\u003eNoam Ross\u003c/a\u003e, 2020) and \u003ca href=\"https://github.com/ropensci/taxadb\"\u003etaxadb\u003c/a\u003e(\u003ca href=\"/autor/carl-boettiger/\"\u003eCarl Boettiger\u003c/a\u003e et al, 2021).This post is about thispackage, the problem it solves, how to use it, and the fact that the package andits review process were \u003ca href=\"https://github.com/ropensci/software-review/issues/414\"\u003eall inSpanish\u003c/a\u003e.\u003c/p\u003e\u003ch2 id=\"the-census-challenge\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-census-challenge\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe census challenge\u003c/h2\u003e\u003cp\u003eThe motivationto have completed this is that, almost two years ago now, I had to complete anassignment that required me to extract data from the aforementioned DVD and itgot very complicated.\u003c/p\u003e\u003cp\u003eI had to borrow a Windows laptop and get an external DVD reader in order to readthose REDATAM files to obtain a few population summaries with specific softwarefor that format. To my surprise, the task started to get more and morechallenging, to the point that I wanted to export the data to SQL for easierdata extraction.\u003c/p\u003e\u003cp\u003eMy goal wasn’t to extract statistical secrets, which is not possible with thesedatasets, I just wanted to obtain values of population by age intervals fordifferent regions, among other similar aggregations, which is something thatdplyr and other tools ease a lot. After being able to convert the datasets andthe description of variables to CSV/XML, I found that the effort in doing thatjustified creating an R package to organize my work.\u003c/p\u003e\u003ch2 id=\"the-long-way-to-simplicity\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#the-long-way-to-simplicity\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eThe long way to simplicity\u003c/h2\u003e\u003cp\u003e\u003ca href=\"http://www.scielo.org.mx/scielo.php?pid=S0186-72102016000300811\u0026amp;script=sci_arttext\"\u003eThe REDATAM Converter\u003c/a\u003e(Pablo De Grande, 2016) allows exporting complete REDATAM databases as CSV foruse in, for example, R or Python. Unfortunately, this tool is also Windows-only,and as a Linux user I wanted to make the census datasets easily available forall platforms.\u003c/p\u003e\u003cp\u003eBesides REDATAM, using CSV for a census is not the best choice, as that involvesreading 4 GB tables from disk. This is so big that most laptops won’t be able toperform joins, no matter what tool you use (R, Python or sub-tools such as readror data.table, just to mention a few excellent tools). However, using a SQLbased tool, such as DuckDB, allows efficient querying and makes most censusoperations possible on a common laptop.\u003c/p\u003e\u003cp\u003ecenso2017 creates a local and embedded \u003ca href=\"https://duckdb.org/\"\u003eDuckDB\u003c/a\u003e databasethat simplifies analysis of the census datasets. It allows efficient queryingand is accessible via a \u003ca href=\"https://dbi.r-dbi.org/\"\u003eDBI\u003c/a\u003e compatible interface. Thepackage also provides an interactive pane for \u003ca href=\"https://www.rstudio.com\"\u003eRStudio\u003c/a\u003ethat allows exploring the database and previewing data. The ultimate goal ofthis work is to ease data access for researchers in Humanities and SocialSciences.\u003c/p\u003e\u003ch2 id=\"how-does-censo2017-work\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#how-does-censo2017-work\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eHow does censo2017 work?\u003c/h2\u003e\u003cp\u003eFor a quick illustration, assume we haven’t already installed the package andthe local database, which are two separate steps.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# install, load the package and create the local database\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eremotes\u003c/span\u003e\u003cspan class=\"o\"\u003e::\u003c/span\u003e\u003cspan class=\"nf\"\u003einstall_github\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;ropensci/censo2017\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecenso2017\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003ecenso_descargar\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# to be able to use collect() and use regular expressions\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003elibrary\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edplyr\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eWe know there are roughly 17 million inhabitants in Chile, but how many of themare men/women? How old are Chileans? How many of them attendeduniversity/community college? How many of them work on each branch of economicactivity\u003csup id=\"fnref:3\"\u003e\u003ca href=\"#fn:3\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e3\u003c/a\u003e\u003c/sup\u003e? Census questions “p08”, “p09”, “p15” and “p18” tell us thisinformation.\u003c/p\u003e\u003cp\u003eThis package features a metadata table (variables) which is not a part of theoriginal files, as it was inferred from the REDATAM structure, that tells us towhich table each variable belongs. For example, by using dplyr we can look fordescriptions that match “Curso” (Course).\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etbl\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ecenso_conectar\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;variables\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecollect\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003egrepl\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Curso\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescripcion\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etabla\u003c/span\u003e    \u003cspan class=\"n\"\u003evariable\u003c/span\u003e \u003cspan class=\"n\"\u003edescripcion\u003c/span\u003e                       \u003cspan class=\"n\"\u003etipo\u003c/span\u003e    \u003cspan class=\"n\"\u003erango\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e                             \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e   \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep14\u003c/span\u003e      \u003cspan class=\"n\"\u003eCurso\u003c/span\u003e \u003cspan class=\"n\"\u003eo\u003c/span\u003e \u003cspan class=\"n\"\u003eAño\u003c/span\u003e \u003cspan class=\"n\"\u003eMás\u003c/span\u003e \u003cspan class=\"n\"\u003eAlto\u003c/span\u003e \u003cspan class=\"n\"\u003eAprobado\u003c/span\u003e     \u003cspan class=\"n\"\u003einteger\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"m\"\u003e8\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e      \u003cspan class=\"n\"\u003eNivel\u003c/span\u003e \u003cspan class=\"n\"\u003edel\u003c/span\u003e \u003cspan class=\"n\"\u003eCurso\u003c/span\u003e \u003cspan class=\"n\"\u003eMás\u003c/span\u003e \u003cspan class=\"n\"\u003eAlto\u003c/span\u003e \u003cspan class=\"n\"\u003eAprobado\u003c/span\u003e \u003cspan class=\"n\"\u003einteger\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"m\"\u003e14\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThose who are familiar with these codes might remember each value for “p15”, butfortunately for the rest of us, this package also attaches the labels, so anyuser can see that “p15 = 12” means “the person attended university”.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etbl\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ecenso_conectar\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;variables_codificacion\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecollect\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003evariable\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;p15\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"n\"\u003etabla\u003c/span\u003e    \u003cspan class=\"n\"\u003evariable\u003c/span\u003e \u003cspan class=\"n\"\u003evalor\u003c/span\u003e \u003cspan class=\"n\"\u003edescripcion\u003c/span\u003e                                               \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e                                                     \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e          \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"n\"\u003eSala\u003c/span\u003e \u003cspan class=\"n\"\u003eCuna\u003c/span\u003e \u003cspan class=\"n\"\u003eo\u003c/span\u003e \u003cspan class=\"n\"\u003eJardín\u003c/span\u003e \u003cspan class=\"n\"\u003eInfantil\u003c/span\u003e                               \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e          \u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"n\"\u003ePrekínder\u003c/span\u003e                                                 \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e          \u003cspan class=\"m\"\u003e3\u003c/span\u003e \u003cspan class=\"n\"\u003eKínder\u003c/span\u003e                                                    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e4\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e          \u003cspan class=\"m\"\u003e4\u003c/span\u003e \u003cspan class=\"n\"\u003eEspecial\u003c/span\u003e \u003cspan class=\"n\"\u003eo\u003c/span\u003e \u003cspan class=\"n\"\u003eDiferencial\u003c/span\u003e                                    \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e5\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e          \u003cspan class=\"m\"\u003e5\u003c/span\u003e \u003cspan class=\"n\"\u003eEducación\u003c/span\u003e \u003cspan class=\"n\"\u003eBásica\u003c/span\u003e                                          \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e6\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e          \u003cspan class=\"m\"\u003e6\u003c/span\u003e \u003cspan class=\"n\"\u003ePrimaria\u003c/span\u003e \u003cspan class=\"n\"\u003eo\u003c/span\u003e \u003cspan class=\"nf\"\u003ePreparatoria \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eSistema\u003c/span\u003e \u003cspan class=\"n\"\u003eAntiguo\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e                 \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e7\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e          \u003cspan class=\"m\"\u003e7\u003c/span\u003e \u003cspan class=\"n\"\u003eCientífico\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eHumanista\u003c/span\u003e                                      \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e8\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e          \u003cspan class=\"m\"\u003e8\u003c/span\u003e \u003cspan class=\"n\"\u003eTécnica\u003c/span\u003e \u003cspan class=\"n\"\u003eProfesional\u003c/span\u003e                                       \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e9\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e          \u003cspan class=\"m\"\u003e9\u003c/span\u003e \u003cspan class=\"nf\"\u003eHumanidades \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eSistema\u003c/span\u003e \u003cspan class=\"n\"\u003eAntiguo\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e                             \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e10\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e         \u003cspan class=\"m\"\u003e10\u003c/span\u003e \u003cspan class=\"n\"\u003eTécnica\u003c/span\u003e \u003cspan class=\"n\"\u003eComercial\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eIndustrial\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"nf\"\u003eNormalista \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eSistema\u003c/span\u003e \u003cspan class=\"n\"\u003eAntiguo\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e11\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e         \u003cspan class=\"m\"\u003e11\u003c/span\u003e \u003cspan class=\"n\"\u003eTécnico\u003c/span\u003e \u003cspan class=\"nf\"\u003eSuperior \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e1-3\u003c/span\u003e \u003cspan class=\"n\"\u003eAños\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e                               \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e12\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e         \u003cspan class=\"m\"\u003e12\u003c/span\u003e \u003cspan class=\"nf\"\u003eProfesional \u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"m\"\u003e4\u003c/span\u003e \u003cspan class=\"n\"\u003eo\u003c/span\u003e \u003cspan class=\"n\"\u003eMás\u003c/span\u003e \u003cspan class=\"n\"\u003eAños\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e                                \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e13\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e         \u003cspan class=\"m\"\u003e13\u003c/span\u003e \u003cspan class=\"n\"\u003eMagíster\u003c/span\u003e                                                  \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e14\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e         \u003cspan class=\"m\"\u003e14\u003c/span\u003e \u003cspan class=\"n\"\u003eDoctorado\u003c/span\u003e                                                 \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e15\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e         \u003cspan class=\"m\"\u003e99\u003c/span\u003e \u003cspan class=\"n\"\u003eValor\u003c/span\u003e \u003cspan class=\"n\"\u003ePerdido\u003c/span\u003e                                             \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e16\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e         \u003cspan class=\"m\"\u003e98\u003c/span\u003e \u003cspan class=\"n\"\u003eNo\u003c/span\u003e \u003cspan class=\"n\"\u003eAplica\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eTo get detailed information for each commune/region regarding the questionsabove, we need to think of the REDATAM data as a tree, and it is necessary tojoin “zonas” (zones) with “viviendas” (dwellings) by zone ID, then join“viviendas” with “hogares” (households) by dwelling ID, and then “hogares” with“personas” (people) by household ID. This is done in no time with the DuckDBbackend.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003etbl\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ecenso_conectar\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;zonas\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eregion\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003esubstr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eas.character\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egeocodigo\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecomuna\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003esubstr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eas.character\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003egeocodigo\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e5\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eregion\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecomuna\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003egeocodigo\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ezonaloc_ref_id\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003einner_join\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etbl\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ecenso_conectar\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;viviendas\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ezonaloc_ref_id\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003evivienda_ref_id\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003eby\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;zonaloc_ref_id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003einner_join\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etbl\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ecenso_conectar\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;hogares\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003evivienda_ref_id\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ehogar_ref_id\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003eby\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;vivienda_ref_id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003einner_join\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003etbl\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ecenso_conectar\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;personas\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003ehogar_ref_id\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ep08\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ep15\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ep18\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003eby\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;hogar_ref_id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecollect\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eA quick verification can be obtained with a count. The resulting tablemakes perfect sense and it reflects common knowledge summary statistics, such asthat in the capitol (region #13) there are around 7 million inhabitants.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eregion\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecount\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"n\"\u003eregion\u003c/span\u003e       \u003cspan class=\"n\"\u003en\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"m\"\u003e01\u003c/span\u003e      \u003cspan class=\"m\"\u003e330558\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"m\"\u003e02\u003c/span\u003e      \u003cspan class=\"m\"\u003e607534\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e \u003cspan class=\"m\"\u003e03\u003c/span\u003e      \u003cspan class=\"m\"\u003e286168\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e4\u003c/span\u003e \u003cspan class=\"m\"\u003e04\u003c/span\u003e      \u003cspan class=\"m\"\u003e757586\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e5\u003c/span\u003e \u003cspan class=\"m\"\u003e05\u003c/span\u003e     \u003cspan class=\"m\"\u003e1815902\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e6\u003c/span\u003e \u003cspan class=\"m\"\u003e06\u003c/span\u003e      \u003cspan class=\"m\"\u003e914555\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e7\u003c/span\u003e \u003cspan class=\"m\"\u003e07\u003c/span\u003e     \u003cspan class=\"m\"\u003e1044950\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e8\u003c/span\u003e \u003cspan class=\"m\"\u003e08\u003c/span\u003e     \u003cspan class=\"m\"\u003e2037414\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e9\u003c/span\u003e \u003cspan class=\"m\"\u003e09\u003c/span\u003e      \u003cspan class=\"m\"\u003e957224\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e10\u003c/span\u003e \u003cspan class=\"m\"\u003e10\u003c/span\u003e      \u003cspan class=\"m\"\u003e828708\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e11\u003c/span\u003e \u003cspan class=\"m\"\u003e11\u003c/span\u003e      \u003cspan class=\"m\"\u003e103158\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e12\u003c/span\u003e \u003cspan class=\"m\"\u003e12\u003c/span\u003e      \u003cspan class=\"m\"\u003e166533\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e13\u003c/span\u003e \u003cspan class=\"m\"\u003e13\u003c/span\u003e     \u003cspan class=\"m\"\u003e7112808\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e14\u003c/span\u003e \u003cspan class=\"m\"\u003e14\u003c/span\u003e      \u003cspan class=\"m\"\u003e384837\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e15\u003c/span\u003e \u003cspan class=\"m\"\u003e15\u003c/span\u003e      \u003cspan class=\"m\"\u003e226068\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eTo get to know the share of men (1) and women (2) per region,the code is very similar.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003epersonas\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eregion\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ep08\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecount\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eregion\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ep\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e/\u003c/span\u003e \u003cspan class=\"nf\"\u003esum\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eregion\u003c/span\u003e   \u003cspan class=\"n\"\u003ep08\u003c/span\u003e      \u003cspan class=\"n\"\u003en\u003c/span\u003e     \u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e  \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e  \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003edbl\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"m\"\u003e01\u003c/span\u003e         \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"m\"\u003e167793\u003c/span\u003e \u003cspan class=\"m\"\u003e0.508\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"m\"\u003e01\u003c/span\u003e         \u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"m\"\u003e162765\u003c/span\u003e \u003cspan class=\"m\"\u003e0.492\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e3\u003c/span\u003e \u003cspan class=\"m\"\u003e02\u003c/span\u003e         \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"m\"\u003e315014\u003c/span\u003e \u003cspan class=\"m\"\u003e0.519\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e4\u003c/span\u003e \u003cspan class=\"m\"\u003e02\u003c/span\u003e         \u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"m\"\u003e292520\u003c/span\u003e \u003cspan class=\"m\"\u003e0.481\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e5\u003c/span\u003e \u003cspan class=\"m\"\u003e03\u003c/span\u003e         \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"m\"\u003e144420\u003c/span\u003e \u003cspan class=\"m\"\u003e0.505\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e6\u003c/span\u003e \u003cspan class=\"m\"\u003e03\u003c/span\u003e         \u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"m\"\u003e141748\u003c/span\u003e \u003cspan class=\"m\"\u003e0.495\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e7\u003c/span\u003e \u003cspan class=\"m\"\u003e04\u003c/span\u003e         \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"m\"\u003e368774\u003c/span\u003e \u003cspan class=\"m\"\u003e0.487\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e8\u003c/span\u003e \u003cspan class=\"m\"\u003e04\u003c/span\u003e         \u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"m\"\u003e388812\u003c/span\u003e \u003cspan class=\"m\"\u003e0.513\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e9\u003c/span\u003e \u003cspan class=\"m\"\u003e05\u003c/span\u003e         \u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"m\"\u003e880215\u003c/span\u003e \u003cspan class=\"m\"\u003e0.485\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e10\u003c/span\u003e \u003cspan class=\"m\"\u003e05\u003c/span\u003e         \u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"m\"\u003e935687\u003c/span\u003e \u003cspan class=\"m\"\u003e0.515\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# … with 20 more rows  \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAt this point we obtained simple aggregations, but being R a language forstatistics, you might be interested in doing inference. As an example, assumethat the population follows a normal distribution, so that it makes sense tofind the 95% confidence interval estimate of the difference between the maleproportion of elderly people\u003csup id=\"fnref:4\"\u003e\u003ca href=\"#fn:4\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e4\u003c/a\u003e\u003c/sup\u003e and the female proportion of non-elderlypeople, each within their own age group.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esex_vs_elder\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"nf\"\u003etbl\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ecenso_conectar\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;personas\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eselect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ep08\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ep09\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eelderly\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eifelse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ep09\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan class=\"m\"\u003e64\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003egroup_by\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eelderly\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecount\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"c1\"\u003e# labels re-arrangement, put here for efficiency\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003emutate\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eelderly\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eifelse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eelderly\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;1. elderly\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;2. non-elderly\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nf\"\u003eifelse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esex\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;1. men\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;2. women\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003eungroup\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecollect\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esex_vs_elder\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003esex\u003c/span\u003e      \u003cspan class=\"n\"\u003eelderly\u003c/span\u003e              \u003cspan class=\"n\"\u003en\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e            \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003edbl\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"n\"\u003e. men\u003c/span\u003e   \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"n\"\u003e. non\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eelderly\u003c/span\u003e \u003cspan class=\"m\"\u003e7666728\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"n\"\u003e. women\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"n\"\u003e. non\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eelderly\u003c/span\u003e \u003cspan class=\"m\"\u003e7751676\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e3\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"n\"\u003e. men\u003c/span\u003e   \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"n\"\u003e. elderly\u003c/span\u003e      \u003cspan class=\"m\"\u003e935261\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e4\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"n\"\u003e. women\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"n\"\u003e. elderly\u003c/span\u003e     \u003cspan class=\"m\"\u003e1220338\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eBefore conducting a proportions test, we need to re-shape the data and thenproceed with the test.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003extabs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"n\"\u003eelderly\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003esex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esex_vs_elder\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                 \u003cspan class=\"n\"\u003esex\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eelderly\u003c/span\u003e           \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"n\"\u003e. men\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"n\"\u003e. women\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"n\"\u003e. elderly\u003c/span\u003e      \u003cspan class=\"m\"\u003e935261\u003c/span\u003e  \u003cspan class=\"m\"\u003e1220338\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"n\"\u003e. non\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003eelderly\u003c/span\u003e \u003cspan class=\"m\"\u003e7666728\u003c/span\u003e  \u003cspan class=\"m\"\u003e7751676\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003eprop.test\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003extabs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"n\"\u003eelderly\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003esex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esex_vs_elder\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003esample\u003c/span\u003e \u003cspan class=\"n\"\u003etest\u003c/span\u003e \u003cspan class=\"kr\"\u003efor\u003c/span\u003e \u003cspan class=\"n\"\u003eequality\u003c/span\u003e \u003cspan class=\"n\"\u003eof\u003c/span\u003e \u003cspan class=\"n\"\u003eproportions\u003c/span\u003e \u003cspan class=\"n\"\u003ewith\u003c/span\u003e \u003cspan class=\"n\"\u003econtinuity\u003c/span\u003e \u003cspan class=\"n\"\u003ecorrection\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003edata\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e  \u003cspan class=\"nf\"\u003extabs\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003en\u003c/span\u003e \u003cspan class=\"o\"\u003e~\u003c/span\u003e \u003cspan class=\"n\"\u003eelderly\u003c/span\u003e \u003cspan class=\"o\"\u003e+\u003c/span\u003e \u003cspan class=\"n\"\u003esex\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003esex_vs_elder\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eX\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003esquared\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e30392\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edf\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ep\u003c/span\u003e\u003cspan class=\"o\"\u003e-\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"m\"\u003e2.2e-16\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ealternative\u003c/span\u003e \u003cspan class=\"n\"\u003ehypothesis\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003etwo.sided\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e95\u003c/span\u003e \u003cspan class=\"n\"\u003epercent\u003c/span\u003e \u003cspan class=\"n\"\u003econfidence\u003c/span\u003e \u003cspan class=\"n\"\u003einterval\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"m\"\u003e-0.06407740\u003c/span\u003e \u003cspan class=\"m\"\u003e-0.06266263\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003esample\u003c/span\u003e \u003cspan class=\"n\"\u003eestimates\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"n\"\u003eprop\u003c/span\u003e \u003cspan class=\"m\"\u003e1\u003c/span\u003e    \u003cspan class=\"n\"\u003eprop\u003c/span\u003e \u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e0.4338752\u003c/span\u003e \u003cspan class=\"m\"\u003e0.4972452\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eThe 95% confidence interval estimate of the difference between the proportion ofmale elders and non-elders is between -6.4% and -6.3%, which is in line with thefact that women tend to have a longer life expectancy in Chile (see\u003ca href=\"https://www.statista.com/statistics/949308/life-expectancy-birth-chile-gender/\"\u003eStatista\u003c/a\u003eto compare). What I wanted to demonstrate here is that by using this package, itis very easy to pass data to R, so that you can conduct regression analysis orother statistical analyses on the Chilean population.\u003c/p\u003e\u003ch2 id=\"using-censo2017-with-other-packages\"\u003e\u003ca class=\"anchor d-print-none\" href=\"#using-censo2017-with-other-packages\"\u003e  \u003csmall\u003e\u0026#x1F517;\u003c/small\u003e\u003c/a\u003eUsing censo2017 with other packages\u003c/h2\u003e\u003cp\u003eCenso2017 can be used with ggplot2 and other commonly used packages. As an example,it is possible to replicate different overcrowding maps created by both\u003ca href=\"https://www.instagram.com/geografaschile/\"\u003eChile\u0026rsquo;s Geographers (Geógrafas Chile)\u003c/a\u003e and\u003ca href=\"https://twitter.com/CPE_UDLA\"\u003eCenter For Spatial Research (Centro de Producción del Espacio)\u003c/a\u003ethat account for overcrowding in the Metropolitan Region.\u003c/p\u003e\u003cp\u003eTo obtain this, you need both the number of indiduals and rooms per dwellings.You can obtain the corresponding columns in the same way as the previousexamples.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etbl\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ecenso_conectar\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;variables\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecollect\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003egrepl\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Pers\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescripcion\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etabla\u003c/span\u003e     \u003cspan class=\"n\"\u003evariable\u003c/span\u003e \u003cspan class=\"n\"\u003edescripcion\u003c/span\u003e          \u003cspan class=\"n\"\u003etipo\u003c/span\u003e    \u003cspan class=\"n\"\u003erango\u003c/span\u003e   \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e     \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e                \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e   \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e   \u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"n\"\u003epersonas\u003c/span\u003e  \u003cspan class=\"n\"\u003epersonan\u003c/span\u003e \u003cspan class=\"n\"\u003eNúmero\u003c/span\u003e \u003cspan class=\"n\"\u003ede\u003c/span\u003e \u003cspan class=\"n\"\u003ela\u003c/span\u003e \u003cspan class=\"n\"\u003ePersona\u003c/span\u003e \u003cspan class=\"n\"\u003einteger\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"m\"\u003e9999\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e2\u003c/span\u003e \u003cspan class=\"n\"\u003eviviendas\u003c/span\u003e \u003cspan class=\"n\"\u003ecant_per\u003c/span\u003e \u003cspan class=\"n\"\u003eCantidad\u003c/span\u003e \u003cspan class=\"n\"\u003ede\u003c/span\u003e \u003cspan class=\"n\"\u003ePersonas\u003c/span\u003e \u003cspan class=\"n\"\u003einteger\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"m\"\u003e9999\u003c/span\u003e  \u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eYou need \u0026ldquo;cantidad de personas\u0026rdquo; (number of individuals) from the \u0026ldquo;viviendas\u0026rdquo;table.\u003c/p\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-r\" data-lang=\"r\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nf\"\u003etbl\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003ecenso_conectar\u003c/span\u003e\u003cspan class=\"p\"\u003e(),\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;variables\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003ecollect\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e%\u0026gt;%\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nf\"\u003efilter\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nf\"\u003egrepl\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Dorm\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescripcion\u003c/span\u003e\u003cspan class=\"p\"\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003etabla\u003c/span\u003e     \u003cspan class=\"n\"\u003evariable\u003c/span\u003e \u003cspan class=\"n\"\u003edescripcion\u003c/span\u003e                                            \u003cspan class=\"n\"\u003etipo\u003c/span\u003e    \u003cspan class=\"n\"\u003erango\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e     \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e    \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e                                                  \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e   \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"n\"\u003echr\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e \u003cspan class=\"n\"\u003eviviendas\u003c/span\u003e \u003cspan class=\"n\"\u003ep04\u003c/span\u003e      \u003cspan class=\"n\"\u003eNúmero\u003c/span\u003e \u003cspan class=\"n\"\u003ede\u003c/span\u003e \u003cspan class=\"n\"\u003ePiezas\u003c/span\u003e \u003cspan class=\"n\"\u003eUsadas\u003c/span\u003e \u003cspan class=\"n\"\u003eExclusivamente\u003c/span\u003e \u003cspan class=\"n\"\u003eComo\u003c/span\u003e \u003cspan class=\"n\"\u003eDormitorio\u003c/span\u003e \u003cspan class=\"n\"\u003einteger\u003c/span\u003e \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u003c/span\u003e \u003cspan class=\"m\"\u003e6\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eFrom the variables \u0026ldquo;cant_per\u0026rdquo; and \u0026ldquo;p04\u0026rdquo; you can use the methodology used bythe\u003ca href=\"https://www.desarrollosocialyfamilia.gob.cl/\"\u003eSecretary for Social Development and Family (Ministerio de Desarrollo Social y Familia)\u003c/a\u003e,which consists in taking the ratio of people residing in the dwelling and thenumber of bedrooms in the dwelling. The variable is then discretized asfollows:\u003c/p\u003e\u003cul\u003e\u003cli\u003eNo overcrowding [0,2.5)\u003c/li\u003e\u003cli\u003eMean [2.5,3.5)\u003c/li\u003e\u003cli\u003eHigh [3.5,4.9)\u003c/li\u003e\u003cli\u003eCritical [5,\u003ccode\u003eInf\u003c/code\u003e)\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eYou can obtain the table with the overcrowding index for each dwelling