统计211

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3193|回复: 0
打印 上一主题 下一主题

为R代码提速的2条小技巧

[复制链接]
跳转到指定楼层
1
发表于 2011-7-27 20:14:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、如果需要保存数据到向量或矩阵,首选方法是:新建一个向量或矩阵,然后为新建向量或矩阵赋值。备选方法是:通过连接当前向量或矩阵,以生成新的向量或矩阵。在数据量较少的情况下,上述两种方法没有明显区别,在遇到大量数据时,前者可以提高60倍效率。
小试验:
n <- 10^5
a <- NULL
#连接
system.time(for(i in 1:n){a <- c(a,1)})
#新建并赋值
b <- rep(0,n)
system.time(for(i in 1:n){b[i] <- 1})
前者耗时31.78秒,后者耗时0.44秒。

二、能避免使用圆括号的,尽量不要使用。
小试验:
f <- function(n){  for(i in 1:n){    x <- 1/(1+x)    }}

g <- function(n){    for(i in 1:n){    x <- (1/(1+x))    }}

h <- function(n){    for(i in 1:n){    x <- (1+x)^(-1)    }}

j <- function(n){    for(i in 1:n){    x <- {1/{1+x}}    }}

k <- function(n){    for(i in 1:n){    x <- 1/{1+x}    }}
x <- 1
system.time(f(10^6))
system.time(g(10^6))
system.time(h(10^6))
system.time(j(10^6))
system.time(k(10^6))
分别耗时:1.36、1.51、1.90、1.44、1.25。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


免责声明|关于我们|小黑屋|联系我们|赞助我们|统计211 ( 闽ICP备09019626号  

GMT+8, 2025-4-19 11:45 , Processed in 0.081553 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表