R Zadanie 1.1

Skonstruuj wektor kwadratów liczb od 1 do 100. Następnie używając operatora dzielenia modulo i funkcji factor() zlicz, które cyfry oraz jak często występują na pozycji jedności w wyznaczonych kwadratach.

R code

##  0  1  4  5  6  9 
## 10 20 20 10 20 20

RR Zadanie 1.2

Zbuduj własne tablice trygonometryczne. Przygotuj ramkę danych, w których zebrane będą informacje o wartościach funkcji sinus, cosinus, tangens i cotangens dla kątów: \(0^{\circ}\) , \(30^{\circ}\) , \(45^{\circ}\) , \(60^{\circ}\) , \(90^{\circ}\) . Zauważ, że funkcje trygonometryczne w R przyjmują argumenty w radianach.

R code

##         sin          cos          tan         atan
## 1 0.0000000 1.000000e+00 0.000000e+00          Inf
## 2 0.5000000 8.660254e-01 5.773503e-01 1.732051e+00
## 3 0.7071068 7.071068e-01 1.000000e+00 1.000000e+00
## 4 0.8660254 5.000000e-01 1.732051e+00 5.773503e-01
## 5 1.0000000 6.123234e-17 1.633124e+16 6.123234e-17

Python code

## -c:8: RuntimeWarning: divide by zero encountered in true_divide
##         sin           cos           tan          atan
## 0  0.000000  1.000000e+00  0.000000e+00           inf
## 1  0.500000  8.660254e-01  5.773503e-01  1.732051e+00
## 2  0.707107  7.071068e-01  1.000000e+00  1.000000e+00
## 3  0.866025  5.000000e-01  1.732051e+00  5.773503e-01
## 4  1.000000  6.123234e-17  1.633124e+16  6.123234e-17

R Zadanie 1.3

Przygotuj wektor 30 łańcuchów znaków następującej postaci: liczba.litera, gdzie liczba to kolejne liczby od 1 do 30 a litera to trzy duże litery A, B, C występujące cyklicznie.

R code

##  [1] "1.A"  "2.B"  "3.C"  "4.A"  "5.B"  "6.C"  "7.A"  "8.B"  "9.C"  "10.A"
## [11] "11.B" "12.C" "13.A" "14.B" "15.C" "16.A" "17.B" "18.C" "19.A" "20.B"
## [21] "21.C" "22.A" "23.B" "24.C" "25.A" "26.B" "27.C" "28.A" "29.B" "30.C"
##  [1] "1.A"  "2.B"  "3.C"  "4.A"  "5.B"  "6.C"  "7.A"  "8.B"  "9.C"  "10.A"
## [11] "11.B" "12.C" "13.A" "14.B" "15.C" "16.A" "17.B" "18.C" "19.A" "20.B"
## [21] "21.C" "22.A" "23.B" "24.C" "25.A" "26.B" "27.C" "28.A" "29.B" "30.C"

Python code

## TODO

R Zadanie 1.4

Wczytaj zbiór danych daneO i napisz funkcję lub pętlę sprawdzającą typ i klasę każdej kolumny tego zbioru.

Patrz załącznik z opisem zbiorów danych.

R code

## [1] "Wiek klasa: integer typ: integer"
## [1] "Rozmiar.guza klasa: integer typ: integer"
## [1] "Wezly.chlonne klasa: integer typ: integer"
## [1] "Nowotwor klasa: integer typ: integer"
## [1] "Receptory.estrogenowe klasa: factor typ: integer"
## [1] "Receptory.progesteronowe klasa: factor typ: integer"
## [1] "Niepowodzenia klasa: factor typ: integer"
## [1] "Okres.bez.wznowy klasa: integer typ: integer"
## [1] "VEGF klasa: integer typ: integer"

Python code

## Wiek                          int64
## Rozmiar.guza                  int64
## Wezly.chlonne                 int64
## Nowotwor                    float64
## Receptory.estrogenowe        object
## Receptory.progesteronowe     object
## Niepowodzenia                object
## Okres.bez.wznowy            float64
## VEGF                          int64
## dtype: object

R Zadanie 1.5

Z odczytanej ramki danych daneO wyświetl tylko dane z wierszy o parzystych indeksach.

R code

