Mencoba ?max
, Anda akan melihat bahwa itu sebenarnya memiliki na.rm =
argumen, ditetapkan secara default ke FALSE
. (Itu default umum bagi banyak fungsi R lainnya, termasuk sum()
, mean()
, dll)
Pengaturan na.rm=TRUE
tidak hanya apa yang Anda minta:
d <- c(1, 100, NA, 10)
max(d, na.rm=TRUE)
Jika Anda ingin menghapus semua NA
, gunakan idiom ini sebagai gantinya:
d <- d[!is.na(d)]
Catatan terakhir: Fungsi lain (misalnya table()
,, lm()
dan sort()
) memiliki NA
argumen yang terkait yang menggunakan nama yang berbeda (dan menawarkan opsi yang berbeda). Jadi, jika NA
Anda mengalami masalah dalam panggilan fungsi, ada baiknya memeriksa solusi bawaan di antara argumen fungsi. Saya telah menemukan biasanya sudah ada di sana.
-Inf
untukd
semua NAs.max()
berperilaku (seperti, misalnya, ketika melakukanmax(c(NA, NA)
). Secara pribadi, saya pikir perilakunya masuk akal; Saya berharap itu dibangun seperti itu sehingga Anda mendapatkan hasil yang diharapkan ketika melakukan hal-hal sepertia <- c(NA, NA); b <- 1:4; max(c(max(a, na.rm = TRUE), max(b, na.rm = TRUE)))
NA
fasilitas penanganan -R seperti dalam paket NumPy Python yang sangat baik .)NA
s dari vektorNA
s, Anda akan mengharapkan vektor kosong, bukan -∞.The
na.omit
fungsi yang banyak rutinitas regresi menggunakan internal:sumber
?max
menunjukkan kepada Anda bahwa ada parameter tambahanna.rm
yang dapat Anda aturTRUE
.Selain itu, jika Anda benar - benar ingin menghapusnya
NA
, cukup gunakan sesuatu seperti:sumber
na.omit
juga memiliki metode dataframe, jadi lebih umum.Anda bisa menelepon
max(vector, na.rm = TRUE)
. Secara umum, Anda dapat menggunakanna.omit()
fungsi ini.sumber
Untuk berjaga-jaga jika seseorang yang baru mengenal R ingin jawaban yang disederhanakan untuk pertanyaan aslinya
Ini dia:
Asumsikan Anda memiliki vektor
foo
sebagai berikut:lari
length(foo)
memberi 22.length(nona_foo)
adalah 21, karena nilai-nilai NA telah dihapus.Ingatlah
is.na(foo)
mengembalikan matriks boolean, jadi pengindeksanfoo
dengan kebalikan dari nilai ini akan memberi Anda semua elemen yang bukan NA.sumber
Gunakan
discard
dari purrr (berfungsi dengan daftar dan vektor).Keuntungannya adalah mudah menggunakan pipa; sebagai alternatif, gunakan fungsi pengesahan bawaan
[
:Catatan yang
na.omit
tidak berfungsi pada daftar:sumber
Saya berlari patokan cepat membandingkan dua
base
pendekatan dan ternyatax[!is.na(x)]
lebih cepat daripadana.omit
. Penggunaqwr
menyarankan agar saya mencobapurrr::dicard
juga - ini ternyata jauh lebih lambat (meskipun saya akan dengan senang hati berkomentar tentang implementasi & tes saya!)Untuk referensi, inilah tes asli
x[!is.na(x)]
vsna.omit
:sumber
purrr:discard