From 76c808e8a8951ac9e9a6497500d02679f4989719 Mon Sep 17 00:00:00 2001 From: danielinteractive Date: Sun, 7 Apr 2024 19:24:12 +0000 Subject: [PATCH] deploy: 7638745a12477ffa7d6624658034856725cf6258 --- listing.html | 18 +-- search.json | 6 +- sitemap.xml | 24 ++-- slides/03_workflow.html | 222 +++++++++++++++++------------------ slides/08_optimization.html | 49 ++++---- slides/download/simulatr.zip | Bin 14385 -> 22553 bytes 6 files changed, 164 insertions(+), 155 deletions(-) diff --git a/listing.html b/listing.html index ea50432..6dea909 100644 --- a/listing.html +++ b/listing.html @@ -164,7 +164,7 @@

Slides

-
+
@@ -189,7 +189,7 @@

-
+
@@ -214,7 +214,7 @@

-
+
@@ -239,7 +239,7 @@

-
+
@@ -264,7 +264,7 @@

-
+
@@ -289,7 +289,7 @@

-
+
@@ -314,7 +314,7 @@

-
+
@@ -339,7 +339,7 @@

-
+
@@ -364,7 +364,7 @@

-
+
diff --git a/search.json b/search.json index f1958f1..473f3e0 100644 --- a/search.json +++ b/search.json @@ -200,14 +200,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 5.7818599\n2 1 2.2847028\n3 1 5.3983734\n4 1 2.9184438\n5 1 3.2603027\n6 1 3.8330480\n7 1 3.3933269\n8 1 7.0194349\n9 1 3.1882631\n10 1 3.3977514\n11 1 5.3960739\n12 1 4.2549329\n13 1 5.9134178\n14 1 6.3075702\n15 1 8.9947757\n16 1 2.8329812\n17 1 5.7221230\n18 1 7.3033073\n19 1 1.6294365\n20 1 3.0523486\n21 1 13.6510560\n22 1 3.8379746\n23 1 2.5651188\n24 1 3.5120915\n25 1 7.4219343\n26 1 5.4711330\n27 1 1.7159593\n28 1 5.0016733\n29 1 8.1568474\n30 1 6.8759317\n31 1 7.2046522\n32 1 1.8213727\n33 1 5.9207002\n34 1 5.6971769\n35 1 1.8991480\n36 1 -0.9112914\n37 1 10.3629755\n38 1 4.5559458\n39 1 3.5756622\n40 1 6.5361629\n41 1 3.5286742\n42 1 3.7058528\n43 1 -0.3460540\n44 1 2.5194376\n45 1 5.4434472\n46 1 8.0298859\n47 1 5.4018084\n48 1 1.5917499\n49 1 4.2809107\n50 1 -1.8314465\n51 2 5.2168488\n52 2 11.1099768\n53 2 -4.1645791\n54 2 0.6001590\n55 2 14.4016415\n56 2 9.0360940\n57 2 5.8468881\n58 2 7.4697700\n59 2 3.6172057\n60 2 9.7330635\n61 2 10.5131572\n62 2 4.8128598\n63 2 8.1820964\n64 2 6.3991693\n65 2 5.5782284\n66 2 12.0040273\n67 2 8.8068605\n68 2 7.4331907\n69 2 13.4903725\n70 2 6.0240017\n71 2 12.7493886\n72 2 4.2964761\n73 2 1.0745569\n74 2 4.5252232\n75 2 0.3565439\n76 2 4.7004079\n77 2 7.2128419\n78 2 10.0551684\n79 2 9.4038642\n80 2 7.7671698\n81 2 6.0917495\n82 2 13.4652278\n83 2 3.0221983\n84 2 9.9500011\n85 2 9.2555940\n86 2 5.2511124\n87 2 11.1868692\n88 2 7.5034715\n89 2 4.5176991\n90 2 2.9324020\n91 2 6.5668530\n92 2 8.4883223\n93 2 6.3254743\n94 2 2.3097076\n95 2 5.1352736\n96 2 14.0524737\n97 2 11.7603599\n98 2 9.2052021\n99 2 12.0578946\n100 2 14.7762096\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.18176354\n2 1 5.37544894\n3 1 4.88238485\n4 1 6.25134368\n5 1 5.90451804\n6 1 6.33041813\n7 1 9.23858090\n8 1 3.91042484\n9 1 1.21768411\n10 1 6.15153803\n11 1 7.51609333\n12 1 7.20262211\n13 1 4.96727315\n14 1 5.27549596\n15 1 3.53130187\n16 1 13.65535361\n17 1 7.89461761\n18 1 3.91105003\n19 1 6.57648282\n20 1 5.08759919\n21 1 5.17777503\n22 1 5.08930500\n23 1 8.78730811\n24 1 3.37160005\n25 1 8.54736371\n26 1 3.98774000\n27 1 6.34837164\n28 1 3.76767167\n29 1 9.23815731\n30 1 4.44153123\n31 1 6.71575973\n32 1 3.90637303\n33 1 -2.67505214\n34 1 5.23804870\n35 1 4.41235233\n36 1 3.07739533\n37 1 11.02733756\n38 1 6.91425576\n39 1 5.95468436\n40 1 8.15714955\n41 1 5.72046585\n42 1 7.23134143\n43 1 7.51341906\n44 1 2.86268324\n45 1 5.79552750\n46 1 5.04298484\n47 1 6.99706279\n48 1 8.59115605\n49 1 7.38552597\n50 1 4.99568139\n51 2 17.70494190\n52 2 15.69911894\n53 2 7.28562390\n54 2 17.31870333\n55 2 8.64980334\n56 2 10.91553000\n57 2 4.18810119\n58 2 8.02072320\n59 2 8.86855014\n60 2 10.60321356\n61 2 8.54591627\n62 2 7.46436847\n63 2 4.67727439\n64 2 3.48160590\n65 2 7.13744384\n66 2 4.06792116\n67 2 9.03510923\n68 2 10.13692787\n69 2 5.45817521\n70 2 8.76551749\n71 2 2.83480220\n72 2 13.21195427\n73 2 0.07573131\n74 2 9.31480629\n75 2 4.67394506\n76 2 7.33848513\n77 2 7.44027851\n78 2 11.23387506\n79 2 7.52840580\n80 2 17.17691097\n81 2 10.85320887\n82 2 6.95872551\n83 2 10.19942219\n84 2 3.81641694\n85 2 8.44619378\n86 2 0.62290956\n87 2 6.01496753\n88 2 8.45260052\n89 2 4.14666312\n90 2 2.06578259\n91 2 7.82808632\n92 2 4.53130816\n93 2 9.30809572\n94 2 8.88547560\n95 2 2.89070005\n96 2 4.53368068\n97 2 14.28705336\n98 2 8.99475159\n99 2 11.20265227\n100 2 10.19172064\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 5.78\n 2 1 2.28\n 3 1 5.40\n 4 1 2.92\n 5 1 3.26\n 6 1 3.83\n 7 1 3.39\n 8 1 7.02\n 9 1 3.19\n10 1 3.40\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.18\n 2 1 5.38\n 3 1 4.88\n 4 1 6.25\n 5 1 5.90\n 6 1 6.33\n 7 1 9.24\n 8 1 3.91\n 9 1 1.22\n10 1 6.15\n# ℹ 90 more rows" }, { "objectID": "slides/03_workflow.html#preparation", @@ -886,7 +886,7 @@ "href": "slides/08_optimization.html#profiling-classic-rprof-output", "title": "8 Code Optimization", "section": "Profiling: Classic Rprof output", - "text": "Profiling: Classic Rprof output\n\nRprof()\nf()\nRprof(NULL)\nsummaryRprof()\n\n$by.self\n self.time self.pct total.time total.pct\n\"profvis::pause\" 0.40 83.33 0.40 83.33\n\".updateMethodsInTable\" 0.02 4.17 0.04 8.33\n\"fun\" 0.02 4.17 0.04 8.33\n\"getGeneric\" 0.02 4.17 0.02 4.17\n\"unique\" 0.02 4.17 0.02 4.17\n\n$by.total\n total.time total.pct self.time self.pct\n\".main\" 0.48 100.00 0.00 0.00\n\"block_exec\" 0.48 100.00 0.00 0.00\n\"call_block\" 0.48 100.00 0.00 0.00\n\"eng_r\" 0.48 100.00 0.00 0.00\n\"eval_with_user_handlers\" 0.48 100.00 0.00 0.00\n\"eval\" 0.48 100.00 0.00 0.00\n\"evaluate_call\" 0.48 100.00 0.00 0.00\n\"evaluate::evaluate\" 0.48 100.00 0.00 0.00\n\"evaluate\" 0.48 100.00 0.00 0.00\n\"execute\" 0.48 100.00 0.00 0.00\n\"f\" 0.48 100.00 0.00 0.00\n\"handle\" 0.48 100.00 0.00 0.00\n\"in_dir\" 0.48 100.00 0.00 0.00\n\"in_input_dir\" 0.48 100.00 0.00 0.00\n\"knitr::knit\" 0.48 100.00 0.00 0.00\n\"process_file\" 0.48 100.00 0.00 0.00\n\"process_group.block\" 0.48 100.00 0.00 0.00\n\"process_group\" 0.48 100.00 0.00 0.00\n\"rmarkdown::render\" 0.48 100.00 0.00 0.00\n\"timing_fn\" 0.48 100.00 0.00 0.00\n\"withCallingHandlers\" 0.48 100.00 0.00 0.00\n\"withVisible\" 0.48 100.00 0.00 0.00\n\"profvis::pause\" 0.40 83.33 0.40 83.33\n\"g\" 0.30 62.50 0.00 0.00\n\"asNamespace\" 0.08 16.67 0.00 0.00\n\"loadNamespace\" 0.08 16.67 0.00 0.00\n\"namespaceImport\" 0.08 16.67 0.00 0.00\n\"namespaceImportFrom\" 0.08 16.67 0.00 0.00\n\".updateMethodsInTable\" 0.04 8.33 0.02 4.17\n\"fun\" 0.04 8.33 0.02 4.17\n\"doTryCatch\" 0.04 8.33 0.00 0.00\n\"methods::cacheMetaData\" 0.04 8.33 0.00 0.00\n\"tryCatch\" 0.04 8.33 0.00 0.00\n\"tryCatchList\" 0.04 8.33 0.00 0.00\n\"tryCatchOne\" 0.04 8.33 0.00 0.00\n\"getGeneric\" 0.02 4.17 0.02 4.17\n\"unique\" 0.02 4.17 0.02 4.17\n\".checkGroupSigLength\" 0.02 4.17 0.00 0.00\n\".make_numeric_version\" 0.02 4.17 0.00 0.00\n\".recMembers\" 0.02 4.17 0.00 0.00\n\"as.numeric_version\" 0.02 4.17 0.00 0.00\n\"eval.parent\" 0.02 4.17 0.00 0.00\n\"getGroupMembers\" 0.02 4.17 0.00 0.00\n\"lazyLoad\" 0.02 4.17 0.00 0.00\n\"lazyLoadDBexec\" 0.02 4.17 0.00 0.00\n\"local\" 0.02 4.17 0.00 0.00\n\"numeric_version\" 0.02 4.17 0.00 0.00\n\"Ops.numeric_version\" 0.02 4.17 0.00 0.00\n\"Recall\" 0.02 4.17 0.00 0.00\n\"runHook\" 0.02 4.17 0.00 0.00\n\"sys.source\" 0.02 4.17 0.00 0.00\n\"try\" 0.02 4.17 0.00 0.00\n\n$sample.interval\n[1] 0.02\n\n$sampling.time\n[1] 0.48" + "text": "Profiling: Classic Rprof output\n\nRprof()\nf()\nRprof(NULL)\nsummaryRprof()\n\n$by.self\n self.time self.pct total.time total.pct\n\"profvis::pause\" 0.40 83.33 0.40 83.33\n\"lazyLoadDBfetch\" 0.04 8.33 0.04 8.33\n\"gzfile\" 0.02 4.17 0.02 4.17\n\"stopifnot\" 0.02 4.17 0.02 4.17\n\n$by.total\n total.time total.pct self.time self.pct\n\".main\" 0.48 100.00 0.00 0.00\n\"block_exec\" 0.48 100.00 0.00 0.00\n\"call_block\" 0.48 100.00 0.00 0.00\n\"eng_r\" 0.48 100.00 0.00 0.00\n\"eval_with_user_handlers\" 0.48 100.00 0.00 0.00\n\"eval\" 0.48 100.00 0.00 0.00\n\"evaluate_call\" 0.48 100.00 0.00 0.00\n\"evaluate::evaluate\" 0.48 100.00 0.00 0.00\n\"evaluate\" 0.48 100.00 0.00 0.00\n\"execute\" 0.48 100.00 0.00 0.00\n\"f\" 0.48 100.00 0.00 0.00\n\"handle\" 0.48 100.00 0.00 0.00\n\"in_dir\" 0.48 100.00 0.00 0.00\n\"in_input_dir\" 0.48 100.00 0.00 0.00\n\"knitr::knit\" 0.48 100.00 0.00 0.00\n\"process_file\" 0.48 100.00 0.00 0.00\n\"process_group.block\" 0.48 100.00 0.00 0.00\n\"process_group\" 0.48 100.00 0.00 0.00\n\"rmarkdown::render\" 0.48 100.00 0.00 0.00\n\"timing_fn\" 0.48 100.00 0.00 0.00\n\"withCallingHandlers\" 0.48 100.00 0.00 0.00\n\"withVisible\" 0.48 100.00 0.00 0.00\n\"profvis::pause\" 0.40 83.33 0.40 83.33\n\"g\" 0.30 62.50 0.00 0.00\n\"asNamespace\" 0.08 16.67 0.00 0.00\n\"loadNamespace\" 0.08 16.67 0.00 0.00\n\"namespaceImport\" 0.08 16.67 0.00 0.00\n\"namespaceImportFrom\" 0.08 16.67 0.00 0.00\n\"doTryCatch\" 0.06 12.50 0.00 0.00\n\"tryCatch\" 0.06 12.50 0.00 0.00\n\"tryCatchList\" 0.06 12.50 0.00 0.00\n\"tryCatchOne\" 0.06 12.50 0.00 0.00\n\"lazyLoadDBfetch\" 0.04 8.33 0.04 8.33\n\"fun\" 0.04 8.33 0.00 0.00\n\"runHook\" 0.04 8.33 0.00 0.00\n\"gzfile\" 0.02 4.17 0.02 4.17\n\"stopifnot\" 0.02 4.17 0.02 4.17\n\".Call\" 0.02 4.17 0.00 0.00\n\".checkGroupSigLength\" 0.02 4.17 0.00 0.00\n\".recMembers\" 0.02 4.17 0.00 0.00\n\".updateMethodsInTable\" 0.02 4.17 0.00 0.00\n\"<Anonymous>\" 0.02 4.17 0.00 0.00\n\"callback\" 0.02 4.17 0.00 0.00\n\"env_get\" 0.02 4.17 0.00 0.00\n\"eval.parent\" 0.02 4.17 0.00 0.00\n\"get\" 0.02 4.17 0.00 0.00\n\"getGeneric\" 0.02 4.17 0.00 0.00\n\"getGroupMembers\" 0.02 4.17 0.00 0.00\n\"is\" 0.02 4.17 0.00 0.00\n\"lazyLoad\" 0.02 4.17 0.00 0.00\n\"lazyLoadDBexec\" 0.02 4.17 0.00 0.00\n\"local\" 0.02 4.17 0.00 0.00\n\"methods::cacheMetaData\" 0.02 4.17 0.00 0.00\n\"readRDS\" 0.02 4.17 0.00 0.00\n\"Recall\" 0.02 4.17 0.00 0.00\n\"replace_from\" 0.02 4.17 0.00 0.00\n\"resolve\" 0.02 4.17 0.00 0.00\n\"run_on_load\" 0.02 4.17 0.00 0.00\n\"set2\" 0.02 4.17 0.00 0.00\n\"setNames\" 0.02 4.17 0.00 0.00\n\"sys.source\" 0.02 4.17 0.00 0.00\n\"try\" 0.02 4.17 0.00 0.00\n\n$sample.interval\n[1] 0.02\n\n$sampling.time\n[1] 0.48" }, { "objectID": "slides/08_optimization.html#profiling-getting-visual", diff --git a/sitemap.xml b/sitemap.xml index 854eae9..bebc73b 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,50 +2,50 @@ https://inferential-biostatistics.github.io/workshop-r-swe-zrh/listing.html - 2024-04-07T19:18:29.709Z + 2024-04-07T19:24:10.744Z https://inferential-biostatistics.github.io/workshop-r-swe-zrh/slides/01_intro.html - 2024-04-07T19:18:28.165Z + 2024-04-07T19:24:09.200Z https://inferential-biostatistics.github.io/workshop-r-swe-zrh/slides/03_workflow.html - 2024-04-07T19:18:25.681Z + 2024-04-07T19:24:06.736Z https://inferential-biostatistics.github.io/workshop-r-swe-zrh/slides/07_shiny.html - 2024-04-07T19:18:21.373Z + 2024-04-07T19:24:02.491Z https://inferential-biostatistics.github.io/workshop-r-swe-zrh/slides/05_collaboration.html - 2024-04-07T19:18:18.613Z + 2024-04-07T19:23:59.823Z https://inferential-biostatistics.github.io/workshop-r-swe-zrh/slides/04_quality.html - 2024-04-07T19:18:15.401Z + 2024-04-07T19:23:56.639Z https://inferential-biostatistics.github.io/workshop-r-swe-zrh/index.html - 2024-04-07T19:18:12.993Z + 2024-04-07T19:23:54.323Z https://inferential-biostatistics.github.io/workshop-r-swe-zrh/slides/08_optimization.html - 2024-04-07T19:18:17.321Z + 2024-04-07T19:23:58.559Z https://inferential-biostatistics.github.io/workshop-r-swe-zrh/slides/06_publication.html - 2024-04-07T19:18:19.781Z + 2024-04-07T19:24:00.963Z https://inferential-biostatistics.github.io/workshop-r-swe-zrh/slides/02_r_packages.html - 2024-04-07T19:18:22.909Z + 2024-04-07T19:24:04.003Z https://inferential-biostatistics.github.io/workshop-r-swe-zrh/slides/09_conclusion.html - 2024-04-07T19:18:26.553Z + 2024-04-07T19:24:07.608Z https://inferential-biostatistics.github.io/workshop-r-swe-zrh/LICENSE.html - 2024-04-07T19:18:28.997Z + 2024-04-07T19:24:10.036Z diff --git a/slides/03_workflow.html b/slides/03_workflow.html index d45286a..f71716f 100644 --- a/slides/03_workflow.html +++ b/slides/03_workflow.html @@ -728,107 +728,107 @@

Example - Step 3: Packaging

[1] 4 $data - group values -1 1 5.7818599 -2 1 2.2847028 -3 1 5.3983734 -4 1 2.9184438 -5 1 3.2603027 -6 1 3.8330480 -7 1 3.3933269 -8 1 7.0194349 -9 1 3.1882631 -10 1 3.3977514 -11 1 5.3960739 -12 1 4.2549329 -13 1 5.9134178 -14 1 6.3075702 -15 1 8.9947757 -16 1 2.8329812 -17 1 5.7221230 -18 1 7.3033073 -19 1 1.6294365 -20 1 3.0523486 -21 1 13.6510560 -22 1 3.8379746 -23 1 2.5651188 -24 1 3.5120915 -25 1 7.4219343 -26 1 5.4711330 -27 1 1.7159593 -28 1 5.0016733 -29 1 8.1568474 -30 1 6.8759317 -31 1 7.2046522 -32 1 1.8213727 -33 1 5.9207002 -34 1 5.6971769 -35 1 1.8991480 -36 1 -0.9112914 -37 1 10.3629755 -38 1 4.5559458 -39 1 3.5756622 -40 1 6.5361629 -41 1 3.5286742 -42 1 3.7058528 -43 1 -0.3460540 -44 1 2.5194376 -45 1 5.4434472 -46 1 8.0298859 -47 1 5.4018084 -48 1 1.5917499 -49 1 4.2809107 -50 1 -1.8314465 -51 2 5.2168488 -52 2 11.1099768 -53 2 -4.1645791 -54 2 0.6001590 -55 2 14.4016415 -56 2 9.0360940 -57 2 5.8468881 -58 2 7.4697700 -59 2 3.6172057 -60 2 9.7330635 -61 2 10.5131572 -62 2 4.8128598 -63 2 8.1820964 -64 2 6.3991693 -65 2 5.5782284 -66 2 12.0040273 -67 2 8.8068605 -68 2 7.4331907 -69 2 13.4903725 -70 2 6.0240017 -71 2 12.7493886 -72 2 4.2964761 -73 2 1.0745569 -74 2 4.5252232 -75 2 0.3565439 -76 2 4.7004079 -77 2 7.2128419 -78 2 10.0551684 -79 2 9.4038642 -80 2 7.7671698 -81 2 6.0917495 -82 2 13.4652278 -83 2 3.0221983 -84 2 9.9500011 -85 2 9.2555940 -86 2 5.2511124 -87 2 11.1868692 -88 2 7.5034715 -89 2 4.5176991 -90 2 2.9324020 -91 2 6.5668530 -92 2 8.4883223 -93 2 6.3254743 -94 2 2.3097076 -95 2 5.1352736 -96 2 14.0524737 -97 2 11.7603599 -98 2 9.2052021 -99 2 12.0578946 -100 2 14.7762096 + group values +1 1 7.18176354 +2 1 5.37544894 +3 1 4.88238485 +4 1 6.25134368 +5 1 5.90451804 +6 1 6.33041813 +7 1 9.23858090 +8 1 3.91042484 +9 1 1.21768411 +10 1 6.15153803 +11 1 7.51609333 +12 1 7.20262211 +13 1 4.96727315 +14 1 5.27549596 +15 1 3.53130187 +16 1 13.65535361 +17 1 7.89461761 +18 1 3.91105003 +19 1 6.57648282 +20 1 5.08759919 +21 1 5.17777503 +22 1 5.08930500 +23 1 8.78730811 +24 1 3.37160005 +25 1 8.54736371 +26 1 3.98774000 +27 1 6.34837164 +28 1 3.76767167 +29 1 9.23815731 +30 1 4.44153123 +31 1 6.71575973 +32 1 3.90637303 +33 1 -2.67505214 +34 1 5.23804870 +35 1 4.41235233 +36 1 3.07739533 +37 1 11.02733756 +38 1 6.91425576 +39 1 5.95468436 +40 1 8.15714955 +41 1 5.72046585 +42 1 7.23134143 +43 1 7.51341906 +44 1 2.86268324 +45 1 5.79552750 +46 1 5.04298484 +47 1 6.99706279 +48 1 8.59115605 +49 1 7.38552597 +50 1 4.99568139 +51 2 17.70494190 +52 2 15.69911894 +53 2 7.28562390 +54 2 17.31870333 +55 2 8.64980334 +56 2 10.91553000 +57 2 4.18810119 +58 2 8.02072320 +59 2 8.86855014 +60 2 10.60321356 +61 2 8.54591627 +62 2 7.46436847 +63 2 4.67727439 +64 2 3.48160590 +65 2 7.13744384 +66 2 4.06792116 +67 2 9.03510923 +68 2 10.13692787 +69 2 5.45817521 +70 2 8.76551749 +71 2 2.83480220 +72 2 13.21195427 +73 2 0.07573131 +74 2 9.31480629 +75 2 4.67394506 +76 2 7.33848513 +77 2 7.44027851 +78 2 11.23387506 +79 2 7.52840580 +80 2 17.17691097 +81 2 10.85320887 +82 2 6.95872551 +83 2 10.19942219 +84 2 3.81641694 +85 2 8.44619378 +86 2 0.62290956 +87 2 6.01496753 +88 2 8.45260052 +89 2 4.14666312 +90 2 2.06578259 +91 2 7.82808632 +92 2 4.53130816 +93 2 9.30809572 +94 2 8.88547560 +95 2 2.89070005 +96 2 4.53368068 +97 2 14.28705336 +98 2 8.99475159 +99 2 11.20265227 +100 2 10.19172064 attr(,"class") [1] "SimulationResult" @@ -888,16 +888,16 @@

