سؤال

لذلك قررت أن أضع وظائف بلدي القليلة في حزمة وأنا أقرأ / التعلم كتابة ص التمديد.

من الواضح أنه يشكو من كمية الأشياء التي لا أفعلها بشكل صحيح.

بعد ما يكفي من googling، أنا أطلق بعض الأسئلة هنا، وهذا واحد يدور حول نمط الاختبار: أنا أستخدم شغلها وأعجبني أن اختبارات قريبة ممكنة من التعليمات البرمجية التي يتم اختبارها. وبهذه الطريقة لن أنسى الاختبارات وأستعبها الاختبارات كجزء من الوثائق الفنية.

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

fillInTheBlanks <- function(S) {
  ## NA in S are replaced with observed values

  ## accepts a vector possibly holding NA values and returns a vector
  ## where all observed values are carried forward and the first is
  ## carried backward.  cfr na.locf from zoo library.
  L <- !is.na(S)
  c(S[L][1], S[L])[1 + cumsum(L)]
}

test.fillInTheBlanks <- function() {
  checkEquals(fillInTheBlanks(c(1, NA, NA, 2, 3, NA, 4)), c(1, 1, 1, 2, 3, 3, 4))
  checkEquals(fillInTheBlanks(c(1, 2, 3, 4)), c(1, 2, 3, 4))
  checkEquals(fillInTheBlanks(c(NA, NA, 2, 3, NA, 4)), c(2, 2, 2, 3, 3, 4))
}

لكن R CMD check مشكلات خطوط الملاحظة، مثل هذا واحد:

test.fillInTheBlanks: no visible global function definition for
  ‘checkEquals’

ويشتكي مني لا توثق وظائف الاختبار.

لا أريد حقا إضافة وثائق لوظائف الاختبار، وبالتأكيد سأفضل عدم الاضطرار إلى إضافة تبعية إلى حزمة البريد.

كيف تعتقد أنني يجب أن أنظر إلى هذه المشكلة؟

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

المحلول

أين تضع اختبارات وحدتك؟ قد لا ترغب في وضعها في R الدليل. نهج أكثر قياسية هو وضعها تحت inst\unitTests. وبعد القي نظرة على صفحة R-Wiki هذه فيما يتعلق بالتكوين.

بدلا من ذلك، يمكنك تحديد الملفات التي سيتم تصديرها في مساحة اسمك، وبالإضافة، ما هي الوظائف التي يجب عدم توثيقها ويجب موثقها.

أبعد من ذلك، من الناحية المثالية يجب أن يكون لديك اختباراتك قيد التشغيل عند استدعاء فحص R CMD؛ هذا جزء من التصميم. في هذه الحالة، يجب عليك إنشاء برنامج نصي اختبار لاستدعاء الاختبارات الخاصة بك في منفصلة tests الدليل. وستحتاج إلى تحميل حزمة الجريان في هذا البرنامج النصي (ولكن لا تحتاج إلى جعله تبعية بحزمك).

تحرير 1:

فيما يتعلق بفشلك لأنه لا يمكن العثور على وظيفة Checkequals: أود أن أغيرك وظيفة لتكون مثل هذا:

test.fillInTheBlanks <- function() {
  require(RUnit)
  checkEquals(fillInTheBlanks(c(1, NA, NA, 2, 3, NA, 4)), c(1, 1, 1, 2, 3, 3, 4))
  checkEquals(fillInTheBlanks(c(1, 2, 3, 4)), c(1, 2, 3, 4))
  checkEquals(fillInTheBlanks(c(NA, NA, 2, 3, NA, 4)), c(2, 2, 2, 3, 3, 4))
}

وبهذه الطريقة يتم تحميل الحزمة عند استدعاء الوظيفة أو أنها ستبلغ المستخدم أن الحزمة مطلوبة.

تحرير 2:

من "كتابة الملحقات":

لاحظ أنه يجب توثيق جميع الكائنات على مستوى المستخدم في الحزمة؛ إذا كانت حزمة PKG تحتوي على كائنات على مستوى المستخدم والتي لا تستخدم "داخلي" فقط، فينبغي أن توفر ملف PKG-Internal.rd الذي ينص على جميع هذه الكائنات، وينص بوضوح على أنه لا يقصد به أن يتم استدعاء هذه المستخدم من قبل المستخدم. انظر على سبيل المثال مصادر الشبكة الحزمة في توزيع ص لمثال. لاحظ أن الحزم التي تستخدم الكائنات الداخلية على نطاق واسع يجب أن تخفي هذه الكائنات في مساحة الاسم، عندما لا تحتاج إلى توثيق (انظر مسافات اسم الحزمة).

يمكنك استخدام ملف PKG-Internal.rd كخيار واحد، ولكن إذا كنت تنوي وجود العديد من الكائنات الخفية، يتم التعامل مع هذا عادة في الإعلانات في مساحة الاسم.

نصائح أخرى

هل قمت بتحميل RUnit صفقة؟

ربما يكون أفضل رهان لإلقاء نظرة على حزمة تحتوي على رمز موجود باستخدام RUnit.

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