Home > Blockchain >  How to get the mean of same name elements of list
How to get the mean of same name elements of list

Time:09-11

I have made a function that runs a bootstrapped regression (with plm). I've managed to get a list, that contains a list for every repetition. Inside that sub-list, there are two coefficients each one with its name.

So I want to know if I can get the mean of each coefficient, by calling it just for the name.

The minimal example I could do was with three repetitions so the list looks like this:

> dput(b)
list(list(capital = 0.185108300831744, labor = 0.342750547967331), 
    list(capital = 0.219370274172395, labor = 0.302455636315905), 
    list(capital = 0.191813145986764, labor = 0.317630069307932))

So the desired result is a list with the mean for capital and the mean for labor, like this:

> dput(result)
list(capital = 0.1987639, labor = 0.3209454)

Thanks in advance!

CodePudding user response:

Here's a base R solution:

b <- list(list(capital = 0.185108300831744, labor = 0.342750547967331), 
          list(capital = 0.219370274172395, labor = 0.302455636315905), 
          list(capital = 0.191813145986764, labor = 0.317630069307932))

my_names <- c('capital', 'labor')
result <- lapply(my_names, \(x) mean(sapply(b, '[[', x)))
names(result) <- my_names

result

$capital
[1] 0.1987639

$labor
[1] 0.3209454

Alternately, we can take advantage of the fact that lists can be treated as data frames:

result <- colMeans(do.call(rbind, lapply(b, as.data.frame)))

  capital     labor 
0.1987639 0.3209454

CodePudding user response:

  • You can use purrr::transpose to swap your list to capital and labor then get the mean
purrr::transpose(b) |> lapply(\(x) mean(unlist(x)))

$capital
[1] 0.1987639

$labor
[1] 0.3209454

CodePudding user response:

A base R option with unlist/tapply

with(stack(unlist(b)), as.list(tapply(values, ind, FUN = mean)))
$capital
[1] 0.1987639

$labor
[1] 0.3209454
  • Related