다음 각 연습 문제에 해당하는 R code를 추가하시오

4-0.(벡터 Review) letters와 month.name의 세번째원소부터 5번째 원소까지를 출력하시오

letters
month.name

letters[3:5]
## [1] "c" "d" "e"
month.name[3:5]
## [1] "March" "April" "May"

4-1. 다음 리스트의 길이를 구하시오

list(list(alpha=pi, beta=sqrt(pi)), gamma=letters, delta=NULL)
list(alpha=pi, beta=sqrt(pi), gamma=letters, delta=NULL)

length(list(list(alpha=pi, beta=sqrt(pi)), gamma=letters, delta=NULL))
## [1] 3
length(list(alpha=pi, beta=sqrt(pi), gamma=letters, delta=NULL))
## [1] 4

4-2. 다음 리스트에서 A를 Alpha로 대체하시오

list(c(3,5,7), c(“A”,“B”,“C”))

lis <- list(c(3,5,7), c("A","B","C"))
lis
## [[1]]
## [1] 3 5 7
## 
## [[2]]
## [1] "A" "B" "C"
lis[[c(2,1)]] <- "Alpha"
lis
## [[1]]
## [1] 3 5 7
## 
## [[2]]
## [1] "Alpha" "B"     "C"

4-3. 다음 리스트는 math, writing, reading의 중간고사 및 기말고사 점수이다. 전체 평균을 계산하시오

list(math=list(95,90), writing=list(90,85), reading=list(85,80))

lis <- list(math=list(95,90), writing=list(90,85), reading=list(85,80))
mean(unlist(lis))
## [1] 87.5

4-4. 다음 리스트에서 첫번째 원소(alpha)의 각 값에 1을 더하시오

list(alpha=0:4, beta=sqrt(1:5), gamma=log(1:5))

lis <- list(alpha=0:4, beta=sqrt(1:5), gamma=log(1:5))
lis[[1]] <- lis[[1]]+1
lis
## $alpha
## [1] 1 2 3 4 5
## 
## $beta
## [1] 1.000000 1.414214 1.732051 2.000000 2.236068
## 
## $gamma
## [1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379

4-5. 다음 리스트에서 두번째 원소(M)을 출력하시오. 단 두번째 원소의 세번째 값은 출력에서 제외하시오

list(L=letters[1:5], M=month.name[1:5])

lis <- list(L=letters[1:5], M=month.name[1:5])
lis$M[-3]
## [1] "January"  "February" "April"    "May"

4-6. 다음과 같이 리스트를 생성하여 lst변수에 할당한 후 다음을 수행하시오.

list(month.name, month.abb)

  1. 두 원소의 이름을 각각 mon.name과 mon.abb로 지정하시오.
lst <- list(month.name, month.abb)
names(lst) <- c("mon.name","mon.abb")
lst
## $mon.name
##  [1] "January"   "February"  "March"     "April"     "May"       "June"     
##  [7] "July"      "August"    "September" "October"   "November"  "December" 
## 
## $mon.abb
##  [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
  1. 원소 mon.name의 길이와 mon.abb의 길이의 합을 구하시오.
sum(length(lst$mon.name),length(lst$mon.abb))
## [1] 24
  1. lst 리스트에 1부터 12까지의 숫자를 세번째 원소 mon.num이름으로 추가하시오.
lst["mon.num"] <- list(1:12)
lst
## $mon.name
##  [1] "January"   "February"  "March"     "April"     "May"       "June"     
##  [7] "July"      "August"    "September" "October"   "November"  "December" 
## 
## $mon.abb
##  [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
## 
## $mon.num
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12

4-7. 다음과 같이 두개의 리스트를 생성하고 lst2에 포함되지 않는 lst1의 값들을 아래의 <결과>와 같은 리스트 형식으로 출력하시오(setdiff() 함수 이용, setdiff()에 대해서는 help(setdiff)로 기능을 확인후 활용하시오)

lst1 <- list(“X”,“Y”,“Z”,“x”,“y”,“z”)
lst2 <- list(“x”,“y”,“z”)

<<결과>>
[[1]]
[1] “X”
[[2]]
[1] “Y”
[[3]]
[1] “Z”

lst1 <- list("X","Y","Z","x","y","z")
lst2 <- list("x","y","z")
setdiff(lst1,lst2)
## [[1]]
## [1] "X"
## 
## [[2]]
## [1] "Y"
## 
## [[3]]
## [1] "Z"

4-8 리스트 list(a=1, b=2)와 벡터 pi를 결합(concatenate)한 새로운 리스트를 생성하고, 생성한 리스트로부터 pi를 추출하시오.

lst <- c(list(a=1,b=2),pi)
lst
## $a
## [1] 1
## 
## $b
## [1] 2
## 
## [[3]]
## [1] 3.141593
lst[[3]]
## [1] 3.141593

