Bevezetés az R-be 2.0 - Feladatgyűjtemény

Vektor, lista

1. feladat. Vektorok.
Hozzunk létre három vektort. Egy üres (0 elemű) numerikus vektort, egy 10 elemű vektort: 1, 2, ..., 10, és egy másik 10 elemű vektort: 10, 9, ..., 1. Fűzzük őket össze egyetlen vektorba!

v.1 <- numeric(0)   # üres numerikus vektor
v.2 <- 1:10
v.3 <- 10:1

c(v.1, v.2, v.3)    # vektorok összefűzése
 [1]  1  2  3  4  5  6  7  8  9 10 10  9  8  7  6  5  4  3  2  1

2. feladat. Vektorok.
Hozzunk létre 4 vektort, amely a 4 fő vektortípust képviseli (karakteres, egész, numerikus, logikai)! Kérdezzük le ezen objektumok 3 fő tulajdonságát (típus, hossz, attribútum)! Az összes lehetőséget próbáljuk ki, amellyel a 4 vektorból kettőt összefűzhetünk egymással. Mi lesz a létrejövő vektorok típusa az automatikus konverzió során?

v.1 <- c("a", "b")
typeof(v.1); length(v.1); attributes(v.1)
[1] "character"
[1] 2
NULL
v.2 <- c(12L, 13L)
typeof(v.2); length(v.2); attributes(v.2)
[1] "integer"
[1] 2
NULL
v.3 <- c(1.4, 1.6)
typeof(v.3); length(v.3); attributes(v.3)
[1] "double"
[1] 2
NULL
v.4 <- c(T, F, T)
typeof(v.4); length(v.4); attributes(v.4)
[1] "logical"
[1] 3
NULL
v.5 <- c(v.1, v.2)
v.5; typeof(v.5); length(v.5); attributes(v.5)
[1] "a"  "b"  "12" "13"
[1] "character"
[1] 4
NULL
v.5 <- c(v.1, v.3)
v.5; typeof(v.5); length(v.5); attributes(v.5)
[1] "a"   "b"   "1.4" "1.6"
[1] "character"
[1] 4
NULL
v.5 <- c(v.1, v.4)
v.5; typeof(v.5); length(v.5); attributes(v.5)
[1] "a"     "b"     "TRUE"  "FALSE" "TRUE"
[1] "character"
[1] 5
NULL
v.5 <- c(v.2, v.3)
v.5; typeof(v.5); length(v.5); attributes(v.5)
[1] 12.0 13.0  1.4  1.6
[1] "double"
[1] 4
NULL
v.5 <- c(v.2, v.4)
v.5; typeof(v.5); length(v.5); attributes(v.5)
[1] 12 13  1  0  1
[1] "integer"
[1] 5
NULL
v.5 <- c(v.3, v.4)
v.5; typeof(v.5); length(v.5); attributes(v.5)
[1] 1.4 1.6 1.0 0.0 1.0
[1] "double"
[1] 5
NULL

3. feladat. Vektorok.
Hozzunk létre egy 3 elemű numerikus vektort, amely Péter, Zoltán és Imre pontszámait tartalmazza. Kérdezzük le a vektor 3 jellemzőjét, majd változtassuk meg Péter névét Tamásra!

v.1 <- c(Péter=12, Zoltán=23, Imre=31)
v.1; typeof(v.1); length(v.1); attributes(v.1)
 Péter Zoltán   Imre 
    12     23     31
[1] "double"
[1] 3
$names
[1] "Péter"  "Zoltán" "Imre"
names(v.1)[1] <- "Tamás"
v.1; typeof(v.1); length(v.1); attributes(v.1)
 Tamás Zoltán   Imre 
    12     23     31
[1] "double"
[1] 3
$names
[1] "Tamás"  "Zoltán" "Imre"

4. feladat. Listák.
Bizonyítsuk, hogy a lista a legszabadabb adatszerkezet az R-ben. Hozzunk létre egy karakteres vektorból, egy numerikus mátrixból és egy logikai vektorból álló listát!

