Home 생물정보학을 위한 R프로그래밍 II - 데이터형과 연산
Post
Cancel

생물정보학을 위한 R프로그래밍 II - 데이터형과 연산

본 post는 LAIAD에서 제공하는 부산대학교 이해승 교수님의 생물정보학을 위한 R프로그래밍을 정리한 내용입니다.

Intro


  • R 프로그래밍의 데이터형과 연산에 대해 알아봅니다.

데이터의 저장과 처리


구조와 형태에 따라 데이터의 이름도 다릅니다.

  • 변수
    • 벡터(vector): 단일값들의 모임입니다. 데이터 구조의 가장 기본입니다.
    • 배열(array) : 벡터를 행과 열로 구성한 구조입니다. 2차원: 행렬, 3차원: 배열
    • 데이터프레임(dataframe): 서로 다른 데이터 형이 표 형태로 정리된 구조입니다. 각 속성의 크기가 같습니다.
    • 리스트(list): 여러 데이터를 그룹화한 구조입니다. 각 속성의 크기가 달라도 됩니다.
  • 데이터형: 숫자형, 문자형, 범주형, 논리형, 특수 상수 등

  • 연산자: 산술(+, -, *, /), 비교(>, <), 논리 연산자(==, !=, !)

Post-Image 데이터 구조 간 관계
https://www.laidd.org/local/ubonline/view.php?id=181&group=1&returnurl=aHR0cHM6Ly93d3cubGFpZGQub3JnL2xvY2FsL3Vib25saW5lL2luZGV4LnBocD9vcmRlcnR5cGU9cmNfZCZrZXl3b3JkPSZwcm9ncmVzcyU1QiU1RD0xMyZlbnJvbF9zdGFydD0mZW5yb2xfZW5kPSZzdHVkeV9zdGFydD0mc3R1ZHlfZW5kPQ==


변수명을 생성할 때 몇 가지 규칙이 있습니다.

  • 첫 글자는 반드시 영문자 또는 마침표만 사용 가능합니다.
  • 두 번째 글자 이후로는 영문자, 숫자, 밑줄 사용 가능합니다.
  • 대문자와 소문자를 구분합니다.
  • 빈 칸은 사용 불가합니다.

변수에 값을 할당할 때 세 가지 방법이 있습니다.

1
2
3
4
5
6
7
8
9
10
11
x = 1
y = 2

# method1
z = x + y

# method2
z <- x+y

# method3
x + y -> z



R의 기본 데이터형은 다음과 같습니다.

데이터형종류
숫자형int: 정수, num: 실수, cplx: 복소수
문자형chr: 작은따옴표나 큰따옴표로 묶어서 표기
범주형factor: 레벨에 따라 분류된 형태
논리형TRUE(T), FALSE(F)
특수 상수NULL: 정의되지 않은 값, NA: 결측값, -Inf: 음의 무한대, Inf: 양의 무한대, NaN: 0/0, Inf/Inf 등과 같이 연산 불가능한 값 표시



기본 데이터형 실습 예제입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
x = 5
y = 2
x/y

xi = 1 + 2i
yi = 1 - 2i
xi + yi

str = "Heool, World!"
str

blood.type = factor(c('A', 'B', 'O', 'AB'))
blood.type

T

F

xinf = Inf
yinf = Inf
xinf/yinf



데이터형을 확인하는 함수입니다.

함수설명
class(x)R 객체지향 관점에서 x의 데이터형
typeof(x)R 언어 자체 관점에서 x의 데이터형
is.integer(x)x가 정수형이면 TRUE, 아니면 FALSE
is.numeric(x)x가 실수형이면 TRUE, 아니면 FALSE
is.complex(x)x가 복소수형이면 TRUE, 아니면 FALSE
is.character(x)x가 문자형이면 TRUE, 아니면 FALSE
is.na(x)x가 NA이면 TRUE, 아니면 FALSE



데이터형을 변환하는 함수입니다.

함수설명
as.factor(x)x를 범주형으로 변환
as.integer(x)x를 정수형으로 변환
as.numeric(x)x를 숫자형으로 변환
as.character(x)x를 문자형으로 변환
as.matrix(x)x를 행렬로 변환
as.array(x)x를 배열로 변환



산술 연산자는 다음과 같습니다.

연산자설명
+덧셈5 + 2
-뺄셈5 - 2
*곱셈5 * 2
/나눗셈(실수 나눗셈)5 / 2
^ 또는 **지수승5 ^ 2
x %% yx를 y로 나눈 나머지 (정수 나눗셈 나머지)5 %% 2
x %/% yx를 y로 나눈 몫 (정수 나눗셈 몫)5 %/% 2



비교, 논리 연산자는 다음과 같습니다.

연산자설명
<좌변이 작은(미만)5 < 5
<=좌변이 작거나 같은(이하)5 <= 5
>좌변이 큰(초과)5 > 5
>=좌번이 크거나 같은(이상)5 >= 5
==좌변과 우변이 같은5 == 5
!=좌변과 우변이 다른5 != 5
!x부정(not)!TRUE
x | y, x | | yx or y(또는, 합집합)TRUE | FALSE
x & y, x & & yx and y(그리고, 교집합)TRUE & FALSE
isTRUE(x)x의 TRUE 여부 판단isTRUE(TRUE)



