R (ohjelmointikieli)

**R** on ohjelmointikieli ja ohjelmointiympäristö tilastolliseen laskentaan ja grafiikan tuottamiseen. R on GNU-projekti, joka on samankaltainen kuin Bell Labsilla kehitetty S-kieli ja sen ympäristö.

R-kielellä voi tehdä muutamalla rivillä asioita, jotka vaatisivat tunteja taulukkolaskentaohjelmalla tai sivuittain Java-koodia. R ei kuitenkaan sovellu monimutkaisiin tietorakenteisiin, tehokkaseen tiedon kyselyyn tai työskentelyyn tietojoukoilla, jotka eivät mahdu tietokoneen muistiin.

Kieltä käytetään data-analyysiin akateemisessa maailmassa ja suurissa yrityksissä. Kielestä sanotaan tulleen *[[lingua franca]]* tiedonlouhinnan edettyä kulta-ajalle. Kielen sanotaan saaneen seuraajia koska tilastotieteilijät, insinöörit ja tieteilijät joilla ei ole ohjelmointiosaamista kokevat sen helpoksi käyttää.
Kieleen on julkaistu vuoteen 2017 mennessä yli  laajennuspakettia.

## Historia
Kielen ovat kehittäneet Aucklandin yliopistossa Uudessa-Seelannissa Ross Ihaka ja Robert Gentleman.
R-ohjelmointikielessä on vaikutteita John Chambersin kehittämästä S-kielestä, sekä Scheme-kielestä.

Tekijät julkaisivat R:n avoimena lähdekoodina ja se on vapaasti saatavissa GNU GPL -lisenssin alla.

Ohjelmaversio 4.2.1 julkaistiin kesäkuussa 2022.

## Kieli
Kieli on suunniteltu aidon ohjelmointikielen ympärille ja se mahdollistaa laajentamisen uusien funktioiden lisäämisellä.

Yksinkertainen interaktiivinen käyttötapaus:

```r
> 1 + 2 + 3
[1] 6
```

Tulostettava palaute kertoo hakasuluissa indeksin ja sen jälkeen arvon. R-kielessä jokainen konsolissa syötetty arvo tulkitaan vektorina.

Pidempiä vektoreita voidaan syöttää `c()`-funktion (lyhenne sanasta *combine*) kautta:

```r
> c(0, 1, 1, 2, 3, 5, 8)
[1] 0 1 1 2 3 5 8
```


Muuttujaan sijoittaminen ja lausekkeen suorittaminen muuttujilla:

```r
> x <- 1
> y <- 2
> z <- c(x,y)
> z
[1] 1 2
```


Kieli tukee olio-ohjelmointia.

## Ohjelmointiympäristö
Kielen ohjelmointiympäristöstä on saatavilla useita versiota: sitä voidaan käyttää komentoriviltä, graafisen käyttöliittymän kautta tai laajennuksena muihin sovelluksiin kuten Emacsiin.

Ohjelmasta on saatavilla käännetyt binääriversiot on tarjolla Windows-, Macintosh- sekä monille Unix-järjestelmille. Graafisia käyttöliittymiä ovat muun muassa RStudio, GR, RKWard, SciViews-R ja Rcmdr.

## Laajennukset
R-kielelle on saatavilla laajennuksia, jotka ovat useiden käyttäjien tuottamia toimintokirjastoja. Lisäpaketit sisältävät usein funktiota ja työkaluja, joiden avulla tiettyjen ongelmien ratkaisu helpottuu oleellisesti, kun taas toiset lisäpaketit sisältävät työkaluja uusien tilastollisten menetelmien käyttöön.

Laajennuspaketteja voi asentaa CRAN (Comprehensive R Archive Network) -palvelusta komennolla

```r
install.packages("thepackagename")
```

jossa `thepackagename` on asennettavan paketin nimi.

## Esimerkkiohjelma
Alla oleva R-kielinen ohjelma tekee Mandelbrotin joukkoa kuvaavan GIF-animaation.


```r
install.packages("caTools")  # install external package
library(caTools)             # external package providing write.gif function
jet.colors <- colorRampPalette(c("red", "blue", "#007FFF", "cyan", "#7FFF7F",
                                 "yellow", "#FF7F00", "red", "#7F0000"))
dx <- 1500                    # define width
dy <- 1400                    # define height
C  <- complex(real = rep(seq(-2.2, 1.0, length.out = dx), each = dy),
              imag = rep(seq(-1.2, 1.2, length.out = dy), dx))
C <- matrix(C, dy, dx)       # reshape as square matrix of complex numbers
Z <- 0                       # initialize Z to zero
X <- array(0, c(dy, dx, 20)) # initialize output 3D array
for (k in 1:20) {            # loop with 20 iterations
  Z <- Z^2 + C               # the central difference equation
  X[, , k] <- exp(-abs(Z))   # capture results
}
write.gif(X, "Mandelbrot.gif", col = jet.colors, delay = 100)
```


## Kritiikkiä
R:n heikkoina kohtina pidetään tietoturvaa, muistinhallintaa ja suorituksen hitautta.
Esimerkiksi GIS:issä rasterietäisyyden laskemiseen käytettävä distance() on hidas, jos vertaa GIS-ohjelmaan. Muistinhallintaa sanotaan huonoksi ja hitaaksi. Kieltä sanotaan aloittelijalle vaikeaksi ja siinä on jyrkkä oppimiskäyrä. R:n kehittyessä kaikkia paketteja ei päivitetä. Ohjelmapakettien avusteet voivat olla puutteellisia.

## Lähteet
* 

### Viitteet

## Aiheesta muualla

* R-projektin sivut 
* CRAN (Comprehensive R Archive Network) 
* Jari Oksasen suomenkielinen R-opas