Category Archives: R

R으로 Docker로 구성한 MariaDB 사용하기

이 글은 R로 MariaDB(이하 마리아디비)에 접근하기 위한 글입니다. 컴퓨터에 직접 마리아디비를 설치하고 이용하는 것이 아니라, 도커에 설치한 마리아디비를 이용하고자 합니다. 직접 설치하신 마리아디비를 사용하고자 하실 분들이나 외부 다른 컴퓨터에 설치된 것을 사용하고자 하실 분들도 아래 연결 설정값을 적절하게 입력하신다면, 그 글을 따라가시는데 문제가 없을 것 같습니다.

본격적으로 시작하기에 앞서

참고로 여기에서는 이미 Docker로 마리아디비를 설치했다고 가정할 것입니다. 설치하는 방법은 다음 링크를 참고하세요. Docker를 사용해서 MariaDB을 설치하기 그리고 이미 다음과 같은 sql명령을 사용하여 gregs_list이라는 DATABASE를 만들고, 그 안에 my_contacts라는 테이블을 만들고 두 사람의 자료를 입력했습니다.

CREATE DATABASE gregs_list;

CREATE TABLE my_contacts(
last_name VARCHAR(30),
first_name VARCHAR(20),
email VARCHAR(50),
birthday Date,
profession VARCHAR(50),
location VARCHAR(50),
status VARCHAR(20),
interests VARCHAR(100),
seeking VARCHAR(100)
);

INSERT INTO my_contacts(
last_name, first_name, email, gender, birthday, profession, location, status, interests, seeking
)
VALUES (
'Anderson', 'Jillian', 'jill_anderson@breakneckpizza.com', 'F', '1980-09-05', 'Technical Writer', 'Palo Alto, CA', 'Single', 'Kayaking, Reptiles', 'Relationship, Friends'
);

INSERT INTO my_contacts(
first_name, email,  profession, location
)
VALUES (
'Pat', 'patpost@breakneckpizza.com', 'Postal Worker', 'Princeton, NJ'
);

위에서 작업한 결과로 gregs_list 데이터베이스의 my_contacts라는 테이블에는 다음과 같이 두 사람의 자료가 들어있습니다.

MariaDB [gregs_list]> SELECT * FROM my_contacts;
+-----------+------------+----------------------------------+--------+------------+------------------+---------------+--------+--------------------+-----------------------+
| last_name | first_name | email                            | gender | birthday   | profession       | location      | status | interests          | seeking               |
+-----------+------------+----------------------------------+--------+------------+------------------+---------------+--------+--------------------+-----------------------+
| Anderson  | Jillian    | jill_anderson@breakneckpizza.com | F      | 1980-09-05 | Technical Writer | Palo Alto, CA | Single | Kayaking, Reptiles | Relationship, Friends |
| NULL      | Pat        | patpost@breakneckpizza.com       | NULL   | NULL       | Postal Worker    | Princeton, NJ | NULL   | NULL               | NULL                  |
+-----------+------------+----------------------------------+--------+------------+------------------+---------------+--------+--------------------+-----------------------+
2 rows in set (0.004 sec)

RMariaDB 설치하기

R 에서 MariaDB에 접근하기 위해서는 odbc 패키지나 RMariaDB를 사용해야 합니다. 이에 관련된 내용은 R Statistical Programming Using MariaDB as the Background Database – MariaDB Knowledge Base을 참고하시면 됩니다. 여기서는 RMariaDB를 사용하도록 하겠습니다. 앞 링크에서 RMariaDB을 다음과 같이 소개하고 있습니다.

“RMariaDB” R library, is a modern ‘MariaDB’ client based on ‘Rcpp’.

사용하기 위에서는 당연히 패키지를 설치해야 합니다.

install.packages("RMariaDB")

설치를 했으면 사용하시는 방법은 다음과 같습니다. 앞에서 말한 도커에 설치된 마리아디비의 정보를 그대로 입력했습니다. 여기서는 직접 입력하고 있지만, 실전에서 사용하시려면 Database Interface and MariaDB Driver • RMariaDB에서처럼 별도 파일에 입력하여 사용하시는 것이 좋을 것 습니다. 마지막 줄에서 dbListTables(con)을 통해서 gregs_list이라는 데이터베이스가 가지고 있는 테이블을 보여주게 됩니다.

library(RMariaDB)