##    Wiek Rozmiar.guza Wezly.chlonne Nowotwor Receptory.estrogenowe
## 2    29            1             0        2                  (++)
## 4    32            1             0        3                  (++)
## 6    33            1             1        3                   (-)
## 8    35            2             1        2                   (+)
## 10   36            1             1        2                   (-)
## 12   37            1             0        3                   (-)
## 14   38            1             1        3                  (++)
## 16   40            1             1        2                   (+)
## 18   41            1             1        2                  <NA>
## 20   41            1             0        3                   (+)
## 22   42            1             1        2                 (+++)
## 24   42            1             1        2                 (+++)
## 26   42            1             0       NA                   (-)
## 28   43            1             0        3                  <NA>
## 30   44            1             0        1                  (++)
## 32   44            2             0        2                  (++)
## 34   44            1             1        3                   (+)
## 36   44            2             1        3                   (-)
## 38   45            1             0        2                 (+++)
## 40   45            1             1        2                  (++)
## 42   46            1             0        2                   (+)
## 44   46            1             0        2                  (++)
## 46   46            1             0        2                   (+)
## 48   46            1             1        3                   (-)
## 50   46            1             0       NA                  <NA>
## 52   47            1             0        2                   (+)
## 54   47            2             0        2                 (+++)
## 56   47            1             0        3                   (+)
## 58   48            1             1        3                   (-)
## 60   49            1             0        1                  (++)
## 62   49            1             1        2                   (+)
## 64   49            2             1        3                   (-)
## 66   50            2             1        1                   (-)
## 68   50            1             0        2                  (++)
## 70   50            2             1        2                  (++)
## 72   50            2             0        3                   (-)
## 74   50            2             1        3                 (+++)
## 76   50            2             1       NA                 (+++)
## 78   51            1             1        2                  (++)
## 80   51            1             0        2                   (+)
## 82   51            2             0        3                   (-)
## 84   51            2             1       NA                   (-)
## 86   52            1             0        2                  (++)
## 88   52            2             1        2                   (+)
## 90   52            1             0       NA                   (-)
## 92   53            1             0        3                   (-)
## 94   55            1             0        1                   (+)
## 96   55            1             0       NA                  <NA>
##    Receptory.progesteronowe Niepowodzenia Okres.bez.wznowy  VEGF
## 2                      (++)          brak               53  1118
## 4                      (++)          brak               26  1793
## 6                      (++)        wznowa               36  2776
## 8                      (++)          brak               38  3827
## 10                     (++)          brak               37   834
## 12                      (+)        wznowa               40  3331
## 14                    (+++)        wznowa               16  2759
## 16                     (++)          brak               27  3038
## 18                     <NA>          brak               19  1981
## 20                      (-)          brak               18   989
## 22                     (++)        wznowa               29  5994
## 24                    (+++)          brak               47   532
## 26                      (+)          brak               33  1531
## 28                     <NA>          brak               39  1348
## 30                      (+)          brak               47  2402
## 32                    (+++)          brak               48   483
## 34                     (++)          brak               36   596
## 36                      (-)          brak               53   164
## 38                     (++)          brak               33   951
## 40                     (++)          brak               54  1275
## 42                    (+++)          brak               23  2018
## 44                    (+++)          brak               42  1197
## 46                     (++)          brak               51   780
## 48                      (+)          brak               36  2703
## 50                     <NA>          brak               28  1526
## 52                     (++)          brak               31   286
## 54                    (+++)          brak               33  2442
## 56                     (++)          brak               38   326
## 58                      (-)        wznowa               21  5194
## 60                     (++)          brak               36  4355
## 62                     (++)          brak               36  3101
## 64                      (-)          brak               39   189
## 66                      (-)          brak               28  1485
## 68                    (+++)          brak               29   118
## 70                      (-)          brak               33  1694
## 72                      (-)          brak               39  1738
## 74                    (+++)          brak               49  3946
## 76                      (-)          brak               27  7665
## 78                     (++)          brak               33   629
## 80                    (+++)          brak               50   223
## 82                      (-)        wznowa               10 13953
## 84                      (-)          brak               30  8064
## 86                     (++)          brak               42   357
## 88                      (+)        wznowa               48  1927
## 90                      (+)          brak               48  3547
## 92                      (-)        wznowa               50   590
## 94                     (++)          brak               36  1354
## 96                     <NA>          brak               NA  1255

Python code

