Skip to content

Commit

Permalink
notatki
Browse files Browse the repository at this point in the history
  • Loading branch information
mstaniak committed Oct 11, 2023
1 parent 80f61be commit 8b0e501
Show file tree
Hide file tree
Showing 160 changed files with 38,977 additions and 997 deletions.
13 changes: 13 additions & 0 deletions docs/..Rproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Version: 1.0

RestoreWorkspace: Default
SaveWorkspace: Default
AlwaysSaveHistory: Default

EnableCodeIndexing: Yes
UseSpacesForTab: Yes
NumSpacesForTab: 2
Encoding: UTF-8

RnwWeave: Sweave
LaTeX: pdfLaTeX
108 changes: 87 additions & 21 deletions docs/Notatka_temat2.rmd → docs/01-podstawy.rmd
Original file line number Diff line number Diff line change
@@ -1,29 +1,25 @@
---
title: "Wprowadzenie do R"
author: "Dylewicz, Kamchen, Krasoń, Kulon, Soból"
date: "12 01 2021"
output: pdf_document
---
# Podstawy języka R

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
Język R posiada kilka typów danych, które pokrótce postaramy sie omówić poniżej. Pokażemy ich budowe jak i operacje na nich, przytaczając stosowne przyklady.

\section{Podstawowe typy danych}
## Liczby

Liczby całkowite i rzeczywiste (tutaj separator dziesiętny to kropka). Możemy używać również notacji naukowej. Operacje na liczbach to podstawowe działania matematyczne jak i trochę rozszerzone, ukazane niżej wraz z specjalnymi liczbami.

Język R posiada kilka typów danych, które pokrótce postaramy sie omówić poniżej. Pokażemy ich budowe jak i operacje na nich, przytaczając stosowne przyklady.
\subsection{Liczby}
Liczby całkowite i rzeczywiste (tutaj separator dziesiętny to kropka). Możemy używać również notacji naukowej. Operacje na liczbach to podstawowe działania matematyczne jak i trochę rozszerzone, ukazane niżej wraz z specjalnymi liczbami.
```{r}
5; 5.5; 5.5e-2;
```

Tutaj liczby specjalne,

```{r}
NaN # not a number
Inf # nieskończoność
-Inf # - nieskończoność
```

oraz kilka działań na liczbach

```{r}
1 + 1 # podobnie '-' to odejmowanie
4/2 # dzielenie, a '*' to mnożenie
Expand All @@ -35,9 +31,9 @@ sqrt(4) #pierwiastkowanie
abs(-1) # wartość bezwzględna
```

\subsection{Łańcuchy znaków}
## Łańcuchy znaków

Łańcuch znaków to po prostu napi. Napis jest otoczony przez " lub '. W napisie możemy umieszczać dowolne znaki, pamiętając że są też znaki specjalne (rozpoczynające się od \\ i mające specjalne funkcje). Na napisach istnieje wiele operacji (np. $\verb+paste()+,$ czyli sklejenie dwóch napisów), lecz je zobaczymy w notatce o napisach.
Łańcuch znaków to po prostu napi. Napis jest otoczony przez " lub '. W napisie możemy umieszczać dowolne znaki, pamiętając że są też znaki specjalne (rozpoczynające się od \\ i mające specjalne funkcje). Na napisach istnieje wiele operacji (np. $\verb+paste()+,$ czyli sklejenie dwóch napisów), lecz je zobaczymy w notatce o napisach.

```{r}
"napis"
Expand All @@ -47,9 +43,9 @@ abs(-1) # wartość bezwzględna
cat("i znak \n specjalny, wstawiający nową linie") # cat() wyświetla napis w sposób niesformatowany
```

\subsection{Wartości logiczne}
## Wartości logiczne

Logiczna Prawda ($\verb+TRUE+$ lub $\verb+T+$) oraz logiczny Fałsz ($\verb+FALSE+$ lub $\verb+F+$). Na tych obiektach możemy wykonywać operacje logiczne oraz algebraiczne.
Logiczna Prawda ($\verb+TRUE+$ lub $\verb+T+$) oraz logiczny Fałsz ($\verb+FALSE+$ lub $\verb+F+$). Na tych obiektach możemy wykonywać operacje logiczne oraz algebraiczne.
```{r}
TRUE & TRUE # operator 'i'
TRUE | FALSE # operator 'lub'
Expand All @@ -59,9 +55,10 @@ TRUE | FALSE # operator 'lub'
2*FALSE # FALSE ma wartość 0
T ; `T` <- FALSE; T # używając `` możemy zmienić wartość logiczną wyrażenia
```
\section{Wektory}

Wektor to w R uporządkowany zbiór elementów. Elementy te muszą mieć ten sam typ, także jeśli do wektora trafią elementy z różnym typem (poza NA), to nastąpi konwersja elementów do jednego typu. Proste wektory tworzymy przez polecenie $\verb+c()+$ i elementy wypisujemy w nawiasie po przecinku. Dodatkowo, element wektora jest traktowany jako jednoelementowy wektor. Wektory liczbowe jak i inne możemy tworzyć za pomocą wbudowanych funkcji do tego przeznaczonych.
## Wektory

