a******e 发帖数: 119 | 1 前段时间受了不少R运算速度太慢的折磨。做了点research 知道了点皮毛,抛砖引玉,
大家讨论一下。
1、Vectorization
for (i in …)
{
for (j in …) { dframe <- func(dframe,i,j)
}
}
这样的结构对R来说是个disaster。可以考虑ecterization
e.g. Instead of explicit element-by-element loop for
(i in 1:N) { A[i] <- B[i] + C[i] }
invoke the implicit elem.-by-elem. Operation: A <- B + C
2、用apply instead of looping
这个似乎有争议,有的说apply不能提高R的速度。不过,至少apply可以让你的code看
上去更简洁
3、Functional programming:
exp1:Filter(f, x) – Returns the elements of x for which f is true
> x
[1] 78 20 98 21 37
> odd <- function(n) (n %% 2 == 1)
> Filter(odd, x)
[1] 21 27
exp2: Reduce(f,x) is a way to iterate over a list or vector, x, by
applying
a function to successive results of f.
● Iterative summation:
s <- x[1] + x[2]
for (i in 3:length(s)) s <- s + x[i]
● Done using Reduce:
f <- function(a,b) a + b
s <- Reduce(f, x)
??大家觉得这个reduce function 对做MCMC有帮助么 |
I*****a 发帖数: 5425 | 2 我感觉apply能提高不少速度。
某些apply不行,比如mapply就很慢,好像。
【在 a******e 的大作中提到】 : 前段时间受了不少R运算速度太慢的折磨。做了点research 知道了点皮毛,抛砖引玉, : 大家讨论一下。 : 1、Vectorization : for (i in …) : { : for (j in …) { dframe <- func(dframe,i,j) : } : } : 这样的结构对R来说是个disaster。可以考虑ecterization : e.g. Instead of explicit element-by-element loop for
|
D******n 发帖数: 2836 | 3 参见 26481
【在 a******e 的大作中提到】 : 前段时间受了不少R运算速度太慢的折磨。做了点research 知道了点皮毛,抛砖引玉, : 大家讨论一下。 : 1、Vectorization : for (i in …) : { : for (j in …) { dframe <- func(dframe,i,j) : } : } : 这样的结构对R来说是个disaster。可以考虑ecterization : e.g. Instead of explicit element-by-element loop for
|
t*****w 发帖数: 254 | 4 I don't think your suggestion is much helpful for a biostatistician who
mainly uses R code. Yes Vectorization is the strategy. |
a******r 发帖数: 706 | 5 Rcpp is another way to go, especially when programing the bottleneck
function. |
a******e 发帖数: 119 | 6 什么是26481?
【在 D******n 的大作中提到】 : 参见 26481
|
a******e 发帖数: 119 | 7 什么是26481?
【在 D******n 的大作中提到】 : 参见 26481
|
w********m 发帖数: 1137 | 8 大牛,求解释
【在 D******n 的大作中提到】 : 参见 26481
|
D******n 发帖数: 2836 | 9 第26481号文章
【在 a******e 的大作中提到】 : 什么是26481?
|
i**z 发帖数: 194 | 10 参照 R cookbook 里面有不少 tips.
另外, lapply 可能会快点, sapply 和 loop 其实差不多。
前段时间受了不少R运算速度太慢的折磨。做了点research 知道了点皮毛,抛砖引玉,
大家讨论一下。
1、Vectorization
for (i in …)
{
for (j in …) { dframe <- func(dframe,i,j)
}
}
这样的结构对R来说是个disaster。可以考虑ecterization
e.g. Instead of explicit element-by-element loop for
(i in 1:N) { A[i] <- B[i] + C[i] }
invoke the implicit elem.-by-elem. Operation: A <- B + C
2、用apply instead of looping
这个似乎有争议,有的说apply不能提高R的速度。不过,至少apply可以让你的code看
上去更简洁
3、Functional programming:
exp1:Filter(f, x) – Returns the elements of x for which f is true
> x
[1] 78 20 98 21 37
> odd <- function(n) (n %% 2 == 1)
> Filter(odd, x)
[1] 21 27
exp2: Reduce(f,x) is a way to iterate over a list or vector, x, by
applying
a function to successive results of f.
● Iterative summation:
s <- x[1] + x[2]
for (i in 3:length(s)) s <- s + x[i]
● Done using Reduce:
f <- function(a,b) a + b
s <- Reduce(f, x)
??大家觉得这个reduce function 对做MCMC有帮助么
【在 a******e 的大作中提到】 : 前段时间受了不少R运算速度太慢的折磨。做了点research 知道了点皮毛,抛砖引玉, : 大家讨论一下。 : 1、Vectorization : for (i in …) : { : for (j in …) { dframe <- func(dframe,i,j) : } : } : 这样的结构对R来说是个disaster。可以考虑ecterization : e.g. Instead of explicit element-by-element loop for
|
s*********e 发帖数: 1051 | |