scicloj / clojisr

Clojure speaks statistics - a bridge between Clojure to R
https://scicloj.github.io/clojisr/
Eclipse Public License 2.0
150 stars 10 forks source link

add `help` #53

Closed genmeblog closed 5 months ago

genmeblog commented 4 years ago

Help can be retrieved using following R call: capture.output(tools:::Rd2txt(utils:::.getHelpFile(as.character(help(mean))), options=list(underline_titles=FALSE)))

Rd2HTML can be used to return HTML.

We can implement:

  1. help function which returns just help string, or a section
  2. help-map function which parses help and returns map of sections
  3. print-help print help (or section) to stdout

Help can be used on R name (string or symbol) or on RObject (if created via require-r should contain original name in meta)

Attaching doc string to required R symbol can be slow (need to test it first) - maybe we can do it in future task?

daslu commented 4 years ago

To make it easy to search for a symbol across all installed packages, maybe we can write a nice wrapper of the help.search function.

> help.search("glance")

Help files with alias or concept or title matching ‘glance’ using fuzzy
matching:

ape::balance            Balance of a Dichotomous Phylogenetic Tree
  Aliases: balance
bit::bbatch             Balanced Batch sizes
broom::data.frame_tidiers
                        Tidiers for data.frame objects
  Aliases: glance.data.frame
broom::durbinWatsonTest_tidiers
                        Tidy/glance a(n) durbinWatsonTest object
  Aliases: glance.durbinWatsonTest
broom::finish_glance    Add logLik, AIC, BIC, and other common
                        measurements to a glance of a prediction
  Aliases: finish_glance
broom::glance_optim     Tidy a(n) optim object masquerading as list
  Aliases: glance_optim, glance.optim
broom::glance.aareg     Glance at a(n) aareg object
  Aliases: glance.aareg
broom::glance.Arima     Glance at a(n) Arima object
  Aliases: glance.Arima
broom::glance.betareg   Glance at a(n) betareg object
  Aliases: glance.betareg
broom::glance.biglm     Glance at a(n) biglm object
  Aliases: glance.biglm
broom::glance.binDesign
                        Glance at a(n) binDesign object
  Aliases: glance.binDesign
broom::glance.cch       Glance at a(n) cch object
  Aliases: glance.cch
broom::glance.coxph     Glance at a(n) coxph object
  Aliases: glance.coxph
broom::glance.cv.glmnet
                        Glance at a(n) cv.glmnet object
  Aliases: glance.cv.glmnet
broom::glance.ergm      Glance at a(n) ergm object
  Aliases: glance.ergm
broom::glance.factanal
                        Glance at a(n) factanal object
  Aliases: glance.factanal
broom::glance.felm      Glance at a(n) felm object
  Aliases: glance.felm
broom::glance.fitdistr
                        Glance at a(n) fitdistr object
  Aliases: glance.fitdistr
broom::glance.gam       Glance at a(n) gam object
  Aliases: glance.gam
broom::glance.Gam       Glance at a(n) Gam object
  Aliases: glance.Gam
broom::glance.garch     Tidy a(n) garch object
  Aliases: glance.garch
broom::glance.glm       Glance at a(n) glm object
  Aliases: glance.glm
broom::glance.glmnet    Glance at a(n) glmnet object
  Aliases: glance.glmnet
broom::glance.glmRob    Glance at a(n) glmRob object
  Aliases: glance.glmRob
broom::glance.gmm       Glance at a(n) gmm object
  Aliases: glance.gmm
broom::glance.ivreg     Glance at a(n) ivreg object
  Aliases: glance.ivreg
broom::glance.kmeans    Glance at a(n) kmeans object
  Aliases: glance.kmeans
broom::glance.lavaan    Glance at a(n) lavaan object
  Aliases: glance.lavaan
broom::glance.lm        Glance at a(n) lm object
  Aliases: glance.lm, glance.summary.lm
broom::glance.lmodel2   Glance at a(n) lmodel2 object
  Aliases: glance.lmodel2
broom::glance.lmRob     Glance at a(n) lmRob object
  Aliases: glance.lmRob
broom::glance.Mclust    Glance at a(n) Mclust object
  Aliases: glance.Mclust
broom::glance.mjoint    Glance at a(n) mjoint object
  Aliases: glance.mjoint
broom::glance.muhaz     Glance at a(n) muhaz object
  Aliases: glance.muhaz
broom::glance.multinom
                        Glance at a(n) multinom object
  Aliases: glance.multinom
broom::glance.nlrq      Glance at a(n) nlrq object
  Aliases: glance.nlrq
