एक ही पैकेज पर roxygen2 और doxygen का उपयोग कर रहे हैं? [बन्द है]


91

मेरे पास एक Rपैकेज है जो उपयोग करता है roxygen2। इसमें कुछ Cकोड है /src, और मैंने अभी Doxygen के साथ काम करना शुरू किया है। क्या दस्तावेज़ को संयोजित करने, या roxygen2 के साथ संकलन को एकीकृत करने के लिए कोई तरीके हैं? किसी भी "सर्वोत्तम प्रथाओं" के लिए Cकोड प्रलेखन कहाँ रखा जाए ?

Roxygen2 और doxygen के लिए मुख्य रूप से roxygen की ओर जाता है doogygen परिणामों के समान है । मुझे Doxyfiles के साथ कुछ पैकेज मिले हैं, लेकिन कोई सुसंगत संगठन नहीं है। उदाहरण के लिए, lme4 में स्रोत निर्देशिका के बाहर inst/doc/Doxyfileनामक फ़ोल्डर में आउटपुट है । मैट्रिक्स की रूट डायरेक्टरी में एक Doxyfile भी है (लेकिन पिछले रिलीज में था । यह प्रलेखन पैकेज निर्देशिका के बाहर भी निर्यात किया जाता है।doxygenlme4inst

क्या किसी Cपैकेज के अंदर दस्तावेज़ीकरण को शामिल नहीं करने का कोई कारण है , या Doxygen इतने व्यापक रूप से R पैकेज के भीतर उपयोग क्यों किया जाता है, व्यापक उपयोग के बावजूद C?

अद्यतन: संबंधित roxygen2 सुविधा अनुरोध देखें


8
यह आपके प्रश्न का उत्तर नहीं देता है, लेकिन यदि आप Rcpp का उपयोग करते हैं तो आप अपने निर्यात किए गए C ++ फ़ंक्शंस का दस्तावेजीकरण करने के लिए roxygen2 का उपयोग कर सकते हैं
हैडल

2
मुझे लगता है कि R संकुल में Doxygen का उपयोग नहीं किया जाता है, क्योंकि लोग अपने C कोड का दस्तावेजीकरण नहीं करते हैं। सी कोड लगभग कभी भी एपीआई और आर पैकेज का हिस्सा नहीं होता है, इसलिए लोग इसे दस्तावेज नहीं बनाते हैं। यदि आप अपने C डॉक्स को पैकेज में रखना चाहते हैं, तो बस HTML को मेकफाइल से जेनरेट करें और इसे इंस्टेंट / में डालें।
गाबोर सेसार्डी

1
मुझे roxygen का पता नहीं है, लेकिन शायद इसका कुछ xml आउटपुट है, जैसा कि doxygen के पास है, और आप इसे कुछ xslt के साथ जोड़ सकते हैं और उससे एक पूर्ण डॉक्टर बना सकते हैं।
डैनियल अल्बुशैट

क्या आप doxyten आउटपुट में roxygen2 इनपुट या अन्य तरह से शामिल करने की कोशिश कर रहे हैं?
डेनिस स्किडमोर

जवाबों:


4

मैं व्यक्तिगत रूप से निम्नलिखित कोड का उपयोग एक "dataManagement" पैकेज में करता हूं जिसे मैं अपनी सभी लिपियों में कहता हूं। इसमें roxygen के दस्तावेज और उदाहरण हैं। आप वास्तव में दस्तावेज़ () को कॉल करते हैं और डॉक्स ऑक्सीजन सी कोड पर, src / में चलाते हैं। डॉक्टर को इंस्टेंड / डॉक्सीजीन में रखा जाता है ताकि आपका पैकेज CRAN तैयार हो।

R अंत उपयोगकर्ताओं के लिए डिज़ाइन किया जा रहा R दस्तावेज़ीकरण C कोड को देखने वाला नहीं था जिसे मैंने C R दस्तावेज़ को क्लासिक R दस्तावेज़ीकरण में एकीकृत नहीं किया था, लेकिन परिणामी C दस्तावेज़ीकरण को "विगनेट" के रूप में कॉपी करना एक अच्छा अभ्यास होगा। ।

    library("testthat")
    library("devtools")

    #' @title Replace a value for a given tag on file in memory
    #' @description Scan the lines and change the value for the named tag if one line has this tag, 
    #'    add a line at the end if no line has this tag and return a warning if several lines
    #'    matching the tag
    #' @param fileStrings A vector with each string containing a line of the file
    #' @param tag The tag to be searched for 
    #' @param newVal The new value for the tag
    #' @return The vector of strings with the new value
    #' @examples
    #' fakeFileStrings <- c("Hello = world","SURE\t= indeed","Hello = you")
    #' 
    #' expect_warning(ReplaceTag(fakeFileStrings,"Hello","me"))
    #' 
    #' newFake <- ReplaceTag(fakeFileStrings,"SURE","me")
    #' expect_equal(length(newFake), length(fakeFileStrings))
    #' expect_equal(length(grep("SURE",newFake)), 1)
    #' expect_equal(length(grep("me",newFake)), 1)
    #' 
    #' newFake <- ReplaceTag(fakeFileStrings,"Bouh","frightened?")
    #' expect_equal(length(newFake), length(fakeFileStrings)+1)
    #' expect_equal(length(grep("Bouh",newFake)), 1)
    #' expect_equal(length(grep("frightened?",newFake)), 1)
    ReplaceTag <- function(fileStrings,tag,newVal){
        iLine <- grep(paste0("^",tag,"\\>"),fileStrings)
        nLines <- length(iLine)
        if(nLines == 0){
            line <- paste0(tag,"\t= ",newVal)
            iLine <- length(fileStrings)+1
        }else if (nLines > 0){
            line <- gsub("=.*",paste0("= ",newVal),fileStrings[iLine])
            if(nLines >1){
                warning(paste0("File has",nLines,"for key",tag,"check it up manually"))
            }
        }
        fileStrings[iLine] <- line
        return(fileStrings)
    }
    #' Prepares the R package structure for use with doxygen
    #' @description Makes a configuration file in inst/doxygen
    #'     and set a few options: 
    #'     \itemize{
    #'        \item{EXTRACT_ALL = YES}
    #'        \item{INPUT = src/}
    #'        \item{OUTPUT_DIRECTORY = inst/doxygen/}
    #'     }
    #' @param rootFolder The root of the R package
    #' @return NULL
    #' @examples 
    #' \dontrun{
    #' DoxInit()
    #' }
    #' @export
    DoxInit <- function(rootFolder="."){
        doxyFileName <- "Doxyfile"
        initFolder <- getwd()
        if(rootFolder != "."){
            setwd(rootFolder)
        }
        rootFileYes <- length(grep("DESCRIPTION",dir()))>0
        # prepare the doxygen folder
        doxDir <- "inst/doxygen"
        if(!file.exists(doxDir)){
            dir.create(doxDir,recursive=TRUE)
        }
        setwd(doxDir)

        # prepare the doxygen configuration file
        system(paste0("doxygen -g ",doxyFileName))
        doxyfile <- readLines("Doxyfile")
        doxyfile <- ReplaceTag(doxyfile,"EXTRACT_ALL","YES")
        doxyfile <- ReplaceTag(doxyfile,"INPUT","src/")
        doxyfile <- ReplaceTag(doxyfile,"OUTPUT_DIRECTORY","inst/doxygen/")
        cat(doxyfile,file=doxyFileName,sep="\n")
        setwd(initFolder)
        return(NULL)
    }

    #' devtools document function when using doxygen
    #' @description Overwrites devtools::document() to include the treatment of 
    #'    doxygen documentation in src/
    #' @param doxygen A boolean: should doxygen be ran on documents in src?
    #'     the default is TRUE if a src folder exist and FALSE if not
    #' @return The value returned by devtools::document()
    #' @example
    #' \dontrun{
    #' document()
    #' }
    #' @export
    document <- function(doxygen=file.exists("src")){
        if(doxygen){
            doxyFileName<-"inst/doxygen/Doxyfile"
            if(!file.exists(doxyFileName)){
                DoxInit()
            }
            system(paste("doxygen",doxyFileName))
        }
        devtools::document()
    }

धन्यवाद! मुझे लगता है कि मुझे एहसास नहीं था कि devtools::documentसिस्टम कॉल को जोड़ने के लिए सरल समाधान फिर से परिभाषित करना था doxygen path/to/Doxyfile। मैंने इसे अपने पैकेज में जोड़ा है। मैंने roxygen2 github repository @hadley
Abe

इसलिए - जहां तक ​​मैं इसे समझता हूं, इस सुविधा के लिए पुल अनुरोध स्वीकार नहीं किया गया था । चूँकि मैं फिर भी डॉक्युमेंटेशन डॉक्यूमेंटेशन बनाने का सुविधाजनक तरीका चाहता था, इसलिए मैंने ऊपर दिए कोड के आधार पर एक छोटा R पैकेज बनाया ।
nevrome
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.