Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 应用的更快类型安全版本(即多变量vapply)_R_Apply_Lapply - Fatal编程技术网

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))})