楼主: jeffery_gr
2071 2

[问答] 关于apply函数的应用的小问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

82%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
298 点
帖子
13
精华
0
在线时间
44 小时
注册时间
2015-7-24
最后登录
2020-7-19

楼主
jeffery_gr 学生认证  发表于 2015-11-11 17:02:52 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
cp是一个2*n的矩阵,treecut是一个大矩阵groupfinding(m,n)是一个输入参数为正整数的函数,返回值是一个整数(用在后面的程序里定位向量内的元素):
groupfinding <- function(m,n){
    return(2205-max(which(treecut[m,]==treecut[n,])))
}


现在需要将cp的每一行的两个元素作为groupfinding的两个输入参数进行运行,我知道这可以用for循环来实现:
for(n in 1:(length(cp)/2)){
    for(n in 1:(length(cp)/2)){
        m<-cp[n,1];
        n<-cp[n,2];
        Haddingup<-Haddingup+HC$height[groupfinding2(m,n)];
    }


其中Haddingup的初始值是0
但是for循环太慢了,有没有什么方法可以用apply来代替for循环?

二维码

扫码加我 拉你入群

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

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

关键词:apply函数 apply appl App 小问题 apply函数

沙发
万人往LVR 在职认证  发表于 2015-11-12 12:36:20
  1. Haddingup <- 0
  2. HaddingPlus <- function(i){
  3.     Haddingup <<- Haddingup+HC$height[groupfinding(cp[i,1],cp[i,2])]
  4. }
  5. sapply(1:(length(cp)/2),HaddingPlus)
复制代码
不知道你代码里的groupfinding2是什么东西
"<<-"能在函数里给全局变量赋值

藤椅
aspenroad 发表于 2015-11-12 21:40:20
把你的groupfinding函数改成矢量形式,然后apply就可以了。可以看看下面的例子。不过我觉得速度应该差不多

  1. mat <- matrix(rnorm(20000), ncol = 2)
  2. compute2 <- function(vec) {
  3.     return(vec[1]^2 + 2*vec[2] + vec[1]*vec[2])
  4. }
  5. out <- apply(mat, 1, compute2)
  6. sum(out)
复制代码

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

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