我必须在大型矩阵的各列之间运行类似的代码。

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/

10-12 20:39