我一直不舍得完全从R转到python有很多原因,但是其中最舍不得的两个就是ggplot2和magritter,完全使我的R语言代码变得高效而且简介,今天就来详细介绍一下R中的pipe operator的包-magritter
关于magritter的包描述是这样的:A Forward-Pipe Operator for R
安装:
# 直接从tidyverse中使用:
install.packages("tidyverse")
# 或者直接安装:
install.packages("magrittr")
# 从GitHub下载开发版本:
# install.packages("devtools")
devtools::install_github("tidyverse/magrittr")
使用方法:
1.基本用法
x %>% f 等价于 f(x)
x %>% f(y) 等价于 f(x, y)
x %>% f %>% g %>% h 等价于 h(g(f(x)))
----------------------------------
x %>% f(y, .) 等价于 f(y, x)
x %>% f(y, z = .) 等价于 f(y, z = x)
如果数据作为函数的第一个参数的话,是不需要placeholder的,但是如果是第二或者更后面的参数,就需要使用 . 作为占位符。
2.构建函数
f <- . %>% cos %>% sin
等价为
f <- function(.) sin(cos(.))
3.%>%, %$%和%<>%的用法
%>%是最常用的一种前向管道符。
%<>%是表示将变量传入函数,得到的结果返回给原来的变量
iris %<>% na.omit() 等价于 iris<-na.omit(iris)
%$%是使用变量的name来表示该变量下name的数值
df<-data.frame("a"=c(1,2,3), "b"=c(4,5,6))
cor(df$a, df$b) 等价于 df %$% cor(a,b)
4.其余函数的解释:
extract `[` iris['Sepal.Length'] 等价于raise_to_powerly_byextract("SepSepal.等价于等价于LengthSepal.LengthSepal.Lengthal.Length")
extract2 `[[` iris$Sepal.Length 等价于 iris %>% extract2('Sepal.Length')
inset `[<-` iris['aa']=1 等价于 iris %>% inset("aa",value=1)
inset2 `[[<-` iris['aa']=1 等价于 iris %>% inset2("aa",value=1)
use_series `$` iris$Sepal.Length 等价于 iris %>% use_series("Sepal.Length")
add `+` iris %>% use_series("Sepal.Length") %>% add(1)
subtract `-` iris %>% use_series("Sepal.Length") %>% subtract(1)
multiply_by `*` iris %>% use_series("Sepal.Length") %>% multiply_by(1)
raise_to_power `^` iris %>% use_series("Sepal.Length") %>% raise_to_power(2)
multiply_by_matrix `%*%`
divide_by `/`
divide_by_int `%/%`
mod `%%`
is_in `%in%`
and `&`
or `|`
equals `==`
is_greater_than `>`
is_weakly_greater_than `>=`
is_less_than `<`
is_weakly_less_than `<=`
not (`n'est pas`) `!`
set_colnames `colnames<-` iris %>% set_colnames(c('a','b','c','d'....))
set_rownames `rownames<-` iris %>% set_rownames(c('a','b','c','d'....))
set_names `names<-`
在文档里面解释了常用的几种函数和方法,具体的内容大家可以参照如下链接:
Abstractcran.r-project.org如果对有些函数还是不知道怎么使用的话,强烈建议大家去R里面用一些示例数据去运行一下,这样对于R数据包有更多的认识。
最后说一下我正在做的一个GitHub项目-Road2R,是包含了所有我使用过的包和资料和博客的一个集合,我会不断完善,同时也希望大家可以多多pull requests。
Ronlee12355/Road2Rgithub.com