探索 R 库:Purrr
介绍
从本质上讲,R 是一种函数式编程语言,而 purrr 包通过提供不同的方法来处理函数和向量,增强了 R 的函数式编程方面。
函数式编程的概念是一个单独的主题,需要单独讨论。您可以在此处找到概述,但为了让您有一个基本的概念,这里有一个简短的示例。
假设您正在处理一个仅包含数值的小数据集,但由于数据输入错误,几列包含字符。如果您不遵循函数式编程原则,您将转到每个单元格位置手动替换数据点。如果您遵循函数式编程原则,您将创建一个函数,该函数将数据集作为参数并用适当的值替换字符。
介绍 Purrr
如上所述,purrr 增强了 R 的函数式编程方面。您可以使用此包来避免许多循环并编写易于理解的简单代码。但在此之前,您需要安装此包:
install.packages("purrr")
# alternate way
install.packages("tidyverse")
介绍 map() 函数
purrr 包的 map 函数将一个函数应用于向量的每个元素。如果该函数返回一个向量,则 map 函数返回一个列表。还有两种可用的 map 函数变体:map_if和map_at。这些变体采用额外的谓词函数来确定函数将转换向量的哪些元素。
# Applying map function on a vector
library(purrr)
library(dplyr)
1:10 %>%
map(rnorm, n = 10)
运行上述代码可获得包含正态分布数据的列表。map 函数的语法为:[map(.x, .f, ...)]。. x是原子向量列表,.f是函数或公式,...是传递给映射函数的附加参数。
引入返回原子向量的 Map 函数
有一些映射函数始终返回原子向量。向量的类型取决于您在代码中使用的映射函数类型。以下是返回原子向量的映射函数:map_lgl()、map_int()、map_dbl()和map_chr()。
1:10 %>%
map(rnorm, n = 10)%>%
map_dbl(mean)
在上面的代码中,map_dbl()中传入了一个列表,它是map()函数的输出。运行代码以了解输出。
map() 函数的实际示例
以下示例展示了在使用mtcars数据集构建数据科学模型时如何使用 map() 函数。首先,根据第一列的值对数据进行拆分。然后在每次拆分时应用线性模型。map ()方法将应用lm()函数并生成模型数量,该数量将等于拆分数量。之后,它将汇总函数应用于每个模型,并从该输出中map_dbl绘制r.squared值。您可以在不同的数据集中遵循相同的模式,以查看划分数据是否可以提高模型的性能。
# Loading data
data(mtcars)
mtcars %>%
# Splitting data on cyl column
split(.$cyl) %>%
# Applying lm() to create linear models
map(~ lm(mpg ~ wt, data = .x)) %>%
# Generating summary of each model
map(summary) %>%
# Withdrawing r.squared value
map_dbl("r.squared")
结论
函数式编程是 R 的一个非常强大的方面,purrr 包的map()函数增强了这一方面。在本指南中,您已经了解了一个真实示例,其中我们应用map()函数来创建不同的模型而无需重复代码。purrr 包中提供了不同的 map 函数变体,可用于不同的场景。您可以在此处找到更多信息。
您可以遵循相同的示例,并在 R 中对不同的数据集应用map()函数。如果您正在从事数据科学项目,那么您可以使用 purrr。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~