purrr 泛函式循环迭代(map函数介绍)

map系列函数:

map_chr(.x, .f): 返回字符型向量          map_lgl(.x, .f): 返回逻辑型向量

map_dbl(.x, .f): 返回实数型向量          map_int(.x, .f): 返回整数型向量

map_dfr(.x, .f): 返回数据框列表,再 bind_rows 按行合并为一个数据框

map_dfc(.x, .f): 返回数据框列表,再 bind_cols 按列合并为一个数据框

.x 是序列中的一个(代表)元素      .f是对一个元素做的操作

map_*(.x, .f, ...): 依次应用一元函数.f 到一个序列.x 的每个 元素,... 可设置.f 的其它参数 

map2_*(.x, .y, .f, ...): 依次应用二元函数.f 到两个序 列.x, .y 的每对元素,... 可设置.f 的其它参数

pmap_*(.l, .f, ...): 依次应用多元函数.f 到多个序列.l 的每 层元素,可实现对数据框逐行迭代,... 可设置.f 的其它参数

  

 

 示例:

1 对数据框逐列迭代

df = iris[,1:4]
head(df)
Sepal.Length Sepal.Width Petal.Length Petal.Width
1          5.1         3.5          1.4         0.2
2          4.9         3.0          1.4         0.2
3          4.7         3.2          1.3         0.2
4          4.6         3.1          1.5         0.2
5          5.0         3.6          1.4         0.2
6          5.4         3.9          1.7         0.4
map_dbl(df, mean) # 求各列均值
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
    5.843333     3.057333     3.758000     1.199333 
map_chr(df, mean)
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
  "5.843333"   "3.057333"   "3.758000"   "1.199333" 

 2 对数据框逐行迭代

df[1:5,]
Sepal.Length Sepal.Width Petal.Length Petal.Width
1          5.1         3.5          1.4         0.2
2          4.9         3.0          1.4         0.2
3          4.7         3.2          1.3         0.2
4          4.6         3.1          1.5         0.2
5          5.0         3.6          1.4         0.2
pmap_dbl(df[1:5,], ~ mean(c(...))) #逐行平均
 2.550 2.375 2.350 2.350 2.550
map_dbl(asplit(df[1:5,], 1), mean)
 1     2     3     4     5 
2.550 2.375 2.350 2.350 2.550 
asplit(df[1:5,],1)  #asplit功能展示,其实就是按行分割开来
$`1`
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
         5.1          3.5          1.4          0.2 

$`2`
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
         4.9          3.0          1.4          0.2 

$`3`
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
         4.7          3.2          1.3          0.2 

$`4`
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
         4.6          3.1          1.5          0.2 

$`5`
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
         5.0          3.6          1.4          0.2 

3 批量读取数据并按行合并

 

files = list.files("data", pattern = "csv",full.names = TRUE, recursive = TRUE)
files
#> [1] "data/六 1 班学生成绩.csv" "data/六 3 班学生成绩.csv"
#> [3] "data/六 4 班学生成绩.csv" "data/六 5 班学生成绩.csv"
#> [5] "data/新建文件夹/六 2 班学生成绩.csv"
map_dfr(files, read_csv)
#> # A tibble: 20 x 6
#> 班级 姓名 性别 语文 数学 英语
#> <chr> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 六 1 班 何娜 女 87 92 79
#> 2 六 1 班 黄才菊 女 95 77 75
#> 3 六 1 班 陈芳妹 女 79 87 66
#> 4 六 1 班 陈学勤 男 82 79 66
#> 5 六 3 班 江佳欣 女 80 69 75
#> # ... with 15 more rows

4 批量绘图并保存图片

以 mtcars 为例,用不同的数值列作为 x 轴,以 mpg 列作为 y 轴,批量 绘制散点图,并保存为以列名命名的 png 文件。

先对一个列名完成绘制散点图

x = "disp"
mtcars %>%
ggplot(aes(.data[[x]], mpg)) + # 管道中列名传参方式
geom_point()

改写为函数

plot_scatter = function(x) {
mtcars %>%
ggplot(aes(.data[[x]], mpg)) +
geom_point()
}
cols = names(mtcars)[2:7] # 要绘制的多个列名
ps = map(cols, plot_scatter) # 批量绘图
files = str_c("images/", cols, ".png") # 准备多个文件路径
walk2(files, ps, ggsave)

 

• 其它 purrr 函数

• walk_*() 系列:只循环迭代做事不返回结果,比如批量保存数据/图形 到文件;

• imap_*() 系列:元素与索引一起迭代;

• modify_*() 系列:原地依次修改序列对象;

• reduce()/accumulate(): 可先对序列前两个元素应用函数,再对 结果与第 3 个元素应用函数,再对结果与第 4 个元素应用函数,……前 者只返回最终结果,后者会返回所有中间结果

参考:

GitHub - zhjx19/introR: 这是一本中文 R 语言入门书,基于最新 tidyverse 包。

1 张敬信 《R语言编程:基于tidyverse》(上面的链接是这本书的电子版)

2 (30条消息) 优雅的循环迭代和泛函数编程-purr packages 和 map 函数_purr:map函数_Xiaofei@IDO的博客-CSDN博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《实变函数与泛函分析概要》是一本经典的数学教材,主要介绍了实变函数和泛函分析的基本内容。实变函数是研究实数域上的函数的性质和变换规律,而泛函分析是研究函数的空间以及作用在函数空间上的映射。 这本书首先介绍了实变函数的基本概念,包括实数的性质、数列的极限、函数的连续性、可测性等。然后详细讨论了一元实变函数的导数和积分,以及多元实变函数的偏导数和重积分。通过学习这些内容,读者可以更深入地理解和应用微积分的基本原理和方法。 在泛函分析的部分,书中介绍了线性空间和线性映射的基本理论,以及距离和内积空间的性质。随后,书中讨论了泛函的概念和性质,包括线性泛函、连续性、极值等。最后,书中介绍了泛函分析中的重要定理,如Hahn-Banach定理、开映射定理、闭图像定理等。 通过阅读《实变函数与泛函分析概要》,读者可以系统地学习实变函数和泛函分析的基本知识,并掌握一些重要的定理和方法。这对于从事数学研究或应用数学的工作者来说是非常重要的,并且也为进一步学习更高级的数学理论打下了坚实的基础。此外,这本书还适用于高年级本科生和研究生的课程教学,可以作为重要的参考教材。总之,《实变函数与泛函分析概要》是一本经典而全面的数学教材,对于学习和理解实变函数和泛函分析的人来说是非常有价值的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值