Example - Step 3: Packaging

# A tibble: 100 × 2 group values <dbl> <dbl> - 1 1 5.78 - 2 1 2.28 - 3 1 5.40 - 4 1 2.92 - 5 1 3.26 - 6 1 3.83 - 7 1 3.39 - 8 1 7.02 - 9 1 3.19 -10 1 3.40 + 1 1 7.18 + 2 1 5.38 + 3 1 4.88 + 4 1 6.25 + 5 1 5.90 + 6 1 6.33 + 7 1 9.24 + 8 1 3.91 + 9 1 1.22 +10 1 6.15 # ℹ 90 more rows
diff --git a/slides/08_optimization.html b/slides/08_optimization.html index c6debf1..e404f91 100644 --- a/slides/08_optimization.html +++ b/slides/08_optimization.html @@ -517,12 +517,11 @@

Profiling: Classic Rprof output

summaryRprof()
$by.self
-                        self.time self.pct total.time total.pct
-"profvis::pause"             0.40    83.33       0.40     83.33
-".updateMethodsInTable"      0.02     4.17       0.04      8.33
-"fun"                        0.02     4.17       0.04      8.33
-"getGeneric"                 0.02     4.17       0.02      4.17
-"unique"                     0.02     4.17       0.02      4.17
+                  self.time self.pct total.time total.pct
+"profvis::pause"       0.40    83.33       0.40     83.33
+"lazyLoadDBfetch"      0.04     8.33       0.04      8.33
+"gzfile"               0.02     4.17       0.02      4.17
+"stopifnot"            0.02     4.17       0.02      4.17
 
 $by.total
                           total.time total.pct self.time self.pct
@@ -554,28 +553,38 @@ 

Profiling: Classic Rprof output

"loadNamespace" 0.08 16.67 0.00 0.00 "namespaceImport" 0.08 16.67 0.00 0.00 "namespaceImportFrom" 0.08 16.67 0.00 0.00 -".updateMethodsInTable" 0.04 8.33 0.02 4.17 -"fun" 0.04 8.33 0.02 4.17 -"doTryCatch" 0.04 8.33 0.00 0.00 -"methods::cacheMetaData" 0.04 8.33 0.00 0.00 -"tryCatch" 0.04 8.33 0.00 0.00 -"tryCatchList" 0.04 8.33 0.00 0.00 -"tryCatchOne" 0.04 8.33 0.00 0.00 -"getGeneric" 0.02 4.17 0.02 4.17 -"unique" 0.02 4.17 0.02 4.17 +"doTryCatch" 0.06 12.50 0.00 0.00 +"tryCatch" 0.06 12.50 0.00 0.00 +"tryCatchList" 0.06 12.50 0.00 0.00 +"tryCatchOne" 0.06 12.50 0.00 0.00 +"lazyLoadDBfetch" 0.04 8.33 0.04 8.33 +"fun" 0.04 8.33 0.00 0.00 +"runHook" 0.04 8.33 0.00 0.00 +"gzfile" 0.02 4.17 0.02 4.17 +"stopifnot" 0.02 4.17 0.02 4.17 +".Call" 0.02 4.17 0.00 0.00 ".checkGroupSigLength" 0.02 4.17 0.00 0.00 -".make_numeric_version" 0.02 4.17 0.00 0.00 ".recMembers" 0.02 4.17 0.00 0.00 -"as.numeric_version" 0.02 4.17 0.00 0.00 +".updateMethodsInTable" 0.02 4.17 0.00 0.00 +"<Anonymous>" 0.02 4.17 0.00 0.00 +"callback" 0.02 4.17 0.00 0.00 +"env_get" 0.02 4.17 0.00 0.00 "eval.parent" 0.02 4.17 0.00 0.00 +"get" 0.02 4.17 0.00 0.00 +"getGeneric" 0.02 4.17 0.00 0.00 "getGroupMembers" 0.02 4.17 0.00 0.00 +"is" 0.02 4.17 0.00 0.00 "lazyLoad" 0.02 4.17 0.00 0.00 "lazyLoadDBexec" 0.02 4.17 0.00 0.00 "local" 0.02 4.17 0.00 0.00 -"numeric_version" 0.02 4.17 0.00 0.00 -"Ops.numeric_version" 0.02 4.17 0.00 0.00 +"methods::cacheMetaData" 0.02 4.17 0.00 0.00 +"readRDS" 0.02 4.17 0.00 0.00 "Recall" 0.02 4.17 0.00 0.00 -"runHook" 0.02 4.17 0.00 0.00 +"replace_from" 0.02 4.17 0.00 0.00 +"resolve" 0.02 4.17 0.00 0.00 +"run_on_load" 0.02 4.17 0.00 0.00 +"set2" 0.02 4.17 0.00 0.00 +"setNames" 0.02 4.17 0.00 0.00 "sys.source" 0.02 4.17 0.00 0.00 "try" 0.02 4.17 0.00 0.00 diff --git a/slides/download/simulatr.zip b/slides/download/simulatr.zip index 4a1dcc5466e22e88a7430690d94e8288c59383f0..046c9b0ab80b00b86d289272204442f1e0b520bc 100644 GIT binary patch literal 22553 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 a7i(2jfCJv^flw9j#|SuBER}@(_Wu9{4z9QW literal 14385 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 F{|~uOiWUF>