Home > Mobile >  Maintain call properties when using a regression with purrr::map
Maintain call properties when using a regression with purrr::map

Time:04-27

Suppose you have a list that contains multiple dataframes. Suppose you would like to "loop" through each of these dataframes within a regression model using purrr::map. However, you would like to maintain the names of the call$object. In the case below, you would like cars_output[[1]]$call$data to return mtcars instead of ..

library(tidyverse)

## creating a list of dataframes
cars_list <- list(mtcars, mtcars)

## iterating over each data frame within the model
cars_output <- map(cars_list,~lm(mpg ~ cyl, data = .))

## desired output would be mtcars, not .
cars_output[[1]]$call$data

CodePudding user response:

Create a named list instead of just only values and then loop over the list with imap and modify the call$data with the names i.e. .y

library(purrr)
cars_list <- dplyr::lst(mtcars, mtcars)
cars_output <- imap(cars_list,~{
        model <- lm(mpg ~ cyl, data = .x)
        model$call$data <- .y 
   model})

-checking

> cars_output[[1]]$call$data
[1] "mtcars"
  •  Tags:  
  • r
  • Related