楼主: meishanjia1900
15503 8

[问答] 关于sapply的用法问题 [推广有奖]

  • 0关注
  • 12粉丝

副教授

44%

还不是VIP/贵宾

-

威望
0
论坛币
3138 个
通用积分
45.8507
学术水平
193 点
热心指数
203 点
信用等级
161 点
经验
25351 点
帖子
703
精华
0
在线时间
988 小时
注册时间
2009-5-17
最后登录
2025-10-12

楼主
meishanjia1900 发表于 2014-10-23 20:11:53 来自手机 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
fun1 = function(x2,x1) rep(x1[1],x2[1])

v = NULL; for (i in 1:5) v = c(v,fun1(3,i))

结果为: 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5

如果抛弃for语句,改用sapply与fun1得到相同结果,那该怎么写?(前提:不能改写fun1函数,不能调换x2与x1在参数列表中的位置)
二维码

扫码加我 拉你入群

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

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

关键词:apply appl App SAP function function

回帖推荐

yywan0913 发表于6楼  查看完整内容

c(sapply(1:5,fun1,x2=3))

沙发
小朝 发表于 2014-10-23 21:53:44
  1. fun1<-function(x)
  2. rep(x,each=3)
  3. fun1(1:5)
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
meishanjia1900 + 1 + 1 + 1 热心帮助其他会员

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

藤椅
meishanjia1900 发表于 2014-10-23 22:13:36 来自手机
小朝 发表于 2014-10-23 21:53
误会了,你的方法是另写函数,或直接用rep。我想知道在只能用sapply 及fun1(不得改写)的情况下,如何写程序。其实我想知道的问题可以换一种表述:sapply可以对f(x,y)中的x位进行批量化的"广播",但如果我想针对y进行"广播"呢?难道只能定义f2 = function(y,x) f(x,y),之后再用sapply(…, f2, 某固定的x值)这种方法么?如果直接用sapply与f()的组合,可以实现对y位的广播么?

板凳
calsunny 发表于 2014-10-23 22:22:28

as.vector(sapply(1:5, function(x) rep(x,each=3)))
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
meishanjia1900 + 1 + 1 + 1 热心帮助其他会员

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

报纸
meishanjia1900 发表于 2014-10-24 07:28:40 来自手机
calsunny 发表于 2014-10-23 22:22
as.vector(sapply(1:5, function(x) rep(x,each=3)))
误会了,再次强调不要另写函数。只能用fun1,这种情况下能用sapply解决么?我只想知道这个。

rep的用法,其中each参数的用法,我是了解的。此处的fun1仅是个例子函数,重要的不是用其他方法重新实现fun1的具体功能,关键是sapply能否直接实现对函数f(x,y)中y位置的批量"广播"。这个意图我在楼上也已经说明。

地板
yywan0913 在职认证  发表于 2014-10-24 08:46:40
meishanjia1900 发表于 2014-10-24 07:28
误会了,再次强调不要另写函数。只能用fun1,这种情况下能用sapply解决么?我只想知道这个。

rep的用法, ...
c(sapply(1:5,fun1,x2=3))
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
meishanjia1900 + 5 + 1 + 1 + 1 热心帮助其他会员

总评分: 论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

7
meishanjia1900 发表于 2014-10-24 11:21:02 来自手机
yywan0913 发表于 2014-10-24 08:46
c(sapply(1:5,fun1,x2=3))
谢谢,非常完美,帮大忙了。我只尝试过sapply(1:5,fun1,3), sapply(x1 = 1:5, fun1, x2 = 3),前者得到错误答案,后者直接报错。我还真没试过你这种写法。是我脑子太死板了。同时也感谢calsunny及小朝,谢谢两位参与解答。

8
yywan0913 在职认证  发表于 2014-10-24 15:06:46
meishanjia1900 发表于 2014-10-24 11:21
谢谢,非常完美,帮大忙了。我只尝试过sapply(1:5,fun1,3), sapply(x1 = 1:5, fun1, x2 = 3),前者得到错 ...
成功只有一步之遥了

9
jmpamao 发表于 2014-10-24 18:12:05
meishanjia1900 发表于 2014-10-24 11:21
谢谢,非常完美,帮大忙了。我只尝试过sapply(1:5,fun1,3), sapply(x1 = 1:5, fun1, x2 = 3),前者得到错 ...
参数名称的问题
是没有清晰了解 构建函数内参数的表述

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 16:55