Skip to content

R (프로그래밍 언어) 패키지 #

Find similar titles

5회 업데이트 됨.

Edit
  • 최초 작성자
    Myunghee Jung
  • 최근 업데이트
    jmkang

Structured data

Category
Software

R package #

R은 open source 프로그램으로써 자유로운 함수 구현이 가능하다. 이러한 함수들의 묶음을 package라 한다. 사용자는 R 언어로 작성된 모든 package를 실행과 함께 모두 메모리에 올려놓을 필요 없이 때에 맞게 불러와 사용하게 된다. 기본적으로 package는 메뉴얼이 작성되어 있으며 콘솔 내에서 확인이 가능하다(인터넷 연결이 필요 없다.) R에서 package의 의미는 다양하나 많은 경우 package 안의 특정 함수를 불러오기 위한 경우이다.

R package installation #

R에서 원하는 package를 다운받기 위해서 아래 두 함수를 사용한다.

1. > install.packages("패키지명")
2. > BiocManager::install("패키지명")

첫 번째는 R의 기본적인 통계, 시각과 텍스트 마이닝 등 패키지는 첫 번째 함수를 이용한다. 두 번째는 생물데이터 분석과 관련된 package는 bioconductor라는 archive로부터 다운받는다. 대부분은 함수 간 의존성 문제는 debug 스크립트를 통해 제공되며 필요한 package를 다운받음으로써 해결된다.

원하는 package가 설치되었다면 함수를 사용기 위해 현재 환경에 로딩해야 한다.

> library("패키지명")

패키지 전체를 사용하지 않는 경우 아래와 같이 사용한다.

> 패키지명::함수명(...)

R package는 개개인이 작성하였기 때문에 이후 사용법에 대해서는 아래와 같은 방법으로 R 프로그램 내에서 확인하거나 인터넷 검색을 통해 manual을 숙지하면 된다. 예제를 통해 R package의 설치 및 사용에 대해 알아보도록 하자.

> ?패키지명 or 함수명

VennDiagram package를 이용한 다중 벤다이어그램 그리기 #

벤다이어그램(Venn diagram)은 몇몇 집합에서 공통되는 원소들의 수를 나타내는 데 주로 이용되는 다이어그램 중 하나이다. 생물정보학에서는 주로 근연종들 사이에서 ortholog gene과 specific gene들의 수를 표현하거나, 공통 발현되는 DEG의 수를 나타내고자 할 때 이용되곤 한다.

하지만 집합이 4개 이상일 경우 공통집합의 수가 많아져 공통 원소를 추출하는 것도 어렵고 가시화 하는 것도 어려운데 이 경우 아래 패키지를 이용하면 쉽게 벤다이어그램을 그릴 수 있다.

예제 데이터는 아래 링크에서 받을 수 있다. http://www.insilicogen.com/blog/attachment/1019620370.txt

패키지 loading #

#!R
> BiocManager::install("limma")
> library(limma)
> library(gplots)

데이터 loading #

#!R
> rfn <- "ortholog_example.txt"
> data <- read.table(rfn, sep=`\t`, header=T, row.names=1)
> data
      Species.A Species.B   Species.C   Species.D
Clu8   BO016496                       BH047N18.14
Clu9   BO014834  RS013419  AT18397457            
Clu3   BO014772  RS018960  AT15242221 BH042D24.27
Clu12  BO009902                                  
Clu1   BO008537            AT15242224 BR143G12.16
Clu5   BO008364  RS038406              BH059G16.7
Clu4   BO008360  RS000136             BH006K11.24
Clu20  BO006059  RS040196  AT79324947            
Clu13  BO005849            AT15234929  BH064P04.2
Clu7   BO005339  RS002816                        
Clu19            RS001238  AT15221666 BH015M19.22
Clu6             RS007302                        
Clu2                                  BH059C07.32
Clu18            RS008453  AT18420250            
Clu17                      AT18412659  BH065N19.8
Clu16            RS002645 AT186503429            
Clu15                      AT18416334 BH001M22.33
Clu14            RS005812 AT145358042 BH050H15.17
Clu11                      AT15219226            
Clu10            RS004647             BH027F23_27

