Roxygen: كيفية تعيين معلمة افتراضية بما في ذلك backslash ('') إلى الوظائف

StackOverflow https://stackoverflow.com/questions/4616088

  •  26-09-2019
  •  | 
  •  

سؤال

أستخدم Roxygen لإنشاء ملفات RD من حزمي قيد التطوير ، لكن لدي بعض المشكلات في وظائف مع معلمة افتراضية تم تعيينها على "\n', ، على سبيل المثال:

  lineCount <- function(text, sep='\n') {
       ...
   }

ما هو الغرض من حساب الخط الجديد ('\n') الأحرف في سلسلة. المشكلة هي أن فحص R CMD يعطي تحذيرًا حول:

Codoc mismatches from documentation object 'lineCount':
lineCount
  Code: function(text, sep = "\n")
  Docs: function(text, sep = " ")
  Mismatches in argument default values:
    Name: 'sep' Code: "\n" Docs: " "

يبدو لي المشكلة التي تسببت في الكتابة إلى ملف RD (الكتابة إلى ملفات LaTeX القياسية عبر cat() يتطلب دائمًا مضاعفة الهروب من الشخصيات لبعض الأغراض ، على سبيل المثال: \\newline - كما واجهت). إذا وضعت ضربة قاضية إضافية على الفاصل ، مثل:

  lineCount <- function(text, sep='\\n') {
       ...
   }

لا تزال المشكلة تعرض ، كما هو الحال في الكود '\\n', ، ولكن في المستندات (ملفات RD) يبدو '\n'.

هل هناك حل سهل لمشكلتي؟ قد تكون علامة إضافية في Roxygen والتي يمكن أن تحدد كيفية كتابة معاملات الوظيفة إلى ملف RD؟ آسف إذا طرحت سؤالًا واضحًا جدًا ، لكنني ضاعت بعد Google-ing لفترة من الوقت.


تاريخ: http://permalink.gmane.org/gmane.comp.lang.r.roxygen/24


تحديث: استعمال Roxygen2!

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

المحلول

واجهت أيضًا مشاكل مع الكثير من الهرب "وتلاشى. parse.formals الوظيفة في RD2.R RD2.R على النحو التالي:

  parse.formals <- function(partitum) {
    formals <- partitum$formals
    if (!is.null(formals)) {
      formals <- lapply(formals, trim)
      formals <- lapply(formals, paste, collapse=" ")
      name.defaults <- zip.c(names(formals), formals)
      args <-
        do.call(paste, c(Map(function(name.default) {
          name <- car(name.default)
          default <- cadr(name.default)
          if (! is.character (default)) {  # too much escaped. 
                                           # Not sure when escaping is needed. 
                                           # param = c ("x", "y", "z") works now
            default <- gsubfn("\"(.*)\"",
                              function(x)
                              sprintf("\"%s\"", gsub("\"", "\\\\\"", x)),
                              as.character(default))
          }
          default <- gsub ("\t", "\\\\t", default) # the tabs and newlines are already
          default <- gsub ("\n", "\\\\n", default) # tab and newline here.
          if (is.null.string(default))
            name
          else
            sprintf('%s=%s', name, default)
        },
                             name.defaults),
                         sep=', '))

      append.Rd(usageTag(parse.function.name(partitum), args))
    }
  }

أتمنى أن يساعد ذلك ولا يكسر أي شيء آخر.

نصائح أخرى

لقد صادفت هذه المشكلة أيضًا ، أي أني قد قمت بتقسيم = "+" و split = " |" في وظائف مختلفة.

تمثل ملفات .rd في الواقع هذه أيضًا على أنها split = "+" و split = " |" ، ولكن مهما كانت القراءة. الملفات في r cmd حولتها إلى split = "+" و split = " |" ، ، وتسبب في الخطأ.

إذا كانت الملفات .rd قد تم تقسيمها = "+" و split = " |" ثم يتم القراءة بشكل صحيح.

كان حلي هو تشغيل هذا على / man / directory مع ملفات .rd ، قبل R CMD مباشرة:

perl -e 's/(" |")/" |"/g ؛' -PI $ (ابحث عن biogeobears/man -type f)

perl -e 's/("+")/"+"/g ؛' -PI $ (ابحث عن biogeobears/man -type f)

استغرق القليل من التجربة والخطأ ، لكنه يعمل!

هتافات! نيك

كان لي نفس المشكلة. انتهيت من تجاوز حقل الاستخدام الافتراضي كما أنتجته Roxygen من رمز المصدر باستخدام usage. على سبيل المثال ، يحتوي الملف المصدر R

#' @usage sourceall(dir = getwd(), pattern = ".*\\\\.R", ...)
sourceall <- function( dir=getwd(), pattern=".*\\.R", ... )
{
    blah blah
}

لقد واجهت مشكلة مماثلة مع Roxygen2 V6.0.1.

# this caused errors in R CMD check (non-ASCII chars)
f <- function(x, y, chr = "\u279B")

# this was ok
f <- function(x, y, chr = intToUtf8(0x279B))

في حالتك ، مع شخصية الخط الجديد ، يجب أن تعمل أيضًا:

lineCount <- function(text, sep = intToUtf8(10))

حسنًا ، Frack Me ، مربع التعليق يهرب من الشخصيات المتراكمة! أرفض أن أضيف إلى الجنون وأضيف عمليات الرضا الخلفية للهروب من السود في رمز Perl الذي يهرب من الخلف في الملفات .rd التي تهرب من رد الفعل في R.

مجرد ضعف جميع backslashes.

أو علامات رمز HMM:

perl -e 's/("\\\\\|")/"\\\\\\\\\|"/g;' -pi $(find BioGeoBEARS/man -type f)

perl -e 's/("\\\\\+")/"\\\\\\\\\+"/g;' -pi $(find BioGeoBEARS/man -type f)

نعم هذا جيد.

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