Pecan: تأسيس `PEcAn.logger` على وظائف R الأصلية

تم إنشاؤها على ٢٨ فبراير ٢٠١٨  ·  7تعليقات  ·  مصدر: PecanProject/pecan

وصف


وظائف Mask R message و warning و stop في PEcAn.logger على النحو التالي:

message <- PEcAn.logger::logger.info
warning <- PEcAn.logger::logger.warn
stop <- PEcAn.logger::logger.severe

وابدأ في استبدال كل تكرارات PEcAn.logger::logger.* بوظائف R الأصلية. في النهاية ، يمكننا نقل PEcAn.logger إلى Suggests .

قد يعني هذا أن تحميل PEcAn.logger في جلسة (مع library(PEcAn.logger) ) سيؤدي إلى استبدال الوظيفة - وإلا فسيتم تعيين رمز التشغيل افتراضيًا لوظائف المراسلة R القياسية.

سياق الكلام




عدة أسباب:

  • PEcAn.logger::logger.* طويل ومزعج للكتابة.
  • يقدم PEcAn.logger تبعية أخرى غير CRAN لكل حزمة من حزمنا ، مما يجعلها مزعجة أكثر لاستخدامها بشكل مستقل عن PEcAn.
  • لا تعمل وظائف المسجل الحالية مع وظائف testthat expect_error ، إلخ
  • كما أنها لا تعمل مع suppressWarnings أو suppressMessages
  • لن يؤثر هذا التغيير على سلوك الوظائف داخل الحزم الأخرى التي تستدعي message أو warning أو stop ، لأنها تستخدم مساحة اسم الحزمة الداخلية الخاصة بها.

ممكن التنفيذ


انظر أعلاه (يجب أن يكون كل منها #' @export -ed. أيضًا ، يجب تعديل التعبير العادي grepl في PEcAn.logger لتجاهل warning و message و stop للمكالمات لتبقى مفيدة.

Enhancement Discussion 01 - Low Stale

التعليق الأكثر فائدة

إعادة الأسماء طويلة جدًا: أفضل تصدير الأسماء المستعارة التي تسقط الجزء الزائد logger.* ، على سبيل المثال PEcAn.logger::info() . أي شيء يتجاوز ذلك يعود إلى الجدل حول مساحات الأسماء مقابل مكالمات library .

إعادة الإحراج مع وظائف مثل expect_error أو suppressMessages : الاختلاف الأساسي الكبير هنا هو أن PEcAn.logger لا يستخدم آلية إشارات الحالة الرسمية الخاصة بـ R ، وبالتالي يكون من الصعب استخدامها مع أي وظيفة التي تتوقع condition . إذا كان من الممكن تجديد PEcAn.logger لاستخدام الظروف ، فأنا أفضل القيام بذلك ، لكنني أيضًا لست على دراية بالتاريخ هنا -robkooper ، كان يتجنب signalCondition اختيار تصميم مقصود / ضروري للتعامل بعض حالات إعادة التوجيه؟

ال 7 كومينتر

كان السبب الرئيسي هو وسيلة لجمع الرسائل في ملف بسهولة. كيف يتم ذلك من خلال الرسائل والتحذير والتوقف؟

لذلك ستعمل جميع عمليات التسجيل بنفس الطريقة التي تعمل بها الآن إذا تم تحميل الحزمة PEcAn.logger . كل ما في الأمر أن استخدام وظائف التسجيل لم يعد مطلوبًا. على نحو فعال ، ما أقترحه هو:

# These call the default R functions
message("hello")
warning("whoops")
stop("whoah")

library(PEcAn.logger)
# By loading the logger package, the functions become masked so
message("hello")      # This actually calls `PEcAn.logger::logger.info
warning("whoops")   # This calls `PEcAn.logger::logger.warn
stop("error")      # This calls `PEcAn.logger::logger.severe

لذلك يجب أن تعمل جميع الوظائف نفسها لإعداد مستوى المسجل ، وملف الإخراج ، وما إلى ذلك بنفس الطريقة.

في ملاحظة جانبية ، يمكن إعادة توجيه قاعدة R message ، warning ، و stop بشكل انتقائي عبر sink .

إعادة الأسماء طويلة جدًا: أفضل تصدير الأسماء المستعارة التي تسقط الجزء الزائد logger.* ، على سبيل المثال PEcAn.logger::info() . أي شيء يتجاوز ذلك يعود إلى الجدل حول مساحات الأسماء مقابل مكالمات library .

إعادة الإحراج مع وظائف مثل expect_error أو suppressMessages : الاختلاف الأساسي الكبير هنا هو أن PEcAn.logger لا يستخدم آلية إشارات الحالة الرسمية الخاصة بـ R ، وبالتالي يكون من الصعب استخدامها مع أي وظيفة التي تتوقع condition . إذا كان من الممكن تجديد PEcAn.logger لاستخدام الظروف ، فأنا أفضل القيام بذلك ، لكنني أيضًا لست على دراية بالتاريخ هنا -robkooper ، كان يتجنب signalCondition اختيار تصميم مقصود / ضروري للتعامل بعض حالات إعادة التوجيه؟

بعد التفكير في هذا الأمر أكثر ، أوافق على أن أسلوبي غير منطقي ولن ينجح في الواقع. أنا شخصياً أفضل استخدام وظائف R الافتراضية ( stop ، warning ، message ) ، وإعادة توجيههم عبر sink عند الضرورة ، لكن يمكنني رؤيتها الأساس المنطقي للالتزام بـ PEcAn.logger . الاحتمال الآخر هو التبديل إلى futile.logger ، والذي تم اقتراحه مسبقًا (# 1362).

في غضون ذلك ، أحب اقتراحيinfotroph - إضافة أسماء مستعارة أقصر وشروط إشارة.

فكرة واعدة أخرى هي الحزمة debugme ، والتي توفر بناء جملة مثل هذا:

f <- function(a, b = 3) {
  c <- a + b
  d <- a * b
  e <- a ^ b
  "!DEBUG arguments are a = `a` and b = `b`"
  c(c, d, e)
}

هذه المشكلة قديمة لأنها كانت مفتوحة 365 يومًا بدون أي نشاط.

انظر أيضا المناقشة في # 1362

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

ashiklom picture ashiklom  ·  4تعليقات

serbinsh picture serbinsh  ·  12تعليقات

serbinsh picture serbinsh  ·  38تعليقات

mccabete picture mccabete  ·  9تعليقات

para2x picture para2x  ·  5تعليقات