繁体   English   中英

最有效的子集化向量方法

[英]Most efficient way of subsetting vectors

我需要计算向量子集的均值和方差。 x为向量, y为观察是否在子集中的指示符。 哪个更有效:

sub.mean <- mean(x[y])
sub.var  <-  var(x[y])

要么

sub      <- x[y]
sub.mean <- mean(sub)
sub.var  <-  var(sub)
sub      <- NULL

第一种方法没有明确地创建新对象; 但是对meanvar的调用是否隐含地执行了这个操作? 或者它们是否存储了原始矢量?

第二个更快,因为它不必两次进行子集化吗?

我关注速度和大数据集的内存管理。

对长度为10M的向量进行基准测试表明(在我的机器上)后一种方法更快:

f1 = function(x, y) {
    sub.mean <- mean(x[y])
    sub.var  <-  var(x[y])
}

f2 = function(x, y) {
    sub      <- x[y]
    sub.mean <- mean(sub)
    sub.var  <-  var(sub)
    sub      <- NULL
}

x = rnorm(10000000)
y = rbinom(10000000, 1, .5)

print(system.time(f1(x, y)))
#   user  system elapsed 
#  0.403   0.037   0.440 
print(system.time(f2(x, y)))
#   user  system elapsed 
#  0.233   0.002   0.235 

这不是surprising- mean(x[y]) 必须创建一个新的对象为mean功能作用,即使它不将其添加到本地命名空间。 因此, f1对于必须进行两次子集化的速度较慢(正如您所推测的那样)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM