R 应用的更快类型安全版本(即多变量vapply)
R 应用的更快类型安全版本(即多变量vapply),r,apply,lapply,R,Apply,Lapply,jsonlite中的一个主要性能瓶颈是apply,因此我想知道是否有更有效的替代方法可以在矩阵的行或列上应用函数 对于一维结构,vapply通常比lappy或sapply快得多,因为它可以在开始时分配输出空间,而不是试图简化最后的输出列表: > x <- runif(5e6) > system.time(y1 <- sapply(x, sqrt)) user system elapsed 7.231 0.142 7.370 > system.
jsonlite
中的一个主要性能瓶颈是apply,因此我想知道是否有更有效的替代方法可以在矩阵的行或列上应用函数
对于一维结构,vapply
通常比lappy
或sapply
快得多,因为它可以在开始时分配输出空间,而不是试图简化最后的输出列表:
> 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
这是一个简单的应用
的例子。请参阅?colSums
,了解一些为满足您的需要而优化的简便函数。您是否有一些特定瓶颈的例子?@hadley:大概您也希望避免使用作为.matrix()
如果输入是数据帧,则输入矩阵已经是字符矩阵(每个值都是json元素)。Apply用于创建json记录:
#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))})