前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >45. R编程(七:向量类型详解2)

45. R编程(七:向量类型详解2)

作者头像
北野茶缸子
发布2021-12-17 09:09:51
3420
发布2021-12-17 09:09:51
举报
文章被收录于专栏:北野茶缸子的专栏

1. 因为向量化,我选择R

image.png

我们的所有操作,都可以对向量的每一个元素执行。

同样的操作也可以用来取子集:

  • 一些使用的注意事项

一般来说,c() 是创建向量的语法,但R 也提供了一些例外:可不要因为它们养成坏习惯了哦。

2. 尽可能的向量化

我觉得下面的内容讲的更全:https://www.yuque.com/mugpeng/rr/01r-de-bian-cheng-xiao-lu

这里提一下Vectorize函数,可以将标量(接受单一参数的)函数转换为向量化形式:

代码语言:javascript
复制
if_else_statement <- function(vec_element) {
  if(vec_element == "Fire") {
    vec_element = "hot"
  } else {
    vec_element = "cold"
  }
  return(vec_element)
}
vectorized_if_else <- base::Vectorize(if_else_statement)

test001 <- c(rep("Fire", 100000), rep("Ice", 200000))

system.time(sapply(test001, if_else_statement))
system.time(vectorized_if_else(test001))
system.time(ifelse(test001 == "Fire", "hot", "cold"))

这里顺便再比较了另外两种向量化操作的方式:

代码语言:javascript
复制
> system.time(sapply(test001, if_else_statement))
 用户  系统  流逝 
0.471 0.036 0.669 
> system.time(vectorized_if_else(test001))
 用户  系统  流逝 
0.434 0.020 0.572 
> system.time(ifelse(test001 == "Fire", "hot", "cold"))
 用户  系统  流逝 
0.070 0.005 0.086 

这里有人还做了一张图:https://thatdatatho.com/vectorization-r-purrr/#:~:text=base%3A%3AVectorize%20%28%29%20converts%20a%20scalar%20function%20to%20a,vectorize%20functions%20would%20be%20with%20the%20purrr%20package.

可见还是尽量不要用Vectorize 做向量化操作呀。

3. 非向量化的情况

  • 输入为上一次输出

但其实有的如cumsum cumprod 等也考虑到了一些基本的运算。

  • 应对策略

尽量避免循环和嵌套次数。

4. 过度向量化问题

  • apply 的本质

我竟然一直喜爱的apply 其实是:

★A common reflex is to use a function in the apply family. This is not vectorization, it is loop-hiding. The apply function has a for loop in its definition.”

image.png

  • 内存的消耗

所以本质还是空间与时间的tradeoff。

  • 是否需要优化我的代码

当然了。

但如果,花两小时时间将lapply 修改为doLapply 就为了提高脚本0.1s 的速度,我劝你还不如打两把游戏。

5. 记住这句话

image.png

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 北野茶缸子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 因为向量化,我选择R
  • 2. 尽可能的向量化
  • 3. 非向量化的情况
  • 4. 过度向量化问题
  • 5. 记住这句话
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档