Wektor to w R uporządkowany zbiór elementów. Elementy te muszą mieć ten sam typ, także jeśli do wektora trafią elementy z różnym typem (poza NA), to nastąpi konwersja elementów do jednego typu. Proste wektory tworzymy przez polecenie $\verb+c()+$ i elementy wypisujemy w nawiasie po przecinku. Dodatkowo, element wektora jest traktowany jako jednoelementowy wektor. Wektory liczbowe jak i inne możemy tworzyć za pomocą wbudowanych funkcji do tego przeznaczonych.

```{r}
v <- c(1, 2, 3) #przypisanie wektora do zmiennej
Expand All @@ -83,7 +80,8 @@ v <- "a" # to też
toupper(x) # zmieni stringi w argumencie na wielkie litery
tolower(x) # zmieni stringi w argumencie na male litery
```
\subsection{Indeksowanie}

## Indeksowanie

W R wektory są indeksowane od 1 (a nie od 0 jak w wielu językach programowania!). Aby odwołać się do konkretnego elementu wektora korzystamy z nawiasów kwadratowych $\verb+[]+.$

Expand Down Expand Up @@ -157,7 +155,7 @@ seq_vec[seq_vec < 0.3 | seq_vec > 0.8]
seq_vec[seq_vec > 0.3 & seq_vec < 0.8]
```

\subsection{Operacje na wektorach}
## Operacje na wektorach

W R domyślnym i naturalnym zachowaniem funkcji na wektorach jest działanie element po elemencie

Expand Down Expand Up @@ -633,7 +631,75 @@ a=function(x,y){return(x**y)}
mapply(a,x=seq(1,101,by=10),y=seq(1:11))
```


## R - funkcje

Funkcje przydają się do zamknięcia w nich operacji, które się często powtarzają w naszym kodzie lub dla jego lepszej czytelności. Podstawowa składnia funkcji w R wygląda tak:
```
nazwa_funkcja <- function(argument 1, argument 2, …){
ciało funkcji
return(wartość lub obiekt zwracany)
}
```
Napiszmy funkcję, która będzie mnożyła dowolny wektor przez podaną liczbę, a następnie zsumuje elementy wektora:
```{r}
funkcja1 <- function(wektor, liczba){
rezultat <- wektor * liczba
rezultat <- sum(rezultat)
return(rezultat)
}
```
Możemy także pominąc $\texttt{return}$ i zdefiniować funkcje:
```{r}
funkcja2 <- function(wektor, liczba){
rezultat <- wektor * liczba
rezultat <- sum(rezultat)
rezultat
}
```
Obie funkcje $\texttt{funkcja1}$ i $\texttt{funkcja2}$ robią to samo. Wykonajmy nasze funkcje dla dwóch zdefiniowanych zmiennych:
```{r}
v <- 1:5
n <- 2
funkcja1(v, n)
funkcja2(v, n)
```
Oczywiście do wykonania funkcji potrzebne jest zdefiniowanie obu argumentów. Jak ich nie dodamy wyświetli się błąd, że argument drugi zaginął i nie mamy zdefiniowanej jego wartości domyślnej. Zdefiniujmy zatem domyślną wartość argumentu $\texttt{liczba}$ jako $\texttt{NULL}$ i dopiszmy do naszej funkcji kod, który gdy ten argument będzie miał wartość domyślną zwróci tylko sumę elementów wektora:
```{r}
funkcja3 <- function(wektor, liczba = NULL){
if(is.null(liczba)){
rezultat <- sum(wektor)
} else{
rezultat <- wektor * liczba
rezultat <- sum(rezultat)
}
rezultat
}
```
Wykonajmy funckję $\texttt{funkcja3}$ na wcześniej zdefiniowanym wektorze $\texttt{v}$:
```{r}
funkcja3(v)
```
Oprócz zdefiniowania wartości domyślnej argumentu poprzez trzy kropki możemy również dopuścić parametry dodatkowe. Zdefiniujmy funkcję z parametrami dodatkowymi:
```{r}
funkcja4 <- function(wektor, liczba = NULL, ...){
if(is.null(liczba)){
rezultat <- sum(wektor, ...)
} else{
rezultat <- wektor * liczba
rezultat <- sum(rezultat, ...)
}
rezultat
}
```
Wykonajmy funckję $\texttt{funkcja4}$ usuwając wartości brakujące z nowo zdefiniowanego wektora:
```{r}
v <- c(NA, 1, NA, 2:4, NA, 5)
v
funkcja4(v, na.rm = TRUE)
```
Funkcje są bardzo przydatne, gdy mamy do napisania długi skrypt. Pozwalają na podzielenie głównej części kodu na mniejsze kawałeczki, które kolejnemu użytkownikowi skryptu lub nam będzie łatwiej modyfikować.
Loading

0 comments on commit 8b0e501

Please sign in to comment.