Enabling the pharmaceutical programming community to develop ADaM datasets in R: Four Perspectives From the Maintainers

2025-03-10
admiral hex

In the world of pharmaceutical clinical trial data, the open-source admiral R package continues to make significant strides. As we celebrate the release of v1.2, we’re excited to share perspectives from key contributors Edoardo Mancini (Roche), Ben Straub (GSK), Stefan Bundfuss (Roche), and Fanny Gautier (Cytel), who have been instrumental in the development and adoption of admiral.

This release marks another milestone in admiral’s evolution as a cornerstone for developing ADaM datasets. Read below to learn about the collaborative spirit behind the package, the challenges faced, and the vision for its future.There will also be a lot of exciting discussions surrounding admiral at the upcoming PHUSE US Connect on March 16-19. We at Posit hope to share more with you there!

 

The admiral journey and its real-world impact

 

How would you define admiral?

 

Edoardo Mancini (Roche)

It’s easiest to define admiral by first zooming out and looking at the wider “pharmaverse”, which is a group of open-source R packages embodying the vision of enabling end-to-end clinical reporting in R – all the way from raw data collection to the generation of tables, listings, and graphs that are used to determine the safety and efficacy of trialed drugs. admiral is just one part of the pharmaverse, offering an open-source modularised toolbox that enables data scientists to develop ADaM datasets in R.​ These datasets are an intermediate data format used across pharma. It is an exciting project because it is one of the first examples of pharma companies working together towards a shared goal of doing more for our patients rather than working in silos.

 

Ben Straub (GSK)

Modularity at its finest for building ADaMs. Modularity is where small admiral functions interspersed with base R, tidyverse, and other R packages are used to build an ADaM dataset.   There are lots of great examples and vignettes of common derivations done in ADaMs using R and admiral – really nothing else like it is publicly available.  You can find these in the User Guides section of the admiral documentation.

Stefan Bundfuss (Roche)

admiral provides the basis for creating ADaM data sets. Most ADaM variables and parameters can be derived by a single admiral function call. ADaM datasets can be created in a modular way by combining these calls. How this happens is up to the user. It is not covered by the Admiral project (yet). The calls could be added to a manually created script, used in a higher-level function that creates an ADaM dataset for different scenarios, or used by a tool that creates an ADaM dataset automatically based on its specifications.

Fanny Gautier (Cytel)

admiral is a powerful, cross-company R package designed to streamline the creation of ADaM datasets. With a comprehensive suite of functions, it simplifies and accelerates the generation of variables and records, making it easier to build datasets like ADSL, ADVS, ADEX, etc. To enhance its flexibility, admiral is further supported by specialized extension packages, such as admiralophtha for ophthalmology datasets or admiralpeds for pediatric vital sign datasets, and many more, ensuring tailored solutions for diverse therapeutic areas.

 

Tell us about your journey within admiral. How did you get started?

 

Edoardo Mancini (Roche) 

I was working as a lead programmer for two ophthalmology trials at Roche and got the opportunity to be involved in a team working towards creating an ophthalmology-focused extension package for admiral. I found it exciting and energizing to be working in a cross-functional, cross-industry team, and eventually moved on to lead the team. After our first release of admiralophtha in 2023, I then joined the admiral core development team as a business lead.

Ben Straub (GSK)

I started helping with Admiral back in spring 2022. It started with some pretty minor updates around some date/datetime issues, C/I actions, and some package documentation. I was pretty hooked after that and eventually got asked to be the package’s maintainer in 2023 when Thomas Neitmann left Roche. Thomas was the original maintainer of the package. He even made the first commit to the repository!

Stefan Bundfuss (Roche)

I joined the admiral team as a developer right at the start of spring 2021. In 2022, I also joined the admiralonco team (the first admiral extension package) and became its maintainer.

Fanny Gautier (Cytel)

I joined the admiral team in 2024 after two years of experience with R. To support newcomers in the package development process, the admiral team offers extensive training and documentation, providing clear best practices and development guidelines. I was also fortunate to have a mentor (Edoardo) who guided me through my first steps, boosting my confidence in developing functions and fixing real bugs.
After a few weeks and eager to take on new challenges, I seized the opportunity to contribute actively to the development of admiralpeds and took on the role of package manager. 

 

Tell us about the current impact – how are Pharmas using admiral?

 

Edoardo Mancini (Roche)

Four years after its first CRAN release, we now have 10+ companies listed as co-development partners on admiral or one of its related extension packages, as well as thousands of users across the pharmaceutical industry. Use cases range all the way from exploratory work to filings; this showcases how admiral has truly shown pharmaceutical companies that it is not only possible but also fun and productive to work in R for all aspects of clinical development. It is a great source of pride that over the last years, we have seen the first pharmaceutical filings to the FDA/EMA be done using R and admiral, and the number will only keep growing.

