简体   繁体   中英

Accessing dataframes within a nested list

I have a list of three different types of datasets, with ten datasets in each type. It looks like this:

mat1 <- replicate(n=10,data.frame(matrix(data=rnorm(20,0,1),nrow=5,ncol=5)),simplify=FALSE)
mat2 <- replicate(n=10,data.frame(matrix(data=rnorm(20,0,1),nrow=5,ncol=5)),simplify=FALSE)
mat3 <- replicate(n=10,data.frame(matrix(data=rnorm(20,0,1),nrow=5,ncol=5)),simplify=FALSE)
combined <- list(mat1,mat2,mat3)

I want to apply the same function to each of the datasets, but I can't figure out how to access them. I tried using map from purrr, but it only applies it to the first one in the list:

map(combined[[i]],~length(.))

[[1]]
[1] 5

[[2]]
[1] 5

[[3]]
[1] 5

[[4]]
[1] 5

[[5]]
[1] 5

[[6]]
[1] 5

[[7]]
[1] 5

[[8]]
[1] 5

[[9]]
[1] 5

[[10]]
[1] 5

How can I apply a function to all datasets in a nested list?

*The function is more complex than length - it's a function from another package that I need to access using ~function

You can apply lengths on each list in combined :

lapply(combined, lengths)

#[[1]]
# [1] 5 5 5 5 5 5 5 5 5 5

#[[2]]
# [1] 5 5 5 5 5 5 5 5 5 5

#[[3]]
# [1] 5 5 5 5 5 5 5 5 5 5

Using purrr 's map :

purrr::map(combined, lengths)

If length is just an example and you want a general way to apply a function to each nested list you may use nested lapply :

lapply(combined, function(x) lapply(x, function(y) length(y)))

Or use rapply :

rapply(combined, length, how = 'list')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM