{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Testing with apply, foreach and for loops in R\n",
"\n",
"Similar to programs like C or C++, in R you can do looping to do some sort of iteration using for, apply and foreach functions. \n",
"\n",
"1. for: like any other programming, this loops user defined n time to do something\n",
"2. apply: similar to for, apply can iterate over row or column to do a user defined task\n",
"3. foreach: this function is like for function but, on steroids. Here, we can use parallel computing to perform for loops in parallel. \n",
"\n",
"To test out the performance of each of the functions, we will use different data sizes to see which performs better. \n",
"getRes() function will basically look at a row to see it it meets constraints like if number of '1' in a row is less than or equal to something and if it is then it return 1 else 0. We can use this function against a dataframe to compare the results. \n",
" "
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"library(dplyr)\n",
"library(microbenchmark)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"getRes = function(combinations) {\n",
" row = combinations\n",
" one = length(which(row==1))\n",
" two = length(which(row==2))\n",
" three = length(which(row==3))\n",
" if(one <= 6) \n",
" {\n",
" if(two <= 5)\n",
" {\n",
" if(three == 1)\n",
" {\n",
" return(1) \n",
" }\n",
" else {return(0)}\n",
" }\n",
" else {return(0)}\n",
" }\n",
" else {return(0)}\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Apply\n",
"Create an apply loop function to run the getRes function. "
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"apply_loop = function (combinations){\n",
" x1= as.POSIXct(Sys.time())\n",
" res = NULL\n",
"\n",
" res = apply(combinations,1,getRes)\n",
" x2= as.POSIXct(Sys.time())\n",
" #return(res)\n",
" return(as.difftime(x2-x1, units = \"secs\"))\n",
"}\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Foreach\n",
"Create an foreach loop function to run the getRes function. "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Loading required package: iterators\n",
"Loading required package: parallel\n"
]
}
],
"source": [
"library(foreach)\n",
"library(doParallel)\n",
"library(parallel)\n",
"\n",
"foreach_loop = function (combinations){\n",
" cl <- makeCluster(16)\n",
" clusterExport(cl, c(\"getRes\"))\n",
" registerDoParallel(cl)\n",
"\n",
" x1= as.POSIXct(Sys.time())\n",
"\n",
" res = NULL\n",
" res = foreach(i = 1:nrow(combinations), .combine = rbind) %dopar% {\n",
" getRes(combinations[i,])\n",
" }\n",
"\n",
" x2= as.POSIXct(Sys.time())\n",
"\n",
" stopCluster(cl)\n",
" #return(res)\n",
" return(as.difftime(x2-x1, units = \"secs\"))\n",
"}\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## For\n",
"Create an for loop function to run the getRes function. "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"for_loop = function (combinations){\n",
" x1= as.POSIXct(Sys.time())\n",
" res=NULL\n",
" for(i in 1:nrow(combinations)) {\n",
" res[i] = getRes(combinations[i,])\n",
" }\n",
"\n",
" x2= as.POSIXct(Sys.time())\n",
" #return(res)\n",
" return(as.difftime(x2-x1, units = \"secs\"))\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Microbenchmark\n",
"Do a microbench study to run all different loops and get some statistics. Microbench will perform 5 iterations. Dplyr package is used to group and summarize the data. "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"| expr | mean | sd | min | max | size |
\n",
"\n",
"\t| apply_loop(combinations) | 0.005530384 | 0.005370513 | 0.000274155 | 0.013071287 | 3 |
\n",
"\t| foreach_loop(combinations) | 8.803406354 | 1.063827929 | 7.817635844 | 10.580139362 | 3 |
\n",
"\t| for_loop(combinations) | 0.002028997 | 0.003826046 | 0.000259613 | 0.008872582 | 3 |
\n",
"\n",
"
\n"
],
"text/latex": [
"\\begin{tabular}{r|llllll}\n",
" expr & mean & sd & min & max & size\\\\\n",
"\\hline\n",
"\t apply\\_loop(combinations) & 0.005530384 & 0.005370513 & 0.000274155 & 0.013071287 & 3 \\\\\n",
"\t foreach\\_loop(combinations) & 8.803406354 & 1.063827929 & 7.817635844 & 10.580139362 & 3 \\\\\n",
"\t for\\_loop(combinations) & 0.002028997 & 0.003826046 & 0.000259613 & 0.008872582 & 3 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| expr | mean | sd | min | max | size |\n",
"|---|---|---|---|---|---|\n",
"| apply_loop(combinations) | 0.005530384 | 0.005370513 | 0.000274155 | 0.013071287 | 3 |\n",
"| foreach_loop(combinations) | 8.803406354 | 1.063827929 | 7.817635844 | 10.580139362 | 3 |\n",
"| for_loop(combinations) | 0.002028997 | 0.003826046 | 0.000259613 | 0.008872582 | 3 |\n",
"\n"
],
"text/plain": [
" expr mean sd min max \n",
"1 apply_loop(combinations) 0.005530384 0.005370513 0.000274155 0.013071287\n",
"2 foreach_loop(combinations) 8.803406354 1.063827929 7.817635844 10.580139362\n",
"3 for_loop(combinations) 0.002028997 0.003826046 0.000259613 0.008872582\n",
" size\n",
"1 3 \n",
"2 3 \n",
"3 3 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mbLoops1 = NULL\n",
"combinations = expand.grid(c(1:3))\n",
"\n",
"mbLoops = function(combinations) {\n",
" res = microbenchmark(apply_loop(combinations), foreach_loop(combinations), for_loop(combinations), times=5)\n",
"\n",
" res1 = res\n",
" res1$time = res1$time/1000000000\n",
"\n",
" mb = res1 %>% group_by(expr) %>% summarise (mean = mean(time)\n",
" ,sd = sd(time)\n",
" ,min = min(time)\n",
" ,max = max(time)\n",
" )\n",
" mb$size = nrow(combinations)\n",
" return(data.frame(mb))\n",
" }\n",
"\n",
"mbLoops1 = rbind(mbLoops(combinations), mbLoops1)\n",
"mbLoops1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Increase the data size and run different loops. "
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"| expr | mean | sd | min | max | size |
\n",
"\n",
"\t| apply_loop(combinations) | 0.0003702156 | 0.0001160650 | 0.000245072 | 0.000558146 | 9 |
\n",
"\t| foreach_loop(combinations) | 8.9235569714 | 1.0460634556 | 7.948781962 | 10.436508331 | 9 |
\n",
"\t| for_loop(combinations) | 0.0023198312 | 0.0003075862 | 0.002012317 | 0.002833496 | 9 |
\n",
"\t| apply_loop(combinations) | 0.0055303840 | 0.0053705130 | 0.000274155 | 0.013071287 | 3 |
\n",
"\t| foreach_loop(combinations) | 8.8034063536 | 1.0638279289 | 7.817635844 | 10.580139362 | 3 |
\n",
"\t| for_loop(combinations) | 0.0020289966 | 0.0038260461 | 0.000259613 | 0.008872582 | 3 |
\n",
"\n",
"
\n"
],
"text/latex": [
"\\begin{tabular}{r|llllll}\n",
" expr & mean & sd & min & max & size\\\\\n",
"\\hline\n",
"\t apply\\_loop(combinations) & 0.0003702156 & 0.0001160650 & 0.000245072 & 0.000558146 & 9 \\\\\n",
"\t foreach\\_loop(combinations) & 8.9235569714 & 1.0460634556 & 7.948781962 & 10.436508331 & 9 \\\\\n",
"\t for\\_loop(combinations) & 0.0023198312 & 0.0003075862 & 0.002012317 & 0.002833496 & 9 \\\\\n",
"\t apply\\_loop(combinations) & 0.0055303840 & 0.0053705130 & 0.000274155 & 0.013071287 & 3 \\\\\n",
"\t foreach\\_loop(combinations) & 8.8034063536 & 1.0638279289 & 7.817635844 & 10.580139362 & 3 \\\\\n",
"\t for\\_loop(combinations) & 0.0020289966 & 0.0038260461 & 0.000259613 & 0.008872582 & 3 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| expr | mean | sd | min | max | size |\n",
"|---|---|---|---|---|---|\n",
"| apply_loop(combinations) | 0.0003702156 | 0.0001160650 | 0.000245072 | 0.000558146 | 9 |\n",
"| foreach_loop(combinations) | 8.9235569714 | 1.0460634556 | 7.948781962 | 10.436508331 | 9 |\n",
"| for_loop(combinations) | 0.0023198312 | 0.0003075862 | 0.002012317 | 0.002833496 | 9 |\n",
"| apply_loop(combinations) | 0.0055303840 | 0.0053705130 | 0.000274155 | 0.013071287 | 3 |\n",
"| foreach_loop(combinations) | 8.8034063536 | 1.0638279289 | 7.817635844 | 10.580139362 | 3 |\n",
"| for_loop(combinations) | 0.0020289966 | 0.0038260461 | 0.000259613 | 0.008872582 | 3 |\n",
"\n"
],
"text/plain": [
" expr mean sd min max \n",
"1 apply_loop(combinations) 0.0003702156 0.0001160650 0.000245072 0.000558146\n",
"2 foreach_loop(combinations) 8.9235569714 1.0460634556 7.948781962 10.436508331\n",
"3 for_loop(combinations) 0.0023198312 0.0003075862 0.002012317 0.002833496\n",
"4 apply_loop(combinations) 0.0055303840 0.0053705130 0.000274155 0.013071287\n",
"5 foreach_loop(combinations) 8.8034063536 1.0638279289 7.817635844 10.580139362\n",
"6 for_loop(combinations) 0.0020289966 0.0038260461 0.000259613 0.008872582\n",
" size\n",
"1 9 \n",
"2 9 \n",
"3 9 \n",
"4 3 \n",
"5 3 \n",
"6 3 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"combinations = expand.grid(c(1:3), c(1:3))\n",
"\n",
"mbLoops1 = rbind(mbLoops(combinations), mbLoops1)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"combinations = expand.grid(c(1:3), c(1:3), c(1:3))\n",
"\n",
"mbLoops1 = rbind(mbLoops(combinations), mbLoops1)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"combinations = expand.grid(c(1:3), c(1:3), c(1:3), c(1:3))\n",
"\n",
"mbLoops1 = rbind(mbLoops(combinations), mbLoops1)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"combinations = expand.grid(c(1:3), c(1:3), c(1:3), c(1:3), c(1:3))\n",
"\n",
"mbLoops1 = rbind(mbLoops(combinations), mbLoops1)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"combinations = expand.grid(c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3))\n",
"\n",
"mbLoops1 = rbind(mbLoops(combinations), mbLoops1)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"combinations = expand.grid(c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3))\n",
"\n",
"mbLoops1 = rbind(mbLoops(combinations), mbLoops1)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"combinations = expand.grid(c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3))\n",
"\n",
"mbLoops1 = rbind(mbLoops(combinations), mbLoops1)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"combinations = expand.grid(c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3))\n",
"\n",
"mbLoops1 = rbind(mbLoops(combinations), mbLoops1)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"combinations = expand.grid(c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3))\n",
"\n",
"mbLoops1 = rbind(mbLoops(combinations), mbLoops1)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"combinations = expand.grid(c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3), c(1:3))\n",
"\n",
"mbLoops1 = rbind(mbLoops(combinations), mbLoops1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"View summarized data metrics. Although its hard to make out the difference we can tell apply method was consistently faster compared to the rest of the function loops. "
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"| expr | mean | sd | min | max | size |
\n",
"\n",
"\t| apply_loop(combinations) | 1.848387e+00 | 3.015175e-01 | 1.471994e+00 | 2.226259e+00 | 177147 |
\n",
"\t| foreach_loop(combinations) | 1.756939e+02 | 4.049650e+00 | 1.717026e+02 | 1.804578e+02 | 177147 |
\n",
"\t| for_loop(combinations) | 1.222849e+02 | 2.437452e+00 | 1.186793e+02 | 1.252447e+02 | 177147 |
\n",
"\t| apply_loop(combinations) | 6.452159e-01 | 1.307745e-01 | 4.601797e-01 | 7.801982e-01 | 59049 |
\n",
"\t| foreach_loop(combinations) | 6.246728e+01 | 7.165803e+00 | 5.700542e+01 | 7.461992e+01 | 59049 |
\n",
"\t| for_loop(combinations) | 3.708779e+01 | 9.613432e-01 | 3.541777e+01 | 3.783785e+01 | 59049 |
\n",
"\t| apply_loop(combinations) | 2.185719e-01 | 8.620030e-02 | 1.540690e-01 | 3.656175e-01 | 19683 |
\n",
"\t| foreach_loop(combinations) | 2.780690e+01 | 4.613920e+00 | 2.177694e+01 | 3.357440e+01 | 19683 |
\n",
"\t| for_loop(combinations) | 1.127049e+01 | 5.266426e-01 | 1.063290e+01 | 1.190946e+01 | 19683 |
\n",
"\t| apply_loop(combinations) | 5.888674e-02 | 9.910095e-03 | 5.019370e-02 | 6.975744e-02 | 6561 |
\n",
"\t| foreach_loop(combinations) | 1.352766e+01 | 7.251917e-01 | 1.256073e+01 | 1.418346e+01 | 6561 |
\n",
"\t| for_loop(combinations) | 3.338984e+00 | 1.610815e-01 | 3.139273e+00 | 3.567581e+00 | 6561 |
\n",
"\t| apply_loop(combinations) | 1.710918e-02 | 3.091247e-03 | 1.499721e-02 | 2.237071e-02 | 2187 |
\n",
"\t| foreach_loop(combinations) | 1.083804e+01 | 1.087520e+00 | 9.656102e+00 | 1.251217e+01 | 2187 |
\n",
"\t| for_loop(combinations) | 1.053878e+00 | 3.105298e-02 | 1.022057e+00 | 1.086726e+00 | 2187 |
\n",
"\t| apply_loop(combinations) | 7.342367e-03 | 2.497263e-03 | 5.242287e-03 | 1.052349e-02 | 729 |
\n",
"\t| foreach_loop(combinations) | 1.078135e+01 | 2.409862e+00 | 8.325451e+00 | 1.378549e+01 | 729 |
\n",
"\t| for_loop(combinations) | 3.257564e-01 | 1.426109e-02 | 3.101118e-01 | 3.424846e-01 | 729 |
\n",
"\t| apply_loop(combinations) | 2.320430e-03 | 5.140325e-04 | 1.909242e-03 | 3.215429e-03 | 243 |
\n",
"\t| foreach_loop(combinations) | 8.617141e+00 | 4.455053e-01 | 8.162380e+00 | 9.211201e+00 | 243 |
\n",
"\t| for_loop(combinations) | 9.985638e-02 | 1.557837e-02 | 8.301563e-02 | 1.190833e-01 | 243 |
\n",
"\t| apply_loop(combinations) | 9.512850e-04 | 9.314809e-05 | 8.648040e-04 | 1.070955e-03 | 81 |
\n",
"\t| foreach_loop(combinations) | 8.679981e+00 | 9.159937e-01 | 7.738644e+00 | 1.009787e+01 | 81 |
\n",
"\t| for_loop(combinations) | 2.897367e-02 | 4.510389e-03 | 2.456052e-02 | 3.390228e-02 | 81 |
\n",
"\t| apply_loop(combinations) | 4.961294e-04 | 5.366293e-05 | 4.114450e-04 | 5.598560e-04 | 27 |
\n",
"\t| foreach_loop(combinations) | 8.584492e+00 | 1.111153e+00 | 7.625042e+00 | 1.049534e+01 | 27 |
\n",
"\t| for_loop(combinations) | 6.967276e-03 | 2.343557e-03 | 5.693507e-03 | 1.115007e-02 | 27 |
\n",
"\t| apply_loop(combinations) | 3.702156e-04 | 1.160650e-04 | 2.450720e-04 | 5.581460e-04 | 9 |
\n",
"\t| foreach_loop(combinations) | 8.923557e+00 | 1.046063e+00 | 7.948782e+00 | 1.043651e+01 | 9 |
\n",
"\t| for_loop(combinations) | 2.319831e-03 | 3.075862e-04 | 2.012317e-03 | 2.833496e-03 | 9 |
\n",
"\t| apply_loop(combinations) | 5.530384e-03 | 5.370513e-03 | 2.741550e-04 | 1.307129e-02 | 3 |
\n",
"\t| foreach_loop(combinations) | 8.803406e+00 | 1.063828e+00 | 7.817636e+00 | 1.058014e+01 | 3 |
\n",
"\t| for_loop(combinations) | 2.028997e-03 | 3.826046e-03 | 2.596130e-04 | 8.872582e-03 | 3 |
\n",
"\n",
"
\n"
],
"text/latex": [
"\\begin{tabular}{r|llllll}\n",
" expr & mean & sd & min & max & size\\\\\n",
"\\hline\n",
"\t apply\\_loop(combinations) & 1.848387e+00 & 3.015175e-01 & 1.471994e+00 & 2.226259e+00 & 177147 \\\\\n",
"\t foreach\\_loop(combinations) & 1.756939e+02 & 4.049650e+00 & 1.717026e+02 & 1.804578e+02 & 177147 \\\\\n",
"\t for\\_loop(combinations) & 1.222849e+02 & 2.437452e+00 & 1.186793e+02 & 1.252447e+02 & 177147 \\\\\n",
"\t apply\\_loop(combinations) & 6.452159e-01 & 1.307745e-01 & 4.601797e-01 & 7.801982e-01 & 59049 \\\\\n",
"\t foreach\\_loop(combinations) & 6.246728e+01 & 7.165803e+00 & 5.700542e+01 & 7.461992e+01 & 59049 \\\\\n",
"\t for\\_loop(combinations) & 3.708779e+01 & 9.613432e-01 & 3.541777e+01 & 3.783785e+01 & 59049 \\\\\n",
"\t apply\\_loop(combinations) & 2.185719e-01 & 8.620030e-02 & 1.540690e-01 & 3.656175e-01 & 19683 \\\\\n",
"\t foreach\\_loop(combinations) & 2.780690e+01 & 4.613920e+00 & 2.177694e+01 & 3.357440e+01 & 19683 \\\\\n",
"\t for\\_loop(combinations) & 1.127049e+01 & 5.266426e-01 & 1.063290e+01 & 1.190946e+01 & 19683 \\\\\n",
"\t apply\\_loop(combinations) & 5.888674e-02 & 9.910095e-03 & 5.019370e-02 & 6.975744e-02 & 6561 \\\\\n",
"\t foreach\\_loop(combinations) & 1.352766e+01 & 7.251917e-01 & 1.256073e+01 & 1.418346e+01 & 6561 \\\\\n",
"\t for\\_loop(combinations) & 3.338984e+00 & 1.610815e-01 & 3.139273e+00 & 3.567581e+00 & 6561 \\\\\n",
"\t apply\\_loop(combinations) & 1.710918e-02 & 3.091247e-03 & 1.499721e-02 & 2.237071e-02 & 2187 \\\\\n",
"\t foreach\\_loop(combinations) & 1.083804e+01 & 1.087520e+00 & 9.656102e+00 & 1.251217e+01 & 2187 \\\\\n",
"\t for\\_loop(combinations) & 1.053878e+00 & 3.105298e-02 & 1.022057e+00 & 1.086726e+00 & 2187 \\\\\n",
"\t apply\\_loop(combinations) & 7.342367e-03 & 2.497263e-03 & 5.242287e-03 & 1.052349e-02 & 729 \\\\\n",
"\t foreach\\_loop(combinations) & 1.078135e+01 & 2.409862e+00 & 8.325451e+00 & 1.378549e+01 & 729 \\\\\n",
"\t for\\_loop(combinations) & 3.257564e-01 & 1.426109e-02 & 3.101118e-01 & 3.424846e-01 & 729 \\\\\n",
"\t apply\\_loop(combinations) & 2.320430e-03 & 5.140325e-04 & 1.909242e-03 & 3.215429e-03 & 243 \\\\\n",
"\t foreach\\_loop(combinations) & 8.617141e+00 & 4.455053e-01 & 8.162380e+00 & 9.211201e+00 & 243 \\\\\n",
"\t for\\_loop(combinations) & 9.985638e-02 & 1.557837e-02 & 8.301563e-02 & 1.190833e-01 & 243 \\\\\n",
"\t apply\\_loop(combinations) & 9.512850e-04 & 9.314809e-05 & 8.648040e-04 & 1.070955e-03 & 81 \\\\\n",
"\t foreach\\_loop(combinations) & 8.679981e+00 & 9.159937e-01 & 7.738644e+00 & 1.009787e+01 & 81 \\\\\n",
"\t for\\_loop(combinations) & 2.897367e-02 & 4.510389e-03 & 2.456052e-02 & 3.390228e-02 & 81 \\\\\n",
"\t apply\\_loop(combinations) & 4.961294e-04 & 5.366293e-05 & 4.114450e-04 & 5.598560e-04 & 27 \\\\\n",
"\t foreach\\_loop(combinations) & 8.584492e+00 & 1.111153e+00 & 7.625042e+00 & 1.049534e+01 & 27 \\\\\n",
"\t for\\_loop(combinations) & 6.967276e-03 & 2.343557e-03 & 5.693507e-03 & 1.115007e-02 & 27 \\\\\n",
"\t apply\\_loop(combinations) & 3.702156e-04 & 1.160650e-04 & 2.450720e-04 & 5.581460e-04 & 9 \\\\\n",
"\t foreach\\_loop(combinations) & 8.923557e+00 & 1.046063e+00 & 7.948782e+00 & 1.043651e+01 & 9 \\\\\n",
"\t for\\_loop(combinations) & 2.319831e-03 & 3.075862e-04 & 2.012317e-03 & 2.833496e-03 & 9 \\\\\n",
"\t apply\\_loop(combinations) & 5.530384e-03 & 5.370513e-03 & 2.741550e-04 & 1.307129e-02 & 3 \\\\\n",
"\t foreach\\_loop(combinations) & 8.803406e+00 & 1.063828e+00 & 7.817636e+00 & 1.058014e+01 & 3 \\\\\n",
"\t for\\_loop(combinations) & 2.028997e-03 & 3.826046e-03 & 2.596130e-04 & 8.872582e-03 & 3 \\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"| expr | mean | sd | min | max | size |\n",
"|---|---|---|---|---|---|\n",
"| apply_loop(combinations) | 1.848387e+00 | 3.015175e-01 | 1.471994e+00 | 2.226259e+00 | 177147 |\n",
"| foreach_loop(combinations) | 1.756939e+02 | 4.049650e+00 | 1.717026e+02 | 1.804578e+02 | 177147 |\n",
"| for_loop(combinations) | 1.222849e+02 | 2.437452e+00 | 1.186793e+02 | 1.252447e+02 | 177147 |\n",
"| apply_loop(combinations) | 6.452159e-01 | 1.307745e-01 | 4.601797e-01 | 7.801982e-01 | 59049 |\n",
"| foreach_loop(combinations) | 6.246728e+01 | 7.165803e+00 | 5.700542e+01 | 7.461992e+01 | 59049 |\n",
"| for_loop(combinations) | 3.708779e+01 | 9.613432e-01 | 3.541777e+01 | 3.783785e+01 | 59049 |\n",
"| apply_loop(combinations) | 2.185719e-01 | 8.620030e-02 | 1.540690e-01 | 3.656175e-01 | 19683 |\n",
"| foreach_loop(combinations) | 2.780690e+01 | 4.613920e+00 | 2.177694e+01 | 3.357440e+01 | 19683 |\n",
"| for_loop(combinations) | 1.127049e+01 | 5.266426e-01 | 1.063290e+01 | 1.190946e+01 | 19683 |\n",
"| apply_loop(combinations) | 5.888674e-02 | 9.910095e-03 | 5.019370e-02 | 6.975744e-02 | 6561 |\n",
"| foreach_loop(combinations) | 1.352766e+01 | 7.251917e-01 | 1.256073e+01 | 1.418346e+01 | 6561 |\n",
"| for_loop(combinations) | 3.338984e+00 | 1.610815e-01 | 3.139273e+00 | 3.567581e+00 | 6561 |\n",
"| apply_loop(combinations) | 1.710918e-02 | 3.091247e-03 | 1.499721e-02 | 2.237071e-02 | 2187 |\n",
"| foreach_loop(combinations) | 1.083804e+01 | 1.087520e+00 | 9.656102e+00 | 1.251217e+01 | 2187 |\n",
"| for_loop(combinations) | 1.053878e+00 | 3.105298e-02 | 1.022057e+00 | 1.086726e+00 | 2187 |\n",
"| apply_loop(combinations) | 7.342367e-03 | 2.497263e-03 | 5.242287e-03 | 1.052349e-02 | 729 |\n",
"| foreach_loop(combinations) | 1.078135e+01 | 2.409862e+00 | 8.325451e+00 | 1.378549e+01 | 729 |\n",
"| for_loop(combinations) | 3.257564e-01 | 1.426109e-02 | 3.101118e-01 | 3.424846e-01 | 729 |\n",
"| apply_loop(combinations) | 2.320430e-03 | 5.140325e-04 | 1.909242e-03 | 3.215429e-03 | 243 |\n",
"| foreach_loop(combinations) | 8.617141e+00 | 4.455053e-01 | 8.162380e+00 | 9.211201e+00 | 243 |\n",
"| for_loop(combinations) | 9.985638e-02 | 1.557837e-02 | 8.301563e-02 | 1.190833e-01 | 243 |\n",
"| apply_loop(combinations) | 9.512850e-04 | 9.314809e-05 | 8.648040e-04 | 1.070955e-03 | 81 |\n",
"| foreach_loop(combinations) | 8.679981e+00 | 9.159937e-01 | 7.738644e+00 | 1.009787e+01 | 81 |\n",
"| for_loop(combinations) | 2.897367e-02 | 4.510389e-03 | 2.456052e-02 | 3.390228e-02 | 81 |\n",
"| apply_loop(combinations) | 4.961294e-04 | 5.366293e-05 | 4.114450e-04 | 5.598560e-04 | 27 |\n",
"| foreach_loop(combinations) | 8.584492e+00 | 1.111153e+00 | 7.625042e+00 | 1.049534e+01 | 27 |\n",
"| for_loop(combinations) | 6.967276e-03 | 2.343557e-03 | 5.693507e-03 | 1.115007e-02 | 27 |\n",
"| apply_loop(combinations) | 3.702156e-04 | 1.160650e-04 | 2.450720e-04 | 5.581460e-04 | 9 |\n",
"| foreach_loop(combinations) | 8.923557e+00 | 1.046063e+00 | 7.948782e+00 | 1.043651e+01 | 9 |\n",
"| for_loop(combinations) | 2.319831e-03 | 3.075862e-04 | 2.012317e-03 | 2.833496e-03 | 9 |\n",
"| apply_loop(combinations) | 5.530384e-03 | 5.370513e-03 | 2.741550e-04 | 1.307129e-02 | 3 |\n",
"| foreach_loop(combinations) | 8.803406e+00 | 1.063828e+00 | 7.817636e+00 | 1.058014e+01 | 3 |\n",
"| for_loop(combinations) | 2.028997e-03 | 3.826046e-03 | 2.596130e-04 | 8.872582e-03 | 3 |\n",
"\n"
],
"text/plain": [
" expr mean sd min \n",
"1 apply_loop(combinations) 1.848387e+00 3.015175e-01 1.471994e+00\n",
"2 foreach_loop(combinations) 1.756939e+02 4.049650e+00 1.717026e+02\n",
"3 for_loop(combinations) 1.222849e+02 2.437452e+00 1.186793e+02\n",
"4 apply_loop(combinations) 6.452159e-01 1.307745e-01 4.601797e-01\n",
"5 foreach_loop(combinations) 6.246728e+01 7.165803e+00 5.700542e+01\n",
"6 for_loop(combinations) 3.708779e+01 9.613432e-01 3.541777e+01\n",
"7 apply_loop(combinations) 2.185719e-01 8.620030e-02 1.540690e-01\n",
"8 foreach_loop(combinations) 2.780690e+01 4.613920e+00 2.177694e+01\n",
"9 for_loop(combinations) 1.127049e+01 5.266426e-01 1.063290e+01\n",
"10 apply_loop(combinations) 5.888674e-02 9.910095e-03 5.019370e-02\n",
"11 foreach_loop(combinations) 1.352766e+01 7.251917e-01 1.256073e+01\n",
"12 for_loop(combinations) 3.338984e+00 1.610815e-01 3.139273e+00\n",
"13 apply_loop(combinations) 1.710918e-02 3.091247e-03 1.499721e-02\n",
"14 foreach_loop(combinations) 1.083804e+01 1.087520e+00 9.656102e+00\n",
"15 for_loop(combinations) 1.053878e+00 3.105298e-02 1.022057e+00\n",
"16 apply_loop(combinations) 7.342367e-03 2.497263e-03 5.242287e-03\n",
"17 foreach_loop(combinations) 1.078135e+01 2.409862e+00 8.325451e+00\n",
"18 for_loop(combinations) 3.257564e-01 1.426109e-02 3.101118e-01\n",
"19 apply_loop(combinations) 2.320430e-03 5.140325e-04 1.909242e-03\n",
"20 foreach_loop(combinations) 8.617141e+00 4.455053e-01 8.162380e+00\n",
"21 for_loop(combinations) 9.985638e-02 1.557837e-02 8.301563e-02\n",
"22 apply_loop(combinations) 9.512850e-04 9.314809e-05 8.648040e-04\n",
"23 foreach_loop(combinations) 8.679981e+00 9.159937e-01 7.738644e+00\n",
"24 for_loop(combinations) 2.897367e-02 4.510389e-03 2.456052e-02\n",
"25 apply_loop(combinations) 4.961294e-04 5.366293e-05 4.114450e-04\n",
"26 foreach_loop(combinations) 8.584492e+00 1.111153e+00 7.625042e+00\n",
"27 for_loop(combinations) 6.967276e-03 2.343557e-03 5.693507e-03\n",
"28 apply_loop(combinations) 3.702156e-04 1.160650e-04 2.450720e-04\n",
"29 foreach_loop(combinations) 8.923557e+00 1.046063e+00 7.948782e+00\n",
"30 for_loop(combinations) 2.319831e-03 3.075862e-04 2.012317e-03\n",
"31 apply_loop(combinations) 5.530384e-03 5.370513e-03 2.741550e-04\n",
"32 foreach_loop(combinations) 8.803406e+00 1.063828e+00 7.817636e+00\n",
"33 for_loop(combinations) 2.028997e-03 3.826046e-03 2.596130e-04\n",
" max size \n",
"1 2.226259e+00 177147\n",
"2 1.804578e+02 177147\n",
"3 1.252447e+02 177147\n",
"4 7.801982e-01 59049\n",
"5 7.461992e+01 59049\n",
"6 3.783785e+01 59049\n",
"7 3.656175e-01 19683\n",
"8 3.357440e+01 19683\n",
"9 1.190946e+01 19683\n",
"10 6.975744e-02 6561\n",
"11 1.418346e+01 6561\n",
"12 3.567581e+00 6561\n",
"13 2.237071e-02 2187\n",
"14 1.251217e+01 2187\n",
"15 1.086726e+00 2187\n",
"16 1.052349e-02 729\n",
"17 1.378549e+01 729\n",
"18 3.424846e-01 729\n",
"19 3.215429e-03 243\n",
"20 9.211201e+00 243\n",
"21 1.190833e-01 243\n",
"22 1.070955e-03 81\n",
"23 1.009787e+01 81\n",
"24 3.390228e-02 81\n",
"25 5.598560e-04 27\n",
"26 1.049534e+01 27\n",
"27 1.115007e-02 27\n",
"28 5.581460e-04 9\n",
"29 1.043651e+01 9\n",
"30 2.833496e-03 9\n",
"31 1.307129e-02 3\n",
"32 1.058014e+01 3\n",
"33 8.872582e-03 3"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mbLoops1 "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's plot the data to better visualize how everything looks like. "
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABLAAAALQCAMAAAC323mdAAAAOVBMVEUAAAAAAP8A/wBNTU1o\naGh8fHyMjIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnh4eHp6enw8PD/AAD////zEs4UAAAACXBI\nWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO3d6WLpWgCA0Zwaqqqtm/d/2EtMQRBk2MNaP25V\nNcM+fDe20KIEiEQx9gYAtCVYQDQEC4iGYAHRECwgGoIFREOwgGgIFhANwQKiIVhANAQLiIZg\nAdEQLCAaggVEQ7CAaAgWEA3BAqIhWEA0BAuIhmAB0RAsIBqCBURDsIBoCBYQDcECoiFYQDQE\nC4iGYAHRECwgGoIFREOwgGgIFhANwQKiIVhANAQLiIZgAdEQLCAaggVEQ7CAaAgWEA3BAqIh\nWCErtv6qi3/V5S4W+jUpis/zVWzMFn/HK85udn7zp5z9WkdbX/fzOS2Kyfy748X2sKV0xT9N\nyKqU7B6P310F62u7nOtgbawOV9RvdnHzJ/xMzja3+wzMDxs++el0uYIVMP80Idsd+1QXZ10F\na3NQ8nu5ir2f/RX1m13c/AkXm9t5Bma1LX9xE5sJVsD804SsOFWq6CpYzR1Zr7bPrhpu9vpK\new7W5vhqslxvnisvN0ued7powiVYIds+FHdP1VbVpd2/1noxKSaHKafv7dXT3XfbG6w2Bx6f\nFwccq8/t07rVcZkXq9hfmu7WtL/iKlj1tW5n1qbF4vra0+qLy8JeBetsqxo2crnZoM/dktdf\n28Ops8mq302v9kPwO/36u7mI6eawcTkpZj9Ny70cvd1OHRp+vtKrhTeNNH0TrJBtHhfL3QzS\nZ3Wp+tf6m9SewB2fF/3sbr5oeIp0uM28vNuR1W5N1RWHm51ufrbW7aO8eq56ee1p9Q+DVd+q\nq293pS72UTqsZf/suLJZ0/JitK4Wsbvib3G2ibXlXo3ebqfOd/jsKXlt4U0jTe8EK2TbYM2r\nZ2qTYn4I1uGBtL16c91sXT16azUqzmfJj3PT29vc6ch684Atbwarvtb91d+N1+5X/yhYZ1t1\n9e1pUdtN+qzWtZ7VGzU7vHx6a4nH7yY3l9s0et+HLT1f6c3te/EFVF4kWCHbPCB+l9v///9s\nHja/uwfS7lG23j2epvuH7e5H20fnqnqo1f5ZNwdOxXLzC9uX+2pP+WqrOL9YND4lPFtrdfSy\nbrq2vvrbK7reqoaN3L70t5pU3xa7vdwXtWlxzfu52bZt5ae/5fK0TbXlXo1etVOnb08rbdq+\nq5FmAMY7ZNtg/RXF1/bkgr99sDb/r98/rOZnN9z9d/toWp89jD4PxyWL2lO+y988X0j9+v3X\n87XuV9R87bpoEayLrWrYyGruaPc0dXuMdJrsalpc837+nH0pr5bbOHqHb89W2rDw65FmAMY7\nZNtgbR45082xwKT8PT6uDs91qtv8fS+q+ZXyxit7xT4q1amnlz9sHazztRbHUF1ce/ErN1Z0\nvVU3N7I6vvnaP/ta3Vzc7f1s/LJf7tXorWuLPlvpre0TrKEZ75BVwdr83706ILgK1va772nt\nm1vBOrt0syP1Oaw7wbpY0e3VPwpW/dLNjdxdWByyeJq2ujo/7MYibgbr5ugdLtRXemv7BGto\nxjtkVbC+q1evvg/BmtQfI9vz36efy987D6P6wcHk8of1b1dnTxkvljVpzE3ztS2DVd+qho2s\nH+2U6+/dq3SnlwmvXiW8sZ9XX2rLbR6944XaSm8NomANzXiHrArW7l2Ef+VpDuv01Gh/7tS9\n/+/P285hze6dh3W21uMPm69tE6yLrWrYyOr7VW2mbnU2xf1zOt76qc7DurGfV19qy20evbMt\n3a/01iAK1tCMd8iqUG0fV9sna/vpk+/dC13ftVOGyntHWC1fJfyZn05OKK+XdbbW4w+br60t\nYX29osatatjI7ez49tW8ZTUA+ymz2rn4xzPdt78zv7mfV19qy20evf2Fs5XeGkTBGprxDllx\nnMFZHL87nvu0ffVrVv1k+/i7PbNyes/d5/UP69NQ9cONq2XV13paRuO1te1cNK/oequuN3Jv\nm6hNLmZ/1TR4bXnrSe1Gfzf38zpYp+U2j97+wvlKbwyiYA3NeIfs+NCp/299tX/kbB9HP4eH\nX5WMGw+jWf2hdidYZ5/WcLms+lpPy2i8dv91+2Rq1rii4nqrrjdycUrRcf67trjdOZ0707/b\n+3n1pbbc5tG7nHSf3V64YA3OeIds93jYnu2zLk+PjvVi83RlvsvL7yYLk8/tyVrz2w+j1efk\n3nsJdw/Lxfrs51fLqq/1tIymaw9f55cnO50F63yrGjbye1pMDhtVTSXNLt+LU/3K9M4iGr/U\nlts4eqdGn620cRAFa2jGmwD1FQKBiZ1/PwIkWDTz70eABItm/v0IkGDRzL8fARIsmvn3A6Ih\nWEA0BAuIhmAB0RAsIBqCBURDsIBoCBYQDcECoiFYQDQEC4iGYAHRECwgGoIFREOwgGgIFhAN\nwQKiIVhANAQLiIZgAdEQLCAaggVEQ7CAaAgWEA3BAqIhWEA0BAuIhmAB0RAsIBqCBURDsIBo\nCBYQDcECoiFYQDQGCFYB0OCFmnQfqBFWMYREdgOCIVg9SmQ3IBiC1aNEdgOCIVg9SmQ3IBiC\n1aNEdgOCIVg9SmQ3IBiC1aNEdgOCIVg9SmQ3IBiC1aNEdgOCIVg9SmQ3IBiC1aNEdgOCIVg9\nrliwoFuC1eOKBQu6JVg9rliwoFt5Bmv/MRVFuf+4ivqFDjdAsKBbUQXrvyfdXXyx7db+m9MF\nwYKARRWsTpdeNF8oTrfoaEVAV3IMVrWG4kawysPBVhcr6WYxwF6WwTrUSrAgLjkG6+5TwtM8\nVlcrAroiWIIF0cg2WMWNVwkFC8KVY7B2p2EVzedhdbl2wYJuZRmsq9UUzVd3tnygE4J1vT7B\ngoF9fHy0up1gXa7vlb8t+2j5wB0fOy1umXWw+pbIbkDPBOv+4tsv/60tESxo4eOjdbFyDNYz\nSxcs6JtgdbZ0wYK+Cdbdhe8/DOt0Ctbpu+NPD9cUp5+8sKZ3NxUy8ESvcgzW6ezQ40nup3c8\nn/+sdg78yysC7th2KtFgfTzpztLP30Z4692Fb576Llhw1/FR6jys+0u/EazqSyFYMICWkaoT\nrOrrTllefFSWYEFfXsiVYF0UyVNCGMRLuRIsc1gwvBdzlW+w6q8EXn5X/3QswYKOtZ1gb5Jt\nsM4+Aet0Htbho7JO52G9sTmCBZfeqFWZZ7AGk8huQGfey5Vg9SqR3YCOvJsrwepVIrsBXXhn\n6upIsHqUyG7A+7qoVSlYvUpkN+BdHeUq02B1+CnI99czzGogbJ3lKs9gDdYRwYJOpq6OBCuF\nFUGgOq1VmWWwGj/Ar5819bVgiELXucoyWBdvzelxXYJFzrrPVWTB+vekO0u/epdzHwSLfPWR\nq8iC1eHSBQv60+1Me41g9bwiyE5ftSoFS7CgWz3mSrAEC7rUa67yDdbFB/j1uCLIRm9TV0fZ\nBuviA/x6XBHkofdalXkGazCJ7Aa0MESuBKtXiewGPDRMrgSrV4nsBtzX/9TVkWD1KJHdgHuG\nq1UpWL1KZDfgtkFzJVi9SmQ34JaBcyVYvUpkN6DZ4LkSrF4lshvQYMCZ9hrB6lEiuwFXRqlV\nGWywEtH/SMEIxspVsMHqfxXAa8bLlWABzxhn6upIsIC2xq1VKVhAW6PnSrCAdgLIlWABLYw8\ndXUkWMADgdSqFCzggXByJVjAXSHlSrCAO8LKlWABt4Qy014jWECT8GpVChbQJMhcDRysn695\n9SEG88VPX6sA3hdorgYN1npa++CVWS+rAN4W4NTV0YDBWhST79/q0t9qUiz6WAXwpoBrVQ4a\nrEnxe7z8W0z6WAXwlrBzNWiwzj6A8/6ncQoWjCD0XDnCAnZCnro6GnYOa/VXXTKHBYGJoVbl\nsKc1zGqvEk7XvawCeEEkuRr6PKxFdR7WZP7lPCwIRjS5cqY75C6iXAkWZC2Kmfaa4YO1nBbF\nfNXrKoA2IqtVOcJ5WPuZ97svEgoW9C++XA0frEWxWJfl36JY9rEKoKUYczV8sCZFdT7Dupj2\nsQqgjdimro6GDtbhLTnXb80p6l5cBfBYrLUqhw/W5yFY3poDo4g4VwMHa/61XBXfm4vrhbfm\nwBiiztXAwTo+3SuKibfmwNCinbo6GvI8rN/f5XI+r6beF3d7JVjQvehrVTrTHTKRQq4EC7KQ\nRq4ECzKQSq4EC1IX/0x7jWBBylKqVTnKaQ0tTmYXLOhCYrkaNFhLwYIhJZergc/Dmtz/e88d\nrALYSWrq6mjQOazfBx+D1cEqgDLJg6vKsJPuy9qfJuxpFUCqufIqISQn3VwJFiQm5VwJFqQk\nzZn2GsGCVKReq1KwIBUZ5EqwIA1Z5EqwIAHJT10dCRZELptalYIFkcspV4IFUcsrV4IF8cpn\n6upIsCBO+dWqFCyIU5a5EiyIUaa5EiyIT7a5EiyITIYz7TWCBRHJulalYEFEcs+VYEE05Eqw\nIA55T10dCRaET632BAtCJ1dHggVhk6sawYKAmbo6J1gQLLW6JFgQKLm6JlgQJLlqIlgQILlq\nJlgQGjPtNwkWhEWt7hAsCIlc3SVYEA65ekCwIBCmrh4TLAiCWrUhWBAAuWpHsGB0ctWWYMG4\nTF09QbBgTGr1FMGC8cjVkwQLxiJXTxMsGIdcvUCwYARm2l8jWDA4tXqVYMHA5Op1ggWDkqt3\nCBYMx9TVmwQLhqJWbxMsGIZcdUCwYAhy1QnBgt6ZuuqKYEHP1Ko7ggW9kqsuCRb0SK66JVjQ\nG7lq69+/f61uJ1jQDzPtrf3baXFLwYI+qNUTBAvGJFfP+PevdbEEC7omV88RLBiLqaunCRaM\nQ62ete2UOSwYgVw9aV8pwYLBydVz6olyHhYMydTVc9oW6oJgwfvU6ikv1qoULHifXD3j9VqV\nggXvkqsnvFWrUrDgPXLV3ru1KgUL3mCmvb0OalUKFrxMrVrrplalYMGL5KqtzmpVCha8RK5a\n6rJWpWDB80xdtdRxrUrBgmepVTvd16oULHiOXLXSS61KwYJnyFUbfdWqFCxozdRVGz3WqhQs\naEmtWui3VqVgQSty9VjvtSoFC1qQq4eGqFUpWPCQXD00TK1KwYL7zLQ/NNDBVUWw4Da1emTI\nWpWCBbfJ1QMD16oULLhFru4bvlalYEEjU1f3jVKrUrCggVrdNVatSsGCK3J1z4i1KgULLsjV\nHePWqhQsqDN1dcfotSoFC07U6rYQalUKFhzI1U2B1KoULNiRq1vCqVUpWLAlVzcEVatSsMBM\n+y2h1aoULLKnVs0CrFUpWGROrhqFWatSsMiaXDUJtlalYJEvU1dNQq5VKVjkSq0aBF6rcuBg\n/XzNi6354qevVUAbcnUt/FqVgwZrPS1OZr2sAtqQqytR1KocNFiLYvL9W136W02KRR+rgIdM\nXV2JpVbl+8FaTjf9mRbTB8/xtibF7/HybzHpeKugDbW6FFGtyreDtSqKbYk2HherKG5908VW\nwWNydSGuWpVvB2tWfG+Olqbl94NJqS1HWIxLrs5FV6vy7WBtD5R+t/NR94+YKotisvqrLpnD\nYnhydSbGWpWdBGterFoFa3M4djJdd7xVcIeZ9jOR1qrs4Cnh72r77K7NU8Ky/FlU52FN5l/O\nw2JAalUXb63KLibdi+Jre4C16myTSsGiS3JVE3Wtyg5Oa9jNRk2/O9qehlXAG+TqJPZald6a\nQ9JMXZ0kUKvSW3NImFodpVGr8q1gFece/p635jAkuTpIplbloMFy4ijDkau9lGpVvv+UcD7Z\nvjz4M/ls8Xv335rzXP3gNlNXe4nVqnw7WIv9UdPv/ad4FUdYDEKtdtKrVdnJme7nF27z1hwG\nIFeVJGtVvh2syfEI6+4R04635tA3udpKtVZlB08JJ9tTqjZHTF8tftNbc+iVXJVJ16p8f9L9\ncNQ072qDrlcBbZhpL1OvVdnBiaPf24OmeafvJBQsnqZWGdSq9Ge+SIJcZVGrUrBIgFyVedSq\nFCxiZ+oql4OryrvB+pq2Pjn9ibfyCBbtqFVOtSrfDtbXE++mWQoW3co+V5nVquzgxNFl+1/8\nnbT5HOXLVUCz3HOVX63K7t6a00qbdxxerQIa5D51lWWtyreDNS/uvsXm0rL2/ue2q4ArajX2\nJozlzWD9TWYt/kj9W6uAC3nnKuNalR08JezlI6wEi5uyzlXetSoFi8jknKvsa1U6cZSY5DzT\nrlYVwSIWakUHn9aw/YCZebd/R1WwuJJvrtSqpqvPw2p7SugLq4B8c6VW594M1rKo/mrO6qkz\n3p9bBdnLdupKra68Gazp8TPdp91sz/UqyJxacTLgX815cRVkLdNcqdUNnR1htfirOa+tgozl\nmSu1us0cFsHKMldqdZdXCQlTljPtavVIR381x3lYdEqtaORMd8KTYa7Uqh3BIjT55UqtWns3\nWOvF9uXByeKpz/F7bhXkJL+pK7V6xtsf4FedgFUUk7+utuhyFWRErbjvzWDNis/tsdV6Ucy7\n2qLLVZCN3HKlVs9zpjuByCxXavWSt//M127yai1YvCOzqSu1etWbwVoU1R+h+Jm1/QNez6+C\n9KkVLTnTnbFllSu1ek83Z7rPOn0noWDlJKdcqdXbnDjKmDLKlVp1QbAYTUYz7WrVkbeDtZpv\nXyCcd3reqGDlQK14XieT7pvrnOnOU7LJlVp16u0P8JtVp2Ati8/ONqkUrOTlkiu16loHJ47u\n303Y1RZdroLU5DJ1pVY96OCtOYLFE9SKN7z9Ryh2R1j+zBet5JErtepNN3NY/ggFbWSRK7Xq\n07uvEs69NYd2spi6UquedXIelj9CwSNqRRec6c4AMsiVWg1CsOhd+rlSq6G8E6z1orr4My0m\nPq2BW3LI1dhbkI93grX7AxQrk+7clP5Mu4OrQb0RrO0pDZsvk8lvuZ4VnU67C1Ya1IqOvRGs\nWbF9w/NP8VX9t9NDLMFKQeq5UqsRvBGs3btxFsXP6ZuuCFb8Es+VWo3j7WBNi9o3XRGsyCU+\ndaVWo3kjWNPtU8K/3efKrItJhxslWHFTK/ryRrAW20n3z2K1vezzsDhIOldqNbI3grWeHM9n\nWBbFb4cbJVjxSjlXajW+t04c/Sx2fz+1KLr9O6qCFamUp67UKgidvDWnmP90sCl3V0H41Ire\neS8h3Ug3V2oVEMGiC8nmSq3CIli8L9VcqVVwBIs3pTrTrlYhEizeolYMSbB4Q5q5UqtwCRYv\nSzJXahU0weI1SU5dqVXoBItXqBWjECyel2Cu1CoOgsWz0suVWkVDsHhKelNXahUTweIJasW4\nBIvWUsuVWsVHsGgpsVypVZQEi1bSypVaxUqweCytmXa1iphg8YhaEQzB4r6UcqVW0RMs7kko\nV2qVAsHipoSmrtQqEYLFDWpFeASLRsnkSq2SIlg0SCVXapUaweJSKlNXapUgweKcWhEwwaIu\njVypVbIEi5MkcqVWKRMsDlLIlVolTrDydpxgT2GmXa3SJ1g5+9hJ4uBKrbIgWDn7+DgmK25q\nlQvBylgivVKrjAhWxpIIllplRbAyFn+wHFzlRrCy9RF7r9QqQ4KVqSpTEQdLrfIkWFk6RirO\nXKlVtgQrP3FG6kitciZYuVErIiZYWYn74EqtEKyMqBWxE6xcRH1wpVbsCFYe1IokCFYOIs6V\nWlEnWMmL+LmgWnFBsBKnVqREsFIW78GVWtFIsNKlViRHsBIV7cGVWnGHYCVJrUiTYCUo0lyp\nFQ8JVmoifS6oVrQhWGlRK5ImWAmJ8+BKrWhv0GD9fM2Lrfnip69VZEytSN+AwVpPi5NZL6vI\nV5QHV2rFswYM1qKYfP9Wl/5Wk2LRxypypVZkYsBgTYrf4+XfYtLHKvIUYa7UitcMGKyiuPVN\nZ6vIUITPBdWKlznCippakZdh57BWf9Ulc1idiO/gSq1405CnNcxqrxJO172sIiNqRYaGPQ9r\nUZ2HNZl/OQ/rPdEdXKkVnXCme4TUilyFE6yirp9VpCGyXKkVHRo+WMtpUcxXva4iYZE9F1Qr\nujX4eVj7mfe7LxIK1g1qReaGDtaiWKzL8m9RLPtYRdLiOrhSK/owdLAmRXU+w7qY9rGKhKkV\nDB+sw3y6t+Y8I6qDK7WiP0MH6/MQLG/NaU2tYG/QYM2/lqvie3NxvfDWnLYiypVa0bdBg3U8\nx6ooJt6a00ZEzwXVigEMeR7W7+9yOZ9XU++Lu70SrB21gnPhnOk+8CqCF8/BlVoxGMEKUzS1\nKtWKAQlWgBxcQTPBCo5awS2CFZhYcqVWjEGwQhLLc0G1YiSCFQ61ggcEKxCRHFypFaMSrCCo\nFbQhWAGIIldqRQAEa2xRPBdUK8IgWONSK3iCYI0ohoMrtSIkgjUatYJnCdY4Iji4UivCI1hj\nUCt4iWANL/hcqRWhEqyBBf9cUK0ImGANSq3gHYI1nBAPruqFUiuCJ1hDCbBW20T922dKrYiB\nYA0ixIOr8hQstSISgjWAMGt17JVaEQ3B6l2ouRIs4iNY/Qr0ueCOYBEbwepTwLU6zF3pFTER\nrN4EfHB1iJRgERnB6kn4tbr+BkInWH0I9+BKoIiaYHVPraAngtW1QHNlrooUCFanAn0uKFYk\nQrA6pFbQL8HqSpgHV2pFUgSrGyHWyrQVyRGsDoR4cCVWpEiw3qZWMBTBelN4uVIr0iVY7wjv\nuaBakTTBel1otTLJTvIE60WhHVyJFTkQrJeoFYxBsJ4X2MGVWpEPwWrnFKmgamXairwIVhsf\nO2VYuRIrsiNYbXwcjb0lR2pFjgSrheBypVZkSrBaCCtYakW+BKuFcIJlkp28CVYLgfRKrMie\nYD20CVUAwVIrEKyH9pkaN1dqBRXBumv0p4GmraBGsO4YP1diBXWCddPouVIruCBYN4ydK7WC\na4LVaPRXBNUKGghWA68IQpgE68qYuVIruEewLoyYK7WCBwTrzHi5Uit4TLBqxsqVSXZoR7CO\nRsqVWEFrgrU3Tq7UCp4hWJVRcqVW8CTBKkfJlWkreIFgbXo16NpKh1bwKsEa+vBKreBluQdr\n4FypFbwj72ANmyu1gjflHKwhc2WSHTqQb7AGzJVYQTdyDdZwuVIr6EyewRosV2oFXcoxWAPl\nyrQVdC2/YA2TK7GCHuQWrEFypVbQj7yCNUSu1Ap6k1OwBsiVWkGf8glW77kyyQ59Sz1YH/tO\n9Z0rsYIBpB2sj52+c6VWMIwsgtVrrtQKBpN0sD76DpZpKxiUYL1MrGBoKQfro8dgqRWMINlg\nVZnqrldngVIrGEfswTqdtvBxduXx2k6C9W/ncPnt5QEviTtYp9MWPj4a01V2dnxVBcskO4wq\nsWD1M8H+71/9EAsYS9TB+rjSz+YIFoQhrWD1szX/BAvCEHOwhjjA2mVKryAI8Qar3qmeenVs\nlGBBEATrhotAyRUEINpgXTwP7DZX8gRBSiVY3fHcD4IlWHViBUGLP1idrVSsIHTRBqvbD+dz\naAUxiD5YHaxNrCAS8Qarm1cGHVpBRGIO1rvECiKTbbDECuKTZbAcWkGc8guWWEG0Ug/W1TsC\n1QrilXawLj6LXawgbpkES6wgBUkHy0eFQlryCFY3iwN68t9//7W6XcLB+ucAC6Lw306LW6YS\nrIsq7SulVxCB3IJ1FqZaogTrkbZH4tCf//5rXayog3XMUf3VwH+XN+lki9J8YLf/Hxs5+m9o\njzdp0GD9fM2Lrfnip4NV/GtwcZOuHpCpPrBT3a+hDf7AHsjg4/f4pgMGaz0tTmZvr6JFrwTr\nvvHumIkZavyS1X4cBwzWoph8/1aX/laTYvHuKtofYL19hxr6jjnww204A40fsWl//xgwWJPi\n93j5t5i8uYqmXh12eNQHZQdeHOCnDb5CuKHtvXDAYBXFrW/219Q8XlpjsC4ef109IJN9YCe6\nW6QriSOszWNu99/LG3X1gEz1gZ3qfpGsYeewVn/Vpa7nsG4+8ATrkTT3imQNeVrDrPacb7p+\ndxW146s7QenqAemBDQEY9jysRXUe1mT+1cV5WOV+1qq6LCiQgajPdAfyIlhANAQLiIZgAdEQ\nLCAaggVEQ7CAaAgWEA3BAqIhWEA0BAuIhmAB0RAsIBqBBgugwQs16T5QLwpnS4JhSC4ZkSuZ\nDUk4uxvOlgTDkFwyIlcyG5JwdjecLQmGIblkRK5kNiTh7G44WxIMQ3LJiFzJbEjC2d1wtiQY\nhuSSEbmS2ZCEs7vhbEkwDMklI3IlsyEJZ3fD2ZJgGJJLRuRKZkMSzu6GsyXBMCSXjMiVzIYk\nnN0NZ0uCYUguGZErmQ1JOLsbzpYEw5BcMiJXMhuScHY3nC0JhiG5ZESuZDYk4exuOFsSDENy\nyYhcyWxIMttdIGaCBURDsIBoCBYQDcECoiFYQDQEC4iGYAHRECwgGoIFREOwgGgIFhANwQKi\nIVhANAQLiIZgAdEIJFiLSTFZrMfeinEUO9Xl2jg8vJiq5eE++cxgpD0uhyFxVwkkWLPq32E6\n9maM4rd2L6yNw8OLqfrdPyCfGoy0x+UwJO4qgQTrp5j8lr+T4mfsDRnDbzE/XKyNw8OLqdrs\n3e4++cxgpD0uxyFxVwkkWItitfnvd/E19oaMYXna7do4PLyYqGUxOzzleWIwkh6X05C4qwQS\nrHnxV579/yMny2J5uFgbh4cXE1Usyv2j85nBSHpcTkPirhJIsPb/HkUQGzO0ebH6LCaL7cXa\nODy8mKjfy51sNRhJj8tpSNxVBGt8891E6qzM+F54RrCuHIPlrhLE/qQ6uK0UxXdZrhfbo/1s\n74VnBOvKcf/cVYLYn1QH9wnr7QvQ2d4LzwjWlbMdy/uuEsT+TBId3Gdsd742Dg8vpmu/d88M\nRurjcr5jWQ9JEPuze0XjL7lXNJ6xvWfVxuHhxXQdJ2zaD0bq43IdrGyHJIhgfVXnjKyKxdgb\nMoZJsX37RHXPqo3Dw4vp2j86nxmM1MfleNDprhJEsFI9K7eVxfY+ta7O88v29OUz+0enM91P\n9kPirhJIsMrp8eXa/Kwn1c5X/yesjcPDi8k6PP95ZjASH5f9kLirhBKsdfXO8rG3YiTbnZ8u\njxf34/DwYkC8LqIAAALdSURBVLIOwXpmMBIfl/qQZH5XCSNYAC0IFhANwQKiIVhANAQLiIZg\nAdEQLCAaggVEQ7CAaAgWEA3BAqIhWEA0BAuIhmAB0RAsIBqCBURDsIBoCBYQDcECoiFYQDQE\nC4iGYAHRECwgGoIFREOwgGgIFhANwQKiIVhANAQLiIZgAdEQLCAaggVEQ7CAaAgWHSgq08X6\n8gerG7+wXkyLYrbc/W6vm0ZS3FnoQLE3+Tu/fnrj/rWe7G+/Fiye4c5CB3bR+ZsVs6brr30W\ns7/q9ou+t4y0CBYdOIRpWqwar7++ffXkce3oiue4w9CBQ3hWxef2v/PNk71FuX+mWL/i8vaH\ny4enlJtvl9Nishxsw4mMYNGBQ4DWxbQsv3bxWRyDdbriYFF8/tV/9xSsefV1drkCqAgWHTge\nMe3q812W39VVu+trVxzMtq8p/pz/7uemU6titi7Xs+LWq4tkTrDowFmwapcun/qdrD63LxKu\natdXM/bzanJrXcz73V5iJVh04CJYf6uv2VmwjlfU/XxNip/jbXavMBa12Sy44o5BB45hqqoz\nOzbnGKPmCP1up7x218+q6XrB4j53DDpwCMz3dmb9s5guV3+1YNWuOL/5fsprE7rJfkpeqbjL\n/YMOnM7DOjzHqwerdsXOvNiduLAuJtVPj73a/MR0O3cIFh04O9O92FTr9zCH9Xd+xc5PUSzX\nmy+zbbg21x97tTlEm/yW5dKkO80Eiw6cvZdwsf/mZ3vEtT2Gql2xd7hm17f6zNWs8T2JsCNY\ndGCfn6/dd5+biz+r7VHSz3QbrNoVB7+fk81137vfPZtqX24i96lXNBMsIBqCBURDsIBoCBYQ\nDcECoiFYQDQEC4iGYAHRECwgGoIFREOwgGgIFhANwQKiIVhANAQLiIZgAdEQLCAaggVEQ7CA\naAgWEA3BAqIhWEA0BAuIhmAB0RAsIBqCBURDsIBoCBYQDcECoiFYQDQEC4jG/0JHNkFKhrXx\nAAAAAElFTkSuQmCC",
"text/plain": [
"Plot with title \"Mean of Different Loops Comparison\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Adjust plot sizes\n",
"options(repr.plot.width=10, repr.plot.height=6)\n",
"\n",
"plot(subset(mbLoops1, expr =='apply_loop(combinations)')$size\n",
" , subset(mbLoops1, expr =='apply_loop(combinations)')$mean\n",
" , type='o'\n",
" , col='red'\n",
" , pch=19\n",
" , ylim = c(0,180)\n",
" , ylab=\"Seconds\"\n",
" , xlab = \"Data Size\"\n",
" , main = \"Mean of Different Loops Comparison\"\n",
" )\n",
"lines(subset(mbLoops1, expr =='apply_loop(combinations)')$size\n",
" , subset(mbLoops1, expr =='foreach_loop(combinations)')$mean \n",
" , type='o'\n",
" , col='green'\n",
" , pch=19\n",
" )\n",
"lines(subset(mbLoops1, expr =='apply_loop(combinations)')$size\n",
" , subset(mbLoops1, expr =='for_loop(combinations)')$mean\n",
" , type='o'\n",
" , col='blue'\n",
" , pch=19\n",
" )\n",
"legend(\"topleft\", c(\"apply\", \"foreach\", \"for\"), col = c(\"red\", \"green\",\"blue\"), lty=1, cex=0.8 )"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABLAAAALQCAMAAAC323mdAAAAOVBMVEUAAAAAAP8A/wBNTU1o\naGh8fHyMjIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnh4eHp6enw8PD/AAD////zEs4UAAAACXBI\nWXMAABJ0AAASdAHeZh94AAAeyElEQVR4nO3d60KqWBiAYXYeMrNyvP+LHc+CYGoscH3wPD8m\ndavACt5BRCs2AEEUr54BgEcJFhCGYAFhCBYQhmABYQgWEIZgAWEIFhCGYAFhCBYQhmABYQgW\nEIZgAWEIFhCGYAFhCBYQhmABYQgWEIZgAWEIFhCGYAFhCBYQhmABYQgWEIZgAWEIFhCGYAFh\nCBYQhmABYQgWEIZgAWEIFhCGYAFhCBYQhmABYQgWEIZgAWEIFhCGYAFhCBYQhmABYQhWJKv3\nSVFMF9+Ha8XRbPHz66M+tg96P1+rPWp7uXK36t2fUnnY6XkT+nqfFsVk/pn4aTuYUzriNxXI\n4hSbj/3V4mL1y6M+dneoB+v8qOPmerrb1d2f8DWprE3pMzA/zfjkK+nzClYcflNxLC+p2W+w\npfQUv2zB252S79LV2qOOm+vpbld3f8LVdp88A7PSnP9xFpsJVhx+U3FsU7JYbzY/2w13vrt+\n3M7Wq93rpNsPa+5I7VGnu/196+04WNv9q8lyt/y7cM+TPjVhCFYcpwKsjxcuRZhevShcve9e\n1q2qD9tcXz0+6urZzv++XkyKyfFA1/bGn2mxqN+6WW3z+f69Oe+5NU2oaa4aZnK5naH3wzOv\nP3a7U5WDVd/bXh2Pun1PP35uPsV0u9u4nBSzr6bn3XzuXlZOD/N/XqhTw6sTrT35eVF5HcGK\nY7vdzcsv/S5FWFWPOp1eO803v3bk+Kj9Dae7Xe7+M6m+bNxOfVa/dXF+hXY3WOW5ql3dXdhf\n3UfpNJXdFE+2U1peDUjtKQ43/Cwqs1h63suryq/yQlUX+DjR2pNfFpXXEaw49sewJu+fp/cE\nL0XY7nNNL/c7H5vebWy/dOT4qBvBOm2+k+ODtj4bb915vx+sylzVrl6eajdL7/tprWflRm2v\nXL0ZeuspJjefdzuCs/W+fZeWf57mtDrRm/P3xzdQSUOwAjltRNPK23tXF3c7TsVyvX2BU1Re\n8jXc9XCxaHxJeNi214eteL/3sm66dbLab+lXL1Fr81Sbq4aZ3L31t5rsrxaHOFU6fPXsjU+x\nnbdd1aff+x+b2vNOj9E7L/h+oS5XLxNtmr/SovIqhj+S3YHyvd3RpFvBej/tlyxKL/kuHgzW\nNo7Hjfm4M7K6eWv9mFptnmpz1TCT+2NHh5epu32k96tTNWqpaHiKr8qPTe15awteLn9log1P\nXl5UXsXwx/Lz+b5/xbPbmm4EqzhGZfNTCVLDXX8L1uU10KT0nLVbrx5yY0L1ubo5k/v9m4/j\nq6/Vzae7vZyNP47Pux/Axf7oVPkJDlcrE701f4L1YoY/np956eDT3o3XTneCta48zc1gXW2v\nzbdWn3lTv3o1Vzdn8nDhdIrs5HLYqnZ+2I2nuBms3YXPacPsny6UJ3pr/gTrxQx/GJPT//Tr\nJVpdncp+3jmYbH7pyKrykvFqk5w05qb51mf3sCaNM1ne29msPw/v0l3eJqy9S3hjOWs/Ss/7\nuf3v9H353Rys8kRvDaJgvZjhD+P9XKXaa71Z+Tys+aPHsGa/nYc1r5zadfrH5lsfCdbVXDXM\n5P76qnRO6KpyiPvrsr/1tT8P68Zy1n6Unvd0vtqNYJUmemsQBevFDH8Yuzeu9uc/ribVjehr\nXjln/cF3Cc+Pag7W5+Httc/DTs7pH5tvLT3Duj6hxrlqmMnd0fHdoi33YTkeMist1/lM991j\n5jeXs/aj9LzHG5v3sCoTvTWIgvVihj+Oy6lBhzfgS1crJ7pfPnO33yOrB6v6qOZgnc+4Kr/n\nduPW4vwq8vD2ZX1C9bmqz+TRLlHbXMx+9ofBS8+3npTu9HNzOevBujzvbP+Eu3o1BKs60RuD\nKFgvZvgDOW9Ek1Npmnp1ud/hFeTtYFVO57reJFfHO1XPoGi89fhz92Jq1jihoj5X9ZlcXFJ0\nPv5derrDOZ0H05/by1n7UXrer9P47YN7FayriTYPomC9mOGPZP99WMX843wc+bCBLdZN97v9\nWcLqo24Ea7Ne7D4LdH2OatOtp5/z65OdKsGqzlXDTH5Oi8lppvaHkmbXn8U5fB/YL0/R+KP0\nvN/vu88KfP+cPgRQHaHqRBsHUbBezPCTg65CIDAD49dJDgSLh/h1kgPB4iF+neRAsHiIXyc5\nECwe4tcJhCFYQBiCBYQhWEAYggWEIVhAGIIFhCFYQBiCBYQhWEAYggWEIVhAGIIFhCFYQBiC\nBYQhWEAYggWEIVhAGIIFhCFYQBiCBYQhWEAYggWEIVhAGIIFhCFYQBiCBYQhWEAYggWEIVhA\n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",
"text/plain": [
"Plot with title \"SD of Different Loops Comparison\""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Adjust plot sizes\n",
"options(repr.plot.width=10, repr.plot.height=6)\n",
"\n",
"plot(subset(mbLoops1, expr =='apply_loop(combinations)')$size\n",
" , subset(mbLoops1, expr =='apply_loop(combinations)')$sd\n",
" , type='o'\n",
" , col='red'\n",
" , pch=19\n",
" , ylim = c(0,15)\n",
" , ylab=\"Seconds\"\n",
" , xlab = \"Data Size\"\n",
" , main = \"SD of Different Loops Comparison\"\n",
" )\n",
"lines(subset(mbLoops1, expr =='apply_loop(combinations)')$size\n",
" , subset(mbLoops1, expr =='foreach_loop(combinations)')$sd\n",
" , type='o'\n",
" , col='green'\n",
" , pch=19\n",
" )\n",
"lines(subset(mbLoops1, expr =='apply_loop(combinations)')$size\n",
" , subset(mbLoops1, expr =='for_loop(combinations)')$sd\n",
" , type='o'\n",
" , col='blue'\n",
" , pch=19\n",
" )\n",
"legend(\"topleft\", c(\"apply\", \"foreach\", \"for\"), col = c(\"red\", \"green\",\"blue\"), lty=1, cex=0.8 )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"From the above study, we can observe that apply loop was consistently much faster compared to either for or foreach loop. As the data size increases, the time to run also increased linearly in for and foreach loop. On the other hand for apply, there was almost no change in time to run apply loop. "
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"R version 3.5.1 (2018-07-02)\n",
"Platform: x86_64-w64-mingw32/x64 (64-bit)\n",
"Running under: Windows 10 x64 (build 14393)\n",
"\n",
"Matrix products: default\n",
"\n",
"locale:\n",
"[1] LC_COLLATE=English_United States.1252 \n",
"[2] LC_CTYPE=English_United States.1252 \n",
"[3] LC_MONETARY=English_United States.1252\n",
"[4] LC_NUMERIC=C \n",
"[5] LC_TIME=English_United States.1252 \n",
"\n",
"attached base packages:\n",
"[1] parallel stats graphics grDevices utils datasets methods \n",
"[8] base \n",
"\n",
"other attached packages:\n",
"[1] doParallel_1.0.13 iterators_1.0.10 foreach_1.5.0 \n",
"[4] microbenchmark_1.4-4 dplyr_0.7.8 RevoUtils_11.0.1 \n",
"[7] RevoUtilsMath_11.0.0\n",
"\n",
"loaded via a namespace (and not attached):\n",
" [1] Rcpp_1.0.0 bindr_0.1.1 magrittr_1.5 \n",
" [4] tidyselect_0.2.5 uuid_0.1-2 R6_2.2.2 \n",
" [7] rlang_0.3.1 tools_3.5.1 htmltools_0.3.6 \n",
"[10] digest_0.6.15 assertthat_0.2.0 tibble_1.4.2 \n",
"[13] crayon_1.3.4 bindrcpp_0.2.2 IRdisplay_0.7.0.9000\n",
"[16] purrr_0.2.5 repr_0.19.1.9000 codetools_0.2-15 \n",
"[19] base64enc_0.1-3 IRkernel_0.8.15.9000 glue_1.3.0 \n",
"[22] evaluate_0.12 pbdZMQ_0.3-3 compiler_3.5.1 \n",
"[25] pillar_1.3.0 jsonlite_1.5 pkgconfig_2.0.2 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sessionInfo()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "R",
"language": "R",
"name": "ir"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}