4

大規模な ffdf オブジェクトのサブセットを実行していますが、subset.ffを使用すると多数の NA が生成されることに気付きました。ffwhichを使用して別の方法を試してみましたが、結果ははるかに高速で、NA は生成されません。ここに私のテストがあります:

library(ffbase)
# deals is the ffdf I would like to subset
unique(deals$COMMODITY)
ff (open) integer length=7 (7) levels: CASH CO2 COAL ELEC GAS GCERT OIL
  [1]   [2]   [3]   [4]   [5]   [6]   [7] 
CASH  CO2   COAL  ELEC  GAS   GCERT OIL   

# Using subset.ff
started.at=proc.time()
deals0 <- subset.ff(deals,deals$COMMODITY %in% c("CASH","COAL","CO2","ELEC","GCERT"))
cat("Finished in",timetaken(started.at),"\n")
Finished in 12.640sec
# NAs are generated
unique(deals0$COMMODITY)
ff (open) integer length=8 (8) levels: CASH CO2 COAL ELEC GAS GCERT OIL <NA>
  [1]   [2]   [3]   [4]   [5]   [6]   [7]   [8] 
CASH  CO2   COAL  ELEC  GAS   GCERT OIL   NA    

# Subset using ffwhich
started.at=proc.time()
idx <- ffwhich(deals,COMMODITY %in% c("CASH","COAL","CO2","ELEC","GCERT"))
deals1 <- deals[idx,]
cat("Finished in",timetaken(started.at),"\n")
Finished in 3.130sec
# No NAs are generated
unique(deals1$COMMODITY)
ff (open) integer length=7 (7) levels: CASH CO2 COAL ELEC GAS GCERT OIL
  [1]   [2]   [3]   [4]   [5]   [6]   [7] 
CASH  CO2   COAL  ELEC  GAS   GCERT OIL   

なぜこれが起こっているのですか?

4

1 に答える 1

3

subset.ffおそらく[あなたの基準を使用していますが、!is.na(.)句は含まれていません。"[" のデフォルトは、基準ベクトルに対して TRUE または NA のいずれかであるアイテムを返すことです。通常のサブセット関数は!is.na(.)句を追加しますが、おそらく ffbase の作成者はそれを回避できませんでした。

于 2012-11-23T16:33:02.447 に答える