为什么purrr包的map函数中要使用波浪符~?
purrr包map函数前置~符号的作用
你代码中map里开头的~是purrr包提供的单侧公式匿名函数简写语法,和lm里定义模型用的~属于完全不同的语法场景,作用是简化匿名函数的写法:
- 不用这个简写的话,你当前的代码等价于:
map(function(df) { lm(hp ~ wt, data = df) })
用~简写后省去了手动定义function()的冗余代码,大幅简化映射逻辑的书写。
- 该简写语法中有固定的占位符规则:单独的
.或者.x代表map遍历传入的每一个元素,你这里拆分mtcars后传入map的每个元素就是按cyl分组后的子数据集,所以data = .就是指定建模用的数据集为当前遍历到的子分组。如果是处理多参数映射的map2、pmap,还可以用.y、..1、..2等占位符对应不同位置的入参。
你可以用简单的测试代码验证这个规则:
# 简写写法 map(1:3, ~ . * 2) # 等价于完整匿名函数写法 map(1:3, function(x) x * 2)
两段代码返回的结果完全一致,都是list(2,4,6)。
内容的提问来源于stack exchange,提问作者STAT201UTK
相关产品推荐
相关产品推荐

