【问题标题】:Accessing dataframes within a nested list访问嵌套列表中的数据框
【发布时间】:2021-04-02 20:17:13
【问题描述】:

我有一个包含三种不同类型数据集的列表,每种类型有十个数据集。它看起来像这样:

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)

我想对每个数据集应用相同的函数,但我不知道如何访问它们。我尝试使用 purrr 中的地图,但它仅将其应用于列表中的第一个:

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

如何将函数应用于嵌套列表中的所有数据集?

*该函数比 length 更复杂 - 它是另一个包中的函数,我需要使用 ~function 访问它

【问题讨论】:

    标签: r list dictionary nested purrr


    【解决方案1】:

    您可以在combined 中的每个列表上应用lengths

    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
    

    使用purrrmap

    purrr::map(combined, lengths)
    

    如果length 只是一个示例,并且您想要一种通用方法将函数应用于每个嵌套列表,您可以使用嵌套lapply

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

    或者使用rapply

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

    【讨论】:

    • 这是一个比长度更复杂的函数 - 所以,不幸的是,长度不起作用。这只是一个例子。这是我需要使用 ~ 访问的另一个包中的函数
    • 是的,我是这么认为的。我更新了使用嵌套lapply 的答案,这可能会有所帮助。如果要使用purrr,可以将lapply 替换为map
    • 嗯... lapply 非常适合这个例子——我只需要弄清楚如何让它适用于这个函数
    猜你喜欢
    • 2017-07-03
    • 1970-01-01
    • 2021-01-08
    • 2017-03-18
    • 1970-01-01
    • 2020-08-28
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多