একই প্যাকেজে রক্সিজেন 2 এবং ডক্সিজেন ব্যবহার করছেন? [বন্ধ]


91

আমার কাছে একটি Rপ্যাকেজ রয়েছে যা ব্যবহার করে roxygen2। এটিতে কিছু Cকোড রয়েছে /srcএবং আমি সবেমাত্র ডক্সিজেনের সাথে কাজ শুরু করেছি। ডকুমেন্টেশন একত্রিত করার কোনও উপায় আছে, বা রোজিন 2 এর সাথে সংকলন সংহত করার কোনও উপায় আছে কি? Cকোড ডকুমেন্টেশন কোথায় রাখার জন্য কোনও "সেরা অনুশীলন" ?

রোজ অক্সিজেন 2 এবং ডোজ অক্সিজেনের জন্য গুগল করা প্রাথমিকভাবে রক্সিজেনের দিকে পরিচালিত করে ডক্সিজেনের ফলাফলের মতো। আমি ডোক্সিফাইলগুলির সাথে কয়েকটি প্যাকেজ পেয়েছি, তবে কোনও সুসংগত সংস্থা নেই। উদাহরণস্বরূপ, lme4 এর উত্স ডিরেক্টরি থেকে বাইরে inst/doc/Doxyfileবলা ফোল্ডারে আউটপুট রয়েছে । ম্যাট্রিক্সের মূল ডিরেক্টরিতে একটি ডক্সিফাইলও রয়েছে (তবে পূর্ববর্তী রিলিজগুলি ছিল ।doxygenlme4inst

কোনও Cপ্যাকেজের মধ্যে ডকুমেন্টেশনগুলি অন্তর্ভুক্ত না করার কোনও কারণ আছে, বা ডক্সিজেনটি কেন বিস্তৃতভাবে ব্যবহারের পরেও আর প্যাকেজগুলির মধ্যে এত কম ব্যবহৃত হয় C?

আপডেট: সম্পর্কিত রোজিন 2 সম্পর্কিত অনুরোধটি দেখুন


8
এটি আপনার প্রশ্নের উত্তর দিতে না, কিন্তু যদি আপনি Rcpp ব্যবহার আপনি আপনার রপ্তানি সি ++ ফাংশন দস্তাবেজ হিসেবে রাখার জন্য roxygen2 ব্যবহার করতে পারেন
হ্যাডলি

4
আমার ধারণা, আর প্যাকেজে ডক্সিজেন ব্যবহার করা হয়নি, কারণ লোকেরা তাদের সি কোড নথিভুক্ত করে না। সি কোড প্রায় কখনও এপিআই এবং আর প্যাকেজ সরবরাহের অংশ হয় না, তাই লোকেরা কেবল এটি নথিভুক্ত করে না। আপনি যদি প্যাকেজে নিজের সি ডক্স রাখতে চান তবে কেবল একটি মেকফিল থেকে এইচটিএমএল তৈরি করুন এবং এটিকে / / এ রেখে দিন।
গ্যাবর সসরদি

4
আমি রজনজিন জানি না, তবে ডক্সিজেনের মতো এটিতে কিছু এক্সএমএল আউটপুট রয়েছে এবং আপনি এটি কিছু এক্সস্ল্টের সাথে একত্রিত করতে পারেন এবং সেখান থেকে একটি সম্পূর্ণ ডক তৈরি করতে পারেন।
ড্যানিয়েল অ্যালব্যাসচ্যাট

আপনি কি ডক্সিটেন আউটপুটে অন্য উপায়ে রোজিজেন 2 ইনপুট অন্তর্ভুক্ত করার চেষ্টা করছেন?
ডেনিস স্কিডমোর

উত্তর:


4

আমি আমার সমস্ত স্ক্রিপ্টগুলিতে কল করি "ডেটা ম্যানেজমেন্ট" প্যাকেজে আমি ব্যক্তিগতভাবে নিম্নলিখিত কোডটি ব্যবহার করি। এটিতে রজিন ডকুমেন্টেশন এবং উদাহরণ রয়েছে। আপনি আসলে ডকুমেন্টটি কল করেন () এবং এসসিআর / এ সি কোডে অক্সিজেন চালিয়েছেন ran ডকটি তাত্ক্ষণিকভাবে / ডোজিনে রাখা হয়েছে যাতে আপনার প্যাকেজটি CRAN প্রস্তুত।

আর শেষ ব্যবহারকারীদের জন্য আর ডকুমেন্টেশন ডিজাইন করা হচ্ছে সি কোডের দিকে নজর দেওয়া উচিত নয় আমি ক্লাসিক আর ডকুমেন্টেশনে সি কোড ডকুমেন্টেশন একীকরণ করি নি তবে ফলস্বরূপ সি ডকুমেন্টেশনগুলিকে "ভিগনেট" হিসাবে অনুলিপি করা ভাল অভ্যাস হবে ।

    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। আমি এটি আমার প্যাকেজে যুক্ত করেছি। আমি রোডজিন 2 গিথুব সংগ্রহস্থল @ হডলে
এবে

সুতরাং - আমি যতদূর বুঝতে পেরেছি, এই বৈশিষ্ট্যটির জন্য টানার অনুরোধ গৃহীত হয়নি । যেহেতু আমি তবুও ডক্সিজেন ডকুমেন্টেশন তৈরি করার জন্য একটি সুবিধাজনক উপায় থাকতে চেয়েছিলাম, আমি উপরের কোডের উপর ভিত্তি করে একটি ছোট আর প্যাকেজ তৈরি করেছি।
নেভ্রোম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.