diff --git a/listing.html b/listing.html index 818f339..6ce83ba 100644 --- a/listing.html +++ b/listing.html @@ -164,7 +164,7 @@

Slides

-
+
@@ -192,7 +192,7 @@

-
+
@@ -220,7 +220,7 @@

-
+
@@ -248,7 +248,7 @@

-
+
@@ -276,7 +276,7 @@

-
+
@@ -304,7 +304,7 @@

-
+
@@ -332,7 +332,7 @@

-
+
@@ -360,7 +360,7 @@

-
+
diff --git a/search.json b/search.json index d44fb9f..985a02c 100644 --- a/search.json +++ b/search.json @@ -227,57 +227,57 @@ "objectID": "slides/02_r_packages.html#what-you-know-already", "href": "slides/02_r_packages.html#what-you-know-already", "title": "2 R packages", - "section": "What you know already", - "text": "What you know already\n\nPackages provide a mechanism for loading optional code, data and documentation as needed.\nA library is a directory into which packages are installed.\ninstall.packages() and R CMD INSTALL is used to install packages into the library.\nlibrary() is used to load and attach packages from the library.\n\nattach means that the package is put in your search list (objects in the package can be used directly).\n\nRemember that package \\(\\neq\\) library!" + "section": "What You Know Already", + "text": "What You Know Already\n\nPackages provide a mechanism for loading optional code, data, and documentation\nA library is a directory into which packages are installed\ninstall.packages() is used to install packages into the library\nlibrary() is used to load and attach packages from the library\n\n“Attach” means that the package is put in your search list — objects in the package can be used directly\n\nRemember that package \\(\\neq\\) library" }, { "objectID": "slides/02_r_packages.html#what-we-want-to-talk-about-now", "href": "slides/02_r_packages.html#what-we-want-to-talk-about-now", "title": "2 R packages", - "section": "What we want to talk about now", - "text": "What we want to talk about now\n\nHow to write, build, test, and check your own package 😊\nHow to do this in a good and sustainable way.\nGive tips and tricks based on practical experience." + "section": "What We Want to Talk About Now", + "text": "What We Want to Talk About Now\n\nHow to write, build, test, and check your own package 😊\nHow to do this in a methodical and sustainable way\nGive tips and tricks based on practical experience" }, { "objectID": "slides/02_r_packages.html#how-is-a-package-structured", "href": "slides/02_r_packages.html#how-is-a-package-structured", "title": "2 R packages", - "section": "How is a package structured?", - "text": "How is a package structured?\nPackage source = directory with files and subdirectories.\n\n\n\nMandatory:\n\nDESCRIPTION\nNAMESPACE\nR\nman\n\n\n\n\nTypically also:\n\ndata\ninst\nsrc\ntests\nvignettes\nNEWS" + "section": "How is a Package Structured?", + "text": "How is a Package Structured?\nPackage source = directory with files and subdirectories\n\n\n\nMandatory:\n\nDESCRIPTION\nNAMESPACE\nR\nman\n\n\n\n\nTypically also includes:\n\ndata\ninst\nsrc\ntests\nvignettes\nNEWS" }, { "objectID": "slides/02_r_packages.html#how-to-get-started-quickly", "href": "slides/02_r_packages.html#how-to-get-started-quickly", "title": "2 R packages", - "section": "How to get started quickly", - "text": "How to get started quickly\nOnce upon a time, developers would set up this structure manually. 🥱\nNowadays, it is super fast with:\n\nusethis::create_package()\nRStudio > File > New Project > New Directory > R Package" + "section": "How to Get Started Quickly", + "text": "How to Get Started Quickly\nOnce upon a time, developers would set up this structure manually 🥱\nNowadays, it’s super fast with:\n\nusethis::create_package()\nRStudio > File > New Project > New Directory > R Package" }, { "objectID": "slides/02_r_packages.html#description-file", "href": "slides/02_r_packages.html#description-file", "title": "2 R packages", "section": "DESCRIPTION File", - "text": "DESCRIPTION File\n\nPackage: Choose the name of your package.\n\nNot unimportant!\nCheck CRAN whether your name is still available.\n\nTitle: Add a Title for Your Package. (Title Case)\nVersion: Start with a low package version.\n\nMajor.Minor.Patch syntax\n\nAuthors@R: Add authors and maintainer.\nDescription: Like an abstract, including references." + "text": "DESCRIPTION File\n\nPackage: Choose the name of your package\n\nNot unimportant!\nCheck CRAN to see if your name is available\n\nTitle: Add a Title for Your Package (Title Case)\nVersion: Start with a low package version\n\nMajor.Minor.Patch syntax\n\nAuthors@R: Add authors and maintainer\nDescription: Like an abstract, including references" }, { "objectID": "slides/02_r_packages.html#description-file-contd", "href": "slides/02_r_packages.html#description-file-contd", "title": "2 R packages", "section": "DESCRIPTION File (cont’d)", - "text": "DESCRIPTION File (cont’d)\n\nLicense: Important for open sourcing.\n\nConsider permissive licenses such as Apache and MIT.\n\nDepends:\n\nWhich R version users need to have at least.\nIdeally don’t put any package here.\nPackages will be loaded and attached upon library your package.\n\nImports: Packages which you import functions, methods, classes from.\nSuggests: Packages for documentation processing (roxygen2), running examples, tests (testthat), vignettes." + "text": "DESCRIPTION File (cont’d)\n\nLicense: Important for open sourcing\n\nConsider permissive licenses such as Apache and MIT\n\nDepends:\n\nWhich R version users need to have at a minimum\nIdeally don’t put any package here\nPackages will be loaded and attached upon library your package\n\nImports: Packages which you import functions, methods, classes from\nSuggests: Packages for documentation processing (roxygen2), running examples, tests (testthat), vignettes" }, { "objectID": "slides/02_r_packages.html#r-folder", "href": "slides/02_r_packages.html#r-folder", "title": "2 R packages", "section": "R Folder", - "text": "R Folder\n\nOnly contains R code files (recommended to use .R suffix)\n\nCan create a file with usethis::use_r(\"filename\")\n\nAssigns R objects, i.e. mostly functions, but could also be constant variables, data sets, etc.\nShould not have any side effects, i.e. avoid require(), options() etc.\nIf certain code needs to be sourced first, use on top of file (which will update the Collate field of DESCRIPTION automatically).\n\n\n#' @include dependency.R\nNULL" + "text": "R Folder\n\nOnly contains R code files (recommended to use .R suffix)\n\nCan create a file with usethis::use_r(\"filename\")\n\nAssigns R objects, i.e. mostly functions, but could also be constant variables, data sets, etc.\nShould not have any side effects, i.e. avoid require(), options() etc.\nIf certain code needs to be sourced first, use on top of file (which will update the Collate field of DESCRIPTION automatically)\n\n\n#' @include dependency.R\nNULL" }, { "objectID": "slides/02_r_packages.html#namespace-file", "href": "slides/02_r_packages.html#namespace-file", "title": "2 R packages", "section": "NAMESPACE File", - "text": "NAMESPACE File\n\nDefines the namespace of the package, to work with R’s namespace management system\nNamespace directives in this file allow to specify:\n\nwhich objects are exported to users and other packages\nwhich are imported from other packages" + "text": "NAMESPACE File\n\nDefines the namespace of the package, to work with R’s namespace management system\nNamespace directives in this file allow to specify:\n\nWhich objects are exported to users and other packages\nWhich are imported from other packages" }, { "objectID": "slides/02_r_packages.html#namespace-file-contd", @@ -291,14 +291,14 @@ "href": "slides/02_r_packages.html#man-folder", "title": "2 R packages", "section": "man Folder", - "text": "man Folder\n\nContains documentation files for the objects in the package in the .Rd format\n\nThe syntax is a bit similar to LaTeX\n\nAll user level objects should be documented\nInternal objects don’t need to be documented, but may be (and I would recommend it)\nOnce upon a time, developers would set up these .Rd files and the NAMESPACE manually. 🥱\nFortunately, nowadays we have roxygen2! 🚀" + "text": "man Folder\n\nContains documentation files for the objects in the package in the .Rd format\n\nThe syntax is a bit similar to LaTeX\n\nAll user level objects should be documented\nInternal objects don’t need to be documented — but I recommend it!\nOnce upon a time, developers would set up these .Rd files and the NAMESPACE manually 🥱\nFortunately, nowadays we have roxygen2! 🚀" }, { "objectID": "slides/02_r_packages.html#roxygen2-to-the-rescue", "href": "slides/02_r_packages.html#roxygen2-to-the-rescue", "title": "2 R packages", "section": "roxygen2 to the Rescue!", - "text": "roxygen2 to the Rescue!\n\nWe can include the documentation source directly in the R script, on top of the objects we are documenting\nSyntax is composed of special comments #' and special macros preceded with @\nIn RStudio running Build > More > Document will render the .Rd files and the NAMESPACE file for you\nGet started with usethis::use_roxygen_md()\nInside a function, click Code > Insert Roxygen Skeleton" + "text": "roxygen2 to the Rescue!\n\nWe can include the documentation source directly in the R script on top of the objects we are documenting\nSyntax is composed of special comments #' and special macros preceded with @\nIn RStudio, running Build > More > Document will render the .Rd files and the NAMESPACE file for you\nGet started with usethis::use_roxygen_md()\nPlacing your cursor inside a function in RStudio, create a roxygen2 skeleton with Code > Insert Roxygen Skeleton" }, { "objectID": "slides/02_r_packages.html#setting-up-roxygen2-in-your-project", @@ -333,7 +333,7 @@ "href": "slides/02_r_packages.html#tests-folder", "title": "2 R packages", "section": "tests Folder", - "text": "tests Folder\n\nHere we store the unit tests covering the functionality of the package\nGet started with usethis::use_testthat() and usethis::use_test() and populate tests/testthat folder with unit tests\nRarely, tests cannot be run within testthat framework, then these can go into R scripts directly in tests directory\nWe will look at unit tests in detail later" + "text": "tests Folder\n\nWhere store the unit tests covering the functionality of the package\nGet started with usethis::use_testthat() and usethis::use_test() and populate tests/testthat folder with unit tests\nRarely, tests cannot be run within testthat framework, then these can go into R scripts directly in tests directory\nWe will look at unit tests in detail later" }, { "objectID": "slides/02_r_packages.html#data-folder", @@ -354,7 +354,7 @@ "href": "slides/02_r_packages.html#src-folder", "title": "2 R packages", "section": "src Folder", - "text": "src Folder\n\nContains sources and headers for any code that needs compilation\nShould only contain a single language here\n\nBecause R uses it, mixing C, C++ and Fortran usually works with OS native compilers\n\nMuch more complex to write and maintain than an R only package\nTypically only makes sense for\n\nwrapping existing libraries for use in R\nspeeding up complex computations - starting point: Rcpp::Rcpp.package.skeleton()" + "text": "src Folder\n\nContains sources and headers for any code that needs compilation\nShould only contain a single language here\n\nBecause R uses it, mixing C, C++ and Fortran usually works with OS native compilers\n\nMuch more complex to write and maintain than an R only package\nTypically only makes sense for\n\nWrapping existing libraries for use in R\nSpeeding up complex computations — starting point: Rcpp::Rcpp.package.skeleton()" }, { "objectID": "slides/02_r_packages.html#vignettes-folder", @@ -374,36 +374,36 @@ "objectID": "slides/02_r_packages.html#documenting-the-package", "href": "slides/02_r_packages.html#documenting-the-package", "title": "2 R packages", - "section": "Documenting the package", - "text": "Documenting the package\n\nThe first step is to produce the documentation files and NAMESPACE\nIn RStudio: Build > More > Document" + "section": "Documenting the Package", + "text": "Documenting the Package\n\nThe first step is to produce the documentation files and NAMESPACE\nIn RStudio: Build > More > Document\nIn the console: devtools::document()" }, { "objectID": "slides/02_r_packages.html#checking-the-package", "href": "slides/02_r_packages.html#checking-the-package", "title": "2 R packages", - "section": "Checking the package", - "text": "Checking the package\n\nR comes with pre-defined check command for packages: “the R package checker” aka R CMD check\nAbout 22 checks are run (so quite a lot), including things like:\n\npackage can be installed\nis the code syntax ok\nis the documentation complete\ntests are run\nexamples are being run\n\nIn RStudio: Build > Check" + "section": "Checking the Package", + "text": "Checking the Package\n\nR comes with pre-defined check command for packages: “the R package checker” aka R CMD check\nAbout 22 checks are run (so quite a lot), including things like:\n\nCan the package be installed?\nIs the code syntax ok?\nIs the documentation complete?\nDo tests run successfully?\nDo examples run successfully?\n\nIn RStudio: Build > Check\nIn the console: devtools::check()" }, { "objectID": "slides/02_r_packages.html#building-the-package-1", "href": "slides/02_r_packages.html#building-the-package-1", "title": "2 R packages", - "section": "Building the package", - "text": "Building the package\n\nThe R package folder can be compressed into a single package file\nTypically we manually only build “source” package\n\nIn RStudio: Build > More > Build Source Package\nMakes it easy to share the package with others and submit to CRAN" + "section": "Building the Package", + "text": "Building the Package\n\nThe R package folder can be compressed into a single package file\nTypically we manually only build “source” package\n\nIn RStudio: Build > More > Build Source Package\nIn the console: devtools::build()\n\nMakes it easy to share the package with others and submit to CRAN" }, { "objectID": "slides/02_r_packages.html#installing-the-package", "href": "slides/02_r_packages.html#installing-the-package", "title": "2 R packages", - "section": "Installing the package", - "text": "Installing the package\n\nR comes with pre-defined install command for packages: R CMD INSTALL\nIn RStudio: Build > Install\nNote: During development it is usually sufficient to use Build > More > Load All\n\nRuns devtools::load_all()\nRoughly simulates what happens when package would be installed and loaded\nUnexported objects and helpers under tests will also be available\nKey: much faster!" + "section": "Installing the Package", + "text": "Installing the Package\n\nR comes with pre-defined install command for packages: R CMD INSTALL\nIn RStudio: Build > Install\nIn the console: devtools::install()\nNote: During development it’s usually sufficient to use Build > More > Load All\n\nRuns devtools::load_all()\nRoughly simulates what happens when package would be installed and loaded\nUnexported objects and helpers under tests will also be available\nKey: much faster!" }, { "objectID": "slides/02_r_packages.html#lets-try-this-out-now", "href": "slides/02_r_packages.html#lets-try-this-out-now", "title": "2 R packages", "section": "Let’s try this out now 😊", - "text": "Let’s try this out now 😊\n\nSet up a new R package with a fancy name\nFill out the DESCRIPTION file\nInclude a new function\nAdd roxygen documentation\nExport the function to the namespace\nProduce the package documentation\nRun checks\nBuild the package" + "text": "Let’s try this out now 😊\n\nSet up a new R package with a fancy name\nFill out the DESCRIPTION file\nInclude a new function\nAdd roxygen2 documentation\nExport the function to the namespace\nProduce the package documentation\nRun checks\nBuild the package" }, { "objectID": "slides/05_collaboration.html#disclaimer", @@ -641,14 +641,14 @@ "href": "slides/03_workflow.html#example---step-3-packaging-4", "title": "3 An R Package Engineering Workflow", "section": "Example - Step 3: Packaging", - "text": "Example - Step 3: Packaging\nThe output is impractical, e.g., we need to scroll down:\n\nx <- getSimulatedTwoArmMeans(n1 = 50, n2 = 50, mean1 = 5, mean2 = 7, sd1 = 3, sd2 = 4)\nx\n\n$n1\n[1] 50\n\n$n2\n[1] 50\n\n$mean1\n[1] 5\n\n$mean2\n[1] 7\n\n$sd1\n[1] 3\n\n$sd2\n[1] 4\n\n$data\n group values\n1 1 -1.0989890\n2 1 0.5081247\n3 1 3.2752442\n4 1 4.5954234\n5 1 3.4190768\n6 1 1.2416532\n7 1 5.8157812\n8 1 1.7845435\n9 1 6.2530946\n10 1 5.1484650\n11 1 1.5208294\n12 1 4.1366052\n13 1 -2.6611459\n14 1 3.7090648\n15 1 5.9477441\n16 1 8.4434802\n17 1 6.8905064\n18 1 6.6822268\n19 1 2.0759552\n20 1 3.6167286\n21 1 3.1755806\n22 1 1.9375149\n23 1 8.3514228\n24 1 2.7438954\n25 1 -0.8190702\n26 1 10.1813886\n27 1 0.5595279\n28 1 7.6786697\n29 1 2.0423421\n30 1 3.8559494\n31 1 3.3249912\n32 1 9.9337884\n33 1 6.3854649\n34 1 5.2741435\n35 1 4.7491552\n36 1 4.6850883\n37 1 1.7768169\n38 1 -1.6270866\n39 1 3.9233983\n40 1 1.2638548\n41 1 3.9395545\n42 1 5.3002399\n43 1 11.2088644\n44 1 8.8977810\n45 1 6.8260864\n46 1 1.0399827\n47 1 3.1527095\n48 1 3.6640921\n49 1 4.6063857\n50 1 10.3345062\n51 2 2.7501154\n52 2 11.3992896\n53 2 12.3400279\n54 2 6.8492705\n55 2 6.7118129\n56 2 3.1292559\n57 2 3.3748756\n58 2 2.7557342\n59 2 9.1877313\n60 2 4.7414075\n61 2 6.6861958\n62 2 10.2678750\n63 2 6.0629004\n64 2 5.1982385\n65 2 6.0987192\n66 2 10.9919301\n67 2 9.7047143\n68 2 8.4257174\n69 2 8.0568067\n70 2 7.0165045\n71 2 7.3937317\n72 2 11.1263958\n73 2 11.0425326\n74 2 1.1896045\n75 2 4.6321438\n76 2 -3.4556428\n77 2 8.6537006\n78 2 17.5259147\n79 2 7.8400828\n80 2 7.2045550\n81 2 3.8335215\n82 2 4.8359558\n83 2 0.7520632\n84 2 5.3734900\n85 2 8.3209747\n86 2 7.6882405\n87 2 5.9364872\n88 2 9.1997744\n89 2 1.4227847\n90 2 7.5759891\n91 2 2.7533687\n92 2 7.2003729\n93 2 4.9688701\n94 2 9.4393558\n95 2 3.4060712\n96 2 11.5979452\n97 2 9.8175883\n98 2 -0.4579281\n99 2 2.3680494\n100 2 8.4797840\n\nattr(,\"class\")\n[1] \"SimulationResult\"\n\n\n\nSolution: implement generic function print" + "text": "Example - Step 3: Packaging\nThe output is impractical, e.g., we need to scroll down:\n\nx <- getSimulatedTwoArmMeans(n1 = 50, n2 = 50, mean1 = 5, mean2 = 7, sd1 = 3, sd2 = 4)\nx\n\n$n1\n[1] 50\n\n$n2\n[1] 50\n\n$mean1\n[1] 5\n\n$mean2\n[1] 7\n\n$sd1\n[1] 3\n\n$sd2\n[1] 4\n\n$data\n group values\n1 1 7.1141343\n2 1 4.9315856\n3 1 6.8486559\n4 1 5.4232044\n5 1 2.0878172\n6 1 7.9193614\n7 1 5.0556225\n8 1 3.4090045\n9 1 9.7855215\n10 1 3.8303040\n11 1 3.7302685\n12 1 4.3866876\n13 1 9.8628574\n14 1 4.1734530\n15 1 2.6518951\n16 1 2.2552217\n17 1 11.0663756\n18 1 3.9420508\n19 1 2.7530683\n20 1 1.8982550\n21 1 9.7836621\n22 1 7.7106822\n23 1 1.4399343\n24 1 3.3501130\n25 1 4.2583536\n26 1 3.8472150\n27 1 0.2564559\n28 1 6.5326474\n29 1 6.5880382\n30 1 9.4028417\n31 1 -0.9343407\n32 1 1.9990465\n33 1 4.0288828\n34 1 7.4840710\n35 1 0.1842904\n36 1 5.9709388\n37 1 7.6466984\n38 1 9.3550466\n39 1 2.0881370\n40 1 -2.1755447\n41 1 2.9977860\n42 1 6.7294280\n43 1 8.3300580\n44 1 4.2954388\n45 1 2.6732828\n46 1 8.7928899\n47 1 1.3333301\n48 1 0.6293590\n49 1 9.5145804\n50 1 11.6575330\n51 2 2.4621112\n52 2 10.3836529\n53 2 4.5212149\n54 2 3.9959644\n55 2 4.5571831\n56 2 1.7348850\n57 2 4.0642302\n58 2 6.3167981\n59 2 1.4109089\n60 2 6.9872869\n61 2 12.2999664\n62 2 10.4135432\n63 2 8.2688656\n64 2 8.3836911\n65 2 10.0665325\n66 2 6.8688208\n67 2 0.6668342\n68 2 3.5497866\n69 2 6.5461608\n70 2 9.0016588\n71 2 -0.6333340\n72 2 5.9230671\n73 2 9.8329140\n74 2 6.6980313\n75 2 2.8278715\n76 2 9.7458649\n77 2 15.4828345\n78 2 7.0957971\n79 2 1.5220685\n80 2 1.9195722\n81 2 9.9000047\n82 2 1.4549744\n83 2 6.6066112\n84 2 8.0371548\n85 2 10.1152841\n86 2 12.3816661\n87 2 4.7092046\n88 2 12.5869406\n89 2 11.9338095\n90 2 9.2895885\n91 2 4.9470729\n92 2 2.4782172\n93 2 5.0117435\n94 2 12.4354892\n95 2 7.2910415\n96 2 2.7287502\n97 2 3.4961628\n98 2 9.4721105\n99 2 8.7174763\n100 2 6.7803903\n\nattr(,\"class\")\n[1] \"SimulationResult\"\n\n\n\nSolution: implement generic function print" }, { "objectID": "slides/03_workflow.html#example---step-3-packaging-5", "href": "slides/03_workflow.html#example---step-3-packaging-5", "title": "3 An R Package Engineering Workflow", "section": "Example - Step 3: Packaging", - "text": "Example - Step 3: Packaging\nGeneric function print:\n\nCodeRoxygenOutput\n\n\n\nprint.SimulationResult <- function(x, ...) {\n args <- list(n1 = x$n1, n2 = x$n2, \n mean1 = x$mean1, mean2 = x$mean2, sd1 = x$sd1, sd2 = x$sd2)\n \n print(list(\n args = format(args), \n data = dplyr::tibble(x$data)\n ), ...)\n}\nx\n\n\n\n\n#' @title\n#' Print Simulation Result\n#'\n#' @description\n#' Generic function to print a `SimulationResult` object.\n#'\n#' @param x a \\code{SimulationResult} object to print.\n#' @param ... further arguments passed to or from other methods.\n#' \n#' @examples\n#' x <- getSimulatedTwoArmMeans(n1 = 50, n2 = 50, mean1 = 5, \n#' mean2 = 7, sd1 = 3, sd2 = 4, seed = 123)\n#' print(x)\n#'\n#' @export\n\n\n\n\n\n$args\n n1 n2 mean1 mean2 sd1 sd2 \n \"50\" \"50\" \"5\" \"7\" \"3\" \"4\" \n\n$data\n# A tibble: 100 × 2\n group values\n <dbl> <dbl>\n 1 1 -1.10 \n 2 1 0.508\n 3 1 3.28 \n 4 1 4.60 \n 5 1 3.42 \n 6 1 1.24 \n 7 1 5.82 \n 8 1 1.78 \n 9 1 6.25 \n10 1 5.15 \n# ℹ 90 more rows" + "text": "Example - Step 3: Packaging\nGeneric function print:\n\nCodeRoxygenOutput\n\n\n\nprint.SimulationResult <- function(x, ...) {\n args <- list(n1 = x$n1, n2 = x$n2, \n mean1 = x$mean1, mean2 = x$mean2, sd1 = x$sd1, sd2 = x$sd2)\n \n print(list(\n args = format(args), \n data = dplyr::tibble(x$data)\n ), ...)\n}\nx\n\n\n\n\n#' @title\n#' Print Simulation Result\n#'\n#' @description\n#' Generic function to print a `SimulationResult` object.\n#'\n#' @param x a \\code{SimulationResult} object to print.\n#' @param ... further arguments passed to or from other methods.\n#' \n#' @examples\n#' x <- getSimulatedTwoArmMeans(n1 = 50, n2 = 50, mean1 = 5, \n#' mean2 = 7, sd1 = 3, sd2 = 4, seed = 123)\n#' print(x)\n#'\n#' @export\n\n\n\n\n\n$args\n n1 n2 mean1 mean2 sd1 sd2 \n \"50\" \"50\" \"5\" \"7\" \"3\" \"4\" \n\n$data\n# A tibble: 100 × 2\n group values\n <dbl> <dbl>\n 1 1 7.11\n 2 1 4.93\n 3 1 6.85\n 4 1 5.42\n 5 1 2.09\n 6 1 7.92\n 7 1 5.06\n 8 1 3.41\n 9 1 9.79\n10 1 3.83\n# ℹ 90 more rows" }, { "objectID": "slides/03_workflow.html#preparation", @@ -844,21 +844,21 @@ "href": "slides/06_publication.html#setup-of-pkgdown", "title": "6 Publication", "section": "Setup of pkgdown", - "text": "Setup of pkgdown\n\npkgdown makes it quick and easy to build a website for your package\nAfter installing pkgdown, just use usethis::use_pkgdown() to get started\nMain configuration happens in _pkgdown.yml file\nMany customizations can be applied, but main work during development is to keep the reference section updated with names of .Rd files" + "text": "Setup of pkgdown\n\npkgdown makes it quick and easy to build a website for your package\nAfter installing pkgdown, run usethis::use_pkgdown() to get started\nMain configuration happens in _pkgdown.yml file\nMany customizations can be applied, but bulk of work during development is updating the reference section with names of .Rd files" }, { "objectID": "slides/06_publication.html#example-_pkgdown.yml-file", "href": "slides/06_publication.html#example-_pkgdown.yml-file", "title": "6 Publication", - "section": "Example _pkgdown.yml file", - "text": "Example _pkgdown.yml file\n---\nurl: https://openpharma.github.io/mmrm\n\ntemplate:\n bootstrap: 5\n params:\n ganalytics: UA-125641273-1\n\nnavbar:\n right:\n - icon: fa-github\n href: https://github.com/openpharma/mmrm\n\nreference:\n - title: Package\n contents:\n - mmrm-package\n - title: Functions\n contents:\n - mmrm\n - fit_mmrm\n - mmrm_control\n - fit_single_optimizer\n - refit_multiple_optimizers\n - df_1d\n - df_md\n - component" + "section": "Example _pkgdown.yml File", + "text": "Example _pkgdown.yml File\n---\nurl: https://openpharma.github.io/mmrm\n\ntemplate:\n bootstrap: 5\n params:\n ganalytics: UA-125641273-1\n\nnavbar:\n right:\n - icon: fa-github\n href: https://github.com/openpharma/mmrm\n\nreference:\n - title: Package\n contents:\n - mmrm-package\n - title: Functions\n contents:\n - mmrm\n - fit_mmrm\n - mmrm_control\n - fit_single_optimizer\n - refit_multiple_optimizers\n - df_1d\n - df_md\n - component" }, { "objectID": "slides/06_publication.html#publication-as-github-page", "href": "slides/06_publication.html#publication-as-github-page", "title": "6 Publication", "section": "Publication as GitHub Page", - "text": "Publication as GitHub Page\n\nIt is helpful for users to read the website online\nGitHub is very helpful here because it allows\n\nA separate branch gh-pages that stores the rendered website\nGitHub actions automatically render the website when the main branch is updated\n\nTo get started, use usethis::use_pkgdown_github_pages()\n\nOr, manually deploy site with pkgdown::deploy_to_branch()" + "text": "Publication as GitHub Page\n\nIt’s helpful for users to read the website online\nGitHub is very helpful here because:\n\nA separate branch, gh-pages, stores the rendered website\nGitHub actions automatically render the website when the main branch is updated\n\nTo get started, use usethis::use_pkgdown_github_pages()\n\nOr, manually deploy site with pkgdown::deploy_to_branch()" }, { "objectID": "slides/06_publication.html#licensing", @@ -914,7 +914,7 @@ "href": "slides/06_publication.html#cran-contd-2", "title": "6 Publication", "section": "CRAN (cont’d)", - "text": "CRAN (cont’d)\nExample message informing about the rejection of the last rpact submission:\nDear maintainer,\npackage rpact_3.3.2.tar.gz does not pass the incoming checks automatically, please see the following pre-tests:\nWindows: 00check.log Status: OK, Debian: 00check.log Status: OK\nPlease fix all problems and resubmit a fixed version via the webform.\nBest regards,\nCRAN teams’ auto-check service\nr-devel-windows-x86_64 Check: Result: NA, Maintainer: ‘Friedrich Pahlke’\nr-devel-windows-x86_64 Check: Overall checktime, Result: NOTE, Overall checktime 12 min > 10 min\nr-devel-linux-x86_64-debian-gcc Check: Result: Note_to_CRAN_maintainers Maintainer: ‘Friedrich Pahlke’" + "text": "CRAN (cont’d)\nExample message informing about the rejection of the last rpact submission:\n\nDear maintainer,\npackage rpact_3.3.2.tar.gz does not pass the incoming checks automatically, please see the following pre-tests:\nWindows: 00check.log Status: OK, Debian: 00check.log Status: OK\nPlease fix all problems and resubmit a fixed version via the webform.\nBest regards,\nCRAN teams’ auto-check service\nr-devel-windows-x86_64 Check: Result: NA, Maintainer: ‘Friedrich Pahlke’\nr-devel-windows-x86_64 Check: Overall checktime, Result: NOTE, Overall checktime 12 min > 10 min\nr-devel-linux-x86_64-debian-gcc Check: Result: Note_to_CRAN_maintainers Maintainer: ‘Friedrich Pahlke’" }, { "objectID": "slides/06_publication.html#r-hub-to-the-rescue", @@ -951,6 +951,13 @@ "section": "Releases: Example", "text": "Releases: Example" }, + { + "objectID": "slides/06_publication.html#a-note-on-bioconductor", + "href": "slides/06_publication.html#a-note-on-bioconductor", + "title": "6 Publication", + "section": "A Note on Bioconductor", + "text": "A Note on Bioconductor\n\nThe Bioconductor project develops, supports, and disseminates open source software for the analysis of biological assays\nLike CRAN, Bioconductor has additional package requirements\nPackages are peer reviewed by community members\nNew packages and updates to existing packages are released semi-annually\nSoftware is expected to be interoperable with other Bioconductor packages through the re-use of common data structures and infrastructure" + }, { "objectID": "slides/04_quality.html#why-is-clean-code-important", "href": "slides/04_quality.html#why-is-clean-code-important", diff --git a/sitemap.xml b/sitemap.xml index 0a708c6..ce1a275 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,46 +2,46 @@ https://openpharma.github.io/workshop-r-swe-mtl/index.html - 2023-10-15T23:34:46.615Z + 2023-10-16T13:49:23.659Z https://openpharma.github.io/workshop-r-swe-mtl/listing.html - 2023-10-15T23:34:44.275Z + 2023-10-16T13:49:20.875Z https://openpharma.github.io/workshop-r-swe-mtl/slides/01_intro.html - 2023-10-15T23:34:40.283Z + 2023-10-16T13:49:16.255Z https://openpharma.github.io/workshop-r-swe-mtl/slides/08_conclusion.html - 2023-10-15T23:34:36.935Z + 2023-10-16T13:49:12.222Z https://openpharma.github.io/workshop-r-swe-mtl/slides/02_r_packages.html - 2023-10-15T23:34:34.047Z + 2023-10-16T13:49:08.842Z https://openpharma.github.io/workshop-r-swe-mtl/slides/05_collaboration.html - 2023-10-15T23:34:27.679Z + 2023-10-16T13:49:01.702Z https://openpharma.github.io/workshop-r-swe-mtl/slides/03_workflow.html - 2023-10-15T23:34:32.203Z + 2023-10-16T13:49:06.702Z https://openpharma.github.io/workshop-r-swe-mtl/slides/07_shiny.html - 2023-10-15T23:34:35.879Z + 2023-10-16T13:49:10.982Z https://openpharma.github.io/workshop-r-swe-mtl/slides/06_publication.html - 2023-10-15T23:34:38.319Z + 2023-10-16T13:49:13.910Z https://openpharma.github.io/workshop-r-swe-mtl/slides/04_quality.html - 2023-10-15T23:34:43.007Z + 2023-10-16T13:49:19.487Z https://openpharma.github.io/workshop-r-swe-mtl/LICENSE.html - 2023-10-15T23:34:44.999Z + 2023-10-16T13:49:21.731Z diff --git a/slides/02_r_packages.html b/slides/02_r_packages.html index 8731e21..cbcc845 100644 --- a/slides/02_r_packages.html +++ b/slides/02_r_packages.html @@ -410,34 +410,34 @@

Introduction

-

What you know already

+

What You Know Already

    -
  • Packages provide a mechanism for loading optional code, data and documentation as needed.
  • -
  • A library is a directory into which packages are installed.
  • -
  • install.packages() and R CMD INSTALL is used to install packages into the library.
  • -
  • library() is used to load and attach packages from the library. +
  • Packages provide a mechanism for loading optional code, data, and documentation
  • +
  • A library is a directory into which packages are installed
  • +
  • install.packages() is used to install packages into the library
  • +
  • library() is used to load and attach packages from the library
      -
    • attach means that the package is put in your search list (objects in the package can be used directly).
    • +
    • “Attach” means that the package is put in your search list — objects in the package can be used directly
  • -
  • Remember that package \(\neq\) library!
  • +
  • Remember that package \(\neq\) library
-

What we want to talk about now

+

What We Want to Talk About Now

  • How to write, build, test, and check your own package 😊
  • -
  • How to do this in a good and sustainable way.
  • -
  • Give tips and tricks based on practical experience.
  • +
  • How to do this in a methodical and sustainable way
  • +
  • Give tips and tricks based on practical experience
-

Contents of a package

+

Contents of a Package

-

How is a package structured?

-

Package source = directory with files and subdirectories.

+

How is a Package Structured?

+

Package source = directory with files and subdirectories

    @@ -451,7 +451,7 @@

    How is a package structured?

    -
  • Typically also: +
  • Typically also includes:
    • data
    • inst
    • @@ -465,9 +465,9 @@

      How is a package structured?

-

How to get started quickly

-

Once upon a time, developers would set up this structure manually. 🥱

-

Nowadays, it is super fast with:

+

How to Get Started Quickly

+

Once upon a time, developers would set up this structure manually 🥱

+

Nowadays, it’s super fast with:

  • usethis::create_package()
  • RStudio > File > New Project > New Directory > R Package
  • @@ -477,35 +477,35 @@

    How to get started quickly

    DESCRIPTION File

      -
    • Package: Choose the name of your package. +
    • Package: Choose the name of your package
      • Not unimportant!
      • -
      • Check CRAN whether your name is still available.
      • +
      • Check CRAN to see if your name is available
    • -
    • Title: Add a Title for Your Package. (Title Case)
    • -
    • Version: Start with a low package version. +
    • Title: Add a Title for Your Package (Title Case)
    • +
    • Version: Start with a low package version
      • Major.Minor.Patch syntax
    • -
    • Authors@R: Add authors and maintainer.
    • -
    • Description: Like an abstract, including references.
    • +
    • Authors@R: Add authors and maintainer
    • +
    • Description: Like an abstract, including references

    DESCRIPTION File (cont’d)

      -
    • License: Important for open sourcing. +
    • License: Important for open sourcing
        -
      • Consider permissive licenses such as Apache and MIT.
      • +
      • Consider permissive licenses such as Apache and MIT
    • Depends:
        -
      • Which R version users need to have at least.
      • -
      • Ideally don’t put any package here.
      • -
      • Packages will be loaded and attached upon library your package.
      • +
      • Which R version users need to have at a minimum
      • +
      • Ideally don’t put any package here
      • +
      • Packages will be loaded and attached upon library your package
    • -
    • Imports: Packages which you import functions, methods, classes from.
    • -
    • Suggests: Packages for documentation processing (roxygen2), running examples, tests (testthat), vignettes.
    • +
    • Imports: Packages which you import functions, methods, classes from
    • +
    • Suggests: Packages for documentation processing (roxygen2), running examples, tests (testthat), vignettes
    @@ -517,7 +517,7 @@

    R Folder

  • Assigns R objects, i.e. mostly functions, but could also be constant variables, data sets, etc.
  • Should not have any side effects, i.e. avoid require(), options() etc.
  • -
  • If certain code needs to be sourced first, use on top of file (which will update the Collate field of DESCRIPTION automatically).
  • +
  • If certain code needs to be sourced first, use on top of file (which will update the Collate field of DESCRIPTION automatically)
  • #' @include dependency.R
    @@ -530,8 +530,8 @@ 

    NAMESPACE File

  • Defines the namespace of the package, to work with R’s namespace management system
  • Namespace directives in this file allow to specify:
      -
    • which objects are exported to users and other packages
    • -
    • which are imported from other packages
    • +
    • Which objects are exported to users and other packages
    • +
    • Which are imported from other packages
  • @@ -556,19 +556,19 @@

    man Folder

  • The syntax is a bit similar to LaTeX
  • All user level objects should be documented
  • -
  • Internal objects don’t need to be documented, but may be (and I would recommend it)
  • -
  • Once upon a time, developers would set up these .Rd files and the NAMESPACE manually. 🥱
  • +
  • Internal objects don’t need to be documented — but I recommend it!
  • +
  • Once upon a time, developers would set up these .Rd files and the NAMESPACE manually 🥱
  • Fortunately, nowadays we have roxygen2! 🚀
  • roxygen2 to the Rescue!

      -
    • We can include the documentation source directly in the R script, on top of the objects we are documenting
    • +
    • We can include the documentation source directly in the R script on top of the objects we are documenting
    • Syntax is composed of special comments #' and special macros preceded with @
    • -
    • In RStudio running Build > More > Document will render the .Rd files and the NAMESPACE file for you
    • +
    • In RStudio, running Build > More > Document will render the .Rd files and the NAMESPACE file for you
    • Get started with usethis::use_roxygen_md()
    • -
    • Inside a function, click Code > Insert Roxygen Skeleton
    • +
    • Placing your cursor inside a function in RStudio, create a roxygen2 skeleton with Code > Insert Roxygen Skeleton
    @@ -641,7 +641,7 @@

    roxygen2 Output (cont’d)

    tests Folder

      -
    • Here we store the unit tests covering the functionality of the package
    • +
    • Where store the unit tests covering the functionality of the package
    • Get started with usethis::use_testthat() and usethis::use_test() and populate tests/testthat folder with unit tests
    • Rarely, tests cannot be run within testthat framework, then these can go into R scripts directly in tests directory
    • We will look at unit tests in detail later
    • @@ -692,8 +692,8 @@

      src Folder

    • Much more complex to write and maintain than an R only package
    • Typically only makes sense for
        -
      • wrapping existing libraries for use in R
      • -
      • speeding up complex computations - starting point: Rcpp::Rcpp.package.skeleton()
      • +
      • Wrapping existing libraries for use in R
      • +
      • Speeding up complex computations — starting point: Rcpp::Rcpp.package.skeleton()
    @@ -721,48 +721,52 @@

    NEWS File

    -

    Building the package

    +

    Building the Package

    -

    Documenting the package

    +

    Documenting the Package

    • The first step is to produce the documentation files and NAMESPACE
    • In RStudio: Build > More > Document
    • +
    • In the console: devtools::document()
    -

    Checking the package

    +

    Checking the Package

    • R comes with pre-defined check command for packages: “the R package checker” aka R CMD check
    • About 22 checks are run (so quite a lot), including things like:
        -
      • package can be installed
      • -
      • is the code syntax ok
      • -
      • is the documentation complete
      • -
      • tests are run
      • -
      • examples are being run
      • +
      • Can the package be installed?
      • +
      • Is the code syntax ok?
      • +
      • Is the documentation complete?
      • +
      • Do tests run successfully?
      • +
      • Do examples run successfully?
    • In RStudio: Build > Check
    • +
    • In the console: devtools::check()
    -

    Building the package

    +

    Building the Package

    • The R package folder can be compressed into a single package file
    • Typically we manually only build “source” package
      • In RStudio: Build > More > Build Source Package
      • -
      • Makes it easy to share the package with others and submit to CRAN
      • +
      • In the console: devtools::build()
    • +
    • Makes it easy to share the package with others and submit to CRAN
    -

    Installing the package

    +

    Installing the Package

    • R comes with pre-defined install command for packages: R CMD INSTALL
    • In RStudio: Build > Install
    • -
    • Note: During development it is usually sufficient to use Build > More > Load All +
    • In the console: devtools::install()
    • +
    • Note: During development it’s usually sufficient to use Build > More > Load All
      • Runs devtools::load_all()
      • Roughly simulates what happens when package would be installed and loaded
      • @@ -782,7 +786,7 @@

        Let’s try this out now 😊

      • Set up a new R package with a fancy name
      • Fill out the DESCRIPTION file
      • Include a new function
      • -
      • Add roxygen documentation
      • +
      • Add roxygen2 documentation
      • Export the function to the namespace
      • Produce the package documentation
      • Run checks
      • @@ -800,10 +804,10 @@

        References

    -

    License information

    +

    License Information

    • Creators (initial authors): Daniel Sabanes Bove , Liming Li
    • -
    • In the current version, changes were done by (later authors): TODO: FILL IN, OR IF NOT APPLICABLE DELETE THIS BULLET
    • +
    • In the current version, changes were done by (later authors): Philippe Boileau
    • This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License.
    • The source files are hosted at github.com/openpharma/workshop-r-swe-mtl, which is forked from the original version at github.com/openpharma/workshop-r-swe.
    • Important: To use this work you must provide the name of the creators (initial authors), a link to the material, a link to the license, and indicate if changes were made
    • diff --git a/slides/03_workflow.html b/slides/03_workflow.html index 01b8177..039e01d 100644 --- a/slides/03_workflow.html +++ b/slides/03_workflow.html @@ -735,106 +735,106 @@

      Example - Step 3: Packaging

      $data group values -1 1 -1.0989890 -2 1 0.5081247 -3 1 3.2752442 -4 1 4.5954234 -5 1 3.4190768 -6 1 1.2416532 -7 1 5.8157812 -8 1 1.7845435 -9 1 6.2530946 -10 1 5.1484650 -11 1 1.5208294 -12 1 4.1366052 -13 1 -2.6611459 -14 1 3.7090648 -15 1 5.9477441 -16 1 8.4434802 -17 1 6.8905064 -18 1 6.6822268 -19 1 2.0759552 -20 1 3.6167286 -21 1 3.1755806 -22 1 1.9375149 -23 1 8.3514228 -24 1 2.7438954 -25 1 -0.8190702 -26 1 10.1813886 -27 1 0.5595279 -28 1 7.6786697 -29 1 2.0423421 -30 1 3.8559494 -31 1 3.3249912 -32 1 9.9337884 -33 1 6.3854649 -34 1 5.2741435 -35 1 4.7491552 -36 1 4.6850883 -37 1 1.7768169 -38 1 -1.6270866 -39 1 3.9233983 -40 1 1.2638548 -41 1 3.9395545 -42 1 5.3002399 -43 1 11.2088644 -44 1 8.8977810 -45 1 6.8260864 -46 1 1.0399827 -47 1 3.1527095 -48 1 3.6640921 -49 1 4.6063857 -50 1 10.3345062 -51 2 2.7501154 -52 2 11.3992896 -53 2 12.3400279 -54 2 6.8492705 -55 2 6.7118129 -56 2 3.1292559 -57 2 3.3748756 -58 2 2.7557342 -59 2 9.1877313 -60 2 4.7414075 -61 2 6.6861958 -62 2 10.2678750 -63 2 6.0629004 -64 2 5.1982385 -65 2 6.0987192 -66 2 10.9919301 -67 2 9.7047143 -68 2 8.4257174 -69 2 8.0568067 -70 2 7.0165045 -71 2 7.3937317 -72 2 11.1263958 -73 2 11.0425326 -74 2 1.1896045 -75 2 4.6321438 -76 2 -3.4556428 -77 2 8.6537006 -78 2 17.5259147 -79 2 7.8400828 -80 2 7.2045550 -81 2 3.8335215 -82 2 4.8359558 -83 2 0.7520632 -84 2 5.3734900 -85 2 8.3209747 -86 2 7.6882405 -87 2 5.9364872 -88 2 9.1997744 -89 2 1.4227847 -90 2 7.5759891 -91 2 2.7533687 -92 2 7.2003729 -93 2 4.9688701 -94 2 9.4393558 -95 2 3.4060712 -96 2 11.5979452 -97 2 9.8175883 -98 2 -0.4579281 -99 2 2.3680494 -100 2 8.4797840 +1 1 7.1141343 +2 1 4.9315856 +3 1 6.8486559 +4 1 5.4232044 +5 1 2.0878172 +6 1 7.9193614 +7 1 5.0556225 +8 1 3.4090045 +9 1 9.7855215 +10 1 3.8303040 +11 1 3.7302685 +12 1 4.3866876 +13 1 9.8628574 +14 1 4.1734530 +15 1 2.6518951 +16 1 2.2552217 +17 1 11.0663756 +18 1 3.9420508 +19 1 2.7530683 +20 1 1.8982550 +21 1 9.7836621 +22 1 7.7106822 +23 1 1.4399343 +24 1 3.3501130 +25 1 4.2583536 +26 1 3.8472150 +27 1 0.2564559 +28 1 6.5326474 +29 1 6.5880382 +30 1 9.4028417 +31 1 -0.9343407 +32 1 1.9990465 +33 1 4.0288828 +34 1 7.4840710 +35 1 0.1842904 +36 1 5.9709388 +37 1 7.6466984 +38 1 9.3550466 +39 1 2.0881370 +40 1 -2.1755447 +41 1 2.9977860 +42 1 6.7294280 +43 1 8.3300580 +44 1 4.2954388 +45 1 2.6732828 +46 1 8.7928899 +47 1 1.3333301 +48 1 0.6293590 +49 1 9.5145804 +50 1 11.6575330 +51 2 2.4621112 +52 2 10.3836529 +53 2 4.5212149 +54 2 3.9959644 +55 2 4.5571831 +56 2 1.7348850 +57 2 4.0642302 +58 2 6.3167981 +59 2 1.4109089 +60 2 6.9872869 +61 2 12.2999664 +62 2 10.4135432 +63 2 8.2688656 +64 2 8.3836911 +65 2 10.0665325 +66 2 6.8688208 +67 2 0.6668342 +68 2 3.5497866 +69 2 6.5461608 +70 2 9.0016588 +71 2 -0.6333340 +72 2 5.9230671 +73 2 9.8329140 +74 2 6.6980313 +75 2 2.8278715 +76 2 9.7458649 +77 2 15.4828345 +78 2 7.0957971 +79 2 1.5220685 +80 2 1.9195722 +81 2 9.9000047 +82 2 1.4549744 +83 2 6.6066112 +84 2 8.0371548 +85 2 10.1152841 +86 2 12.3816661 +87 2 4.7092046 +88 2 12.5869406 +89 2 11.9338095 +90 2 9.2895885 +91 2 4.9470729 +92 2 2.4782172 +93 2 5.0117435 +94 2 12.4354892 +95 2 7.2910415 +96 2 2.7287502 +97 2 3.4961628 +98 2 9.4721105 +99 2 8.7174763 +100 2 6.7803903 attr(,"class") [1] "SimulationResult"
      @@ -894,16 +894,16 @@

      Example - Step 3: Packaging

      # A tibble: 100 × 2 group values <dbl> <dbl> - 1 1 -1.10 - 2 1 0.508 - 3 1 3.28 - 4 1 4.60 - 5 1 3.42 - 6 1 1.24 - 7 1 5.82 - 8 1 1.78 - 9 1 6.25 -10 1 5.15 + 1 1 7.11 + 2 1 4.93 + 3 1 6.85 + 4 1 5.42 + 5 1 2.09 + 6 1 7.92 + 7 1 5.06 + 8 1 3.41 + 9 1 9.79 +10 1 3.83 # ℹ 90 more rows
    diff --git a/slides/06_publication.html b/slides/06_publication.html index 93da7ed..201db93 100644 --- a/slides/06_publication.html +++ b/slides/06_publication.html @@ -413,13 +413,13 @@

    Website with pkgdown

    Setup of pkgdown

    -

    Example _pkgdown.yml file

    +

    Example _pkgdown.yml File

    ---
     url: https://openpharma.github.io/mmrm
     
    @@ -454,10 +454,10 @@ 

    Publication as GitHub Page

      -
    • It is helpful for users to read the website online
    • -
    • GitHub is very helpful here because it allows +
    • It’s helpful for users to read the website online
    • +
    • GitHub is very helpful here because:
        -
      • A separate branch gh-pages that stores the rendered website
      • +
      • A separate branch, gh-pages, stores the rendered website
      • GitHub actions automatically render the website when the main branch is updated
    • To get started, use usethis::use_pkgdown_github_pages() @@ -538,7 +538,7 @@

      Versioning

    -

    Checks before Release

    +

    Checks Before Release

    @@ -581,6 +581,7 @@

    CRAN (cont’d)

    CRAN (cont’d)

    Example message informing about the rejection of the last rpact submission:

    +

    Dear maintainer,

    package rpact_3.3.2.tar.gz does not pass the incoming checks automatically, please see the following pre-tests:
    Windows: 00check.log Status: OK, Debian: 00check.log Status: OK

    @@ -590,6 +591,7 @@

    CRAN (cont’d)

    r-devel-windows-x86_64 Check: Result: NA, Maintainer: ‘Friedrich Pahlke’
    r-devel-windows-x86_64 Check: Overall checktime, Result: NOTE, Overall checktime 12 min > 10 min
    r-devel-linux-x86_64-debian-gcc Check: Result: Note_to_CRAN_maintainers Maintainer: ‘Friedrich Pahlke’

    +

    R-Hub to the Rescue

    @@ -643,6 +645,21 @@

    Releases

    Releases: Example

    +
    +
    +

    Bioconductor

    + +
    +
    +

    A Note on Bioconductor

    +
      +
    • The Bioconductor project develops, supports, and disseminates open source software for the analysis of biological assays
    • +
    • Like CRAN, Bioconductor has additional package requirements
    • +
    • Packages are peer reviewed by community members
    • +
    • New packages and updates to existing packages are released semi-annually
    • +
    • Software is expected to be interoperable with other Bioconductor packages through the re-use of common data structures and infrastructure
    • +
    +

    References

    @@ -676,10 +694,10 @@

    Exercise

    -

    License information

    +

    License Information