更快的类型安全版本的应用(即多变量vapply)

时间:2014-09-02 15:32:04

标签: r apply lapply

jsonlite中的一个主要性能瓶颈证明是适用的,所以我想知道是否有更有效的替代方法在矩阵的行或列上应用函数。

对于一维结构,vapply通常比lapplysapply快得多,因为它可以在开始时分配输出空间,而不是试图简化输出列表。端:

> x <- runif(5e6)
> system.time(y1 <- sapply(x, sqrt))
   user  system elapsed 
  7.231   0.142   7.370 
> system.time(y2 <- vapply(x, sqrt, numeric(1)))
   user  system elapsed 
  1.314   0.095   1.410

但是vapply不适用于矩阵结构。 apply家族是否有类似的功能?目前,apply的输出类型取决于FUN,例如:

#returns vector
apply(volcano, 1, mean)

#returns matrix
apply(volcano, 1, fivenum)

#returns list
apply(volcano, 1, function(x){list(mean=mean(x), sd=sd(x))})

script有一个apply正在运行的简单示例。

0 个答案:

没有答案