R语言中%>%的含义是什么
> library(plyr)
> library(dplyr)
> library(tidyr)
> anscombe_tidy <- anscombe %>%
+ mutate(observation = seq_len(n())) %>%
+ gather(key, value, -observation) %>%
+ separate(key, c("variable", "set"), 1, convert = TRUE) %>%
+ mutate(set = c("I", "II", "III", "IV")[set]) %>%
+ spread(variable, value)
代码中的%>%含义是什么? 展开
就是把左件的值发送给右件的表达式,并作为右件表达式函数的第一个参数,就是管道函数。
例如:
anscombe_tidy <- anscombe %>%mutate(observation = seq_len(n()))
以上代码等价于:
anscombe_tidy=mutate(anscombe,observation = seq_len(n()))
扩展资料:
1、管道函数的作用
%>%来自dplyr包的管道函数,其作用是将前一步的结果直接传参给下一步的函数,从而省略了中间的赋值步骤,可以大量减少内存中的对象,节省内存。
符号%>%,这是管道操作,其意思是将%>%左边的对象传递给右边的函数,作为第一个选项的设置(或剩下唯一一个选项的设置)
2、管道函数的语法
在普通的函数中,使用dbms_output输出的信息,需要在服务器执行完整个函数后一次性的返回给客户端。如果需要在客户端实时的输出函数执行过程中的一些信息,在oracle9i以后可以使用管道函数(pipeline function)。
关键字PIPELINED表明这是一个oracle管道函数,oracle管道函数的返回值类型必须为集合,在函数中,PIPE ROW语句被用来返回该集合的单个元素,函数以一个空的RETURN 语句结束,以表明它已经完成。
例如:
create or replace type MsgType as table of varchar2(4000);
/
create or replace function f_pipeline_test return MsgType
PIPELINED as
begin
for i in 1 .. 10 loop
pipe row('Iteration ' || i || ' at ' || systimestamp);
sys.dbms_lock.sleep(1);
end loop;
pipe row('All done!');
return;
end;
/
就是把左件的值发送给右件的表达式,并作为右件表达式函数的第一个参数。
anscombe_tidy <- anscombe %>%mutate(observation = seq_len(n()))
以上代码等价于
anscombe_tidy=mutate(anscombe,observation = seq_len(n()))
%>%来自dplyr包的管道函数,其作用是将前一步的结果直接传参给下一步的函数,从而省略了中间的赋值步骤,可以大量减少内存中的对象,节省内存。
扩展资料:
有关管道函数的例子:
library(data.table)library(tidyr)#
先虚构一数据框
set.seed(1)date <- as.
Date('2016-11-01') + 0:14
hour <- sample(1:24, 15)
min <- sample(1:60, 15)
second <- sample(1:60, 15)
event <- sample(letters, 15)
data <- data.table(date, hour, min, second, event)
head(data)[0:2]
## date hour min second event
## 1: 2016-11-01 7 30 29 u
## 2: 2016-11-02 9 43 36 a
typeof(data)
## [1] "list"
把date,hour,min和second列合并为新列datetime# R中的日期时间格式为"Year-Month-Day-Hour:Min:Second"
dataNew <- data %>%unite(datehour, date, hour, sep = ' ') %>%unite(datetime, datehour, min, second, sep = ':')dataNew
## datetime event
## 1: 2016-11-01 7:30:29 u
## 2: 2016-11-02 9:43:36 a
## 3: 2016-11-03 13:58:60 l
## 4: 2016-11-04 20:22:11 q
## 5: 2016-11-05 5:44:47 p
## 6: 2016-11-06 18:52:37 k
## 7: 2016-11-07 19:12:43 r
## 8: 2016-11-08 12:35:6 i
## 9: 2016-11-09 11:7:38 e
## 10: 2016-11-10 1:14:21 b
## 11: 2016-11-11 3:20:42 w
## 12: 2016-11-12 14:1:32 t
## 13: 2016-11-13 23:19:52 h
## 14: 2016-11-14 21:41:26 s
## 15: 2016-11-15 8:16:25 o
2015-03-17
anscombe_tidy <- anscombe %>%mutate(observation = seq_len(n()))
以上代码等价于
anscombe_tidy=mutate(anscombe,observation = seq_len(n()))
管道函数还是很好哒,好处我就不说了^.^ 自己体会
2015-01-23
小写的c() 表示一个向量,c(1,1,2,2,3,3)就是一个有6个元素的向量
后面的2:3 冒号就是表示步进1,从2到3的向量,所以2:3其实就等于c(2,3)
如果是1:5 那么就是c(1,2,3,4,5)
最后再讨论一下R的计算顺序 c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10 ) %% 2:3
也就是 c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10 ) %% c(2,3)
那么首先第一个1对2取余数等于1,然后第二个1对3取余数等于1,第三个2对2取余数等于0,第四个2对3取余数等于2 .....一直这么循环下去直到最后两个10分别对2和3取余数,为0和1~