From 99b2d35f764800c26d9499f0ea4849f3b14ff8bf Mon Sep 17 00:00:00 2001 From: mvanrongen Date: Thu, 21 Nov 2024 10:52:42 +0000 Subject: [PATCH] 2111 wd restructure --- .../execute-results/html.json | 4 +- materials/01-intro-software.qmd | 72 ++++++++---------- materials/03-tabular-data.qmd | 2 +- .../images/working-directory-structure.png | Bin 18934 -> 0 bytes materials/images/working_directory.png | Bin 0 -> 62200 bytes 5 files changed, 36 insertions(+), 42 deletions(-) delete mode 100644 materials/images/working-directory-structure.png create mode 100644 materials/images/working_directory.png diff --git a/_freeze/materials/01-intro-software/execute-results/html.json b/_freeze/materials/01-intro-software/execute-results/html.json index cf98b17..c9a60fd 100644 --- a/_freeze/materials/01-intro-software/execute-results/html.json +++ b/_freeze/materials/01-intro-software/execute-results/html.json @@ -1,8 +1,8 @@ { - "hash": "e6c5e0341644568c71276b206c379092", + "hash": "0117c6c36d699d8a3337e414338b7118", "result": { "engine": "knitr", - "markdown": "---\ntitle: Getting started\n---\n\n\n\n\n::: {.callout-tip}\n#### Learning objectives\n\n- Get familiar with R\n- Get to know RStudio\n:::\n\n\n## Context\n\n### What is R? \n\nR is a statistical programming language. It is very popular in the data science field, including Bioinformatics. The term \"`R`\" is used to refer to both the programming language and the software that interprets the scripts written using it.\n\n\n### Why learn R?\n\n**R does not involve lots of pointing and clicking**\n\nThe learning curve might be steeper than with other software, but with R, the\nresults of your analysis do not rely on remembering a succession of pointing\nand clicking, but instead on a series of written commands, and that's a good\nthing! So, if you want to redo your analysis because you collected more data,\nyou don't have to remember which button you clicked in which order to obtain\nyour results; you just have to run your script again.\n\nWorking with scripts makes the steps you used in your analysis clear, and the\ncode you write can be inspected by someone else who can give you feedback and\nspot mistakes.\n\nWorking with scripts forces you to have a deeper understanding of what you are\ndoing, and facilitates your learning and comprehension of the methods you use.\n\n**R code is great for reproducibility**\n\nReproducibility is when someone else (including your future self) can obtain the\nsame results from the same data set when using the same analysis.\n\nR integrates with other tools to generate reports from your code. If you\ncollect more data, or fix a mistake in your dataset, the figures and the\nstatistical tests in your manuscript are updated automatically after running the code again.\n\nAn increasing number of journals and funding agencies expect analyses to be\nreproducible, so knowing R will give you an edge with these requirements.\n\n\n**R is interdisciplinary and extendable**\n\nWith 10,000+ packages that can be installed to extend its capabilities, R\nprovides a framework that allows you to combine statistical approaches from many\nscientific disciplines to best suit the analytical framework you need to analyze your\ndata. For instance, R has packages for image analysis, GIS, time series, population\ngenetics, and a lot more.\n\n**R works on data of different sizes**\n\nThe skills you learn with R scale easily with the size of your dataset. Whether\nyour dataset has hundreds or millions of lines, it won't make much difference to\nyou.\n\nR is designed for data analysis. It comes with special data structures and data\ntypes that make handling of missing data and statistical factors convenient.\n\nR can connect to spreadsheets, databases, and many other data formats, on your\ncomputer or on the web.\n\n**R produces high-quality graphics**\n\nThe plotting functionality in R is endless, and allow you to adjust any\naspect of your graph to convey most effectively the message from your data.\n\n**R has great support**\n\nThousands of people use R daily. Many of them are willing to help you through\nmailing lists and websites such as [Stack Overflow](https://stackoverflow.com/), or on the [Posit community](https://forum.posit.co/).\n\n**R is free, open-source and cross-platform**\n\nAnyone can inspect the source code to see how R works. Because of this\ntransparency, there is less chance for mistakes, and if you (or someone else)\nfind some, you can report and fix bugs.\n\n### What is RStudio?\n[RStudio](https://posit.co) is currently a very popular Integrated Development Environment (IDE) for working with R. An IDE is an application used by software developers that facilitates programming by offering source code editing, building and debugging tools all integrated into one application. To function correctly, RStudio needs R and therefore both need to be installed on your computer.\n\nThe RStudio Desktop open-source product is free under the\n[Affero General Public License (AGPL) v3](https://www.gnu.org/licenses/agpl-3.0.en.html). [Other versions of RStudio](https://posit.co/download/rstudio-desktop/) are also available.\n\nWe will use RStudio IDE to write code, navigate the files on our computer,\ninspect the variables we are going to create, and visualize the plots we will\ngenerate. RStudio can also be used for other things (*e.g.,* version control,\ndeveloping packages, writing Shiny apps) that we will not cover during the\ncourse\n\n![RStudio interface screenshot. Clockwise from top left: Source, Environment/History, Files/Plots/Packages/Help/Viewer, Console.](images/rstudio-screenshot.png)\n\nRStudio is divided into 4 \"Panes\": the **Source** for your scripts and documents\n(top-left, in the default layout), your **Environment/History** (top-right),\nyour **Files/Plots/Packages/Help/Viewer** (bottom-right), and \nthe R **Console** (bottom-left). The placement of these\npanes and their content can be customized (see menu, Tools -> Global Options ->\nPane Layout). \n\nOne of the advantages of using RStudio is that all the information\nyou need to write code is available in a single window. Additionally, with many\nshortcuts, auto-completion, and highlighting for the major file types you use\nwhile developing in R, RStudio will make typing easier and less error-prone.\n\n::: {.callout-note}\nRStudio's default preferences generally work well, but saving a work space to\n`.RData` can be cumbersome, especially if you are working with larger data sets as this would save all the data that is loaded into R into the `.RData` file. \nTo turn that off, go to `Tools` --> `Global Options` and select the 'Never' option\nfor `Save workspace to .RData' on exit.`\n\n![Set 'Save workspace to .RData on exit' to 'Never'](images/rstudio-preferences.png)\n:::\n\n## Working directory\n\nMaking it easy for yourself *and* R to find all your data, it's helpful to use the concept of a **working directory**. This is a folder that R uses as a starting point where it expects to find all of your data and scripts.\n\nAll of the scripts within this folder can then use **relative paths** to files in the working directory that indicate where inside the project a file is located (as opposed to **absolute paths**, which\npoint to where a file is on a specific computer). Working this way makes it\na lot easier to move your project around on your computer and share it with\nothers without worrying about whether or not the underlying scripts will still work.\n\n::: {.callout-important}\n## Relative versus absolute paths\n\nRelative paths are relative to a certain location on your computer. Absolute paths start from the absolute start of your hard drive. This is easiest illustrated with an example:\n\n**Relative path**: `data/data_01.csv`\n\n**Absolute path**: `C:/Users/User1/Documents/R/data-analysis-r/data/data_01.csv`\n\n:::\n\n### Keeping it all together\n\nWhenever we are working on a project, it is good practice to keep a set of related data, analyses, and scripts contained in a single folder.\n\nUsing a consistent folder structure across your projects will help keep things\norganized, and will also make it easy to find things in the future. This\ncan be especially helpful when you have multiple projects. In general, you may\ncreate directories (folders) for **scripts**, **data**, and **documents**.\n\n - **`data/`** Use this folder to store your raw data. For the sake\n of transparency and [provenance](https://en.wikipedia.org/wiki/Provenance),\n you should *always* keep a copy of your raw data accessible and do as much\n of your data cleanup and pre-processing programmatically (*i.e.,* with scripts,\n rather than manually). Separating raw data from processed data\n is also a good idea. For example, you could have files\n `data/raw/survey.plot1.txt` and `data/raw/survey.plot2.txt` kept separate from\n a `data_output/survey.csv` file generated by the\n `scripts/01.preprocess.survey.R` script.\n - **`documents/`** This would be a place to keep documentation and other text documents\n - **`scripts/`** This would be the location to keep your R scripts for\n different analyses or plotting.\n\nYou may want additional directories or sub directories depending on your project\nneeds, but these should form the backbone of your working directory.\n\n![Example of a working directory structure.](images/working-directory-structure.png)\n\n### Creating a working directory\n\nBefore starting to write code in RStudio, we need to create an R Project. The idea behind an R-project is to have a space where you can keep all the files and settings associated with the project together. That way, next time you open the R Project it would be easier to resume work. An R-project basically creates a folder with a shortcut in it (ending in `.RProj`). When you double-click on the shortcut, it opens RStudio and sets the working directory to that particular folder. \n\nTo create an \"R Project\":\n\n1. Start RStudio.\n2. Under the `File` menu, click on `New Project`. Choose `New Directory`, then\n `New Project`.\n3. Enter a name for this new folder (or \"directory\"), and choose a convenient\n location for it. This will be your **working directory** for the rest of the\n day (*e.g.,* `~/data-analysis-r`).\n4. Click on `Create Project`.\n5. (Optional) Open in new session\n\nR will show you your current working directory in the `Files` pane. Alternatively, you can get it by typing in and running the `getwd()` command.\n\n::: {.callout-important}\nComplete @ex-createwd before proceeding.\n:::\n\n## Working with R\n\nThe basis of programming is that we write down instructions for the computer to\nfollow, and then we tell the computer to follow those instructions. We write, or\n*code*, instructions in R because it is a common language that both the computer\nand we can understand. We call the instructions *commands* and we tell the\ncomputer to follow the instructions by *executing* (also called *running*) those\ncommands.\n\n### Scripts versus console\n\nThere are two main ways of interacting with R: by using the console or by using\nscript files (plain text files that contain your code). The console pane (in\nRStudio, the bottom left panel) is the place where commands written in the R\nlanguage can be typed and executed immediately by the computer. It is also where\nthe results will be shown for commands that have been executed. You can type\ncommands directly into the console and press `Enter` to execute those commands,\nbut they will be forgotten when you close the session.\n\nBecause we want our code and workflow to be reproducible, it is better to type\nthe commands we want in the script editor, and save the script. This way, there\nis a complete record of what we did, and anyone (including our future selves!)\ncan easily replicate the results on their computer.\n\nRStudio allows you to execute commands directly from the script editor by using\nthe {{< kbd Control >}} + {{< kbd Enter >}} shortcut (on Macs, {{< kbd mac=Command >}} +\n{{< kbd mac=Return >}} will work, too). The command on the current line in the\nscript (indicated by the cursor) or all of the commands in the currently\nselected text will be sent to the console and executed when you press\n{{< kbd Control >}} + {{< kbd Enter >}}. You can find other keyboard shortcuts in this [RStudio cheatsheet about the RStudio IDE (PDF)](https://rstudio.github.io/cheatsheets/rstudio-ide.pdf).\n\n::: {.callout-warning}\n## The R prompt\n\nIf R is ready to accept commands, the R console shows a `>` prompt. If it\nreceives a command (by typing, copy-pasting or sent from the script editor using\n{{< kbd Control >}} + {{< kbd Enter >}}), R will try to execute it, and when\nready, will show the results and come back with a new `>` prompt to wait for new\ncommands.\n\nIf R is still waiting for you to enter more data because it isn't complete yet,\nthe console will show a `+` prompt. It means that you haven't finished entering\na complete command. This is because you have not 'closed' a parenthesis or\nquotation, i.e. you don't have the same number of left-parentheses as\nright-parentheses, or the same number of opening and closing quotation marks.\nWhen this happens, and you thought you finished typing your command, click\ninside the console window and press {{< kbd Escape >}}. This will cancel the incomplete\ncommand and return you to the `>` prompt.\n:::\n\n### Comments in code\n\nIt's always a good idea to add explanations to your code. We can do that with the hash tag `#` symbol, for example:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# This code calculates the sum of two numbers\n1 + 9\n```\n:::\n\n\n\n\n\nIt's always a good idea to add lots of comments to your code. What makes sense to you in that moment, might not a week later. Similarly, when sharing code with colleagues and collaborators, it's always good to be as clear as possible.\n\n### Splitting code\n\nAs you increase your code, your script can become quite long. Often we want to split analyses into multiple scripts, for example:\n\n* `01_preprocessing` may contain data cleaning steps\n* `02_exploration` may contain exploratory plots of your data\n* `03_analysis` could contain (statistical) analyses of your data\n* `04_figures` could contain code for figures, ready for publication\n\nEach of these files could be hundreds of lines long. So, keeping track of your code makes sense. We can do that with **code headings**, which use the `# heading ----` syntax. You can even add different heading levels, by increasing the number of `#` at the start.\n\nThis creates a little table of contents in the bottom-left corner of the script pane:\n\n![Code headings](images/rstudio-codeheadings.png)\n\n## Running code {#running-code}\n\nThe simplest way of using a programming language is to use it interactively. We can do this by typing directly into the console / terminal.\n\n::: {.panel-tabset group=\"language\"}\n## R\n\nFor example, you can use R as a glorified calculator:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\n3 + 5\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 8\n```\n\n\n:::\n\n```{.r .cell-code}\n12 / 7\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 1.714286\n```\n\n\n:::\n:::\n\n\n\n\n## Python\n\nFor example, you can use Python as a glorified calculator:\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\n3 + 5\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n8\n```\n\n\n:::\n\n```{.python .cell-code}\n12 / 7\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n1.7142857142857142\n```\n\n\n:::\n:::\n\n\n\n\n:::\n\nRunning code like this directly in the console is generally not a good idea, because then we can't keep track of what we are doing. So, we first need to create a script to save our code in. Then, we can then play around.\n\n::: {.callout-important}\n## Complete before proceeding\nPlease complete @ex-createscript and @ex-runningcode.\n:::\n\n## Functions and their arguments\n\nFunctions are \"canned scripts\" that automate more complicated sets of commands\nincluding operations assignments, etc. Many functions are predefined, or can be\nmade available by importing *packages* (more on that later). A function\nusually takes one or more inputs called *arguments*. Functions often (but not\nalways) return a *value*. A typical example would be the function `sqrt()`. The\ninput (the argument) must be a number, and the return value (in fact, the\noutput) is the square root of that number.\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nsqrt(9)\n```\n:::\n\n\n\n\n## Python\n\nThe `sqrt()` function is not available by default, but is stored in the `math` module. Before we can use it, we need to load this module:\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nimport math\n```\n:::\n\n\n\n\nNext, we can use the `sqrt()` function, specifying that it comes from the `math`module. We separate the two with a full-stop (`.`):\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nmath.sqrt(9)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n3.0\n```\n\n\n:::\n:::\n\n\n\n\n:::\n\nHere, the value `9` is given to the `sqrt()` function. This function\ncalculates the square root, and returns the value. This function is very simple, because it takes just one argument.\n\nThe return 'value' of a function need not be numerical (like that of `sqrt()`),\nand it also does not need to be a single item: it can be a set of things, or\neven a data set. We'll see that when we read data files.\n\n\n### Arguments\n\nArguments allow you to control the behaviour of a function. They can be anything, not only numbers or file names. Exactly what each argument means differs per function and can be looked up in the documentation. Some functions take arguments which may either be specified by the user, or, if left out, take on a *default* value: these are called *options*.\n\nOptions are typically used to alter the way the\nfunction operates, such as if it should ignore missing values, or what symbol to\nuse in a plot. However, if you want something specific, you can specify a value\nof your choice which will be used instead of the default.\n\nLet's try a function that can take multiple arguments: `round()`.\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nround(3.14159)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 3\n```\n\n\n:::\n:::\n\n\n\n\n## Python\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nround(3.14159)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n3\n```\n\n\n:::\n:::\n\n\n\n\n:::\n\nHere, we've called `round()` with just one argument, `3.14159`, and it has\nreturned the value `3`. That's because the default is to round to the nearest\nwhole number. If we want more digits we can see how to do that by getting\ninformation about the `round()` function. \n\n::: {.panel-tabset group=\"language\"}\n## R\n\nWe can use `args(round)` to find what arguments it takes, or look at the help for this function using `?round`.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nargs(round)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nfunction (x, digits = 0, ...) \nNULL\n```\n\n\n:::\n:::\n\n\n\n\nWe see that if we want a different number of digits, we can\ntype `digits = 2` or however many we want. For example:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nround(x = 3.14159, digits = 2)\n```\n:::\n\n\n\n\nIf you provide the arguments in the exact same order as they are defined you\ndon't have to name them:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nround(3.14159, 2)\n```\n:::\n\n\n\n\nAnd if you do name the arguments, you can switch their order:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nround(digits = 2, x = 3.14159)\n```\n:::\n\n\n\n\n## Python\nWe can use `help(round)` to find what arguments it takes.\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nhelp(round)\n```\n:::\n\n\n\n\nWe see that if we want a different number of digits, we can\ntype `ndigits = 2` or however many we want. For example:\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nround(3.14159, ndigits = 2)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n3.14\n```\n\n\n:::\n:::\n\n\n\n\nIf you provide the arguments in the exact same order as they are defined you\ndon't have to name them:\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nround(3.14159, 2)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n3.14\n```\n\n\n:::\n:::\n\n\n\n\nPython still expects the arguments in the correct order, so this gives an error:\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nround(ndigits = 2, 3.14159)\n```\n:::\n\n\n\n:::\n\nIt's good practice be explicit about the names of the arguments. That way you can avoid confusion later on when looking back at your code or when sharing your code.\n\n\n## Adding functionality using packages\nLO: adding functionality (installing + loading packages)\nLO: For Python: requires `numpy` for next section\n\n\n## Exercises\n\n:::{.callout-exercise #ex-createwd}\n#### Creating a working directory\n\n\n\n{{< level 1 >}}\n\n\n\n\n\n\nCreate a working directory called `data-analysis`. When you've done this, add the following sub folders:\n\n* `data`\n* `scripts`\n* `images`\n\n**Note**: programming languages are case-sensitive, so `data` is not treated the same way as `Data`.\n:::\n\n:::{.callout-exercise #ex-createscript}\n#### Creating a script\n\n\n\n{{< level 1 >}}\n\n\n\n\n\n\nCreate a script and save it as `session_01` in the `scripts` folder within your working directory.\n\n:::{.callout-hint}\nRemember, you will need to add an extension to the file. This is `.R` for R scripts or `.py` for Python ones.\n:::\n:::\n\n:::{.callout-exercise #ex-runningcode}\n#### Running code\n\n\n\n{{< level 1 >}}\n\n\n\n\n\n\nIn your new script `session_01`, run some mathematical operations, such as:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\n8 * 4\n6 - 9\n```\n:::\n\n\n\n\n:::{.callout-hint}\nRemember, you run the code using Ctrl + Enter (or Command + Enter on Mac).\n:::\n\n:::\n\n## Summary\n\n::: {.callout-tip}\n#### Key points\n\n- \n:::\n", + "markdown": "---\ntitle: \"Intro to software\"\n---\n\n\n\n\n::: {.callout-tip}\n#### Learning objectives\n\n- Get familiar with the programming language\n- Get to know the interface software\n:::\n\n\n## Context\n\n### What is R? \n\nR is a statistical programming language. It is very popular in the data science field, including Bioinformatics. The term \"`R`\" is used to refer to both the programming language and the software that interprets the scripts written using it.\n\n\n### Why learn R?\n\n**R does not involve lots of pointing and clicking**\n\nThe learning curve might be steeper than with other software, but with R, the\nresults of your analysis do not rely on remembering a succession of pointing\nand clicking, but instead on a series of written commands, and that's a good\nthing! So, if you want to redo your analysis because you collected more data,\nyou don't have to remember which button you clicked in which order to obtain\nyour results; you just have to run your script again.\n\nWorking with scripts makes the steps you used in your analysis clear, and the\ncode you write can be inspected by someone else who can give you feedback and\nspot mistakes.\n\nWorking with scripts forces you to have a deeper understanding of what you are\ndoing, and facilitates your learning and comprehension of the methods you use.\n\n**R code is great for reproducibility**\n\nReproducibility is when someone else (including your future self) can obtain the\nsame results from the same data set when using the same analysis.\n\nR integrates with other tools to generate reports from your code. If you\ncollect more data, or fix a mistake in your dataset, the figures and the\nstatistical tests in your manuscript are updated automatically after running the code again.\n\nAn increasing number of journals and funding agencies expect analyses to be\nreproducible, so knowing R will give you an edge with these requirements.\n\n\n**R is interdisciplinary and extendable**\n\nWith 10,000+ packages that can be installed to extend its capabilities, R\nprovides a framework that allows you to combine statistical approaches from many\nscientific disciplines to best suit the analytical framework you need to analyze your\ndata. For instance, R has packages for image analysis, GIS, time series, population\ngenetics, and a lot more.\n\n**R works on data of different sizes**\n\nThe skills you learn with R scale easily with the size of your dataset. Whether\nyour dataset has hundreds or millions of lines, it won't make much difference to\nyou.\n\nR is designed for data analysis. It comes with special data structures and data\ntypes that make handling of missing data and statistical factors convenient.\n\nR can connect to spreadsheets, databases, and many other data formats, on your\ncomputer or on the web.\n\n**R produces high-quality graphics**\n\nThe plotting functionality in R is endless, and allow you to adjust any\naspect of your graph to convey most effectively the message from your data.\n\n**R has great support**\n\nThousands of people use R daily. Many of them are willing to help you through\nmailing lists and websites such as [Stack Overflow](https://stackoverflow.com/), or on the [Posit community](https://forum.posit.co/).\n\n**R is free, open-source and cross-platform**\n\nAnyone can inspect the source code to see how R works. Because of this\ntransparency, there is less chance for mistakes, and if you (or someone else)\nfind some, you can report and fix bugs.\n\n### What is RStudio?\n[RStudio](https://posit.co) is currently a very popular Integrated Development Environment (IDE) for working with R. An IDE is an application used by software developers that facilitates programming by offering source code editing, building and debugging tools all integrated into one application. To function correctly, RStudio needs R and therefore both need to be installed on your computer.\n\nThe RStudio Desktop open-source product is free under the\n[Affero General Public License (AGPL) v3](https://www.gnu.org/licenses/agpl-3.0.en.html). [Other versions of RStudio](https://posit.co/download/rstudio-desktop/) are also available.\n\nWe will use RStudio IDE to write code, navigate the files on our computer,\ninspect the variables we are going to create, and visualize the plots we will\ngenerate. RStudio can also be used for other things (*e.g.,* version control,\ndeveloping packages, writing Shiny apps) that we will not cover during the\ncourse\n\n![RStudio interface screenshot. Clockwise from top left: Source, Environment/History, Files/Plots/Packages/Help/Viewer, Console.](images/rstudio-screenshot.png)\n\nRStudio is divided into 4 \"Panes\": the **Source** for your scripts and documents\n(top-left, in the default layout), your **Environment/History** (top-right),\nyour **Files/Plots/Packages/Help/Viewer** (bottom-right), and \nthe R **Console** (bottom-left). The placement of these\npanes and their content can be customized (see menu, Tools -> Global Options ->\nPane Layout). \n\nOne of the advantages of using RStudio is that all the information\nyou need to write code is available in a single window. Additionally, with many\nshortcuts, auto-completion, and highlighting for the major file types you use\nwhile developing in R, RStudio will make typing easier and less error-prone.\n\n::: {.callout-note}\nRStudio's default preferences generally work well, but saving a work space to\n`.RData` can be cumbersome, especially if you are working with larger data sets as this would save all the data that is loaded into R into the `.RData` file. \nTo turn that off, go to `Tools` --> `Global Options` and select the 'Never' option\nfor `Save workspace to .RData' on exit.`\n\n![Set 'Save workspace to .RData on exit' to 'Never'](images/rstudio-preferences.png)\n:::\n\n## Working directory\n\nA good way of staying organised is to keep all the files related to a given project together. Using that concept when programming is really helpful, because it makes it easier for the computer to find all the data, scripts and other information related to an analysis.\n\nWe often refer to this as the **working directory**. This simply is the starting point for the computer to look for stuff.\n\nBecause you easily accumulate a lot of files when analysing data, it's good to be organised. During this course we'll create a project folder called `data-analysis`, which we'll make our working directory.\n\nWithin this folder we'll have sub folders that allow us to further organise our data. We'll use the following structure:\n\n![The working directory structure of this course](images/working_directory.png){#fig-working_directory width=50%}\n\n| Folder | Description|\n|-----------|--------------------------------------------------------------|\n| data | Contains the data files we'll use in this course, for example `surveys.csv`. For your own analysis you might want to consider adding another folder within this to contain the `raw` data. It's good practice to always keep an untouched copy of your raw data. This helps with transparency and allows you analyse data differently in the future. Aim to keep your data cleaning and analyses programmatically. |\n| images | This folder will contain any images you might produce, for example for publications or data exploration. |\n| scripts | Here we can store any scripts we create. Here it's also good to be structured and organised, something we cover a bit more in @sec-splitting_code. |\n| ... | The opportunities are endless. You can add folders for documents, presentations, etc. How you do things matters less than being *consistent*! |\n\nAll the files in the working directory can be referenced using **relative paths**. This allows you to move you working directory across your computer - or to other computers - without breaking any of the links within your scripts.\n\n::: {.callout-important}\n## Relative versus absolute paths\n\nRelative paths are relative to a certain location on your computer. Absolute paths start from the absolute start of your hard drive. This is easiest illustrated with an example:\n\n**Relative path**: `data/data_01.csv`\n\n**Absolute path**: `C:/Users/Jeff/Documents/data-analysis/data/surveys.csv`\n\n:::\n\n### Creating a working directory\n\nBefore we start writing any code we'll set up our working environment properly. To do this, we'll create our `data-analysis` working directory, with all its sub folders.\n\n::: {.panel-tabset group=\"language\"}\n## R\n\nThe easiest way to set up a working directory in R is to create an **R-project**. This is simply a folder on your computer with a shortcut in it (ending in `.RProj`). When you double-click on the shortcut, it opens RStudio and sets the working directory to that particular folder. \n\nTo create an \"R Project\":\n\n1. Start RStudio.\n2. Under the `File` menu, click on `New Project`. Choose `New Directory`, then\n `New Project`.\n3. Enter a name for this new folder (or \"directory\"), and choose a convenient\n location for it. This will be your **working directory** for the rest of the\n day (*e.g.,* `~/data-analysis`).\n4. Click on `Create Project`.\n5. Tick `Open in new session` to ensure RStudio starts afresh.\n\nR will show you your current working directory in the `Files` pane. Alternatively, you can get it by typing in and running the `getwd()` command.\n\n## Python\n\n:::\n\n::: {.callout-important}\nComplete @ex-createwd before proceeding.\n:::\n\n## Working with R\n\nThe basis of programming is that we write down instructions for the computer to\nfollow, and then we tell the computer to follow those instructions. We write, or\n*code*, instructions in R because it is a common language that both the computer\nand we can understand. We call the instructions *commands* and we tell the\ncomputer to follow the instructions by *executing* (also called *running*) those\ncommands.\n\n### Scripts versus console\n\nThere are two main ways of interacting with R: by using the console or by using\nscript files (plain text files that contain your code). The console pane (in\nRStudio, the bottom left panel) is the place where commands written in the R\nlanguage can be typed and executed immediately by the computer. It is also where\nthe results will be shown for commands that have been executed. You can type\ncommands directly into the console and press `Enter` to execute those commands,\nbut they will be forgotten when you close the session.\n\nBecause we want our code and workflow to be reproducible, it is better to type\nthe commands we want in the script editor, and save the script. This way, there\nis a complete record of what we did, and anyone (including our future selves!)\ncan easily replicate the results on their computer.\n\nRStudio allows you to execute commands directly from the script editor by using\nthe {{< kbd Control >}} + {{< kbd Enter >}} shortcut (on Macs, {{< kbd mac=Command >}} +\n{{< kbd mac=Return >}} will work, too). The command on the current line in the\nscript (indicated by the cursor) or all of the commands in the currently\nselected text will be sent to the console and executed when you press\n{{< kbd Control >}} + {{< kbd Enter >}}. You can find other keyboard shortcuts in this [RStudio cheatsheet about the RStudio IDE (PDF)](https://rstudio.github.io/cheatsheets/rstudio-ide.pdf).\n\n::: {.callout-warning}\n## The R prompt\n\nIf R is ready to accept commands, the R console shows a `>` prompt. If it\nreceives a command (by typing, copy-pasting or sent from the script editor using\n{{< kbd Control >}} + {{< kbd Enter >}}), R will try to execute it, and when\nready, will show the results and come back with a new `>` prompt to wait for new\ncommands.\n\nIf R is still waiting for you to enter more data because it isn't complete yet,\nthe console will show a `+` prompt. It means that you haven't finished entering\na complete command. This is because you have not 'closed' a parenthesis or\nquotation, i.e. you don't have the same number of left-parentheses as\nright-parentheses, or the same number of opening and closing quotation marks.\nWhen this happens, and you thought you finished typing your command, click\ninside the console window and press {{< kbd Escape >}}. This will cancel the incomplete\ncommand and return you to the `>` prompt.\n:::\n\n### Comments in code\n\nIt's always a good idea to add explanations to your code. We can do that with the hash tag `#` symbol, for example:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# This code calculates the sum of two numbers\n1 + 9\n```\n:::\n\n\n\n\n\nIt's always a good idea to add lots of comments to your code. What makes sense to you in that moment, might not a week later. Similarly, when sharing code with colleagues and collaborators, it's always good to be as clear as possible.\n\n### Splitting code {#sec-splitting_code}\n\nAs you increase your code, your script can become quite long. Often we want to split analyses into multiple scripts, for example:\n\n* `01_preprocessing` may contain data cleaning steps\n* `02_exploration` may contain exploratory plots of your data\n* `03_analysis` could contain (statistical) analyses of your data\n* `04_figures` could contain code for figures, ready for publication\n\nEach of these files could be hundreds of lines long. So, keeping track of your code makes sense. We can do that with **code headings**, which use the `# heading ----` syntax. You can even add different heading levels, by increasing the number of `#` at the start.\n\nThis creates a little table of contents in the bottom-left corner of the script pane:\n\n![Code headings](images/rstudio-codeheadings.png)\n\n## Running code {#running-code}\n\nThe simplest way of using a programming language is to use it interactively. We can do this by typing directly into the console / terminal.\n\n::: {.panel-tabset group=\"language\"}\n## R\n\nFor example, you can use R as a glorified calculator:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\n3 + 5\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 8\n```\n\n\n:::\n\n```{.r .cell-code}\n12 / 7\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 1.714286\n```\n\n\n:::\n:::\n\n\n\n\n## Python\n\nFor example, you can use Python as a glorified calculator:\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\n3 + 5\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n8\n```\n\n\n:::\n\n```{.python .cell-code}\n12 / 7\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n1.7142857142857142\n```\n\n\n:::\n:::\n\n\n\n\n:::\n\nRunning code like this directly in the console is generally not a good idea, because then we can't keep track of what we are doing. So, we first need to create a script to save our code in. Then, we can then play around.\n\n::: {.callout-important}\n## Complete before proceeding\nPlease complete @ex-createscript and @ex-runningcode.\n:::\n\n## Functions and their arguments\n\nFunctions are \"canned scripts\" that automate more complicated sets of commands\nincluding operations assignments, etc. Many functions are predefined, or can be\nmade available by importing *packages* (more on that later). A function\nusually takes one or more inputs called *arguments*. Functions often (but not\nalways) return a *value*. A typical example would be the function `sqrt()`. The\ninput (the argument) must be a number, and the return value (in fact, the\noutput) is the square root of that number.\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nsqrt(9)\n```\n:::\n\n\n\n\n## Python\n\nThe `sqrt()` function is not available by default, but is stored in the `math` module. Before we can use it, we need to load this module:\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nimport math\n```\n:::\n\n\n\n\nNext, we can use the `sqrt()` function, specifying that it comes from the `math`module. We separate the two with a full-stop (`.`):\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nmath.sqrt(9)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n3.0\n```\n\n\n:::\n:::\n\n\n\n\n:::\n\nHere, the value `9` is given to the `sqrt()` function. This function\ncalculates the square root, and returns the value. This function is very simple, because it takes just one argument.\n\nThe return 'value' of a function need not be numerical (like that of `sqrt()`),\nand it also does not need to be a single item: it can be a set of things, or\neven a data set. We'll see that when we read data files.\n\n\n### Arguments\n\nArguments allow you to control the behaviour of a function. They can be anything, not only numbers or file names. Exactly what each argument means differs per function and can be looked up in the documentation. Some functions take arguments which may either be specified by the user, or, if left out, take on a *default* value: these are called *options*.\n\nOptions are typically used to alter the way the\nfunction operates, such as if it should ignore missing values, or what symbol to\nuse in a plot. However, if you want something specific, you can specify a value\nof your choice which will be used instead of the default.\n\nLet's try a function that can take multiple arguments: `round()`.\n\n::: {.panel-tabset group=\"language\"}\n## R\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nround(3.14159)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 3\n```\n\n\n:::\n:::\n\n\n\n\n## Python\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nround(3.14159)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n3\n```\n\n\n:::\n:::\n\n\n\n\n:::\n\nHere, we've called `round()` with just one argument, `3.14159`, and it has\nreturned the value `3`. That's because the default is to round to the nearest\nwhole number. If we want more digits we can see how to do that by getting\ninformation about the `round()` function. \n\n::: {.panel-tabset group=\"language\"}\n## R\n\nWe can use `args(round)` to find what arguments it takes, or look at the help for this function using `?round`.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nargs(round)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\nfunction (x, digits = 0, ...) \nNULL\n```\n\n\n:::\n:::\n\n\n\n\nWe see that if we want a different number of digits, we can\ntype `digits = 2` or however many we want. For example:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nround(x = 3.14159, digits = 2)\n```\n:::\n\n\n\n\nIf you provide the arguments in the exact same order as they are defined you\ndon't have to name them:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nround(3.14159, 2)\n```\n:::\n\n\n\n\nAnd if you do name the arguments, you can switch their order:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nround(digits = 2, x = 3.14159)\n```\n:::\n\n\n\n\n## Python\nWe can use `help(round)` to find what arguments it takes.\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nhelp(round)\n```\n:::\n\n\n\n\nWe see that if we want a different number of digits, we can\ntype `ndigits = 2` or however many we want. For example:\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nround(3.14159, ndigits = 2)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n3.14\n```\n\n\n:::\n:::\n\n\n\n\nIf you provide the arguments in the exact same order as they are defined you\ndon't have to name them:\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nround(3.14159, 2)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n3.14\n```\n\n\n:::\n:::\n\n\n\n\nPython still expects the arguments in the correct order, so this gives an error:\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nround(ndigits = 2, 3.14159)\n```\n:::\n\n\n\n:::\n\nIt's good practice be explicit about the names of the arguments. That way you can avoid confusion later on when looking back at your code or when sharing your code.\n\n\n## Adding functionality using packages\nLO: adding functionality (installing + loading packages)\nLO: For Python: requires `numpy` for next section\n\n\n## Exercises\n\n:::{.callout-exercise #ex-createwd}\n#### Creating a working directory\n\n\n\n{{< level 1 >}}\n\n\n\n\n\n\nCreate a working directory called `data-analysis`. When you've done this, add the following sub folders:\n\n* `data`\n* `scripts`\n* `images`\n\n**Note**: programming languages are case-sensitive, so `data` is not treated the same way as `Data`.\n:::\n\n:::{.callout-exercise #ex-createscript}\n#### Creating a script\n\n\n\n{{< level 1 >}}\n\n\n\n\n\n\nCreate a script and save it as `session_01` in the `scripts` folder within your working directory.\n\n:::{.callout-hint}\nRemember, you will need to add an extension to the file. This is `.R` for R scripts or `.py` for Python ones.\n:::\n:::\n\n:::{.callout-exercise #ex-runningcode}\n#### Running code\n\n\n\n{{< level 1 >}}\n\n\n\n\n\n\nIn your new script `session_01`, run some mathematical operations, such as:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\n8 * 4\n6 - 9\n```\n:::\n\n\n\n\n:::{.callout-hint}\nRemember, you run the code using Ctrl + Enter (or Command + Enter on Mac).\n:::\n\n:::\n\n## Summary\n\n::: {.callout-tip}\n#### Key points\n\n- \n:::\n", "supporting": [ "01-intro-software_files" ], diff --git a/materials/01-intro-software.qmd b/materials/01-intro-software.qmd index 6b7ff80..09b9a6b 100644 --- a/materials/01-intro-software.qmd +++ b/materials/01-intro-software.qmd @@ -1,12 +1,12 @@ --- -title: Getting started +title: "Intro to software" --- ::: {.callout-tip} #### Learning objectives -- Get familiar with R -- Get to know RStudio +- Get familiar with the programming language +- Get to know the interface software ::: @@ -121,12 +121,24 @@ for `Save workspace to .RData' on exit.` ## Working directory -Making it easy for yourself *and* R to find all your data, it's helpful to use the concept of a **working directory**. This is a folder that R uses as a starting point where it expects to find all of your data and scripts. +A good way of staying organised is to keep all the files related to a given project together. Using that concept when programming is really helpful, because it makes it easier for the computer to find all the data, scripts and other information related to an analysis. -All of the scripts within this folder can then use **relative paths** to files in the working directory that indicate where inside the project a file is located (as opposed to **absolute paths**, which -point to where a file is on a specific computer). Working this way makes it -a lot easier to move your project around on your computer and share it with -others without worrying about whether or not the underlying scripts will still work. +We often refer to this as the **working directory**. This simply is the starting point for the computer to look for stuff. + +Because you easily accumulate a lot of files when analysing data, it's good to be organised. During this course we'll create a project folder called `data-analysis`, which we'll make our working directory. + +Within this folder we'll have sub folders that allow us to further organise our data. We'll use the following structure: + +![The working directory structure of this course](images/working_directory.png){#fig-working_directory width=50%} + +| Folder | Description| +|-----------|--------------------------------------------------------------| +| data | Contains the data files we'll use in this course, for example `surveys.csv`. For your own analysis you might want to consider adding another folder within this to contain the `raw` data. It's good practice to always keep an untouched copy of your raw data. This helps with transparency and allows you analyse data differently in the future. Aim to keep your data cleaning and analyses programmatically. | +| images | This folder will contain any images you might produce, for example for publications or data exploration. | +| scripts | Here we can store any scripts we create. Here it's also good to be structured and organised, something we cover a bit more in @sec-splitting_code. | +| ... | The opportunities are endless. You can add folders for documents, presentations, etc. How you do things matters less than being *consistent*! | + +All the files in the working directory can be referenced using **relative paths**. This allows you to move you working directory across your computer - or to other computers - without breaking any of the links within your scripts. ::: {.callout-important} ## Relative versus absolute paths @@ -135,40 +147,18 @@ Relative paths are relative to a certain location on your computer. Absolute pat **Relative path**: `data/data_01.csv` -**Absolute path**: `C:/Users/User1/Documents/R/data-analysis-r/data/data_01.csv` +**Absolute path**: `C:/Users/Jeff/Documents/data-analysis/data/surveys.csv` ::: -### Keeping it all together - -Whenever we are working on a project, it is good practice to keep a set of related data, analyses, and scripts contained in a single folder. - -Using a consistent folder structure across your projects will help keep things -organized, and will also make it easy to find things in the future. This -can be especially helpful when you have multiple projects. In general, you may -create directories (folders) for **scripts**, **data**, and **documents**. - - - **`data/`** Use this folder to store your raw data. For the sake - of transparency and [provenance](https://en.wikipedia.org/wiki/Provenance), - you should *always* keep a copy of your raw data accessible and do as much - of your data cleanup and pre-processing programmatically (*i.e.,* with scripts, - rather than manually). Separating raw data from processed data - is also a good idea. For example, you could have files - `data/raw/survey.plot1.txt` and `data/raw/survey.plot2.txt` kept separate from - a `data_output/survey.csv` file generated by the - `scripts/01.preprocess.survey.R` script. - - **`documents/`** This would be a place to keep documentation and other text documents - - **`scripts/`** This would be the location to keep your R scripts for - different analyses or plotting. - -You may want additional directories or sub directories depending on your project -needs, but these should form the backbone of your working directory. +### Creating a working directory -![Example of a working directory structure.](images/working-directory-structure.png) +Before we start writing any code we'll set up our working environment properly. To do this, we'll create our `data-analysis` working directory, with all its sub folders. -### Creating a working directory +::: {.panel-tabset group="language"} +## R -Before starting to write code in RStudio, we need to create an R Project. The idea behind an R-project is to have a space where you can keep all the files and settings associated with the project together. That way, next time you open the R Project it would be easier to resume work. An R-project basically creates a folder with a shortcut in it (ending in `.RProj`). When you double-click on the shortcut, it opens RStudio and sets the working directory to that particular folder. +The easiest way to set up a working directory in R is to create an **R-project**. This is simply a folder on your computer with a shortcut in it (ending in `.RProj`). When you double-click on the shortcut, it opens RStudio and sets the working directory to that particular folder. To create an "R Project": @@ -177,12 +167,16 @@ To create an "R Project": `New Project`. 3. Enter a name for this new folder (or "directory"), and choose a convenient location for it. This will be your **working directory** for the rest of the - day (*e.g.,* `~/data-analysis-r`). + day (*e.g.,* `~/data-analysis`). 4. Click on `Create Project`. -5. (Optional) Open in new session +5. Tick `Open in new session` to ensure RStudio starts afresh. R will show you your current working directory in the `Files` pane. Alternatively, you can get it by typing in and running the `getwd()` command. +## Python + +::: + ::: {.callout-important} Complete @ex-createwd before proceeding. ::: @@ -251,7 +245,7 @@ It's always a good idea to add explanations to your code. We can do that with th It's always a good idea to add lots of comments to your code. What makes sense to you in that moment, might not a week later. Similarly, when sharing code with colleagues and collaborators, it's always good to be as clear as possible. -### Splitting code +### Splitting code {#sec-splitting_code} As you increase your code, your script can become quite long. Often we want to split analyses into multiple scripts, for example: diff --git a/materials/03-tabular-data.qmd b/materials/03-tabular-data.qmd index c56adad..3c08290 100644 --- a/materials/03-tabular-data.qmd +++ b/materials/03-tabular-data.qmd @@ -17,7 +17,7 @@ In the previous section we dealt with single objects and vectors. Here we expand * LO: understand data frames; matrices * LO: exploring structure of tabular data -!["Tabular data](images/tabular_data.png) +![An example of tabular data](images/tabular_data.png){#fig-tabular_data} ## Working with data diff --git a/materials/images/working-directory-structure.png b/materials/images/working-directory-structure.png deleted file mode 100644 index cd9fef70333abff3597db9baa24da0026a3e324c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18934 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

iBoE0i@1Zaz`6j3ZvVmZUu|79X?() z{;#@&Wn(fSF`4Pa-359*lKID(RZSJr;esMygg|;XX#skjL^3ZE+&}v(Z_h562;z6)-M=`4kZ z8MwW~aPMINE5_I6j#^MO>W&m^OWQL>V~!@t^)P1`MG?SBG_lo$m5jw|t_N)#%Mu%3 z$3J^t-lUC@GpyO;8J*QM0yZ6S?@66nkCneSn?4*}qSRS-O5WA&_Ov(jLLvCDZ1E*j zWXJ=4!kfyAo;@CC7q8a+1;1H$8R#tc2Jfo&44@o&(S4u#Mr4smn`^*(>HnLM%KyY& e+Lmc$2OxJFWMe{tkO!bk!-F!lF`*c{#rzjlwHe0% diff --git a/materials/images/working_directory.png b/materials/images/working_directory.png new file mode 100644 index 0000000000000000000000000000000000000000..a05173d337142e6e9cc674ce8948905cb36b02fb GIT binary patch literal 62200 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 VIdZ1-^%~%(k35UWIc|OHe*oN3