forループは非常に非効率的な方法です。何Psidomを
Unit: milliseconds
min lq mean median uq max neval
1.306957 1.329337 1.400435 1.350478 1.378751 2.45866 100
と使用:で
gifts = seq(as.Date("1910/1/1"), as.Date("1930/1/1"), "years")
Date_3 = as.Date("1921-01-01")
microbenchmark({
a = vector()
for (i in gifts) {
if ((!is.na(gifts[i])) & (gifts[i] < Date_3)) {
a = c(a, gifts[i])
}
}
})
結果:マイクロベンチマークを使用して
na.omit(gifts[gifts < Date_3])
単純な比較:コメントにPsidomで指摘したように、あなたはあなたが欲しいものを達成することができます提案:
microbenchmark(
na.omit(gifts[gifts < Date_3])
)
Unit: microseconds
min lq mean median uq max neval
14.674 15.6745 16.99335 16.026 16.512 67.95 100
平均時間を比較すると、2番目のアプローチは約82倍高速です。 forループ内のベクトルに追加するのは、通常は悪い考えです。実際に行う必要がある場合は、常に慎重に考える必要があります。
forループは必要ありません。 'na.omit(プレゼント(gift
Psidom
ありがとう、それは完璧に動作します! ;) – ClS