উত্তর:
চেষ্টা করা ?max
, আপনি দেখতে পাবেন যে এটির আসলে একটি na.rm =
যুক্তি রয়েছে, এটি ডিফল্টরূপে সেট করা হয়েছে FALSE
। (সহ অন্যান্য অনেক আর ফাংশন, সাধারণ ডিফল্ট এর 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)
) সম্পর্কে is ব্যক্তিগতভাবে, আমি মনে করি এটির আচরণ যুক্তিসঙ্গত; আমি আশা করি এটি সেভাবে নির্মিত হয়েছিল যাতে আপনি যখন যেমন কাজগুলি করেন তখন প্রত্যাশিত ফলাফল পানa <- c(NA, NA); b <- 1:4; max(c(max(a, na.rm = TRUE), max(b, na.rm = TRUE)))
NA
পাইথনের চমৎকার নুমপি প্যাকেজে আর-এর মতো হ্যান্ডলিং সুবিধাগুলি অন্তর্ভুক্ত করার জন্য নিযুক্ত ছিলেন ।)
NA
s এর কোনও ভেক্টর থেকে সমস্ত সরিয়ে ফেলেন NA
, আপনি খালি ভেক্টরের প্রত্যাশা করবেন, না ∞
?max
আপনাকে দেখায় যে একটি অতিরিক্ত প্যারামিটার রয়েছে na.rm
যা আপনি সেট করতে পারেন TRUE
।
এগুলি ছাড়াও, যদি আপনি সত্যিই এসগুলি সরাতে চান তবে NA
কেবল এই জাতীয় কিছু ব্যবহার করুন:
myvec[!is.na(myvec)]
na.omit
একটি dataframe পদ্ধতি আছে, তাই আরও সাধারণ হয়।
আপনি কল করতে পারেন max(vector, na.rm = TRUE)
। আরও সাধারণভাবে, আপনি na.omit()
ফাংশনটি ব্যবহার করতে পারেন ।
কেবলমাত্র যদি আর এ নতুন কেউ আসল প্রশ্নের একটি সরল উত্তর চান wants
আমি কীভাবে কোনও ভেক্টর থেকে এনএ মানগুলি সরিয়ে ফেলতে পারি?
এটা এখানে:
ধরে নিন আপনার নীচে foo
যেমন ভেক্টর রয়েছে :
foo = c(1:10, NA, 20:30)
চলমান length(foo)
22 দেয়।
nona_foo = foo[!is.na(foo)]
length(nona_foo)
21, কারণ এনএ মানগুলি সরানো হয়েছে।
মনে রাখবেন is.na(foo)
একটি বুলিয়ান ম্যাট্রিক্স প্রদান করে, সুতরাং foo
এই মানের বিপরীতে সূচীকরণ আপনাকে সমস্ত উপাদান দেবে যা এনএ নয়।
Purrrdiscard
থেকে ব্যবহার (তালিকা এবং ভেক্টরগুলির সাথে কাজ করে)।
discard(v, is.na)
সুবিধাটি হ'ল পাইপগুলি ব্যবহার করা সহজ; বিকল্পভাবে অন্তর্নির্মিত সাবসেটিং ফাংশনটি ব্যবহার করুন [
:
v %>% discard(is.na)
v %>% `[`(!is.na(.))
নোটগুলি যে na.omit
তালিকায় কাজ করে না:
> x <- list(a=1, b=2, c=NA)
> na.omit(x)
$a
[1] 1
$b
[1] 2
$c
[1] NA
আমি দুটি 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)]
বনামের আসল পরীক্ষাটি এখানে 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
।