由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - 问个R里面avoid for loop的问题(sapply,lapply...)
相关主题
【欢迎进来讨论】for loop in RHow can I loop through a list of strings as variables in a
问个R的问题R一问
R问题请教。今天又“R”了 -- 感想和请教。
如何把model fitting statistics 读出来(R)[合集] 请问如何看到R的source code?
How can I do this in R?请问R里apply和sapply有什么区别
问R和C的循环语句怎样用apply对多种endpoint构建linear model
求问一个R apply 函数的问题Dashagen请进
R program helpR 两个大矩阵相乘,太慢怎么办呢
相关话题的讨论汇总
话题: lapply话题: sapply话题: loop话题: 10000话题: elapsed
进入Statistics版参与讨论
1 (共1页)
y*******y
发帖数: 163
1
之前看到过很多次说R里面for loop非常的不efficient, 很多人建议用apply,sapply
,lapply...
可是我最近做的一个simulation看来好像不是这样的, 用两个for loop (1000*1000)
写的程序运行了5个小时, 每个循环都是用lm fit model. 改成sapply和replicate以后
只提高了两三分钟...
有大牛给解答一下吗?多谢
z**k
发帖数: 378
2
我猜想大家说的R中loop不够快是因为大量的dynamic memory allocation,就算是用C/
C++写,
malloc和new用多了速度也上不去。
至于你的问题,我怀疑你的code大量时间都被用在fit lm上了,你应该把程序分开,time一下
1000**2次lm的耗时和其余code的耗时,如果真的是因为lm,那你用再怎么改进code也没办法。

sapply

【在 y*******y 的大作中提到】
: 之前看到过很多次说R里面for loop非常的不efficient, 很多人建议用apply,sapply
: ,lapply...
: 可是我最近做的一个simulation看来好像不是这样的, 用两个for loop (1000*1000)
: 写的程序运行了5个小时, 每个循环都是用lm fit model. 改成sapply和replicate以后
: 只提高了两三分钟...
: 有大牛给解答一下吗?多谢

z**k
发帖数: 378
3
> system.time({
+ x <- 1
+ for (i in 1:10000)
+ x[i] <- i
+ })
user system elapsed
0.36 0.00 0.36
>
>
> system.time({
+ x <- numeric(10000)
+ for (i in 1:10000)
+ x[i] <- i
+ })
user system elapsed
0.03 0.00 0.03
>
s*****n
发帖数: 2174
4
这些apply的overhead cost比较高, 所以对于循环体简单的loop, 未必会比for loop快
, 很多时候更慢, 比如:
> system.time(for (i in 1:100000) {1+1})
[1] 0.11 0.00 0.11 NA NA
> system.time(lapply(1:100000, function(i) {1+1}))
[1] 0.18 0.00 0.19 NA NA
如果仅仅是用apply来代替循环, 意义可能不是很大. 大多数apply都是用于某种直接的
计算, 很方便.
在几个apply当中, lapply是最基本的, sapply, tapply, apply本质上都是lapply的包
装, 大多数时候lapply稍快一些, 但是另外几个往往看上去更简洁. 比如:
> data <- data.frame(
+ id = rep(1:1000, each = 1000),
+ value = rnorm(1000 * 1000)
+ )
>
> system.time(unlist(lapply(spl
y*******y
发帖数: 163
5
啊,多谢ls的两位,版上大牛真多,以后要多多来学习
g********r
发帖数: 8017
6
每个循环内部时间太长。如果多核,用foreach()比较划算。

sapply

【在 y*******y 的大作中提到】
: 之前看到过很多次说R里面for loop非常的不efficient, 很多人建议用apply,sapply
: ,lapply...
: 可是我最近做的一个simulation看来好像不是这样的, 用两个for loop (1000*1000)
: 写的程序运行了5个小时, 每个循环都是用lm fit model. 改成sapply和replicate以后
: 只提高了两三分钟...
: 有大牛给解答一下吗?多谢

s*r
发帖数: 2757
7
foreach已经可以利用多核啦?

【在 g********r 的大作中提到】
: 每个循环内部时间太长。如果多核,用foreach()比较划算。
:
: sapply

g********r
发帖数: 8017
8
当然了。比用单核快多了。有时候受到内存带宽的限制。直接当for loop效果不好,要
自己把工作分成几份,减少各个进程和主进程的交流。

【在 s*r 的大作中提到】
: foreach已经可以利用多核啦?
1 (共1页)
进入Statistics版参与讨论
相关主题
R 两个大矩阵相乘,太慢怎么办呢How can I do this in R?
请教:如何能加速R codes 运行?问R和C的循环语句
这个R LOOP错在那里了求问一个R apply 函数的问题
大牛指点下面的R Code 怎么用Loop来实现R program help
【欢迎进来讨论】for loop in RHow can I loop through a list of strings as variables in a
问个R的问题R一问
R问题请教。今天又“R”了 -- 感想和请教。
如何把model fitting statistics 读出来(R)[合集] 请问如何看到R的source code?
相关话题的讨论汇总
话题: lapply话题: sapply话题: loop话题: 10000话题: elapsed