Ben Straub (GSK)

In the R/Pharma community, lots of focus has been put on tables and figures and producing those with R packages, which is why we have two dozen of these packages!  But only one ADaM package.  However, all these tables and figures packages feed off ADaMs, and this was a beast no one wanted to tackle, i.e., making an R package for ADaMs.  But we have done it!!  I really feel that the rise of R as a high-quality alternative language for regulatory submissions dovetails with the rise of admiral.  We are showing the way to program ADaMs in R and it isn’t all with admiral, but it is all with R!

Fanny Gautier (Cytel)

One of the biggest impacts of admiral, in my experience, is the significant time savings when developing ADaM datasets. Coming from a CRO background, I know that efficiency is a top priority in programming, and admiral plays a crucial role in streamlining the process. Providing standardized functions and workflows helps programmers focus more on data quality and analysis rather than repetitive coding tasks.

Another important aspect is that while the main admiral package is widely used, many pharma companies complement it with their own company-specific admiral extensions, implementing organization-specific standards.

 

Building the Admiral Ecosystem

 

Tell us about the different flavors of ADaM implementation via admiral.

 

Edoardo Mancini (Roche)

ADaM is a therapeutic-area-agnostic standard, meaning that the structure and programming logic of ADaM datasets should not vary significantly across oncology, ophthalmology, cardiovascular metabolism, etc. Having said this, many therapeutic areas do still have a small number of unique aspects to them. We address this challenge by working alongside experts in those therapeutic areas to release extension packages that build on top of the core admiral package to give users working in that area a few more tools, documentation, and examples to facilitate their ADaM journey. Currently, we have released packages in oncology, ophthalmology, vaccines, pediatrics, and metabolism – but we’re not stopping here!

Ben Straub (GSK)

Edoardo sums it up very nicely!

 

What is it like managing so many different flavors of admiral?

 

Edoardo Mancini (Roche)

It’s a challenge for sure! We have chosen a “franchising” model for the extension packages, where we empower expert users to create and maintain the package; however, members of the core team still consult with the extension teams to ensure that the new package has the same front-end look and feel as all the others in the admiral ecosystem, as well as being coded to the same style and high standards in the back-end. The more extension packages we release, the harder this gets!

Ben Straub (GSK)

I haven’t been involved with the extension packages, but some of the challenges for managing them are around lifecycle maintenance, ensuring high quality for tests and documentation, and dependency management.

 

Do you anticipate other flavors of admiral being added?

 

Edoardo Mancini (Roche)

Certainly – we are working on some ideas already… However, I should note that due to the generality of ADaM and the corresponding flexibility of admiral, we do not expect any new extension packages to be very large in size. Rather, they may have a couple of functions as well as detailed documentation and examples of how to use those functions in conjunction with the existing admiral tools to create your ADaMs of interest.

Ben Straub (GSK)

Yes!

 

Tell us more about Github, continuous integration/continuous delivery (CI/CD), and managing the package(s).

 

Ben Straub (GSK)

CICD is such a lifesaver.  Being able to continually check the package as we update the content is amazing.  GitHub has excellent features for maintaining software.  Lots of little touches make programming fun and ensure we maintain a great product. For example, the Pull Request template is something I love to review as PRs come in, as it nicely aligns with our programming strategy, which helps us ensure things are up to a high quality.  Also, simple checks like spelling and URL links firing off every time a PR is open is a huge help in making sure admiral stays fresh, but also keeps us focused on code review rather than checking this minor minutiae.  

 

What is admiraldev?

 

Ben Straub (GSK)

I see it as the “source of truth.” Decisions we make regarding package design, testing, and how we present documentation are all housed in this package, along with many great utility functions used by admiral developers to write admiral code.  

Stefan Bundfuss (Roche)

As the name suggests, it is a package for admiral developers. It provides utility functions to be used within admiral functions, e.g., functions for checking arguments. It also provides guidance on how to implement admiral functions and admiral extension packages. This separation avoids burdening end users with features and documentation intended for developers.

 

Tell us about the Programming Vision.

 

Ben Straub (GSK)

Well, I would point you to the manifesto as our Vision: ADaM in R Asset Library • admiral. I see the above link as more of how we are implementing the manifesto that Stefan lays out.

Stefan Bundfuss (Roche)

So far, more than 50 programmers have contributed to admiral, and the team has undergone many changes. The “Programming Strategy” is important to maintain continuity.

