为了账号安全,请及时绑定邮箱和手机立即绑定

加速R中的循环运算

加速R中的循环运算

潇湘沐 2019-06-14 17:11:15
加速R中的循环运算我在R中有一个很大的性能问题,我编写了一个函数,在data.frame对象。它只是将一个新列添加到data.frame积累一些东西。(简单操作)。这个data.frame大约有850 K行。我的电脑还在工作(现在大约10小时),我对运行时一无所知。dayloop2 <- function(temp){     for (i in 1:nrow(temp)){             temp[i,10] <- i        if (i > 1) {                          if ((temp[i,6] == temp[i-1,6]) & (temp[i,3] == temp[i-1,3])) {                  temp[i,10] <- temp[i,9] + temp[i-1,10]                                 } else {                 temp[i,10] <- temp[i,9]                                                 }         } else {             temp[i,10] <- temp[i,9]         }     }     names(temp)[names(temp) == "V10"] <- "Kumm."     return(temp)}有什么办法加快这个行动吗?
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

如果你用for循环,您很可能是在编码R,就好像它是C、Java或其他什么东西一样。正确矢量化的r代码非常快。

例如,以这两段简单的代码为例,按顺序生成一个包含10,000个整数的列表:

第一个代码示例是如何使用传统的编码范式编写循环代码。它需要28秒才能完成

system.time({
    a <- NULL
    for(i in 1:1e5)a[i] <- i})
   user  system elapsed 
  28.36    0.07   28.61

通过简单的预分配内存操作,您可以得到几乎100倍的改进:

system.time({
    a <- rep(1, 1e5)
    for(i in 1:1e5)a[i] <- i})

   user  system elapsed 
   0.30    0.00    0.29

但是使用基R向量操作使用冒号运算符:这一操作几乎是即时的:

system.time(a <- 1:1e5)

   user  system elapsed 
      0       0       0


查看完整回答
反对 回复 2019-06-14
  • 3 回答
  • 0 关注
  • 948 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信