con <- dbConnect(
  drv = RMariaDB::MariaDB(),
  username = "root",
  password = "RT27hDosK",
  host = "0.0.0.0",
  port = 3306,
  dbname = "gregs_list"
)

dbListTables(con)

앞의 코드가 실행된 결과는 다음과 같습니다. 현재 앞에서 입력한 my_contacts 테이블도 볼 수 있습니다.

> library(RMariaDB)
> con <- dbConnect(
+   drv = RMariaDB::MariaDB(),
+   username = "root",
+   password = "RT27hDosK",
+   host = "0.0.0.0",
+   port = 3306,
+   dbname = "gregs_list"
+ )
>
> con
<mariadbconnection>
Host:    0.0.0.0
Server:
Client:
> dbListTables(con)
[1] "movie_table"   "easy_drinks"   "my_contacts"   "doughnut_list" "users"         "clown_info"

R로 데이터베이스에 입력한 테이블을 살펴보기

이제 본격적으로 앞에서 데이터베이스에 저장한 테이블을 살펴보겠습니다. dbReadTable()을 사용하면 쉽게 테이블 내용을 확인하실 수 있습니다.

dbReadTable(con, "my_contacts")

윗 코드를 실행하면 다음과 같습니다.

> dbReadTable(con, "my_contacts")
contact_id phone last_name first_name                            email gender   birthday       profession      location status          interests               seeking
1          1  <na>  Anderson    Jillian jill_anderson@breakneckpizza.com      F 1980-09-05 Technical Writer Palo Alto, CA Single Kayaking, Reptiles Relationship, Friends
2          2  <na>      <na>        Pat       patpost@breakneckpizza.com   <na>       <na>    Postal Worker Princeton, NJ   <na>               <na>                  <na>

SQL을 사용하려면 다음과 같이 하시면 됩니다.

res <- dbSendQuery(con, "SELECT * FROM my_contacts")

위의 코드를 실행하면 다음과 같습니다. dbClearResult()을 이용해서 사용하신 다음에 정리하고 마무리하지 않으시면 에러가 날 수 있습니다. 주의하세요!

> res <- dbSendQuery(con, "SELECT * FROM my_contacts")
> res
<mariadbresult>
SQL  SELECT * FROM my_contacts
ROWS Fetched: 0 [incomplete]
Changed: 0
> dbFetch(res)
contact_id phone last_name first_name                            email gender   birthday       profession      location status          interests               seeking
1          1  <na>  Anderson    Jillian jill_anderson@breakneckpizza.com      F 1980-09-05 Technical Writer Palo Alto, CA Single Kayaking, Reptiles Relationship, Friends
2          2  <na>      <na>        Pat       patpost@breakneckpizza.com   <na>       <na>    Postal Worker Princeton, NJ   <na>               <na>                  <na>
> dbClearResult(res)

조금 더 세련되게 할 수도 있습니다.

res <- dbSendQuery(con, "SELECT * FROM my_contacts")
while(!dbHasCompleted(res)){
  chunk <- dbFetch(res, n = 5)
  print(chunk)
  print(nrow(chunk))
}

윗 코드를 실행하면 다음과 같습니다.

> dbClearResult(res)
> res <- dbSendQuery(con, "SELECT * FROM my_contacts")
> while(!dbHasCompleted(res)){
+   chunk <- dbFetch(res, n = 5)
+   print(chunk)
+   print(nrow(chunk))
+ }
  contact_id phone last_name first_name                            email gender   birthday       profession      location status          interests               seeking
1          1  <na>  Anderson    Jillian jill_anderson@breakneckpizza.com      F 1980-09-05 Technical Writer Palo Alto, CA Single Kayaking, Reptiles Relationship, Friends
2          2  <na>      <na>        Pat       patpost@breakneckpizza.com   <na>       <na>    Postal Worker Princeton, NJ   <na>               <na>                  <na>
[1] 2

tidyverse를 추가해서 사용하면 좀 더 쉽고 멋있게 처리할 수 있습니다. 다음 코드에서 볼 수 있는 것처럼 SQL를 사용하지 않고 filter()와 같은 것을 이용하여 쉽게 테이블에 있는 자료를 처리할 수 있습니다. 마지막 줄에서 filter()를 사용하여 first_name 열에 있는 “Pat”이라는 단어가 있는 줄을 뽑아서 보여줍니다.

