From f41b69b4654071ab3c26f95deac10624a3e64c24 Mon Sep 17 00:00:00 2001 From: Ashley Richardson <55455892+aricha17@users.noreply.github.com> Date: Mon, 5 Feb 2024 16:23:30 -0500 Subject: [PATCH] Initial commit --- .Rbuildignore | 16 +++ .github/ISSUE_TEMPLATE/bug_report.md | 52 +++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++ .github/workflows/rworkflows.yml | 58 ++++++++++ .gitignore | 43 +++++++ DESCRIPTION | 45 ++++++++ NAMESPACE | 2 + NEWS.md | 3 + R/message_parallel.r | 8 ++ R/messager.R | 22 ++++ R/stopper.R | 18 +++ README.Rmd | 45 ++++++++ README.md | 53 +++++++++ inst/CITATION | 15 +++ inst/hex/hex.png | Bin 0 -> 57395 bytes inst/hex/hexSticker.Rmd | 130 ++++++++++++++++++++++ man/message_parallel.Rd | 15 +++ man/messager.Rd | 24 ++++ man/stopper.Rd | 21 ++++ tests/testthat.R | 7 ++ tests/testthat/test-messager.R | 13 +++ tests/testthat/test-stopper.R | 6 + vignettes/echoverseTemplate.Rmd | 42 +++++++ 23 files changed, 658 insertions(+) create mode 100644 .Rbuildignore create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/workflows/rworkflows.yml create mode 100644 .gitignore create mode 100644 DESCRIPTION create mode 100644 NAMESPACE create mode 100644 NEWS.md create mode 100644 R/message_parallel.r create mode 100644 R/messager.R create mode 100644 R/stopper.R create mode 100644 README.Rmd create mode 100644 README.md create mode 100644 inst/CITATION create mode 100644 inst/hex/hex.png create mode 100644 inst/hex/hexSticker.Rmd create mode 100644 man/message_parallel.Rd create mode 100644 man/messager.Rd create mode 100644 man/stopper.Rd create mode 100644 tests/testthat.R create mode 100644 tests/testthat/test-messager.R create mode 100644 tests/testthat/test-stopper.R create mode 100644 vignettes/echoverseTemplate.Rmd diff --git a/.Rbuildignore b/.Rbuildignore new file mode 100644 index 0000000..f62a415 --- /dev/null +++ b/.Rbuildignore @@ -0,0 +1,16 @@ +.*\.Rproj$ +^\.Rproj\.user$ +^README.Rmd +^\.github$ +^doc$ +^Meta$ +^codecov\.yml$ +^_pkgdown\.yml$ +^docs$ +^pkgdown$ +Dockerfile +^LICENSE\.md$ + +node_modules$ +package-lock\.json$ +package\.json$ diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..72148b0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,52 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +## 1. Bug description + +(A clear and concise description of what the bug is.) + +### Expected behaviour + +(A clear and concise description of what you expected to happen.) + + +## 2. Reproducible example + +### Code + +(Please add the steps to reproduce the bug here. See [here](https://www.r-bloggers.com/2020/10/how-to-make-a-reprex/) for an intro to making a reproducible example (i.e. reprex) and why they're important! __This will help us to help you much faster.__) + +```R +# Paste example here + +``` + +### Console output + +``` +# Paste console output here (e.g. from R/python/command line) + +``` + +### Data + +(If possible, upload a small sample of your data so that we can reproduce the bug on our end. If that's not possible, please at least include a screenshot of your data and other relevant details.) + + +## 3. Session info + +(Add output of the R function `utils::sessionInfo()` below. This helps us assess version/OS conflicts which could be causing bugs.) + +
+ +``` +# Paste utils::sessionInfo() output + +``` +
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..bbcbbe7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/workflows/rworkflows.yml b/.github/workflows/rworkflows.yml new file mode 100644 index 0000000..9b40bf2 --- /dev/null +++ b/.github/workflows/rworkflows.yml @@ -0,0 +1,58 @@ +name: rworkflows +'on': + push: + branches: + - master + - main + - devel + - RELEASE_** + pull_request: + branches: + - master + - main + - devel + - RELEASE_** +jobs: + rworkflows: + permissions: + contents: write + packages: write + runs-on: ${{ matrix.config.os }} + name: ${{ matrix.config.os }} (${{ matrix.config.r }}) + container: ${{ matrix.config.cont }} + strategy: + fail-fast: ${{ false }} + matrix: + config: + - os: ubuntu-latest + bioc: devel + r: auto + cont: ghcr.io/bioconductor/bioconductor_docker:devel + rspm: https://packagemanager.rstudio.com/cran/__linux__/latest/release + - os: macOS-latest + bioc: release + r: auto + cont: ~ + rspm: ~ + - os: windows-latest + bioc: release + r: auto + cont: ~ + rspm: ~ + steps: + - uses: neurogenomics/rworkflows@master + with: + run_bioccheck: ${{ false }} + run_rcmdcheck: ${{ true }} + as_cran: ${{ true }} + run_vignettes: ${{ true }} + has_testthat: ${{ true }} + run_covr: ${{ true }} + run_pkgdown: ${{ true }} + has_runit: ${{ false }} + has_latex: ${{ false }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run_docker: ${{ false }} + DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }} + runner_os: ${{ runner.os }} + cache_version: cache-v1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3ab2ec7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,43 @@ +# R project files +*.Rproj +.Rproj.user +.Ruserdata +# History files +.Rhistory +.Rapp.history +# Session Data files +.RData +# User-specific files +.Ruserdata +# .DS_Store +# find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch +.DS_Store +./.DS_Store +./**/.DS_Store +./**/**/.DS_Store +./**/**/**/.DS_Store +./**/**/**/**/.DS_Store +./**/**/**/**/**/.DS_Store +./**/**/**/**/**/**/.DS_Store +# Example code in package build process +*-Ex.R +# Output files from R CMD build +/*.tar.gz +# Output files from R CMD check +/*.Rcheck/ +# RStudio files +.Rproj.user/ +# produced vignettes +vignettes/*.html +vignettes/*.pdf +vignettes/*.R +# OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3 +.httr-oauth +# knitr and R markdown default cache directories +*_cache/ +/cache/ +# Temporary files created by R markdown +*.utf8.md +*.knit.md +# R Environment Variables +.Renviron \ No newline at end of file diff --git a/DESCRIPTION b/DESCRIPTION new file mode 100644 index 0000000..08a5676 --- /dev/null +++ b/DESCRIPTION @@ -0,0 +1,45 @@ +Package: echoverseTemplate +Type: Package +Title: echoverse module: echoversePackageTitle +Version: 0.99.0 +Authors@R: + c(person(given = "Brian", + family = "Schilder", + role = c("aut","cre"), + email = "brian_schilder@alumni.brown.edu", + comment = c(ORCID = "0000-0001-5949-2191")), + person(given = "Jack", + family = "Humphrey", + role = c("aut"), + email = "Jack.Humphrey@mssm.edu", + comment = c(ORCID = "0000-0002-6274-6620")), + person(given = "Towfique", + family = "Raj", + role = c("aut"), + email = "towfique.raj@mssm.edu", + comment = c(ORCID = "0000-0002-9355-5704")) + ) +Description: echoverse module: echoversePackageDescription. +URL: https://github.com/RajLabMSSM/echoverseTemplate +BugReports: https://github.com/RajLabMSSM/echoverseTemplate/issues +Encoding: UTF-8 +Depends: R (>= 4.1) +biocViews: + Software, Genetics, FunctionalGenomics, SystemsBiology +Imports: +Suggests: + rworkflows, + markdown, + rmarkdown, + remotes, + knitr, + BiocStyle, + covr, + testthat (>= 3.0.0), + utils, + rlang, + methods +RoxygenNote: 7.2.3 +VignetteBuilder: knitr +License: GPL-3 +Config/testthat/edition: 3 diff --git a/NAMESPACE b/NAMESPACE new file mode 100644 index 0000000..6ae9268 --- /dev/null +++ b/NAMESPACE @@ -0,0 +1,2 @@ +# Generated by roxygen2: do not edit by hand + diff --git a/NEWS.md b/NEWS.md new file mode 100644 index 0000000..2aaa0b5 --- /dev/null +++ b/NEWS.md @@ -0,0 +1,3 @@ +# echoverseTemplate 0.99.0 + +* Added a `NEWS.md` file to track changes to the package. diff --git a/R/message_parallel.r b/R/message_parallel.r new file mode 100644 index 0000000..929e6d4 --- /dev/null +++ b/R/message_parallel.r @@ -0,0 +1,8 @@ +#' Message parallel +#' +#' Send messages to console even from within parallel processes +#' @return Null +#' @keywords internal +message_parallel <- function(...) { + system(sprintf('echo "%s"', paste0(..., collapse = ""))) +} diff --git a/R/messager.R b/R/messager.R new file mode 100644 index 0000000..f154b44 --- /dev/null +++ b/R/messager.R @@ -0,0 +1,22 @@ +#' Print messages +#' +#' Conditionally print messages. +#' Allows developers to easily control verbosity of functions, +#' and meet Bioconductor requirements that dictate the message +#' must first be stored to a variable before passing to \link[base]{message}. +#' +#' +#' @param v Whether to print messages or not. +#' @param parallel Whether to enable message print when wrapped +#' in parallelised functions. +#' +#' @return Null +#' @keywords internal +messager <- function(..., v = TRUE, parallel = FALSE) { + if(parallel){ + if(v) try({message_parallel(...)}) + } else { + msg <- paste(...) + if (v) try({message(msg)}) + } +} diff --git a/R/stopper.R b/R/stopper.R new file mode 100644 index 0000000..78cdf7c --- /dev/null +++ b/R/stopper.R @@ -0,0 +1,18 @@ +#' Stop messages +#' +#' Conditionally print stop messages. +#' Allows developers to easily control verbosity of functions, +#' and meet Bioconductor requirements that dictate the stop message +#' must first be stored to a variable before passing to \link[base]{stop}. +#' @param v Whether to print messages or not. +#' +#' @return Null +#' @keywords internal +stopper <- function(..., v = TRUE) { + msg <- paste(...) + if (v) { + stop(msg) + } else { + stop() + } +} diff --git a/README.Rmd b/README.Rmd new file mode 100644 index 0000000..698240e --- /dev/null +++ b/README.Rmd @@ -0,0 +1,45 @@ +--- +title: "" +author: "`r rworkflows::use_badges(add_doi = '10.1093/bioinformatics/btab658')`" +output: + github_document +--- + +```{r, echo=FALSE, include=FALSE} +pkg <- read.dcf("DESCRIPTION", fields = "Package")[1] +description <- read.dcf("DESCRIPTION", fields = "Description")[1] |> + gsub(pattern="\n", replacement=" ") +``` + +## ``r pkg``: `r gsub("echoverse module: ","", description)` + +This R package is part of the *echoverse* suite that supports +[`echolocatoR`](https://github.com/RajLabMSSM/echolocatoR): +an automated genomic fine-mapping pipeline. + +If you use ``r pkg``, please cite: + +> `r citation(pkg)$textVersion` + +## Installation + +```R +if(!require("remotes")) install.packages("remotes") + +remotes::install_github("RajLabMSSM/`r pkg`") +library(`r pkg`) +``` +## Documentation + +### [Website](https://rajlabmssm.github.io/`r pkg`) +### [Get started](https://rajlabmssm.github.io/`r pkg`/articles/`r pkg`) + +
+ +## Contact + +Brian +M. Schilder, Bioinformatician II +Raj Lab +Department +of Neuroscience, Icahn School of Medicine at Mount Sinai diff --git a/README.md b/README.md new file mode 100644 index 0000000..5decfa5 --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +
+[![License: +GPL-3](https://img.shields.io/badge/license-GPL--3-blue.svg)](https://cran.r-project.org/web/licenses/GPL-3) +[![](https://img.shields.io/badge/doi-10.1093/bioinformatics/btab658-blue.svg)](https://doi.org/10.1093/bioinformatics/btab658) +[![](https://img.shields.io/badge/devel%20version-0.99.0-black.svg)](https://github.com/RajLabMSSM/echoverseTemplate) +[![](https://img.shields.io/github/languages/code-size/RajLabMSSM/echoverseTemplate.svg)](https://github.com/RajLabMSSM/echoverseTemplate) +[![](https://img.shields.io/github/last-commit/RajLabMSSM/echoverseTemplate.svg)](https://github.com/RajLabMSSM/echoverseTemplate/commits/master) +
[![R build +status](https://github.com/RajLabMSSM/echoverseTemplate/workflows/rworkflows/badge.svg)](https://github.com/RajLabMSSM/echoverseTemplate/actions) +[![](https://codecov.io/gh/RajLabMSSM/echoverseTemplate/branch/master/graph/badge.svg)](https://app.codecov.io/gh/RajLabMSSM/echoverseTemplate) +
+ +

+Authors: Brian Schilder, Jack Humphrey, Towfique Raj +

+ +## `echoverseTemplate`: echoversePackageDescription. + +This R package is part of the *echoverse* suite that supports +[`echolocatoR`](https://github.com/RajLabMSSM/echolocatoR): an automated +genomic fine-mapping pipeline. + +If you use `echoverseTemplate`, please cite: + +> Brian M Schilder, Jack Humphrey, Towfique Raj (2021) echolocatoR: an +> automated end-to-end statistical and functional genomic fine-mapping +> pipeline, *Bioinformatics*; btab658, +> + +## Installation + +``` r +if(!require("remotes")) install.packages("remotes") + +remotes::install_github("RajLabMSSM/echoverseTemplate") +library(echoverseTemplate) +``` + +## Documentation + +### [Website](https://rajlabmssm.github.io/echoverseTemplate) + +### [Get started](https://rajlabmssm.github.io/echoverseTemplate/articles/echoverseTemplate) + +
+ +## Contact + +Brian +M. Schilder, Bioinformatician II +Raj Lab +Department +of Neuroscience, Icahn School of Medicine at Mount Sinai diff --git a/inst/CITATION b/inst/CITATION new file mode 100644 index 0000000..b81f114 --- /dev/null +++ b/inst/CITATION @@ -0,0 +1,15 @@ +citHeader("To cite this echoverse package, please use:") + +citEntry( + entry = "Article", + title = "echolocatoR: an automated end-to-end statistical and functional genomic fine-mapping pipeline", + author = "Brian M Schilder, Jack Humphrey, Towfique Raj", + journal = "Bioinformatics", + year = "2021", + volume = "btab658", + number = NULL, + pages = NULL, + url = "https://doi.org/10.1093/bioinformatics/btab658", + textVersion = paste("Brian M Schilder, Jack Humphrey, Towfique Raj (2021) echolocatoR: an automated end-to-end statistical and functional genomic fine-mapping pipeline, *Bioinformatics*; btab658, [https://doi.org/10.1093/bioinformatics/btab658](https://doi.org/10.1093/bioinformatics/btab658)" + ) +) diff --git a/inst/hex/hex.png b/inst/hex/hex.png new file mode 100644 index 0000000000000000000000000000000000000000..c8721ecab8c296ac11d4b487b9f1de23ad95125a GIT binary patch literal 57395 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

MFl&`%%;aP(*X4s-M5q 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 literal 0 HcmV?d00001 diff --git a/inst/hex/hexSticker.Rmd b/inst/hex/hexSticker.Rmd new file mode 100644 index 0000000..cfe6efa --- /dev/null +++ b/inst/hex/hexSticker.Rmd @@ -0,0 +1,130 @@ +--- +title: "hexSticker" +author: "

Author: Brian M. Schilder

" +date: "

Updated: `r format( Sys.Date(), '%b-%d-%Y')`

" +output: + BiocStyle::html_document +vignette: > + %\VignetteIndexEntry{hexSticker} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r, echo=FALSE, include=FALSE} +pkg <- read.dcf(here::here("DESCRIPTION"), fields = "Package")[1] +description <- read.dcf(here::here("DESCRIPTION"), fields = "Description")[1] +``` + +You can make awesome hex stickers for your R packages using: + +- [hexSticker](https://github.com/GuangchuangYu/hexSticker) +- [ggimage](https://github.com/GuangchuangYu/ggimage) +lets you render images as data points. +- [ggpattern](https://coolbutuseless.github.io/package/ggpattern/) +lets you fill objects with patterns or images. +- [magick](https://cran.r-project.org/web/packages/magick/vignettes/intro.html) +modify PNGs. + +# `r pkg` + +```{r setup} +# If you're using R<4.1.1, need this version of rvcheck +# devtools::install_version('rvcheck',version='0.1.8') +library(hexSticker) +library(dplyr) +library(ggplot2) +library(ggimage) +# library(ggpattern)# remotes::install_github("coolbutuseless/ggpattern") +``` + +## File path + +Create file path. + +```{r} +filename <- here::here("inst/hex/hex.png") +dir.create(dirname(filename), showWarnings = FALSE, recursive = TRUE) +``` + +## Bat logo + +Download bat logo from the +[*echoverseTemplate*](https://github.com/RajLabMSSM/echoverseTemplate/releases/tag/latest) +GitHub Release. + +```{r} +tmp <- tempfile() +#### Side view #### +URL <- "https://github.com/RajLabMSSM/echoverseTemplate/releases/download/latest/bat_silhouette.png" +#### Front view #### +# URL <- "https://github.com/RajLabMSSM/echoverseTemplate/releases/download/latest/bat_silhouette_front.png" +download.file(URL, tmp) +``` + +## Background + +Create background with `ggplot2`. + +```{r, eval=FALSE} +set.seed(1234) +n_bats <- 20 +d <- data.frame(x = -rexp(n_bats, rate = 3), + y = rexp(n_bats, rate = 3) + ) |> + dplyr::mutate(image = URL, + bsize = abs(x*y^2)) |> + dplyr::arrange(dplyr::desc(x), dplyr::desc(y)) +qplot(d$x, d$y, size=d$bsize) +``` + +Import data points for reproducibility. + +```{r} +d <- data.table::fread("https://github.com/RajLabMSSM/echoverseTemplate/releases/download/latest/echoverse_points.csv.gz") +``` + + +```{r} +gg_bats <- ggplot(d, aes(x = x, y = y, color=bsize, image=image)) + + geom_image(aes(size=I(bsize)), alpha=1) + + scale_color_gradient(low = "#194f68", high = "#56ffff") + + coord_cartesian(clip = "off") + + labs(title = "echoverse") + + theme_void() + + theme(plot.title = element_text(color = "#56ffff", size = 25, + hjust = .5, vjust = 5, family = "Aller_Rg"), + legend.position = "none") + +print(gg_bats) +``` + +## hexSticker + +```{r} +s_size = 1 +stick <- hexSticker::sticker( + subplot = gg_bats, + #### Package name #### + package = pkg, p_size=14, p_y = 1.4, + #### Subplot ##### + s_x=1, s_y=.8, s_height = s_size, s_width = s_size, + #### Fill & border #### + h_fill = "#25355c", h_color = "#41c6c8", #56ffff + #### Spotlight #### + spotlight = TRUE, l_alpha = .3, l_width = 10, + #### File output #### + filename = filename, dpi = 300) +print(stick) +``` + + +# Session Info + +
+ +```{r Session Info} +utils::sessionInfo() +``` + +
+ diff --git a/man/message_parallel.Rd b/man/message_parallel.Rd new file mode 100644 index 0000000..4c978e8 --- /dev/null +++ b/man/message_parallel.Rd @@ -0,0 +1,15 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/message_parallel.r +\name{message_parallel} +\alias{message_parallel} +\title{Message parallel} +\usage{ +message_parallel(...) +} +\value{ +Null +} +\description{ +Send messages to console even from within parallel processes +} +\keyword{internal} diff --git a/man/messager.Rd b/man/messager.Rd new file mode 100644 index 0000000..989a5af --- /dev/null +++ b/man/messager.Rd @@ -0,0 +1,24 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/messager.R +\name{messager} +\alias{messager} +\title{Print messages} +\usage{ +messager(..., v = TRUE, parallel = FALSE) +} +\arguments{ +\item{v}{Whether to print messages or not.} + +\item{parallel}{Whether to enable message print when wrapped +in parallelised functions.} +} +\value{ +Null +} +\description{ +Conditionally print messages. + Allows developers to easily control verbosity of functions, + and meet Bioconductor requirements that dictate the message + must first be stored to a variable before passing to \link[base]{message}. +} +\keyword{internal} diff --git a/man/stopper.Rd b/man/stopper.Rd new file mode 100644 index 0000000..ceb98f3 --- /dev/null +++ b/man/stopper.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/stopper.R +\name{stopper} +\alias{stopper} +\title{Stop messages} +\usage{ +stopper(..., v = TRUE) +} +\arguments{ +\item{v}{Whether to print messages or not.} +} +\value{ +Null +} +\description{ +Conditionally print stop messages. +Allows developers to easily control verbosity of functions, + and meet Bioconductor requirements that dictate the stop message + must first be stored to a variable before passing to \link[base]{stop}. +} +\keyword{internal} diff --git a/tests/testthat.R b/tests/testthat.R new file mode 100644 index 0000000..d07238f --- /dev/null +++ b/tests/testthat.R @@ -0,0 +1,7 @@ +desc_path <- list.files("../","^DESCRIPTION$", + full.names = TRUE, recursive = TRUE)[1] +pkg <- read.dcf(desc_path, fields = "Package")[1] +library(testthat) +library(pkg, character.only = TRUE) + +test_check(pkg) diff --git a/tests/testthat/test-messager.R b/tests/testthat/test-messager.R new file mode 100644 index 0000000..e955ea9 --- /dev/null +++ b/tests/testthat/test-messager.R @@ -0,0 +1,13 @@ +test_that("messager works", { + + msg <- "Hello world" + #### Default #### + msg_out <- utils::capture.output(messager(msg), + type = "message") + testthat::expect_equal(msg, msg_out) + #### Parallel #### + f <- textConnection("test3", "w") + msg_out2 <- utils::capture.output(messager(msg, parallel = TRUE), + type = "message") + testthat::expect_equal(msg_out2, character()) +}) diff --git a/tests/testthat/test-stopper.R b/tests/testthat/test-stopper.R new file mode 100644 index 0000000..f44b2d9 --- /dev/null +++ b/tests/testthat/test-stopper.R @@ -0,0 +1,6 @@ +test_that("stopper works", { + + msg <- "You have encountered an error" + testthat::expect_error(stopper(msg = msg)) + testthat::expect_error(stopper(msg = msg, v=FALSE)) +}) diff --git a/vignettes/echoverseTemplate.Rmd b/vignettes/echoverseTemplate.Rmd new file mode 100644 index 0000000..7d4b791 --- /dev/null +++ b/vignettes/echoverseTemplate.Rmd @@ -0,0 +1,42 @@ +--- +title: Get started +author: '

Authors: `r auths <- eval(parse(text = gsub("person","c",read.dcf("../DESCRIPTION", + fields = "Authors@R"))));paste(auths[names(auths)=="given"],auths[names(auths)=="family"], + collapse = ", ")`

' +date: '

Vignette updated: `r format( Sys.Date(), "%b-%d-%Y")`

' +output: BiocStyle::html_document +vignette: | + %\VignetteIndexEntry{echoverseTemplate} + %\usepackage[utf8]{inputenc} + %\VignetteEngine{knitr::rmarkdown} +--- + + +```{r, echo=FALSE, include=FALSE} +pkg <- read.dcf("../DESCRIPTION", fields = "Package")[1] +library(pkg, character.only = TRUE) +``` + + +```R +library(`r pkg`) +``` + +# Examples + +```{r} + +``` + + +# Session Info + +
+ +```{r Session Info} +utils::sessionInfo() +``` + +
+ +