##     Wiek  Rozmiar.guza  Wezly.chlonne  ...  Niepowodzenia Okres.bez.wznowy   VEGF
## 2     29             1              0  ...           brak             53.0   1118
## 4     32             1              0  ...           brak             26.0   1793
## 6     33             1              1  ...         wznowa             36.0   2776
## 8     35             2              1  ...           brak             38.0   3827
## 10    36             1              1  ...           brak             37.0    834
## 12    37             1              0  ...         wznowa             40.0   3331
## 14    38             1              1  ...         wznowa             16.0   2759
## 16    40             1              1  ...           brak             27.0   3038
## 18    41             1              1  ...           brak             19.0   1981
## 20    41             1              0  ...           brak             18.0    989
## 22    42             1              1  ...         wznowa             29.0   5994
## 24    42             1              1  ...           brak             47.0    532
## 26    42             1              0  ...           brak             33.0   1531
## 28    43             1              0  ...           brak             39.0   1348
## 30    44             1              0  ...           brak             47.0   2402
## 32    44             2              0  ...           brak             48.0    483
## 34    44             1              1  ...           brak             36.0    596
## 36    44             2              1  ...           brak             53.0    164
## 38    45             1              0  ...           brak             33.0    951
## 40    45             1              1  ...           brak             54.0   1275
## 42    46             1              0  ...           brak             23.0   2018
## 44    46             1              0  ...           brak             42.0   1197
## 46    46             1              0  ...           brak             51.0    780
## 48    46             1              1  ...           brak             36.0   2703
## 50    46             1              0  ...           brak             28.0   1526
## 52    47             1              0  ...           brak             31.0    286
## 54    47             2              0  ...           brak             33.0   2442
## 56    47             1              0  ...           brak             38.0    326
## 58    48             1              1  ...         wznowa             21.0   5194
## 60    49             1              0  ...           brak             36.0   4355
## 62    49             1              1  ...           brak             36.0   3101
## 64    49             2              1  ...           brak             39.0    189
## 66    50             2              1  ...           brak             28.0   1485
## 68    50             1              0  ...           brak             29.0    118
## 70    50             2              1  ...           brak             33.0   1694
## 72    50             2              0  ...           brak             39.0   1738
## 74    50             2              1  ...           brak             49.0   3946
## 76    50             2              1  ...           brak             27.0   7665
## 78    51             1              1  ...           brak             33.0    629
## 80    51             1              0  ...           brak             50.0    223
## 82    51             2              0  ...         wznowa             10.0  13953
## 84    51             2              1  ...           brak             30.0   8064
## 86    52             1              0  ...           brak             42.0    357
## 88    52             2              1  ...         wznowa             48.0   1927
## 90    52             1              0  ...           brak             48.0   3547
## 92    53             1              0  ...         wznowa             50.0    590
## 94    55             1              0  ...           brak             36.0   1354
## 96    55             1              0  ...           brak              NaN   1255
## 
## [48 rows x 9 columns]

R Zadanie 1.6

Używając operatorów logicznych wyświetl ze zbioru danych tylko wiersze odpowiadające: pacjentkom starszym niż 50 lat u których wystąpiły przerzuty do węzłów chłonnych (cecha Wezly.chlonne=1).

R code

##    Wiek Rozmiar.guza Wezly.chlonne Nowotwor Receptory.estrogenowe
## 78   51            1             1        2                  (++)
## 79   51            1             1        2                   (+)
## 81   51            2             1        2                 (+++)
## 84   51            2             1       NA                   (-)
## 88   52            2             1        2                   (+)
## 95   55            1             1        2                  (++)
## 97   57            1             1        2                  (++)
##    Receptory.progesteronowe Niepowodzenia Okres.bez.wznowy VEGF
## 78                     (++)          brak               33  629
## 79                      (+)          brak               36 2879
## 81                     (++)          brak               52 1098
## 84                      (-)          brak               30 8064
## 88                      (+)        wznowa               48 1927
## 95                     (++)          brak               29  373
## 97                     (++)          brak               46  380

Python code

##     Wiek  Rozmiar_guza  Wezly_chlonne  ...  Niepowodzenia Okres_bez_wznowy  VEGF
## 78    51             1              1  ...           brak             33.0   629
## 79    51             1              1  ...           brak             36.0  2879
## 81    51             2              1  ...           brak             52.0  1098
## 84    51             2              1  ...           brak             30.0  8064
## 88    52             2              1  ...         wznowa             48.0  1927
## 95    55             1              1  ...           brak             29.0   373
## 97    57             1              1  ...           brak             46.0   380
## 
## [7 rows x 9 columns]

R Zadanie 1.7

Wyświetl nazwy kolumn w zbiorze danych daneO, a następnie oblicz długość (liczbę znaków) nazw kolejnych kolumn.

R code

