01包装:purrr包装
今天我从哈雷中学到了一个新概念
函数式编程:将一个函数作为参数传递给另一个函数。使代码相当简洁,避免for循环,提高运行速度。
虽然听起来有点傻,但是我遇到过。比如apply函数,apply(iris[,-5],2,mean),把mean函数作为参数传递给apply函数,得到iris数据集和前四个变量的均值。
purrr包中有一个类似的映射函数,但是映射关系可能更复杂。
本文主要了解以下功能:
map():输出列表map_dbl():输出双精度型向量map2()、pmap():多参数映射,输出列表invoke_map():不同函数调用,输出列表02 map()函数
Map语法:map(。x,。f,...),类似于apply
。x:数据集,。f映射函数
# # #例如,求虹膜数据集中数值变量的平均值
map(iris[,-5],均值)
$Sepal。长度
[ 1] 5.843333
$Sepal。宽度
[ 1] 3.057333
$花瓣。长度
[ 1] 3.758
$花瓣。宽度
[ 1] 1.199333
返回的是列表类型,通常可以通过非列表函数转换成向量
未列表(map(iris[,-5],均值))
萼片。萼片长度。宽度花瓣。长度花瓣。宽度
5.8433333.0573333.7580001.199333
通过以下两种方式可以达到相同的效果
应用(iris[,-5],2,均值)
summary _ all(iris[,-5],均值)
###PS:假设是宽表性质的列表,计算数值变量的平均值
# # #您可以自定义函数来过滤数值变量的列
pre_is_double <。-函数(x){ #确定函数并返回真| |假
output1 <。-空
for(i in seq_along(x)){
输出<。- is.double(x[,i])
output1 <。- c(输出1,输出)
}
返回(输出1)
}
未列表(map(iris[,pre_is_double(iris)],均值))
该”。映射函数支持多种形式
# # # the "。映射函数中的“f”函数支持匿名函数
iris[,-5] % >%
map(函数(x) (max(x) - min(x)))
获取每个变量的极值
该”。## #map函数中的“f”函数也支持模型拟合
# # #需要注意的是,在数据帧传输的过程中,很容易出现“降维”的情况,所以最好转换成列表,然后传递给. f。
model = map( list(iris),~lm(Sepal。长度~萼片。宽度,数据=虹膜))
# # #拆分功能,可以根据某个变量拆分列表。
# # #特别适合一个变量,分类后可以处理
iris %>。%
拆分(。$ Species)% & gt;%
#对于物种,将鸢尾分为三个列表
map(~lm(Sepal。长度~萼片。宽度,数据=。))% & gt%
# "数据= ","."在分割后的列表中
地图(摘要)% >;%
map_dbl( "r.squared ")
弗吉尼亚濑鱼
0.55137560.27658210.2090573
# "r.squared ",你可以通过变量名得到r^ 2
Map_dbl()语法:map_dbl()。x,。f,...)
Map_lg(),map_int()和map_chr()类似
# map_dbl函数
1: 10%>;%
map(r ORM,n = 10) % >%
map_dbl(平均值)
[ 1] 1.0522141.5114642.9902594.2380925.4746515.8944976.7990277.8414979.121959
[ 10] 10.465799
#根据rnorm随机生成一个平均值为1:10的列表,然后计算平均值
Map2(),pmap():多参数映射
语法:map2(。x,。y。f,...),pmap(。l,。f,...)
例如,有时需要生成具有特定均值和方差的随机数
# # #假设函数中有多个参数变量
示例:rnorm函数
语法:rnorm(n,mean = 0,sd = 1) #有三个变量:n,mean,sd
参数表:
x <。-列表(1,10,100)
y <。-列表(1,2,3)
z <。-列表(5,5,5)
#表单效果通过以下三种方式实现
1.地图模式
set.seed( 123)
1: 3%>;%
map(~ r ORM(z[[。]],x [[。]],y [[。]]))
# "[[.]]”会降低函数的可读性
2.map2模式
set.seed( 123)
map2(x,y,rnorm,n = 5)
3.PMAP模式
set.seed( 123)
pmap(列表(z,x,y),rnorm)
在#pmap函数中,输入参数变量必须集成到一个列表中
#假设要生成的列表长度不一致(z可以是多个值),方法1和方法3更合适
Invoke_map():不同的函数调用,输出列表
语法:invoke _ map(。f,。x = list (null),...,.env = null)
# # #同时生成runif和rnrom的随机列表
invoke_map(list(runif,rnorm),list(list( min= 1,max= 5,n= 5),list(mean = 0,sd = 1,n= 10)))
[[1]]
[ 1] 2.9544524.8178952.9316104.5614014.657753
[[2]]
[ 1] 0.2760235-1.0489755-0.52086931.6232025-1.07006821.6858872-0.2416898-0.4682005
[ 9] -0.77297822.1499193
#list( min= 1,max= 5,n= 5)是runif的参数
#list(mean = 0,sd = 1,n= 10)是rnorm的参数
总结:purr能实现的功能循环也有,但是purr的代码更简洁&漂亮,函数式编程是一大特色。
本文省略了purrr的许多功能,如安全、减速、行走、保持等。
结束。
Python和SQL技能失败?零基础也要就业数据分析?
零基础就业数据分析,跨专业变动数据分析,也可以!
“零基础就业数据分析——就业类”即将启动
点击试听→“零基础就业数据分析-就业类”试听类
1.《map函数 函数式编程:数据整理purrr包!》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《map函数 函数式编程:数据整理purrr包!》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/1056530.html