library(tidyverse)
library(RMariaDB)
library(dplyr, warn.conflicts = FALSE)
con <- dbConnect(
  drv = RMariaDB::MariaDB(),
  username = "root",
  password = "RT27hDosK",
  host = "0.0.0.0",
  port = 3306,
  dbname = "gregs_list"
)
my_contacts <- tbl(con, "my_contacts")
my_contacts
my_contacts %>% filter(first_name == "Pat")

윗 코드를 실행하면 다음과 같습니다.

> library(tidyverse)
─ Attaching packages ─────────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ─
✔ ggplot2 3.3.0     ✔ purrr   0.3.4
✔ tibble  3.0.1     ✔ dplyr   1.0.0
✔ tidyr   1.1.0     ✔ stringr 1.4.0
✔ readr   1.3.1     ✔ forcats 0.5.0
─ Conflicts ──────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ─
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
> library(RMariaDB)
> library(dplyr, warn.conflicts = FALSE)
> con <- dbConnect(
+   drv = RMariaDB::MariaDB(),
+   username = "root",
+   password = "RT27hDosK",
+   host = "0.0.0.0",
+   port = 3306,
+   dbname = "gregs_list"
+ )
> my_contacts <- tbl(con, "my_contacts")
> my_contacts
# Source:   table<my_contacts> [?? x 12]
# Database: mysql [root@0.0.0.0:NA/gregs_list]
contact_id phone last_name first_name email                            gender birthday   profession       location      status interests          seeking
<int> <chr> <chr>     <chr>      <chr>                            <chr>  <date>     <chr>            <chr>         <chr>  <chr>              <chr>
1          1 <na>  Anderson  Jillian    jill_anderson@breakneckpizza.com F      1980-09-05 Technical Writer Palo Alto, CA Single Kayaking, Reptiles Relationship, Friends
2          2 <na>  <na>      Pat        patpost@breakneckpizza.com       <na>   NA         Postal Worker    Princeton, NJ <na>   <na>               <na>
> my_contacts %>% filter(first_name == "Pat")
# Source:   lazy query [?? x 12]
# Database: mysql [root@0.0.0.0:NA/gregs_list]
contact_id phone last_name first_name email                      gender birthday   profession    location      status interests seeking
<int> <chr> <chr>     <chr>      <chr>                      <chr>  <date>     <chr>         <chr>         <chr>  <chr>     <chr>
1          2 <na>  <na>      Pat        patpost@breakneckpizza.com <na>   NA         Postal Worker Princeton, NJ <na>   <na>      <na>

참고 자료

Mac 용 R에서 잘 읽지 못 하는 한글 파일을 잘 읽는 방법

한국에서는 워낙 윈도우가 압도적으로 사용되는 곳입니다. 그래서 맥을 사용하는 사람 입장에서는 윈도우에서 만든 기본적인 자료, txt나 csv 형식 자료를 읽는데 가끔 문제가 생기기도 합니다. 물론 맥에서 작업하던 파일을 윈도우에 가져와 작업하려면 문제가 많이 발생합니다.

R을 사용할 때도 문제가 많이 생깁니다. 이는 파일에 들어가는 글자를 어떤 형식으로 구성하느냐 하는 문제, 즉 인코딩 문제 때문입니다. 일반적으로 윈도우는 euc-kr를 사용하고, 반면에 맥이나 리눅스는 utf-8을 사용하기 때문입니다.

이 문제를 극복하기 위한 여러가기 꼼수가 있었지만, R에서 이를 처리하는 함수를 하나 만들어서 처리하는 방식이 있어서 소개하고자 합니다. 이 방법은 r에서 한글문서 열때 인코딩 문제 에 소개된 것입니다. 뭐 이 글의 아이디어를 제가 했기 때문에 여기에 소개해도 무방할 것 같네요 ^^;

