উত্তর:
চেষ্টা করা ?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পাইথনের চমৎকার নুমপি প্যাকেজে আর-এর মতো হ্যান্ডলিং সুবিধাগুলি অন্তর্ভুক্ত করার জন্য নিযুক্ত ছিলেন ।)
NAs এর কোনও ভেক্টর থেকে সমস্ত সরিয়ে ফেলেন 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।