4-9 다음과 같은 list를 생성하여 lst변수에 할당하시오. 그리고 (a),(b),(c) 각각에서 나머지와 다른 결과를 출력하는 코드를 고르시오.

list(first=1, second=2, third=list(third.one=3.1, third.two=3.2))

  1. lst[1:2]
    lst[-3]
    lst[c(“first”, “second”)]
    lst[c(TRUE, TRUE, FALSE)]
    lst[1,2] : 결과가 다르게 나옴!
lst <- list(first=1, second=2, third=list(third.one=3.1, third.two=3.2))
lst[1:2]  
## $first
## [1] 1
## 
## $second
## [1] 2
lst[-3]  
## $first
## [1] 1
## 
## $second
## [1] 2
lst[c("first", "second")]  
## $first
## [1] 1
## 
## $second
## [1] 2
lst[c(TRUE, TRUE, FALSE)]  
## $first
## [1] 1
## 
## $second
## [1] 2
# lst[1,2]   ## Error in lst[1, 2] : incorrect number of dimensions
  1. lst\(second lst\)s
    lst[[2]]
    lst[[“second”]]
    lst[[“s”]] : 결과가 다르게 나옴!
lst <- list(first=1, second=2, third=list(third.one=3.1, third.two=3.2))
lst$second  
## [1] 2
lst$s  
## [1] 2
lst[[2]]  
## [1] 2
lst[["second"]]  
## [1] 2
lst[["s"]]  ## lst[["s", exact=FALSE]]로 할경우, 2가 출력됨!
## NULL
  1. lst[[“third”]][[“third.one”]]
    lst[[c(“third”,“third.one”)]]
    lst[[“third”]]$third.one
    lst[[3]][[1]]
    lst[[3]][“third.one”] : 결과가 다르게 나옴!
lst <- list(first=1, second=2, third=list(third.one=3.1, third.two=3.2))
lst[["third"]][["third.one"]]  
## [1] 3.1
lst[[c("third","third.one")]]  
## [1] 3.1
lst[["third"]]$third.one  
## [1] 3.1
lst[[3]][[1]]  
## [1] 3.1
lst[[3]]["third.one"]   ## 리스트 형태로 출력됨!
## $third.one
## [1] 3.1

4-10 다음과 같은 리스트로 부터 값이 NULL인 원소를 제거하시오.

list(“Apple”, NULL, “Orange”)

lst <- list("Apple",NULL,"Orange")
lst[[2]] <- NULL  # lst[2] <- NULL 도 가능!
lst
## [[1]]
## [1] "Apple"
## 
## [[2]]
## [1] "Orange"

4-11 다음은 우리나라 서울 지역의 30년간(1981년~2010년)의 1월~12월까지의 월평균 기온이다(기상청, www.kma.go.kr). 월평균 기온 데이터를 month.abb함수를 이용하여 월 이름이 지정된 리스트로 만들고 다음을 수행하시오.

-2.4, 0.4, 5.7, 12.5, 17.8, 22.2, 24.9, 25.7, 21.2, 14.8, 7.2, 0.4

lst <- list(-2.4, 0.4, 5.7, 12.5, 17.8, 22.2, 24.9, 25.7, 21.2, 14.8, 7.2, 0.4)
names(lst) <- month.abb
lst
## $Jan
## [1] -2.4
## 
## $Feb
## [1] 0.4
## 
## $Mar
## [1] 5.7
## 
## $Apr
## [1] 12.5
## 
## $May
## [1] 17.8
## 
## $Jun
## [1] 22.2
## 
## $Jul
## [1] 24.9
## 
## $Aug
## [1] 25.7
## 
## $Sep
## [1] 21.2
## 
## $Oct
## [1] 14.8
## 
## $Nov
## [1] 7.2
## 
## $Dec
## [1] 0.4
  1. 0도 미만인 월을 추출하시오
lst[ unlist(lst) < 0]
## $Jan
## [1] -2.4
  1. 연 평균 기온보다 작은 월을 추출하시오
lst[unlist(lst) < mean(unlist(lst))]
## $Jan
## [1] -2.4
## 
## $Feb
## [1] 0.4
## 
## $Mar
## [1] 5.7
## 
## $Apr
## [1] 12.5
## 
## $Nov
## [1] 7.2
## 
## $Dec
## [1] 0.4
  1. 연평균 기온보다 작은 월을 리스트로 부터 제거하시오
lst[unlist(lst) < mean(unlist(lst))] <- NULL
lst
## $May
## [1] 17.8
## 
## $Jun
## [1] 22.2
## 
## $Jul
## [1] 24.9
## 
## $Aug
## [1] 25.7
## 
## $Sep
## [1] 21.2
## 
## $Oct
## [1] 14.8