জবরদস্তি করে এনএ চালু করার সময় কীভাবে সতর্কতা এড়ানো যায়


124

আমি আর কোডটি সাধারণত পছন্দ করি যাতে আমি সতর্কতা না পাই তবে as.numericক্যারেক্টার ভেক্টরকে রূপান্তর করার সময় কীভাবে সতর্কতা পাওয়া এড়ানো যায় তা আমি জানি না ।

উদাহরণ স্বরূপ:

x <- as.numeric(c("1", "2", "X"))

আমাকে একটি সতর্কতা দেবে কারণ এটি জোর করে এনএ চালু করেছিল introduced আমি এনএএসদের জোর করে প্রবর্তন করতে চাই - এটি বলার কোনও উপায় আছে "হ্যাঁ এটিই আমি করতে চাই"। নাকি আমার শুধু সতর্কতা নিয়েই বেঁচে থাকা উচিত?

বা এই কাজের জন্য আমার কোনও আলাদা ফাংশন ব্যবহার করা উচিত?


8
?suppressWarningsসম্ভবত দেখুন ?
A5C1D2H2I1M1N2O1R2T1

4
এই সতর্কতা দিয়ে সমস্যা কি? সাধারণত এটি মূল্যবান তথ্য দেয়। আমি আর কনসোলে আরও খারাপ কাজের জন্য আশ্চর্যের চেয়ে আরও বেশি শব্দ পছন্দ করি।
রোল্যান্ড

12
@ রোল্যান্ড আমি সম্পূর্ণরূপে একমত, তবে আপনি যদি কেবল সেগুলি উপেক্ষা করতে অভ্যস্ত হন তবে সতর্কতাগুলির কার্যকারিতা হ্রাস পাবে। এজন্য আমি সাধারণত সতর্কতাগুলি "মোকাবেলা" করতে পছন্দ করি। এই ক্ষেত্রে, আমি সর্বদা সতর্কতা উত্পন্ন করব এবং সেগুলির মধ্যে অনেকগুলি - আমার ডেটা এনএকে উপস্থাপন করে "এক্স" দিয়ে স্ট্রিং হিসাবে আসবে, এবং সুতরাং ফাংশনটি ঠিক তাই করছে যা আমি এটি করতে চাইছি। আমি বলতে চেয়েছিলাম "আমাকে জানানোর জন্য ধন্যবাদ, তবে আমি ঠিক করছি আমি জানি"। suppressWarningsনিখুঁত বলে মনে হচ্ছে
করোন

6
আপনি কি জানেন যে read.tableএকটি যুক্তি গ্রহণ করে na.strings?
রোল্যান্ড

আপনার যদি ইতিমধ্যে কোনও লাইব্রেরির পরিচিত বাগের আশপাশে কাজ থাকে তবে এগুলি দমন করা কার্যকর। এই আমি এই ব্যবহার করতে যাচ্ছি!
ক্লেম ওয়াং

উত্তর:


142

ব্যবহার suppressWarnings():

suppressWarnings(as.numeric(c("1", "2", "X")))
[1]  1  2 NA

এটি সতর্কতা দমন করে।


যদিও এটি পছন্দসই প্রতিক্রিয়া, নীচে জাঙ্গোরেকির উত্তর আমার কাছে আরও শক্ত মনে হয়েছে।
আয়ান

34

suppressWarnings()ইতিমধ্যে উল্লেখ করা হয়েছে। একটি বিকল্প হ'ল সমস্যাযুক্ত চরিত্রগুলি প্রথমে এনএতে রূপান্তর করা। আপনার বিশেষ সমস্যার জন্য, taRifx::destringঠিক তাই না। এইভাবে যদি আপনি আপনার কার্যকারিতা থেকে অন্য কিছু, অপ্রত্যাশিত সতর্কতা পান তবে তা দমন করা হবে না।

> library(taRifx)
> x <- as.numeric(c("1", "2", "X"))
Warning message:
NAs introduced by coercion 
> y <- destring(c("1", "2", "X"))
> y
[1]  1  2 NA
> x
[1]  1  2 NA

3
আমি জানি এটি একটি পুরানো থ্রেড এবং destringঅপের উদাহরণের জন্য নিখুঁতভাবে কাজ করে, তবে ভবিষ্যতে যে কেউ এই থ্রেডটি দেখেন তার জন্য একটি সতর্কতা হ'ল লক্ষ্যযুক্ত স্ট্রিংটি স্ট্রিং এবং সংখ্যাসূচক মিশ্রণের destringথেকে আলাদাভাবে কাজ করে as.numeric: যা destring("x1")দেয় 1তবে as.numeric("x1")দেয়NA
হং

26

সাধারণভাবে সতর্কবার্তা দমন করা সর্বোত্তম সমাধান নয় কারণ আপনি যখন কিছু অপ্রত্যাশিত ইনপুট সরবরাহ করা হবে তখন আপনাকে সতর্ক করা হতে পারে।
ডেটা ধরণের রূপান্তর চলাকালীন কেবল এনএ বজায় রাখার জন্য নীচের সমাধানটি মোড়ক। কোন প্যাকেজ প্রয়োজন হয় না।

as.num = function(x, na.strings = "NA") {
    stopifnot(is.character(x))
    na = x %in% na.strings
    x[na] = 0
    x = as.numeric(x)
    x[na] = NA_real_
    x
}
as.num(c("1", "2", "X"), na.strings="X")
#[1]  1  2 NA

4
এটি সেরা উত্তর। ব্যবহার suppressWarnings()করা সাধারণত একটি খারাপ ধারণা, কারণ আমাদের মাঝে মাঝে সেই সতর্কতাগুলি দেখতে হবে।
কেবারওয়েইন

0

আমি জাঙ্গোরেকি ফাংশনটি সামান্য পরিবর্তিত করেছি সেই ক্ষেত্রে যেখানে আমাদের বিভিন্ন মান থাকতে পারে যা সংখ্যায় রূপান্তরিত হতে পারে না। আমার ফাংশনে, একটি টেম্পলেট অনুসন্ধান করা হয় এবং যদি টেমপ্লেটটি পাওয়া যায় না, তবে FALSE ফিরে আসে! জ্যাপারেল করার আগে এর অর্থ হল যে আমাদের সেই ভেক্টর উপাদানগুলির প্রয়োজন যা টেমপ্লেটের সাথে মেলে না। বাকীটি as.numফাংশনের অনুরূপ । উদাহরণ:

as.num.pattern <- function(x, pattern){
  stopifnot(is.character(x))
  na = !grepl(pattern, x)
  x[na] = -Inf
  x = as.numeric(x)
  x[na] = NA_real_
  x
}

as.num.pattern(c('1', '2', '3.43', 'char1', 'test2', 'other3', '23/40', '23, 54 cm.'))

[1] 1.00 2.00 3.43   NA   NA   NA   NA   NA
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.