1.只计算相关性,不考虑显著性检验:
library(corrr) library(dplyr) data(mtcars) mtcars%>%correlate()%>%rearrange()%>%stretch()
|
2.计算两种结果:
library(dplyr) library(purrr) library(broom) library(tidyr) data(mtcars) pairs_names<-t(combn(names(mtcars),2))%>% as_tibble()%>% setNames(c("x","y"))
pairs_names%>% mutate(r.test=map2(x,y,~cor.test(mtcars[[.x]], mtcars[[.y]])),r.test=map(r.test,tidy))%>% unnest(r.test)
|
purrr 包
查看前面的代码,看到了来自purrr
包的map
和map2
函数,那么,如何解释这两个函数的使用呢?
顾名思义,map
就和python
中的一样,对一个可迭代的序列做向量化的操作,举个python
的例子:
a=[1,2,3,4,5] list(map(lambda x:x+1,a))
|
在R中,map
函数做的是相同的操作,只不过它更牛,他可以接受一整个数据框或者tibble
.
library(purrr) data("mtcars") head(mtcars)
|
mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
|
$mpg [1] 20.09062
$cyl [1] 6.1875
$disp [1] 230.7219
$hp [1] 146.6875
$drat [1] 3.596563
$wt [1] 3.21725
$qsec [1] 17.84875
$vs [1] 0.4375
$am [1] 0.40625
$gear [1] 3.6875
$carb [1] 2.8125
|
map2
函数同样的,因为是2,所以可以同时对两个参数同时迭代:
n<-list(4,5,6) m<-list(1,2,3) map2(m,n,'+')
|
[[1]] [1] 5
[[2]] [1] 7
[[3]] [1] 9
|
另外,map
函数还具有其他的形式,例如
map
:返回列表
map_df
:返回数据框
map_dbl
: 返回向量
最后,purrr包的函数形式例如~lm(x~y,data=.)
,这种格式是为一种简写,实际上为,因此,.
为传入的数据。
function(data) lm(data$x~data$y,data=data)
|
其余的包
broom::tidy
这个函数用来处理数据模型,可以帮助我们将模型转化为一系列tidy
的数据格式`;
tidyr::unnest
这个函数可以将数据框嵌套列表的形式展开便于观察
base::combn
来自基础包的排列组合函数,接受第一个参数为一个列表或者向量,第二个参数为一个数字,为从中取出的个数
%>%
管道符:
来自包dplyr
包,用于方便数据的流程化处理