سؤال

كيف يمكن للمرء "رمي" خطأ في ص؟ لدي وظيفة تأخذ إطار بيانات وبعض أسماء الأعمدة وتفعل الأشياء معهم. إذا لم تكن الأعمدة موجودة ، فأريد أن تتوقف الوظيفة وتوقف جميع الوظائف حسبها.

لقد نظرت إلى recover و browse و traceback لكن ، حسنًا ، بدا أنهم قريبون ولكن ليس ما أبحث عنه.

هل كانت مفيدة؟

المحلول

نرى help(tryCatch):

يتم الإشارة إلى الظروف بواسطة 'signalCondition'. بالإضافة إلى ذلك ،
'stop' و 'warningتم تعديل الوظائف لقبولها أيضًا
حجج الحالة.

وبعد ذلك تحت "انظر أيضا":

'stop' و 'warning"ظروف الإشارة ، و"try"هو في الأساس نسخة مبسطة من"tryCatch'.

لذلك ربما تريد stop.

نصائح أخرى

مثال بسيط:

f <- function(a, b){ 

    if (a == 0){ 
            stop("error message")
    }
 }

ما وراء الوظائف الأساسية التي يذكرها ديرك:

ال حزمة R.OO لديه وظائف معالجة استثناء إضافية ، بما في ذلك وظيفة رمي () وهي مفيدة للغاية. يمكنك التقاط استثناءات مع وظائف المحاولة المعتادة أو Trycatch:

> try(throw("Division by zero.")); print("It's ok!");
Error: [2009-10-22 10:24:07] Exception: Division by zero.
[1] "It's ok!"

يمكنك قراءة المزيد عنه هنا: http://www1.maths.lth.se/help/r/r.oo/

في الواقع الوظيفة stopifnot مريح للغاية لتنفيذ عمليات فحص العقلانية في الكود الخاص بك. يتطلب الأمر العديد من التعبيرات المنطقية ويعيد خطأً إذا قام أي منها بتقييم كاذب.

مثال: للتحقق مما إذا كان العمود "C" موجود في DataFrame "df":

df <- data.frame(a = numeric(), b = numeric())
stopifnot(!is.null(df$c))

هذا سوف يرمي الخطأ التالي:

Error: !is.null(df$c) is not TRUE

يمكنك التحقق مما إذا كان العمود موجودًا وفعل ما تريده.
لنفترض أ data.frame اسم الشيئ df1 والتحقق إذا كان العمود col1 موجود:

if(! any(grepl('^col1$',colnames(df1)))) stop("nonexistent column")

أو

if(! any(grepl('^col1$',colnames(df1)))) return(-1)

على سبيل المثال

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top