뭐 사용하는 방법은 간단합니다. 우선 이 함수를 사용하기 위해서 library(readr)을 입력합니다. 만약 에러가 난다면, install.packages("readr”)이라고 실행해서 패키지를 설치합니다. 패키지가 설치가 안 되면 R을 최신 것으로 설치하시면 됩니다. 그리고 다음과 같이 함수를 입력합니다. 전체 과정은 다음과 같이 하시면 됩니다.

library(readr)
read.any <- function(text, sep = "", ) {
encoding <- as.character(guess_encoding(text)[1,1])
setting <- as.character(tools::file_ext(text))
if(sep != "" | !(setting %in% c("csv", "txt")) ) setting <- "custom"
separate <- list(csv = ",", txt = "\n", custom = sep)
result <- read.table(text, sep = separate[[setting]], fileEncoding = encoding, )
return(result)
}

view raw

read_any.R

hosted with ❤ by GitHub

R을 많이 사용하신 분은 어떻게 사용할지 감을 잡으셨겠지만, 저와 같은 초보자를 위해서 한 번 사용해보겠습니다. 우선 다음 링크를 눌러서 사용할 샘플자료를 다운 받으세요! 바로 저장하시면 됩니다.

이 자료에 들어 있는 2017_7_8_KBO_win.csv 파일을 R에서 자료를 읽을 수 있는 폴더에 넣으세요. R에서 dir()을 입력했을 때, 위 파일 이름이 있는지 확인하세요.

맥에서 이 파일을 읽는 진행과정은 다음과 같습니다. 처음에는 read.csv()을 사용해서 읽는데 실패했던 파일이 read.any()을 이용해서는 성공하네요.

> temp_kbo <- read.csv("2017_7_8_KBO_win.csv", header = TRUE)
Error in make.names(col.names, unique = TRUE) :
'<bc><f8><c0><a7>'에서 유효하지 않은 멀티바이트 문자열이 있습니다
> library(readr)
> read.any <- function(text, sep = "", ) {
+ encoding <- as.character(guess_encoding(text)[1,1])
+ setting <- as.character(tools::file_ext(text))
+ if(sep != "" | !(setting %in% c("csv", "txt")) ) setting <- "custom"
+ separate <- list(csv = ",", txt = "\n", custom = sep)
+ result <- read.table(text, sep = separate[[setting]], fileEncoding = encoding, )
+ return(result)
+ }
> temp_kbo <- read.any("2017_7_8_KBO_win.csv", header = TRUE)
> head()
Error in head.default() : 기본값이 없는 인수 "x"가 누락되어 있습니다
> temp_kbo <- read.any("2017_7_8_KBO_win.csv")
> head(temp_kbo)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16
1 순위 선수명 팀명 AVG G PA AB R H 2B 3B HR TB RBI SAC SF
2 1 김선빈 KIA 0.38 79 303 271 49 103 23 0 2 132 47 2 4
3 2 최형우 KIA 0.37 80 359 289 66 107 23 3 20 196 76 0 4
4 3 나성범 NC 0.359 61 264 237 53 85 20 1 13 146 51 0 1
5 4 김태균 한화 0.353 61 268 232 34 82 13 0 10 125 57 0 4
6 5 서건창 넥센 0.353 78 347 303 52 107 17 2 4 140 49 0 3
> temp_kbo <- read.any("2017_7_8_KBO_win.csv",header = TRUE)
> head(temp_kbo)
순위 선수명 팀명 AVG G PA AB R H X2B X3B HR TB RBI SAC SF
1 1 김선빈 KIA 0.380 79 303 271 49 103 23 0 2 132 47 2 4
2 2 최형우 KIA 0.370 80 359 289 66 107 23 3 20 196 76 0 4
3 3 나성범 NC 0.359 61 264 237 53 85 20 1 13 146 51 0 1
4 4 김태균 한화 0.353 61 268 232 34 82 13 0 10 125 57 0 4
5 5 서건창 넥센 0.353 78 347 303 52 107 17 2 4 140 49 0 3
6 6 이대호 롯데 0.351 79 333 302 44 106 7 0 16 161 60 0 0

view raw

read_any_ex.R

hosted with ❤ by GitHub

구글 R 스타일 가이드(Google’s R Style Guide)을 번역해 보았습니다.

구글에서 만든 Google’s R Style Guide를 번역해 봤습니다.

번역한 것을 보시려면, 아래 링크를 가시면 됩니다. 영어 부분은 링크파일에 주석처리되어 있습니다. 이상한 부분은 코드를 직접 보시고 확인해주셔도 됩니다. 앞부분에 있는 참고 부분을 추가한 것을 빼고는, 거의 구조와 내용은 손대지 않고 영어만 한글도 번역했습니다. 꼭 번역이 필요하지 않다고 생각된 부분은 번역을 하지 않았습니다.

Google’s R Style Guide

제가 전문 번역가가 아니기 때문에 이상한 부분이 많을 것 같습니다. 이상한 부분을 아래 링크를 통해 지적해주시면 수정하도록 하겠습니다. 참! 답글을 다실려면 github.com 아이디가 필요합니다.

구글 R 스타일 가이드(Google’s R Style Guide) 번역

Mac 에서 R의 rugarch 패키지 설치시 오류가 날 때 처리법

제목 그대로 다음과 같은 오류가 날 수 있습니다.

> require(rugarch)
필요한 패키지를 로딩중입니다: rugarch
Error : .onLoad가 loadNamespace()에서 'rgl'때문에 실패했습니다:
호출: dyn.load(file, DLLpath = DLLpath, )
에러: 공유된 객체 '/Library/Frameworks/R.framework/Versions/3.3/Resources/library/rgl/libs/rgl.so'를 로드 할 수 없습니다:
dlopen(/Library/Frameworks/R.framework/Versions/3.3/Resources/library/rgl/libs/rgl.so, 6): Library not loaded: /opt/X11/lib/libGLU.1.dylib
Referenced from: /Library/Frameworks/R.framework/Versions/3.3/Resources/library/rgl/libs/rgl.so
Reason: image not found

view raw

rugarch_error.R

hosted with ❤ by GitHub

그러면 XQuartz에 가서 XQuartz을 다운받아서 설치하시고 R을 종료하고 재실행하시면 잘 설치됩니다. 출처는 다음과 같습니다.

Installing “rgl” package in R, Mac OSX El Captian [fixed] – Stack Overflow

윈도우에서 만든 csv 파일을 Mac에서 사용하는 R에서 쉽게 열어보자.

뭐 간단한 팁인데요.

R을 사용하면서 csv파일을 맥, 윈도우, 리눅스 간에 같이 사용하는 경우가 있습니다. 이때 맥과 리눅스 간에는 유니코드 인코딩 방식중 UTF-8을 사용하면 그리 문제없이 파일을 공유할 수 있습니다. 그런데 문제는 윈도우가 끼어들면 문제가 복잡합니다. 윈도우에서 만들어진 csv 파일이 맥이나 리눅스에서 잘 안 읽어지는 경우가 많습니다.

물론 고수이신 분들은 다 쉽게 처리하시겠지만, 저는 항상 이런 경우 문제가 많았습니다. 그런데 아주 쉬운 방법을 하나 찾았습니다. 맥으로 파일을 보내기 전에 윈도우에서 보낼 csv 파일을 윈도우에서 메모장을 엽니다. 만약 파일이 크면 잘 안 열릴 수도 있습니다. 참고로 윈도우 10에서는 메모장이 100MB까지는 여는 것 같습니다.

그런 다음 파일 메뉴에서 다른 이름으로 저장을 선택하시면 아래와 같은 다이얼로그박스가 나옵니다. 여기서 아래와 같이 인코딩을 UTF-8을 바꾸신 다음 저장해주세요. 그런 다음 맥으로 보내시면, 문제 없이 R에서는 사용하실 수 있습니다.

다른 이름으로 저장

RStudio를 이용하여, R 코드와 한글이 들어 있는 R Markdown으로 쓴 파일을 pdf로 만드는 팁!

RStudio에는 기본적인 R보다 유용한 기능이 많습니다. 그중에서는 저는 knitr 패키지를 이용하여 R 코드가 들어있는 R Markdown으로 쓰여진 글을 HTML이나 pdf 파일로 만들어 주는 기능에 관심이 많았습니다. 물론 프리뷰(Preview) 버젼인 RStudio Version 0.99.1273에는 이것 보다 더 진보한R Markdown Notebooks이 들어 있습니다.

그러나 문제는 이 기능이 영어로만 되어 있는 것은 잘 되는데, 유난히 한글만 들어가면 잘 안 된다는 것입니다. HTML로 변환하는 것은 잘 되는 것 같았는데, pdf으로 변환하는 것이 문제였습니다. 그러다가 우연히 권재명님이 쓰신 Jaimyoung/data-science-in-korean: 한국어를 포함한 데이터와 분석코드를 다루는 팁을 살펴보다가 https://raw.githubusercontent.com/Jaimyoung/data-science-in-korean/master/test-template.Rmd이라는 링크를 발견했습니다. 이 파일을 살펴보니 다음과 같이 되어 있었습니다.

title: “한글 레퍼런스 R 마크다운 템플릿”
author: “권재명”
date: “July 18, 2015”
output:
word_document:
highlight: tango
reference_docx: korean-template.docx
pdf_document:
latex_engine: xelatex
mainfont: NanumGothic

그래서 이것을 참고로 RStudio 기본 파일을 다음과 같이 수정해서 아래와 같이 수정하니, 한글이 들어 있어도 pdf 파일로 잘 변환됩니다. 아래 내용은 기본 파일에서 앞부분만 고치고 한글이 들어 있는 내용을 한 줄 넣은 것입니다.

title: "R Notebook"
output:
pdf_document:
latex_engine: xelatex
html_notebook: default
html_document: default
mainfont: NanumGothic
이것은 [R Markdown](http://rmarkdown.rstudio.com) 노트북입니다.
This is an [R Markdown](http://rmarkdown.rstudio.com) Notebook. When you execute code within the notebook, the results appear beneath the code.
Try executing this chunk by clicking the *Run* button within the chunk or by placing your cursor inside it and pressing *Cmd+Shift+Enter*.
“`{r}
plot(cars)
“`
Add a new chunk by clicking the *Insert Chunk* button on the toolbar or by pressing *Cmd+Option+I*.
When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the *Preview* button or press *Cmd+Shift+K* to preview the HTML file).

RStudio에서 새 파일 에서 R Markdown은 선택하신 후 이미 만들어진 내용을 다 지우신 다음, 위의 코드를 붙여넣기를 하신 다음, knit라는 버튼을 눌러서, HTML과 pdf 파일로 변환하시면, 한글이 잘 나오는 것을 확인하실 수 있습니다. 참고로 pdf를 만드시려면 Latex를 설치하셔야 됩니다.

R에서 미국 연비(MPG)를 한국연비(km/L)로 있어보이게 바꾸기

우리 나라에서 사용하는 연비란 에너지관리공단 수송에너지 > 자동차공인연비 > 공인연비에 따르면 연료 1ℓ로 주행 가능한 거리(km)를 말하는 것을 말합니다. 그러나 미국은 연료 1갤런(gallon)으로 주행 가능한 거리를 마일(mile)로 계산하여 연비를 계산합니다. 미국이랑 우리나라가 단위가 다르니 생기는 문제입니다. 참고로 1갤런은 3.785411784리터(참고: 갤런 – 위키백과, 우리 모두의 백과사전) 이고 1 마일은 1.609344 킬로미터(참고: 마일 – 위키백과, 우리 모두의 백과사전) 입니다.

뭐 사전 지식은 다 알았으니, 실제로 연비를 바꿔보겠습니다. 미국 연비를 10부터 40까지 만들보겠습니다.

mpg < - seq(10,40)

mpg을 입력해 확인해보시면, 10부터 40까지 값이 들어있는 것을 보일 수 있습니다. 이것을 미국 연비라고 해봅시다. 이때 이것을 한국 연비로 바꿔 계산해봅시다. 위에서 살펴본 것을 토대로 변환식을 짜면 다음과 같습니다.

kmL <- (mpg * 1.609344)/3.785411784

kmL을 입력해 확인해보시면, mpg에 들어있던 것을 한국 연비로 바꾼 값을 확인할 수 있습니다. 미국 자동차 연비마일 MPG -> km/L 보는법의 포스트와 비교해 보면, 지금까지 계산한 값이 더 정확하고 자세한 것처럼 보입니다. ^^; 위의 것은 너무 단순해서 조금은 멋지게 패키지를 사용해서 바꿔보도록 하겠습니다. 아래 코드는 지금까지 한 것을 다 넣고 패키지를 설치해서 계산하고 위에서 계산한 것과 패키지를 이용해서 계산한 것을 비교해봤습니다.

mpg <- seq(10,40)
kmL <- (mpg * 1.609344)/3.785411784 ## 단순하게 바꾸기
install.packages("datamart") ## 패키지 설치
library(datamart) ## 패키지 설치
uconv(1, "US gal", "l", uset="Volume") ## 1 캘런을 리터로
uconv(1, "mile", "km", uset="Length") ## 1 마일을 킬로미터로
kmL.uconv <- uconv(mpg, "mile", "km", uset="Length")/uconv(1, "US gal", "l", uset="Volume") ## uconv()을 이용하여 바꾸기
kmL == kmL.uconv ## 두 계산 결과 확인

view raw

mpgToKml.R

hosted with ❤ by GitHub

맨 마지막 줄에 있는 kmL == kmL.uconv 명령을 입력하면 그 결과가 모두 TRUE로 나오는 것을 보니 두 계산 결과가 같은 것임을 확인할 수 있습니다.