---
title: "Primi passi con R"
author: "Stefano Bussolon"
date: "01/2019 - 11/2019"
nooutput:
  html_document:
    keep_md: yes
  pdf_document:
    keep_tex: yes

output:
  xaringan::moon_reader:
    lib_dir: libs
    nature:
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false



---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## Scaricare R

R è un software free ed open source, che può essere liberamente scaricato dal sito [R: The R Project for Statistical Computing](https://www.r-project.org/), ad esempio utilizzando il mirror dell'università di Padova: [The Comprehensive R Archive Network](https://cran.stat.unipd.it/)

R è disponibile per piattaforme Windows, Mac, Linux.

R è un software a riga di comando. Questo significa che ogni istruzione viene comunicata ad R attraverso il prompt della riga di comando.

---

### RStudio

Per rendere più semplice la vita, è opportuno utilizzare [RStudio](https://www.rstudio.com/products/RStudio/), un IDE (integrated development environment) che rende più pratico scrivere codice in R. Anche RStudio può essere installato su Windows, Mac, Linux.

---

## Usare R come una calcolatrice

Per iniziare a prendere confidenza con la riga di comando di R, è possibile cominciare a giocarci, provando le funzioni più elementari.
La riga di comando, ad esempio, può essere utilizzata per calcolare alcune semplici operazioni.

### Operazioni aritmetiche di base

Addizione, sottrazione, moltiplicazione, divisione, elevazione a potenza

---

```{r pp_operazioni}
# addizione
7+4
# sottrazione
13-5
# moltiplicazione
7*7
# divisione
23/3
```
---

```{r pp_operazioni_2}
# divisione intera
23 %/% 3
# modulo (il resto della divisione)
23 %% 3
# elevazione a potenza
2^3

3^2 + (7-2)*3


```

---

## Assegnazione di variabili

La creazione di una variabile avviene attraverso la sintassi `<-`.
In R non è necessario definire il tipo di variabile. Attraverso l'assegnazione, sarà R a creare un tipo opportuno di variabile (o di oggetto).

---

```{r pp_assegnazione}
numero1 <- 5
etichetta1 <- "Antonio"
# le parentesi servono a stampare il risultato a video
(numero2 <- 5.12)
numero3 <- 10/3
# invocando la variabile ne stampo il valore
numero3
# se alla stessa variabile assegno un nuovo valore
# perdo il valore precedente
numero3 <- 10*2
numero3
```
---

```{r pp_assegnazione_2}

# operazioni usando le variabili
numero2 * numero3

# assign (variabile, valore) equivale a variabile <- valore
assign("numero4", 7)
numero4

```

---

`<-` è l'operatore di assegnamento, ed equivale alla funzione `assign`. Pertanto `numero <- 5` è una scorciatoia della funzione `assign("numero", 5)`.

La funzione `ls()` mi permette di elencare tutte le variabili (oggetti) attualmente attivi nel framework.


```{r pp_ls}
ls()
```

La funzione `rm()` rimuove un oggetto. Ad esempio, con il comando `rm(variabile1)` l'oggetto variabile1 sarà cancellato, e non più disponibile.

---

### Operazioni booleane

Le operazioni booleane sono finalizzate a confrontare due elementi. L'output di queste operazioni è di tipo booleano.

Attenzione: per valutare l'uguaglianza fra due elementi si usa ==

---

```{r pp_booleane}
quattro <- 4; cinque <- 5
quattro == 4# la variabile quattro è uguale a 4?
cinque == 4
quattro < cinque # quattro è minore di cinque?
quattro <= 4 # quattro è minore o uguale a 4?
quattro < 4 # quattro è minore di 4?
quattro != cinque # quattro è diverso da cinque?
```

---

```{r pp_booleane_2}
giusto = TRUE
sbagliato = FALSE
giusto | sbagliato # TRUE or FALSE = TRUE 
giusto & sbagliato # TRUE and FALSE = FALSE
(5>4) | (4>5) # vero o falso = vero
(5>4)&(4>5) # vero e falso = falso
(6<7)&(7<8)
```

---

```{r pp_booleane_3}
# ! significa not.
!TRUE
!FALSE
!sbagliato
sbagliato & (quattro==4)
```

---

## Guide di stile

Nello scrivere del codice, è opportuno seguire delle guide di stile. Questo garantisce una maggiore consistenza e codice più elegante.

Uno degli aspetti più importanti e meno banali è dare dei nomi appropriati alle variabili. Appropriati significa comprensibili ma non troppo lunghi.

Per separare le parole in un nome composto, Hadley Wickham suggerisce di usare l'underscore `_`. Ad esempio `nome_variabile`. Personalmente, però, non disdegno di utilizzare a volte il camelCase: `nomeVariabile` (peraltro suggerito nelle linee guida di Google).

Per approfondire, si consigliano queste risorse:

* [The tidyverse style guide](https://style.tidyverse.org/index.html)
* [Google's R Style Guide](https://google.github.io/styleguide/Rguide.xml)

---

## Help

Strumenti come gli [cheatsheets](https://www.rstudio.com/resources/cheatsheets/) di RStudio sono estremamente utili per avere un riferimento veloce di una serie di argomenti.

È opportuno imparare ad usare gli aiuti che l'ambiente R ci offre.

* help(nome)
	help sulla funzione `nome'
* ?nome
	equivale a help(nome)
* apropos("nome")
	elenca le funzioni che contengono ``nome''
* example(funzione)
	mostra degli esempi dell'uso della funzione
* RSiteSearch("kmeans")
	cerca informazioni relative alla funzione ``kmeans'' su internet.