## [1] "Wiek"                     "Rozmiar.guza"            
## [3] "Wezly.chlonne"            "Nowotwor"                
## [5] "Receptory.estrogenowe"    "Receptory.progesteronowe"
## [7] "Niepowodzenia"            "Okres.bez.wznowy"        
## [9] "VEGF"
## [1]  4 12 13  8 21 24 13 16  4

Python code

## Index(['Wiek', 'Rozmiar_guza', 'Wezly_chlonne', 'Nowotwor',
##        'Receptory_estrogenowe', 'Receptory_progesteronowe', 'Niepowodzenia',
##        'Okres_bez_wznowy', 'VEGF'],
##       dtype='object')
## [4, 12, 13, 8, 21, 24, 13, 16, 4]

R Zadanie 1.8

Napisz funkcję, która za argumenty przyjmie wektor liczb, a jako wynik zwróci trzy najmniejsze i trzy największe liczby. Jeżeli wejściowy wektor jest krótszy niż trzy liczby, to wyświetlany powinien być napis “za krótki argument”.

RR Zadanie 1.9

Zmodyfjkuj funkcję z poprzedniego zadania tak, by otrzymywała też drugi argument ile, którym można określić liczbę skrajnych wartości wyznaczanych jako wynik. Domyślną wartością tego argumentu powinna być liczba 3.

RR Zadanie 1.10

Napisz funkcję poczatek() przyjmującą za pierwszy argument wektor, macierz lub ramkę a za drugi argument liczbę n. Niech to będzie przeciążona funkcja. Dla wektora powinna ona w wyniku zwracać n pierwszych elementów, dla macierzy i ramki danych powinna zwracać podmacierz o wymiarach \(n\times n\).

Python code

## TODO

RR Zadanie 1.11

Narysuj funkcję, która w układzie biegunowym ma współrzędne: \[ r=1+\sin(t)\\ \phi=c * t. \]

dla \(c=1, c=0.1\) i \(c=2.2\). Zobacz przykład na rysunku 1.6.

Wskazówka: trzeba zamienić współrzędne na układ kartezjański przekształceniami \(x=r\cos(\phi)\) i \(y=r\sin(\phi)\). Autor upierał się, że tego uczą w gimnazjum i takie podpowiedzi są zbędne, ale prawda jest taka, że autor nigdy nie był w gimnazjum. Przyp. żony.

R Zadanie 1.12

Używając instrukcji curve() narysuj wykres funkcji \(f(x) = 2x^3 - x^2 + 3\) na przedziale [0, 1].

Na wykresie tej funkcji zaznacz punkty odpowiadające wartościom w punktach 0.2 i 0.8, a następnie na wykres nanieś napisy opisujące współrzędne tych punktów. Zobacz przykład na rysunku 1.7

R Zadanie 1.13

Pod adresem http://www.biecek.pl/R/dane/daneBioTech.csv znajduje się plik tekstowy z danymi. Dane są w formacie tabelarycznym, mają nagłówek, kolejne pola rozdzielane są średnikiem a kropką dziesiętną jest przecinek. Wczytaj te dane do programu R i przypisz je do zmiennej daneBT.

R code

##   Wiek Płeć.K.0.M.1    WIT CIT..h. Kreatynina.1 Kreatynina.3 Kreatynina.7
## 1   59            M obecny    20.0          7.3          5.6          3.0
## 2   61            M   brak    21.5          8.0          6.8          2.4
##   Mocznik.1 Mocznik.3 Mocznik.7 GFR.MDRD.1 GFR.MDRD.3 GFR.MDRD.7
## 1      15.9      20.8      19.2  10.195520   14.04951   33.10493
## 2      14.6      22.2      16.3   8.878414   10.82331   44.92832

Python code

##    Wiek_ Płeć_K-0_M-1     WIT  ...  GFR_MDRD_1  GFR_MDRD_3  GFR_MDRD_7
## 0     59            M  obecny  ...   10.195520   14.049514   33.104926
## 1     61            M    brak  ...    8.878414   10.823313   44.928322
## 
## [2 rows x 13 columns]

R Zadanie 1.14

Z odczytanych w poprzednim zadaniu danych wybierz tylko pierwsze trzy kolumny i pierwsze 10 wierszy. Zapisz ten fragment danych do pliku maleDane.txt na dysk c:\ (użytkownicy Linuxa mogą zapisać do innego katalogu). Rozdzielaj kolejne pola znakiem tabulacji a kropką dziesiętną będzie kropka. Sprawdź w dowolnym edytorze tekstowym, co zapisało się do tego pliku.

