gpt4 book ai didi

r - 将 `purrr::map` 与组合函数一起使用

转载 作者:行者123 更新时间:2023-12-04 11:10:18 24 4
gpt4 key购买 nike

我想知道如何使用 purrr::map,其中 .f 是两个不同函数的组合。

首先,让我们创建一个列表,在其上映射一个复合函数:

library(tidyverse)

# create a list
x <- list(mtcars, tibble::as_tibble(iris), c("x", "y", "z"))

# extracting class of objects
purrr::map(.x = x, .f = class)
#> [[1]]
#> [1] "data.frame"
#>
#> [[2]]
#> [1] "tbl_df" "tbl" "data.frame"
#>
#> [[3]]
#> [1] "character"

现在假设我想提取列表中每个元素的 classfirst 元素:

# this works but uses `map` twice
purrr::map(.x = x, .f = class) %>%
purrr::map(.x = ., .f = `[[`, i = 1L)

#> [[1]]
#> [1] "data.frame"
#>
#> [[2]]
#> [1] "tbl_df"
#>
#> [[3]]
#> [1] "character"

这行得通,但我想避免使用 map 两次,并希望编写一个可以一步提取类及其第一个元素的函数。所以我尝试编写这样一个函数,但它不能很好地与 map

配合使用
# error

purrr::map(.x = x, .f = purrr::compose(class, `[[`, i = 1L))
#> Can't convert an integer vector to function

# no error but not the expected output

purrr::map(.x = x, .f = purrr::compose(class, `[[`), i = 1L)
#> [[1]]
#> [1] "numeric"
#>
#> [[2]]
#> [1] "numeric"
#>
#> [[3]]
#> [1] "character"

我该怎么做?

最佳答案

如果我们使用~,只需包装first即可获得预期的输出

library(purrr)
map(x, ~ first(class(.)))

关于r - 将 `purrr::map` 与组合函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57480533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com