强大与奇葩并存的pipeR——R中的管道

在COS上见到的一个新的R包

install pipeR:首先需要安装devtools

install.package(devtools)

require(devtools)

install_github(“pipeR”,“renkun-ken”)

require(pipeR)
rnorm(10000,mean=10,sd=1) %>%
 sample(size=100,replace=FALSE) %>%
 abs %>%
 log %>%
 diff %>%
 plot(col="red",type="l")

 

%>%起到管道的作用,也是这是这个包叫pipeR的原因? 不过恐怖的还不止是这个%>%,还有%>>%和%|>%,貌似牛人的包都有这种趋势,比如H大人的包里的加号。。。

作者的说明:pipeR v0.2版本中使用了三种符号(%>%,%>>%,%|>%),且功能上保持独立性,其中的设计原则是

  1. %>% 只管把前面的结果输送到下一个「函数」的第一个参数(因此后面可以是plot或者plot(col=“red”))
  2. %>>% 只管把前面的结果输送到下一个「表达式」中的.符号中(因此后面可以是一个函数表达式plot(.),或者plot(.,col=“red"),或者是.$a
  3. %|>% 只管把前面的结果根据下面指定的 lambda expression 来输送并且计算,因此后面必须是 (符号x -> 关于符号x的表达式) ,例如 (a -> plot(a,col="red”)) 这样,前面的结果就放在符号a中,然后计算plot(a,col=“red”)。如果a是个data.frame或者list,那么也可以是 (a -> a$xyz) 来提取 a中的元素。
上面的设计原则就要求三个符号的功能很清晰,几乎没有重叠,因此使用时需要弄清楚自己在用什么形式的piping,据此来选择使用的符号。
require(pipeR)
rnorm(100000,mean=10,sd=1) %>>%
 sample(.,size=length(.)0.2,replace=FALSE) %>%
 abs %>%
 log %>%
 diff %>>%
 plot(.,col="red",type="l",main=sprintf("length: %d",length(.)))
这里需要注意的是,使用%|>%的时候,后面应该是一个公式,而且是需要有括号界定,最重要的是,那个赋值箭头,是个右箭头,有被这个坑陷害过的孩子自觉举手。。。 对于R这种奇葩语言来说,不规范的定义绝对是阻止它应用的巨大障碍,大部分人只能是R User,而不是R Programer
require(pipeR)
rnorm(100000,mean=10,sd=1) %>>%
 sample(.,size=length(.)0.2,replace=FALSE) %>%
 abs %>%
 log %|>%
 (a -> diff(a)) %|>%
 (a -> plot(a,col="red",type="l")) 
 

发表评论

电子邮件地址不会被公开。 必填项已用*标注