데이터 형식 변환 #

벤다이어그램을 그리는 데 사용할 명령어는 vennCounts()venn()이다. 이 명령어들은 logical value로 이루어진 data.frame형식의 데이터를 입력받는다. logical valueTrue 또는 FALSE, 즉 참이다, 거짓이다, 또는 있다, 없다를 표현하는 값이란 의미이다.

불러온 데이터는 그냥 요소(factor)들로 구성되어 있다. 이 데이터에서 값이 있으면 참, 없으면 거짓으로 바꿔 ld라는 변수에 저장시킨다.

#!R
> ld <- (data != "")
> ld
      Species.A Species.B Species.C Species.D
Clu8       TRUE     FALSE     FALSE      TRUE
Clu9       TRUE      TRUE      TRUE     FALSE
Clu3       TRUE      TRUE      TRUE      TRUE
Clu12      TRUE     FALSE     FALSE     FALSE
Clu1       TRUE     FALSE      TRUE      TRUE
Clu5       TRUE      TRUE     FALSE      TRUE
Clu4       TRUE      TRUE     FALSE      TRUE
Clu20      TRUE      TRUE      TRUE     FALSE
Clu13      TRUE     FALSE      TRUE      TRUE
Clu7       TRUE      TRUE     FALSE     FALSE
Clu19     FALSE      TRUE      TRUE      TRUE
Clu6      FALSE      TRUE     FALSE     FALSE
Clu2      FALSE     FALSE     FALSE      TRUE
Clu18     FALSE      TRUE      TRUE     FALSE
Clu17     FALSE     FALSE      TRUE      TRUE
Clu16     FALSE      TRUE      TRUE     FALSE
Clu15     FALSE     FALSE      TRUE      TRUE
Clu14     FALSE      TRUE      TRUE      TRUE
Clu11     FALSE     FALSE      TRUE     FALSE
Clu10     FALSE      TRUE     FALSE      TRUE

이렇게 변환된 데이터 ldas.data.frame라는 명령어를 이용해 data.frame이라는 형식으로 변환시켜 ld.df라는 변수에 저장한다.

#!R
> ld.df <- as.data.frame(ld)
> ld.df
      Species.A Species.B Species.C Species.D
Clu8       TRUE     FALSE     FALSE      TRUE
Clu9       TRUE      TRUE      TRUE     FALSE
Clu3       TRUE      TRUE      TRUE      TRUE
Clu12      TRUE     FALSE     FALSE     FALSE
Clu1       TRUE     FALSE      TRUE      TRUE
Clu5       TRUE      TRUE     FALSE      TRUE
Clu4       TRUE      TRUE     FALSE      TRUE
Clu20      TRUE      TRUE      TRUE     FALSE
Clu13      TRUE     FALSE      TRUE      TRUE
Clu7       TRUE      TRUE     FALSE     FALSE
Clu19     FALSE      TRUE      TRUE      TRUE
Clu6      FALSE      TRUE     FALSE     FALSE
Clu2      FALSE     FALSE     FALSE      TRUE
Clu18     FALSE      TRUE      TRUE     FALSE
Clu17     FALSE     FALSE      TRUE      TRUE
Clu16     FALSE      TRUE      TRUE     FALSE
Clu15     FALSE     FALSE      TRUE      TRUE
Clu14     FALSE      TRUE      TRUE      TRUE
Clu11     FALSE     FALSE      TRUE     FALSE
Clu10     FALSE      TRUE     FALSE      TRUE

특별히 바뀐 게 없어 보이지만, class()명령어를 이용해 data.frame 형식으로 바꾸기 전후를 비교해 보면 무엇이 바뀌었는지 알 수 있다. datalogical value로 변환시키면 그 결과는 matrix라는 형식으로 출력된다. 이를 as.data.frame()이라는 명령어로 data.frame형식으로 바꿔 ld.df라는 변수에 저장을 시킨 상태이다.

#!R
> class(ld)
[1] "matrix"

> class(ld.df)
[1] "data.frame"

각 집합 및 교집합들의 유전자 수 알아내기 #

예제 데이터를 보면 어떤 유전자들은 특정 종에서만 나타나는 유전자이고, 어떤 유전자는 다른 종에서도 ortholog 관계의 유전자가 있다고 한다. 즉 크게 보면 4개의 집합이 있고, 4개의 집합으로 만들어질 수 있는 부분집합(교집합들과 각 집합의 유니크한 원소만 나타내는 부분집합) 16개가 있다. 이 부분집합들에 해당하는 유전자 수를 테이블 형태로 확인하는 명령어가 vennCounts()이다. 이 명령어에 ld.df를 입력하면 아래와 같은 결과가 출력된다. 첫 번째 줄을 보면 모든 집합(종에서도)에서 없는(0) 원소의 수가 가장 오른쪽 Counts열에 0개 있다고 출력되어 있다. 두 번째 줄은 다른 종에서는 없고(0) Species.D에서만 있는(1) 원소의 수가 1개 있다고 한다. 15번째 줄은 Species.A, Species.B, Species.C에서 공통으로 ortholog 관계의 유전자가 2개 있다고 출력되어 있다.

#!R
> vennCounts(ld.df)
  Species.A Species.B Species.C Species.D Counts
 [1,]         0         0         0         0      0
 [2,]         0         0         0         1      1
 [3,]         0         0         1         0      1
 [4,]         0         0         1         1      2
 [5,]         0         1         0         0      1
 [6,]         0         1         0         1      1
 [7,]         0         1         1         0      2
 [8,]         0         1         1         1      2
 [9,]         1         0         0         0      1
[10,]         1         0         0         1      1
[11,]         1         0         1         0      0
[12,]         1         0         1         1      2
[13,]         1         1         0         0      1
[14,]         1         1         0         1      2
[15,]         1         1         1         0      2
[16,]         1         1         1         1      1
attr(,"class")
[1] "VennCounts"

벤다이어그램을 그리기 #

이렇게 준비된 데이터를 벤다이어그램으로 그려주는 명령어는 venn()이다. 아래 명령을 실행해 보면 자동으로 카운팅된 교집합에 해당하는 원소들의 수가 알맞은 칸에 배치된 벤다이어그램이 출력된다. 이렇게 출력된 그림은 창 크기를 적당히 조절해서 사이즈를 조절한 다음 마우스 오른쪽 버튼으로 클릭하면 그림 파일로 저장하거나 복사해서 파워포인트로 붙여넣어 이용할 수 있다. venn()은 최대 5개 집합의 데이터만 받아 벤다이어그램을 그려준다.

#!R
> venn(ld.df)

기타 벤다이어그램을 그리는 패키지 #

venn
http://cran.r-project.org/web/packages/gplots/

bvenn
http://cran.r-project.org/web/packages/bvenn/index.html

colorfulVennPlot
http://cran.r-project.org/web/packages/colorfulVennPlot/index.html

eVenn
http://cran.r-project.org/web/packages/eVenn/index.html

VennDiagram
http://cran.r-project.org/web/packages/VennDiagram/VennDiagram.pdf

Venneuler
http://cran.r-project.org/web/packages/venneuler/index.html

Vennerable
http://goo.gl/YjQCc

마치며 #

R에서 package를 제대로 활용하는 방법은 바로 목적하는 값이 무엇인지 명확히 파악하는 것이다. 우선 적합한 package를 찾고 나면 메뉴얼 내 예제 데이터를 이용해 입력 값과 출력 값의 구조 및 성분을 파악한다. 이후 내가 가진 데이터의 형태를 해당 package의 입력 형태에 맞춘 후 실행한다. R package는 제작의 자율성이 보장되는 만큼 될 수 있으면 관련 문헌 정보가 있는 것을 사용하는 것이 좋다. 또 사용자 커뮤니티가 활성화돼있기 때문에 문제의 여지가 있는 package의 경우 사전에 파악하는 것이 좋다.

Reference #

Suggested Pages #

0.0.1_20230725_7_v68