연산자를 연달아 사용할 때 우선순위를 따릅니다.

Post-Image 연산자 우선 순위
https://www.laidd.org/local/ubonline/view.php?id=181&group=1&returnurl=aHR0cHM6Ly93d3cubGFpZGQub3JnL2xvY2FsL3Vib25saW5lL2luZGV4LnBocD9vcmRlcnR5cGU9cmNfZCZrZXl3b3JkPSZwcm9ncmVzcyU1QiU1RD0xMyZlbnJvbF9zdGFydD0mZW5yb2xfZW5kPSZzdHVkeV9zdGFydD0mc3R1ZHlfZW5kPQ==


벡터


벡터는 여러 단일값을 하나의 변수명으로 저장할 수 있는 데이터형입니다.

벡터를 생성하는 여러 가지 방법이 있습니다.

  • 벡터 생성 연산자: ‘:’
  • vector 함수 이용: vector(length=n)
  • c 함수 이용: c(1:5)
  • seq 함수 이용: 순열 벡터를 생성합니다. seq(from=n, to=n, by=n)
  • req 함수 이용: 반복 벡터를 생성합니다. rep(c(1:3), times=n), rep(c(1:3), each=n)

Post-Image 벡터 생성: seq 함수 이용
https://www.laidd.org/local/ubonline/view.php?id=181&group=1&returnurl=aHR0cHM6Ly93d3cubGFpZGQub3JnL2xvY2FsL3Vib25saW5lL2luZGV4LnBocD9vcmRlcnR5cGU9cmNfZCZrZXl3b3JkPSZwcm9ncmVzcyU1QiU1RD0xMyZlbnJvbF9zdGFydD0mZW5yb2xfZW5kPSZzdHVkeV9zdGFydD0mc3R1ZHlfZW5kPQ==


Post-Image 벡터 생성: rep 함수 이용
https://www.laidd.org/local/ubonline/view.php?id=181&group=1&returnurl=aHR0cHM6Ly93d3cubGFpZGQub3JnL2xvY2FsL3Vib25saW5lL2luZGV4LnBocD9vcmRlcnR5cGU9cmNfZCZrZXl3b3JkPSZwcm9ncmVzcyU1QiU1RD0xMyZlbnJvbF9zdGFydD0mZW5yb2xfZW5kPSZzdHVkeV9zdGFydD0mc3R1ZHlfZW5kPQ==


벡터 연산과 관련된 실습 내용입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
x = c(2, 4, 6, 8, 10)

length(x) # x 벡터의 길이를 구합니다.

x[1] # x 벡터의 1번 요소 값을 구합니다.

x[1, 2, 3] # x 벡터의 1, 2, 3번 요소 값을 구할 때 이와 같이 입력하면 에러가 발생합니다.

x[c(1, 2, 3)] # x 벡터의 1, 2, 3번 요소 값을 구할 때 벡터로 묶어줘야 합니다.

x[-c(1, 2, 3)] # x 벡터의 1, 2, 3번 요소를 제외한 값을 구합니다.

x[c(1:3)] # x 벡터의 1, 2, 3번 요소 값을 구합니다.



벡터 간 연산은 벡터의 길이가 같거나 요소 개수가 배수 관계에 있을 때 가능합니다.

1
2
3
4
5
6
7
8
9
10
11
12
x = c(1, 2, 3, 4)
y = c(5, 6, 7, 8)
z = c(3, 4)
w = c(5, 6, 7)

x + 2 # x 벡터의 개별 요소에 각각 2를 더합니다.

x + y # x 벡터와 y 벡터의 크기가 동일하므로 각 요소별로 더합니다.

x + z # x 벡터의 크기가 z 벡터 크기의 정수배(2배)이므로 크기가 작은 z 벡터 요소를 순환하며 x 벡터 각 요소에 더합니다.

x + w # x와 w 벡터의 크기가 정수배가 아니므로 연산에 에러가 발생합니다.



벡터 연산에 유용한 함수는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
x = c(1:10)

x > 5 # x 벡터의 요소 값이 5보다 큰지 확인합니다.

all(x > 5) # x 벡터의 요소 값이 모두 5보다 큰지 확인합니다.

any(x > 5) # x 벡터의 요소 값 중 일부가 5보다 큰지 확인합니다.



a = c(1, 2, 3)
b = c(3, 4, 5)
c = c(3, 1, 2)

union(x, y) # 합집합

intersect(x, y) # 교집합

setdiff(x, y) # 차집합(x에서 y와 동일한 요소 제외하고 출력)

setequal(x, y) # x와 y에 동일한 요소가 있는지 비교



Take Home Message


  • R에서 사용하는 데이터형과 연산에 대해 알아보았습니다.
This post is licensed under CC BY 4.0 by the author.

Solid Tumors - Hereditary

생물정보학을 위한 R프로그래밍 III - 데이터형과 연산