It ensures that:

  • the usage and behavior is consistent across all admiral functions, e.g., by naming conventions for functions and arguments,
  • new contributors have guidance on how to implement admiral functions,
  • the code itself is consistent, e.g., by using tidyverse packages instead of base R.

 

Tell us about the challenges with developing and maintaining the package(s).

 

Ben Straub (GSK)

Lifecycle maintenance of a product and keeping people involved with interesting work.

Stefan Bundfuss (Roche)

It is hard to gain feedback from users (What is working well? What is not working so well? What is missing? What could be improved?). Issues are reported in company internal support tools rather than directly to the admiral team. 

Fanny Gautier (Cytel)

Recruiting co-developers can sometimes be challenging. Many people assume that joining the admiral team requires highly advanced R skills. However, this is not the case. Developers of all skill levels are welcome. As an admiral co-developer, you also become an admiral user, allowing you to continuously enhance your skills.

Being part of the team involves more than just programming. There are various discussions about what to program, how to program, and which strategies to adopt. Sometimes, what feels straightforward to an experienced developer may not be as clear to a beginner. That’s why external perspectives and feedback are always valuable and highly appreciated.
Anybody who wants to join our team can and is encouraged to do so!

 

Admiral’s Future: Innovation, Growth, and Community Partnership

 

What are your future plans?

 

Edoardo Mancini (Roche)

With the release of admiral 1.0 in January 2024, we achieved a level of package maturity that we had been aiming towards for some time. That is, from that point, we were confident that the package had almost all the tools to be used across the lifespan of a clinical trial for all ADAM programming needs, and any gaps could be addressed with the extension packages or tidyverse tools. Moreover, we committed to an ethos of stability, ensuring a very low number of breaking changes in later releases of the package, which we have upheld for our 1.1 release (June 2024) and 1.2 release (January 2025). These made only targeted improvements (including error messaging reworks and documentation improvements) and bug fixes while maintaining the same core functionality. Moving forward, we want to continue on this path while simultaneously growing our extension packages even more. One target for 2025 is to level up our documentation even further, to ensure that AI models can be trained on it and function as effective admiral programming partners.

Ben Straub (GSK)

Have R and other open-source languages take over the industry.

 

How would you recommend someone new try out admiral at their organization?

 

Edoardo Mancini (Roche)

To start out, install admiral from CRAN and try running some of our template functions on your data (for instance, use_ad_template(“adsl”, package = “admiral”)). What works as expected? What do you need to add, remove, and change? Answering these questions should give you a better idea of what you need to do at your company to start using admiral as part of your workflow.

Ben Straub (GSK)

Second what Edoardo says above!

Fanny also just updated the pharmaverse examples on Posit Cloud for an interactive learning experience.

Fanny Gautier (Cytel)

Are you already programming in R or looking to transition to R for creating ADaM datasets? Do you want to save time while producing ADaM datasets? Start by exploring the admiral documentation (https://pharmaverse.github.io/admiral/index.html) and the GitHub repository. The vignettes provide plenty of examples, and you can try out the code using pre-defined templates.

Have questions, doubts, or facing any challenges while getting started with admiral? Don’t be shy, and feel free to connect with the team via the Slack channel!

 

How can people help?

 

Edoardo Mancini (Roche)

We’re always looking for feedback and contributions from our community! If you have a question or have found a bug, please drop us a note through an issue on our GitHub or join our dedicated channel on the pharmaverse Slack. If you have a proposed enhancement, don’t feel obligated to just suggest it – fork the package and show us your ideas! We’re happy to discuss and implement our community’s suggestions. 

Ben Straub (GSK)

Start chatting about an issue and offer to take it on on GitHub or in Slack.  Or if you find something you think should be improved, then create an issue and make a PR.  We will probably point you to an onboarding issue to plug you in better as admiral has some bureaucracy with it – but good bureaucracy!!  We love feedback, too!!

Stefan Bundfuss (Roche)

As Edoardo said, any feedback, even if it’s just a question, helps us improve admiral to meet users’ needs.

 

Will you be at PHUSE US Connect 2025?

 

Ben Straub (GSK)

Daniel Sjoberg and I are giving a talk on “What’s in a message?  Enhancing Error and Warning Messages for the admiral R Package for ADaM Datasets,” where we talk about using the cli and glue R packages to really make our error and warning messages pop!!

There’s also “An End-to-End Approach to Fine-Tuning Small LLMs for Generating Admiral R Code in Statistical Programming” presented by Merck. I don’t even know who this is and no one in Merck is directly involved with admiral. It is a true honor to have them working with our package!!

There is a sea of R and open-source topics at PHUSE this year. It is going to be amazing.