回答:
を試して?max
みると、実際にはna.rm =
引数があり、デフォルトでに設定されていることがわかりますFALSE
。(それはを含む他の多くのRの機能のための一般的なデフォルトだsum()
、mean()
など)
設定na.rm=TRUE
はあなたが望んでいることだけを行います:
d <- c(1, 100, NA, 10)
max(d, na.rm=TRUE)
すべてのを削除する場合は、NA
代わりに次のイディオムを使用します。
d <- d[!is.na(d)]
最後の注意:他の機能(例えばtable()
、lm()
、およびsort()
)がNA
別の名前を使用します(とさまざまなオプションを提供します)関連引数を。したがってNA
、関数呼び出しで問題が発生する場合は、関数の引数間で組み込みのソリューションを確認することをお勧めします。通常はすでにそこにあることがわかりました。
max()
がどのように動作するかについてです(たとえば、を実行するときmax(c(NA, NA)
)。個人的には、その振る舞いは妥当だと思います。そのように構成されていて、次のようなことをしたときに期待どおりの結果が得られると思いますa <- c(NA, NA); b <- 1:4; max(c(max(a, na.rm = TRUE), max(b, na.rm = TRUE)))
NA
NA
sのベクトルからすべてのs を削除NA
すると、-∞ではなく空のベクトルが期待されます。
?max
にna.rm
設定できる追加のパラメーターがあることを示していますTRUE
。
それとは別に、本当にを削除したい場合はNA
、次のように使用します。
myvec[!is.na(myvec)]
na.omit
もデータフレームメソッドがあるため、より一般的です。
Rの初心者が元の質問に対する簡単な答えを求めている場合に備えて
ベクトルからNA値を削除するにはどうすればよいですか?
ここにあります:
foo
次のようなベクトルがあるとします。
foo = c(1:10, NA, 20:30)
実行length(foo)
すると22になります。
nona_foo = foo[!is.na(foo)]
length(nona_foo)
NA値が削除されているため、21です。
is.na(foo)
ブール行列を返すことを忘れないでください。したがってfoo
、この値の反対のインデックスを使用すると、NA以外のすべての要素が得られます。
私は2つのbase
アプローチを比較するクイックベンチマークを実行しましたが、それx[!is.na(x)]
よりも速いことがわかりましたna.omit
。ユーザーqwr
は私purrr::dicard
も試してみることを提案しました-これは非常に遅いことがわかりました(ただし、実装とテストについて喜んでコメントを取ります!)
microbenchmark::microbenchmark(
purrr::map(airquality,function(x) {x[!is.na(x)]}),
purrr::map(airquality,na.omit),
purrr::map(airquality, ~purrr::discard(.x, .p = is.na)),
times = 1e6)
Unit: microseconds
expr min lq mean median uq max neval cld
purrr::map(airquality, function(x) { x[!is.na(x)] }) 66.8 75.9 130.5643 86.2 131.80 541125.5 1e+06 a
purrr::map(airquality, na.omit) 95.7 107.4 185.5108 129.3 190.50 534795.5 1e+06 b
purrr::map(airquality, ~purrr::discard(.x, .p = is.na)) 3391.7 3648.6 5615.8965 4079.7 6486.45 1121975.4 1e+06 c
参考までに、x[!is.na(x)]
vs の元のテストはna.omit
次のとおりです。
microbenchmark::microbenchmark(
purrr::map(airquality,function(x) {x[!is.na(x)]}),
purrr::map(airquality,na.omit),
times = 1000000)
Unit: microseconds
expr min lq mean median uq max neval cld
map(airquality, function(x) { x[!is.na(x)] }) 53.0 56.6 86.48231 58.1 64.8 414195.2 1e+06 a
map(airquality, na.omit) 85.3 90.4 134.49964 92.5 104.9 348352.8 1e+06 b
purrr:discard
-Inf
しd
、すべてのNAの1つになります。