抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

1.只计算相关性,不考虑显著性检验:

1
2
3
4
library(corrr)
library(dplyr)
data(mtcars)
mtcars%>%correlate()%>%rearrange()%>%stretch()

2.计算两种结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
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包的mapmap2函数,那么,如何解释这两个函数的使用呢?

顾名思义,map就和python中的一样,对一个可迭代的序列做向量化的操作,举个python的例子:

1
2
a=[1,2,3,4,5]
list(map(lambda x:x+1,a))
1
[2, 3, 4, 5, 6]

在R中,map函数做的是相同的操作,只不过它更牛,他可以接受一整个数据框或者tibble.

1
2
3
library(purrr)
data("mtcars")
head(mtcars)
1
2
3
4
5
6
7
                   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
1
mtcars%>%map(mean)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$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,所以可以同时对两个参数同时迭代:

1
2
3
n<-list(4,5,6)
m<-list(1,2,3)
map2(m,n,'+')
1
2
3
4
5
6
7
8
[[1]]
[1] 5

[[2]]
[1] 7

[[3]]
[1] 9

另外,map函数还具有其他的形式,例如

map:返回列表
map_df:返回数据框
map_dbl: 返回向量

最后,purrr包的函数形式例如~lm(x~y,data=.),这种格式是为一种简写,实际上为,因此,.为传入的数据。

1
function(data) lm(data$x~data$y,data=data)

其余的包

broom::tidy

这个函数用来处理数据模型,可以帮助我们将模型转化为一系列tidy的数据格式`;

tidyr::unnest

这个函数可以将数据框嵌套列表的形式展开便于观察

base::combn

来自基础包的排列组合函数,接受第一个参数为一个列表或者向量,第二个参数为一个数字,为从中取出的个数

%>%管道符:

来自包dplyr包,用于方便数据的流程化处理

评论