楼主: 531621784
14980 15

[问答] 运用apply函数时fun中包含两个参数怎么办 [推广有奖]

  • 0关注
  • 0粉丝

本科生

59%

还不是VIP/贵宾

-

威望
0
论坛币
143 个
通用积分
2.0001
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
264 点
帖子
40
精华
0
在线时间
137 小时
注册时间
2015-1-23
最后登录
2020-6-1

楼主
531621784 发表于 2016-2-26 20:41:01 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我们知道:apply(X, MARGIN, FUN, ...)
那么,如果FUN函数需要两个参数怎么办?
(把另一个参数写在FUN后面不行……)
二维码

扫码加我 拉你入群

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

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

关键词:apply函数 apply appl Fun App

沙发
jiangbeilu 学生认证  发表于 2016-2-26 21:11:21
给你一个例子,可以参考一下就知道了。
  1. aa <- matrix(1:9,3)
  2. myfun <- function(x,y){
  3. return(x+y)
  4. }
  5. apply(aa,1,myfun,y=2)
复制代码
已有 2 人评分经验 学术水平 热心指数 信用等级 收起 理由
henchli + 1 + 1 + 1 观点有启发
李会超 + 60 精彩帖子

总评分: 经验 + 60  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
531621784 发表于 2016-2-26 21:41:29
jiangbeilu 发表于 2016-2-26 21:11
给你一个例子,可以参考一下就知道了。
那如果y也是矩阵,比如
> aa <- matrix(1:9,3)
> myfun <- function(x,y){
+ return(x+y)
+ }
> apply(aa,1,myfun,y=bb<-matrix(11:19,3))
那结果好像就不是分别把aa[1,]和bb[1,],aa[2,]和bb[2,],aa[3,]和bb[3,]加起来了吧?
这时候  应该怎么办?

板凳
531621784 发表于 2016-2-26 21:44:57
jiangbeilu 发表于 2016-2-26 21:11
给你一个例子,可以参考一下就知道了。
那如果y也是矩阵,比如说,apply(aa,1,myfun,y=bb<-matrix(11:19,3)),好像就不太对了……

报纸
jiangbeilu 学生认证  发表于 2016-2-27 10:30:08
531621784 发表于 2016-2-26 21:44
那如果y也是矩阵,比如说,apply(aa,1,myfun,y=bb
y是一个向量啊,不能是矩阵。

地板
531621784 发表于 2016-2-27 12:21:05
jiangbeilu 发表于 2016-2-27 10:30
y是一个向量啊,不能是矩阵。
所以y也是矩阵就不能用apply了吗……

7
万人往LVR 在职认证  发表于 2016-2-27 13:24:07
再定义一个fun2放在fun里

8
cheetahfly 在职认证  发表于 2016-2-27 22:54:43
楼主你问得稀里糊涂,把别人都绕进去了。

首先,apply() 中的fun带多参数一点问题都没有。例如:
> a <- matrix(c(1:9, rep(c(NA, 100), each = 3)), nrow = 3)
> a
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    4    7   NA  100
[2,]    2    5    8   NA  100
[3,]    3    6    9   NA  100
> apply(a, 1, mean)
[1] NA NA NA
> apply(a, 1, mean, na.rm = T)
[1] 28.00 28.75 29.50
> apply(a, 1, mean, na.rm = T, trim = 0.30)
[1] 5.5 6.5 7.5

其次,apply(aa,1,myfun,y=bb<-matrix(11:19,3)),这个程序肯定返回的是aa[1,]+bb, aa[2,]+bb, aa[3,]+bb,这结果没有一点不对,因为apply()的任务就是将array按维度“切片”然后分别运行函数,以回避loop循环,这是这个函数设计的初衷。你要的效果直接用aa+bb就可以实现啦。

第三,不清楚你真正想要达到的目的是什么,可能是你想要找的是mapply()这一类函数吧。
已有 1 人评分论坛币 学术水平 热心指数 收起 理由
crystal8832 + 10 + 1 + 1 热心帮助其他会员

总评分: 论坛币 + 10  学术水平 + 1  热心指数 + 1   查看全部评分

9
531621784 发表于 2016-3-2 18:47:23
cheetahfly 发表于 2016-2-27 22:54
楼主你问得稀里糊涂,把别人都绕进去了。

首先,apply() 中的fun带多参数一点问题都没有。例如:
我确实是需要apply带多个参数……但是我另一个参数也是一个矩阵,这样的话第二个参数他就不能像前面的参数那样按行来运算啊……

10
cheetahfly 在职认证  发表于 2016-3-2 23:20:01
531621784 发表于 2016-3-2 18:47
我确实是需要apply带多个参数……但是我另一个参数也是一个矩阵,这样的话第二个参数他就不能像前面的参数 ...
把你的具体数据和要做的具体运算说清楚吧。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-6 12:11