楼主: 童小军
20379 8

[问答] Reduce函数的用法?? [推广有奖]

  • 1关注
  • 4粉丝

博士生

20%

还不是VIP/贵宾

-

威望
0
论坛币
358 个
通用积分
11.8871
学术水平
32 点
热心指数
31 点
信用等级
19 点
经验
7155 点
帖子
200
精华
0
在线时间
213 小时
注册时间
2012-9-19
最后登录
2024-4-24

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
  1. Lst<-list(0)
  2. for (i in (1:5)){
  3. Lst[i]<-list(matrix(rep(i,8),nrow=2))

  4. }
  5. Reduce('+',Lst)
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:reduce edu red

沙发
qoiqpwqr 发表于 2013-9-16 04:21:12 |只看作者 |坛友微信交流群
就是把Lst里面的每一个矩阵加起来

使用道具

藤椅
童小军 发表于 2013-9-16 22:19:55 |只看作者 |坛友微信交流群
qoiqpwqr 发表于 2013-9-16 04:21
就是把Lst里面的每一个矩阵加起来
其实我想问的是Reduce函数的用法,help文件看不太懂,除了这个例子,还可以怎么用?

使用道具

板凳
ryusukekenji 发表于 2013-9-20 03:37:19 |只看作者 |坛友微信交流群
  1. df=data.frame(id=rep(1:5,each=5),matrix(runif(100),nc=4))
  2. #使用split分割数据帧
  3. df1=split(df,df$id)
  4. #一般merge只能合并两个列表,Reduce可合并超过两个列表
  5. df2=Reduce(function(x, y) merge(x, y, all = T), df1, accumulate = F)
复制代码

使用道具

报纸
lanyajia 发表于 2013-9-20 13:06:28 |只看作者 |坛友微信交流群
理解Reduce函数:它是将一个向量按相邻两个元素依次作二元函数运算,最后输出结果。
Reduce的基本参数两个,参数1是二元函数,参数2是运算向量

比如:a=c(12,25,3,8)
Reduce("+",a)
[1] 48

例子中:“+”是二元函数,a是向量,函数实际等价于下面算式
"+"("+"("+"(12,25),3),8)
[1] 48

如果二元函数选“-”
Reduce("-",a)
[1] -24

同样等价于下面算式
"-"("-"("-"(12,25),3),8)
[1] -24

以上计算都只输出最终结果,如果需要逐步计算结果,加上accumulate=T选项
> Reduce("+",a,accumulate=T)
[1] 12 37 40 48

计算顺序默认是按向量顺序从左向右,如果要从右向左计算,加上right=T选项
Reduce("-",a,right=T)
[1] -18

与下面算式等价
"-"(12,"-"(25,"-"(3,8)))
[1] -18

Reduce函数的应用可以有许多扩展,可用于矩阵,可使用自定义的二元函数等,产生复杂的功能组合。
已有 2 人评分经验 论坛币 收起 理由
dxystata + 20 + 20 精彩帖子
ltx5151 + 20 + 20 好的意见建议

总评分: 经验 + 40  论坛币 + 40   查看全部评分

使用道具

地板
qingtian3721 发表于 2013-9-24 15:36:53 |只看作者 |坛友微信交流群
lanyajia 发表于 2013-9-20 13:06
理解Reduce函数:它是将一个向量按相邻两个元素依次作二元函数运算,最后输出结果。
Reduce的基本参数两个 ...
刚看了下Mapreduce中的reduce函数,跟楼上所说的功能很相似,不知道是不是一样的,请教楼上!

使用道具

7
lanyajia 发表于 2013-9-24 21:20:43 |只看作者 |坛友微信交流群
mapReduce与前面说的Reduce是在功能完全不同,mapReduce提供了按分组变量运行指定函数的方式。

语法:
mapReduce(分组变量, 指定函数,data=数据框名)

这是实现分组统计的一种简便、直接的方式。特别是可以同时指定多个函数。


比如有一个数据框dt,包含三个变量,sex 性别,age 年龄,w 体重

> dt
   sex   age    w
1    m  27     45.6
2    f   25     55.9
3    m   40     49.0
4    f    28     59.5
5    m   38     53.5
6    f    32    48.9
7    m   36    45.9
8    f    26    53.4
9    m   32    48.4
10   f    31    54.2

按性别分组,计算统计指标:平均年龄,平均体重,年龄标准差,体重标准差

> mapReduce(sex,mean(age),mean(w),sd(age),sd(w),data=dt)

     [,1]     [,2]      [,3]            [,4]
f    28.4    54.38   3.049590    3.858368
m  34.6    48.48    5.176872   3.179151

函数返回所需要的结果矩阵。
这种分组统计也可以通过aggregate和sapply函数来实现。
不过根据mapReduce的帮助说明,这一函数可以实现并行计算,这对于大数据运算是很重要的,可能是其优点吧。

使用道具

8
dybwall1234 发表于 2013-9-27 14:37:37 |只看作者 |坛友微信交流群
不错,学习了

使用道具

9
pengrunze 发表于 2016-8-7 01:15:34 |只看作者 |坛友微信交流群
lanyajia 发表于 2013-9-24 21:20
mapReduce与前面说的Reduce是在功能完全不同,mapReduce提供了按分组变量运行指定函数的方式。

语法:
R里没找到mapReduce这个函数

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-2 00:27