簡體   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