How to use list in R

base-r
list
Master list in R programming with clear examples. Complete tutorial covering syntax, use cases, and best practices.
Published

February 21, 2026

Introduction

Lists are versatile data structures in R that can store multiple elements of different types (numbers, characters, data frames, even other lists) in a single object. They’re essential when you need to organize heterogeneous data or return multiple values from functions.

Getting Started

library(tidyverse)
library(palmerpenguins)

Example 1: Basic Usage

The Problem

You need to store different types of data together - perhaps some summary statistics, character labels, and a small dataset. Regular vectors can only hold one data type, but lists can hold anything.

Step 1: Create a simple list

Start with basic list creation using different data types.

# Create a list with different elements
my_list <- list(
  numbers = c(1, 2, 3, 4, 5),
  text = "Hello World",
  logical = TRUE,
  matrix_data = matrix(1:6, nrow = 2)
)

This creates a named list with four different types of elements stored together.

Step 2: Access list elements

Use different methods to extract data from your list.

# Three ways to access elements
my_list$numbers          # Using $ notation
my_list[["text"]]        # Using [[ ]] with names
my_list[[3]]             # Using [[ ]] with position

The $ and [[]] operators extract the actual element, while [] would return a sub-list.

Step 3: Examine list structure

Explore your list’s organization and contents.

# Check list structure
str(my_list)
length(my_list)
names(my_list)

This shows you how R organizes your list internally and helps verify everything is stored correctly.

Example 2: Practical Application

The Problem

You’re analyzing penguin data and need to store multiple analysis results together - summary statistics, a filtered dataset, and model results. A list provides the perfect container for this mixed output.

Step 1: Create summary statistics

Calculate descriptive statistics for penguin body mass.

# Generate summary stats
penguin_summary <- penguins |>
  drop_na(body_mass_g) |>
  summarise(
    mean_mass = mean(body_mass_g),
    median_mass = median(body_mass_g),
    sd_mass = sd(body_mass_g)
  )

This creates a tibble with three key statistics about penguin body mass.

Step 2: Filter and prepare subset data

Create a focused dataset for further analysis.

# Create filtered dataset
large_penguins <- penguins |>
  filter(body_mass_g > 4500, !is.na(body_mass_g)) |>
  select(species, island, body_mass_g, flipper_length_mm)

This filters for heavier penguins and keeps only relevant columns for analysis.

Step 3: Fit a simple model

Create a linear model to include in your analysis bundle.

# Fit linear model
mass_model <- lm(body_mass_g ~ flipper_length_mm, 
                 data = penguins)
model_r2 <- summary(mass_model)$r.squared

This fits a regression model and extracts the R-squared value for easy access.

Step 4: Bundle everything into an analysis list

Combine all your analysis components into one organized structure.

# Create comprehensive analysis list
penguin_analysis <- list(
  summary_stats = penguin_summary,
  filtered_data = large_penguins,
  model = mass_model,
  model_fit = model_r2,
  analysis_date = Sys.Date()
)

Now all your analysis components are stored together in a single, organized object.

Step 5: Access and use your bundled results

Demonstrate how to work with your analysis list.

# Use results from the list
cat("Mean body mass:", penguin_analysis$summary_stats$mean_mass, "g\n")
cat("Model R-squared:", round(penguin_analysis$model_fit, 3), "\n")
nrow(penguin_analysis$filtered_data)

This shows how easy it is to extract specific results from your organized analysis bundle.

Summary

  • Lists store multiple data types together, making them perfect for complex data organization
  • Use $ or [[]] to access individual elements, and [] to get sub-lists
  • Named lists improve code readability and make element access more intuitive
  • Lists excel at bundling analysis results like statistics, datasets, and models together
  • They’re essential for functions that need to return multiple different types of output