RR Zadanie 1.15

Skonstruuj wektor 100 liczb, który jest symetryczny (tzn. elementy czytane od końca tworzą ten sam wektor co elementy czytane od początku). Pierwsze 20 liczb to kolejne liczby naturalne, następnie występuje 10 zer, następnie 20 kolejnych liczb parzystych (pozostałe elementy określone są przez warunek symetrii). Napisz funkcję, która sprawdza czy wektor jest symetryczny i sprawdź czy wygenerowany wektor jest symetryczny.

RRR Zadanie 1.16

Napisz funkcję localMin(), której argumentem będzie ramka danych, a wynikiem będą te wiersze, w których w jakiejkolwiek liczbowej kolumnie występuje wartość najmniejsza dla tej kolumny. Kolumny z wartościami nieliczbowymi nie powinny być brane pod uwagę.

Innymi słowy jeżeli ramka ma trzy kolumny z wartościami liczbowymi, to wynikiem powinny być wiersze, w których w pierwszej kolumnie występują wartości minimalne dla pierwszej kolumny oraz wiersze, w których w drugiej kolumnie występują wartości minimalne dla drugiej kolumny oraz wiersze, w których w trzeciej kolumnie występują wartości minimalne dla trzeciej kolumny. Odczytaj ramkę danych z zadania 1.13 i sprawdź działanie napisanej funkcji.

R code

##    Wiek Płeć.K.0.M.1    WIT CIT..h. Kreatynina.1 Kreatynina.3 Kreatynina.7
## 10   56            M   brak    19.0          3.1          1.6          1.4
## 12   52            M   brak    23.0          7.4          8.1          9.6
## 16   24            M obecny    13.5          6.8          7.5          6.9
## 19   42            K obecny    23.0         10.4          3.5          2.5
## 20   57            K   brak    31.0          7.4         10.0          5.5
## 21   51            K obecny    15.0          3.2          2.4          0.6
## 23   42            K   brak    18.0          2.2          1.1          1.1
##    Mocznik.1 Mocznik.3 Mocznik.7 GFR.MDRD.1 GFR.MDRD.3 GFR.MDRD.7
## 10       8.7       9.5       7.2  25.648104  60.324799  77.484225
## 12      18.5      20.9      32.5   9.692808   8.747187   7.473208
## 16      22.6      28.8      40.1  12.398062  11.288029  11.682899
## 19      23.5      17.0      11.9   5.553370  21.137902  35.912472
## 20      14.0      23.2      21.0   6.464549   4.775043   9.526704
## 21      14.4       7.3       3.5  16.364461  23.671536 113.510307
## 23      10.5       7.3       6.8  31.376232  84.787234  84.830259

Python code

##     Wiek_ Płeć_K-0_M-1     WIT  ...  GFR_MDRD_1  GFR_MDRD_3  GFR_MDRD_7
## 9      56            M    brak  ...   25.648104   60.324799   77.484225
## 11     52            M    brak  ...    9.692808    8.747187    7.473208
## 15     24            M  obecny  ...   12.398062   11.288029   11.682899
## 18     42            K  obecny  ...    5.553370   21.137902   35.912472
## 19     57            K    brak  ...    6.464549    4.775043    9.526704
## 20     51            K  obecny  ...   16.364461   23.671536  113.510307
## 22     42            K    brak  ...   31.376232   84.787234   84.830259
## 
## [7 rows x 13 columns]

R Zadanie 1.17

Poniższa funkcja nie działa poprawnie, powinna wyznaczać kwadraty kolejnych liczb ale tego nie robi. Skopiuj ją do programu R a następnie użyj instrukcji fix(), by poprawić funkcję kwadratyLiczb().

kwadratyLiczb <- function(x) {
1:x^2
}

R Zadanie 1.18

Funkcja ecdf(), wyznacza dystrybuantę empiryczną. Przyjrzyj się trzeciej linii z poniższego przykładu oraz spróbuj przewidzieć co jest wynikiem tego wyrażenia i jaka funkcja jest wywoływana jako druga.

data(iris)
x <- iris[,1]
ecdf(x)(x)

R code

R Zadanie 1.19

Znajdź liczbę x z przedziału [0 − 1] dla którego poniższe wyrażenie zwraca wartość FALSE.

x + 0.1 + 0.1 == 0.1 + 0.1 + x

R code

##  [1]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE

Python code

## [ True  True  True  True False  True  True False  True  True False]