"সতর্কতা ()" আর এ প্রদর্শিত হলে লুপ ব্রেক করা


103

আমার একটি সমস্যা হচ্ছে: আমি একাধিক ফাইল প্রক্রিয়া করার জন্য একটি লুপ চালাচ্ছি। আমার ম্যাট্রিকগুলি প্রচুর এবং তাই আমি যদি সচেতন না হই তবে প্রায়শই আমি স্মৃতি থেকে সরে যাই।

যদি কোনও সতর্কতা তৈরি হয় তবে লুপটি ভেঙে ফেলার কোনও উপায় আছে কি? এটি কেবল লুপটি চালিয়ে যায় এবং রিপোর্ট করে যে এটি অনেক পরে ব্যর্থ হয়েছিল ... বিরক্তিকর। ওহ বুদ্ধিমান স্ট্যাকওভারফ্লো-এর কোনও ধারণা ?!

উত্তর:


150

আপনি সতর্কতাগুলি এটিকে ত্রুটিতে পরিণত করতে পারেন:

options(warn=2)

সতর্কতাগুলির বিপরীতে, ত্রুটিগুলি লুপকে বাধা দেবে। সুন্দরভাবে, আর আপনাকে এও জানাবে যে এই বিশেষ ত্রুটিগুলি সতর্কতা থেকে রূপান্তরিত হয়েছিল।

j <- function() {
    for (i in 1:3) {
        cat(i, "\n")
        as.numeric(c("1", "NA"))
}}

# warn = 0 (default) -- warnings as warnings!
j()
# 1 
# 2 
# 3 
# Warning messages:
# 1: NAs introduced by coercion 
# 2: NAs introduced by coercion 
# 3: NAs introduced by coercion 

# warn = 2 -- warnings as errors
options(warn=2)
j()
# 1 
# Error: (converted from warning) NAs introduced by coercion

23
এরপরে, options(warn=1) ডিফল্ট সেটিংসটি পুনরুদ্ধার করতে ব্যবহার করুন ।
অ্যালেক্স হলকম্ব

25
ডিফল্ট মান 0 যদিও। কারখানার সেটিংস ব্যবহার পুনরুদ্ধার করতে options("warn"=0)
ডার্ক এডেলবুয়েটেল 18

আর এর মধ্যে রিসেট করার বিকল্পগুলি সাধারণত 1) op=options(warn=2), 2) আপনার জিনিসটি করা দ্বারা সর্বোত্তমভাবে পরিচালিত হয় এবং তারপরে 3) পুনরায় সেট করুন options(op), যা আপনাকে warn=0এই ক্ষেত্রে আবার ফিরিয়ে নিয়ে যায়।
এমবিউন

44

আর আপনাকে শর্ত হ্যান্ডলার সংজ্ঞায়িত করতে দেয়

x <- tryCatch({
    warning("oops")
}, warning=function(w) {
    ## do something about the warning, maybe return 'NA'
    message("handling warning: ", conditionMessage(w))
    NA
})

ফলাফল যা

handling warning: oops
> x
[1] NA

ট্রাইচ্যাচের পরে ফাঁসি কার্যকর হয়; আপনার সতর্কতাটিকে একটি ত্রুটিতে রূপান্তর করে আপনি শেষ করার সিদ্ধান্ত নিতে পারেন

x <- tryCatch({
    warning("oops")
}, warning=function(w) {
    stop("converted from warning: ", conditionMessage(w))
})

বা শর্তটি কৌতুকপূর্ণভাবে পরিচালনা করুন (সতর্কতার কলের পরে মূল্যায়ন অব্যাহত রাখুন)

withCallingHandlers({
    warning("oops")
    1
}, warning=function(w) {
    message("handled warning: ", conditionMessage(w))
    invokeRestart("muffleWarning")
})

যা প্রিন্ট করে

handled warning: oops
[1] 1

+1 - দুর্দান্ত। আমি এই বিকল্পটি উল্লেখ করার কথা ভেবেছিলাম, তবে এত ছোট কিন্তু মিষ্টি টিউটোরিয়ালটি একসাথে রাখতে পারতাম না।
জোশ ও ব্রায়েন

একটি সুন্দর সঙ্গে একটি বিক্ষোভ forকরা আরও ভাল হবে :)
JelenaČuklina

28

গ্লোবাল warnবিকল্প সেট করুন :

options(warn=1)  # print warnings as they occur
options(warn=2)  # treat warnings as errors

মনে রাখবেন যে "সতর্কতা" কোনও "ত্রুটি" নয়। লুপস সতর্কতার জন্য শেষ করা হয় না (যতক্ষণ না options(warn=2))।

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