broom::glance.nls       Glance at a(n) nls object
  Aliases: glance.nls
broom::glance.orcutt    Glance at a(n) orcutt object
  Aliases: glance.orcutt
broom::glance.plm       Glance at a(n) plm object
  Aliases: glance.plm
broom::glance.poLCA     Augment data with information from a(n) poLCA
                        object
  Aliases: glance.poLCA
broom::glance.pyears    Glance at a(n) pyears object
  Aliases: glance.pyears
broom::glance.ridgelm   Glance at a(n) ridgelm object
  Aliases: glance.ridgelm
broom::glance.rlm       Glance at a(n) rlm object
  Aliases: glance.rlm
broom::glance.rq        Glance at a(n) rq object
  Aliases: glance.rq
broom::glance.smooth.spline
                        Tidy a(n) smooth.spine object
  Aliases: glance.smooth.spline
broom::glance.speedlm   Glance at a(n) speedlm object
  Aliases: glance.speedlm
broom::glance.survdiff
                        Glance at a(n) survdiff object
  Aliases: glance.survdiff
broom::glance.survexp   Glance at a(n) survexp object
  Aliases: glance.survexp
broom::glance.survfit   Glance at a(n) survfit object
  Aliases: glance.survfit
broom::glance.survreg   Glance at a(n) survreg object
  Aliases: glance.survreg
broom::list_tidiers     Tidying methods for lists / returned values
                        that are not S3 objects
  Aliases: glance.list
broom::lme4_tidiers     Tidying methods for mixed effects models
  Aliases: glance.merMod
broom::matrix_tidiers   Tidiers for matrix objects
  Aliases: glance.matrix
broom::nlme_tidiers     Tidying methods for mixed effects models
  Aliases: glance.lme
broom::null_tidiers     Tidiers for NULL inputs
  Aliases: glance.NULL
broom::reexports        Objects exported from other packages
  Aliases: glance
broom::rowwise_df_tidiers
                        Tidying methods for rowwise_dfs from dplyr, for
                        tidying each row and recombining the results
  Aliases: glance.rowwise_df, glance_.rowwise_df, glance.tbl_df
broom::rstanarm_tidiers
                        Tidying methods for an rstanarm model
  Aliases: glance.stanreg
broom::summary_tidiers
                        Tidy/glance a(n) summaryDefault object
  Aliases: glance.summaryDefault
broom::tidy.htest       Tidy/glance a(n) htest object
  Aliases: glance.htest
broom::tidy.polr        Tidying methods for ordinal logistic regression
                        models
  Aliases: glance.polr, glance.clm, glance.clmm, glance.svyolr
DiagrammeR::add_balanced_tree
                        Add a balanced tree to the graph
  Aliases: add_balanced_tree
generics::glance        Glance at an object
  Aliases: glance
methods::asMethodDefinition
                        Method Utilities
  Aliases: balanceMethodsList
nlme::balancedGrouped   Create a groupedData object from a matrix
  Aliases: balancedGrouped
nlme::isBalanced        Check a Design for Balance
  Aliases: isBalanced, isBalanced.groupedData
rpart::solder.balance   Soldering of Components on Printed-Circuit
                        Boards
  Aliases: solder.balance
stats::power.anova.test
                        Power Calculations for Balanced One-Way
                        Analysis of Variance Tests
XML::xmlParent          Get parent node of XMLInternalNode or ancestor
                        nodes
  Aliases: xmlAncestors
XML::xmlSearchNs        Find a namespace definition object by searching
                        ancestor nodes

Type '?PKG::FOO' to inspect entries 'PKG::FOO', or 'TYPE?PKG::FOO' for
entries like 'PKG::FOO-TYPE'.
daslu commented 4 years ago

See also Getting Help with R.

behrica commented 2 years ago

I came up with a basic print-help function

(defn print-help
  ([robject]
   (let [symbol (second  (re-find #"\{(.*)\}" (:code robject)))
         split (clojure.string/split symbol #"::")]

     (print-help (second split) (first split))))
  ([function package]
   (->>
    (r/r (format  "capture.output(tools:::Rd2txt(utils:::.getHelpFile(as.character(help(%s,%s))), options=list(underline_titles=FALSE)))" (name function) (name package)))
    r/r->clj
    (clojure.string/join "\n")
    println)))

It works from the repl with either:

 (print-help "mean" "base")   ;; as well keywords
(print-help base-r/mean)

I did not find anything regarding sections.

behrica commented 2 years ago

I did a draft PR #81

behrica commented 5 months ago

PR was merged, so I close this.