我必须在大型矩阵的各列之间运行类似的代码。
set.seed(1)
my_vector <- runif( 10000 )
my_sums <- NULL
for ( l in 1:length( my_vector ) ) {
current_result <- my_vector[ my_vector < runif( 1 ) ]
my_sums[l] <- sum( current_result )
}
head(my_sums)
# [1] 21.45613 2248.31463 2650.46104 62.82708 11.11391 86.21950
Sys.time
结果: user system elapsed
1.14 0.00 1.14
关于如何提高性能的任何想法?
最佳答案
基本R
中的Matt Dowle's excellent data.table approach
system.time({
set.seed(1)
my_vector <- runif(10000)
x <- runif(10000)
sorted <- sort(my_vector)
ind <- findInterval(x, sorted) + 1
my_sums <- c(0, cumsum(sorted))[ind]
})
# user system elapsed
# 0 0 0
head(my_sums)
#[1] 21.45613 2248.31463 2650.46104 62.82708 11.11391 86.21950
关于r - 如何修改代码以提高处理速度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37617125/