e.1 <- c("a", "b", "c")
e.2 <- matrix(1:12, nrow=2, byrow = T)
e.3 <- c(T, F, F)
L.1 <- list(e.1, e.2, e.3)
L.1; typeof(L.1); length(L.1); attributes(L.1)
[[1]]
[1] "a" "b" "c"

[[2]]
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    3    4    5    6
[2,]    7    8    9   10   11   12

[[3]]
[1]  TRUE FALSE FALSE
[1] "list"
[1] 3
NULL

5. feladat. Listák.
Hozzuk létre az előző feladat listáját, de gondoskodjunk a listelemek elnevezéséről is!

e.1 <- c("a", "b", "c")
e.2 <- matrix(1:12, nrow=2, byrow = T)
e.3 <- c(T, F, F)
L.1 <- list("nev"=e.1, pont=e.2, zsuri=e.3)
L.1; typeof(L.1); length(L.1); attributes(L.1)
$nev
[1] "a" "b" "c"

$pont
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    3    4    5    6
[2,]    7    8    9   10   11   12

$zsuri
[1]  TRUE FALSE FALSE
[1] "list"
[1] 3
$names
[1] "nev"   "pont"  "zsuri"

6. feladat. Listák.
Hozzunk létre 3 listát és fűzzük őket össze a c() függvénnyel! Mi történik, ha a list() függvényt használjuk ugyanerre?

L.1 <- list(nev=c("a", "b"), pont=3:4)
L.2 <- list(kard=T, fej=c(3, 9, 11))
L.3 <- list(matrix(1:12, nrow=2, byrow = T), c(T, F))

L.4 <- c(L.1, L.2, L.3)
L.4; typeof(L.4); length(L.4); attributes(L.4)
$nev
[1] "a" "b"

$pont
[1] 3 4

$kard
[1] TRUE

$fej
[1]  3  9 11

[[5]]
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    3    4    5    6
[2,]    7    8    9   10   11   12

[[6]]
[1]  TRUE FALSE
[1] "list"
[1] 6
$names
[1] "nev"  "pont" "kard" "fej"  ""     ""
L.4 <- list(L.1, L.2, L.3)
L.4; typeof(L.4); length(L.4); attributes(L.4)
[[1]]
[[1]]$nev
[1] "a" "b"

[[1]]$pont
[1] 3 4


[[2]]
[[2]]$kard
[1] TRUE

[[2]]$fej
[1]  3  9 11


[[3]]
[[3]][[1]]
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    3    4    5    6
[2,]    7    8    9   10   11   12

[[3]][[2]]
[1]  TRUE FALSE
[1] "list"
[1] 3
NULL

6. feladat. Listák.
Az előző példában létrehozott listából készítsünk vektort!

L.1 <- list(nev=c("a", "b"), pont=3:4)
L.2 <- list(kard=T, fej=c(3, 9, 11))
L.3 <- list(matrix(1:12, nrow=2, byrow = T), c(T, F))
L.4 <- list(L.1, L.2, L.3)
L.4; typeof(L.4); length(L.4); attributes(L.4)
[[1]]
[[1]]$nev
[1] "a" "b"

[[1]]$pont
[1] 3 4


[[2]]
[[2]]$kard
[1] TRUE

[[2]]$fej
[1]  3  9 11


[[3]]
[[3]][[1]]
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    3    4    5    6
[2,]    7    8    9   10   11   12

[[3]][[2]]
[1]  TRUE FALSE
[1] "list"
[1] 3
NULL
v.1 <- unlist(L.4)
v.1; typeof(v.1); length(v.1); attributes(v.1)
   nev1    nev2   pont1   pont2    kard    fej1    fej2    fej3         
    "a"     "b"     "3"     "4"  "TRUE"     "3"     "9"    "11"     "1" 

    "7"     "2"     "8"     "3"     "9"     "4"    "10"     "5"    "11" 

    "6"    "12"  "TRUE" "FALSE"
[1] "character"
[1] 22
$names
 [1] "nev1"  "nev2"  "pont1" "pont2" "kard"  "fej1"  "fej2"  "fej3" 
 [9] ""      ""      ""      ""      ""      ""      ""      ""     
[17] ""      ""      ""      ""      ""      ""