美文网首页
R | 警惕R中的for循环

R | 警惕R中的for循环

作者: 尘世中一个迷途小书僮 | 来源:发表于2019-05-26 10:54 被阅读0次

对于我这种从python中迁移过来的R learner,很容易就会使用for循环处理批量的任务。但是R语言有别于其他的编程语言,它运行for循环处理数据的效果往往难以达到预想中的情况,下面用以下几个例子实测R语言中的循环到底好不好用。

  • 使用 for 循环取一千万个数值的绝对值,并使用system.time函数测量函数运行的时间。
#首先生成一个包含正数和负数的长向量,总共有一千万个数值
long <- rep(c(1,-1), 5000000)

abs_loop <- function(x){
  for(i in 1:length(x)){
    if(x[i] < 0){
      x[i] <- -x[i]
    }
  }
  x
}


> system.time(abs_loop(long))
用户 系统 流逝 
1.35 0.01 1.43 
  • 再使用R中向量化的方式进行上述操作
abs_set <- function(x){
  negs <- x<0
  x[negs] <- x[negs]*-1
  x
}


> system.time(abs_set(long))
用户 系统 流逝 
0.22 0.06 0.28 

在使用了R中向量化编程的方式(逻辑判断、取子集、元素方式执行)后,速度提升了大约30倍

  • 最后,我们看看R中自带的取绝对值函数abs有多快
> system.time(abs(long))
用户 系统 流逝 
0.02 0.02 0.03 

R中的自带函数几乎是for循环速度运行的300倍!

所以R中很多basic的函数都是经过多次优化与调试的,在可能的情况下,应该尽量避免对其自带函数的修改。

最后的最后,通过以上例子的展示,我们应该发现了R语言的妙处在于逻辑判断、取子集、元素方式执行,这三种方法的合理运用可以大大提升代码速度。当然,正如题目所言我们应当警惕for循环的使用,而不是摒弃它,合理的使用for循环也有助于代码的运行。

完。

相关文章

  • R | 警惕R中的for循环

    对于我这种从python中迁移过来的R learner,很容易就会使用for循环处理批量的任务。但是R语言有别于其...

  • linux中批量解压.gz压缩文件

    利用for循环,注意shell中for循环写法与R不同

  • R中常用知识汇总

    1、R中的错误识别2、R中的循环控制3、xpath及爬虫总结参考链接:try的使用:https://blog.cs...

  • R语言for循环练习

    for循环在R中很常见也很重要,虽然很简单,但是一定要理解其中的思想。以R语言初级作业第9题为例。加数据加载到R中...

  • R语言与生信应用22-R语法-apply函数家族

    命令行的循环 循环对于编程十分重要,但在R交互式命令行中编写循环结构不太方便,R提供了一系列函数来简化循环操作。 ...

  • R purrr_ for循环与函数式编程

    for 循环在R中不像其他语言中那么重要,因为R是一门函数式编程的语言。这意味着可以先将for 循环封装在函数里面...

  • 第一章1.1 循环左移 2019-01-27

    题:设将n个整数存放在一个数组R中,设计算法实现R中的序列循环左移P个位置 思路:1、将R中前P个元素逆置 2...

  • R语言for循环①

    for循环是一种重复控制结构,可以让您有效地编写一个需要执行特定次数的循环。 示例: 它产生如下结果: 下标访问 ...

  • R语言 循环

    可能有一种情况,当你需要执行一段代码几次。 通常,顺序执行语句。 首先执行函数中的第一个语句,然后执行第二个语句,...

  • R语言:循环

    这里介绍五种R语言的循环语法,分别是: for if repeat which while for if repe...

网友评论

      本文标题:R | 警惕R中的for循环

      本文链接:https://www.haomeiwen.com/subject/exdxtctx.html