6. 반복문
(1) repeat
repeat는 계속해서 내부 코드를 반복한다. 반복문을 제어하는 내부 변수와 break 문을 통해 반복문을 탈출한다.
v <- c("Hello","loop") cnt <- 2 repeat { print(v) cnt <- cnt+1 if(cnt > 5) { break } }
[1] "Hello" "loop" [1] "Hello" "loop" [1] "Hello" "loop" [1] "Hello" "loop"
(2) while
while은 주어진 조건문이 true일때 계속 반복한다.
v <- c("Hello","while loop") cnt <- 2 while (cnt < 7) { print(v) cnt = cnt + 1 }
(3) for
for문은 vector나 list의 마지막 원소까지 반복한다.
v <- LETTERS[1:4] for ( i in v) { print(i) }
https://www.tutorialspoint.com/r/r_operators.htm
R을 통한 2017년 대선 주자들 페이스북 분석 (5) | 2017.02.21 |
---|---|
R - (7) 함수 (0) | 2017.02.19 |
R - (5) If, else if, switch (0) | 2017.02.15 |
R - (4) 연산자 (0) | 2017.02.15 |
R - (3) 변수 (0) | 2017.02.15 |
5. If, if else, switch
If 문
x <- 30L if(is.integer(x)) { print("X is an Integer") }
[1] "X is an Integer"
If else 문
x <- c("what","is","truth") if("Truth" %in% x) { print("Truth is found") } else { print("Truth is not found") }
[1] "Truth is not found"
Switch 문
switch 문은 일반적인 C, Java등의 프로그래밍 언어와는 조금 다르다.
# by index switch(1, "one", "two") ## [1] "one" # by index with complex expressions switch(2, {"one"}, {"two"}) ## [1] "two" # by index with complex named expression switch(1, foo={"one"}, bar={"two"}) ## [1] "one" # by name with complex named expression switch("bar", foo={"one"}, bar={"two"}) ## [1] "two"
R - (7) 함수 (0) | 2017.02.19 |
---|---|
R - (6) 반복문 (0) | 2017.02.17 |
R - (4) 연산자 (0) | 2017.02.15 |
R - (3) 변수 (0) | 2017.02.15 |
R - (2) R의 데이터 타입 (자료구조) (0) | 2017.02.13 |
Operator | Description | Example |
---|---|---|
+ | 두 벡터를 더함 |
[1] 10.0 8.5 10.0 |
− | 두 벡터를 뺌 |
[1] -6.0 2.5 2.0 |
* | 두 벡터를 곱함 | v <- c( 2,5.5,6) t <- c(8, 3, 4) print(v*t) [1] 16.0 16.5 24.0 |
/ | 두 벡터를 나눔 | v <- c( 2,5.5,6) t <- c(8, 3, 4) print(v/t) [1] 0.250000 1.833333 1.500000 |
%% | 두 벡터를 나눈 후 나머지 | v <- c( 2,5.5,6) t <- c(8, 3, 4) print(v%%t) [1] 2.0 2.5 2.0 |
%/% | 나눗셈의 몫 | v <- c( 2,5.5,6) t <- c(8, 3, 4) print(v%/%t) [1] 0 1 1 |
^ | 지수 | v <- c( 2,5.5,6) t <- c(8, 3, 4) print(v^t) [1] 256.000 166.375 1296.000 |
Operator | Description | Example |
---|---|---|
> | 왼쪽에 있는 벡터의 엘리먼트가 오른쪽에 있는 벡터의 엘리먼트보다 큰지를 체크한다. | v <- c(2,5.5,6,9) t <- c(8,2.5,14,9) print(v>t) [1] FALSE TRUE FALSE FALSE |
< | 오른쪽에 있는 벡터의 엘리먼트가 왼쪽에 있는 벡터의 엘리먼트보다 큰지를 체크한다. | v <- c(2,5.5,6,9) t <- c(8,2.5,14,9) print(v < t) [1] TRUE FALSE TRUE FALSE |
== | 벡터들의 엘리먼트들이 같은지를 체크한다. | v <- c(2,5.5,6,9) t <- c(8,2.5,14,9) print(v == t) [1] FALSE FALSE FALSE TRUE |
<= | 왼쪽에 있는 벡터들의 엘리먼트가 오른쪽에 있는 벡터의 엘리먼트보다 작거나 같은지를 체크한다. | v <- c(2,5.5,6,9) t <- c(8,2.5,14,9) print(v<=t) [1] TRUE FALSE TRUE TRUE |
>= | 왼쪽에 있는 벡터들의 엘리먼트가 오른쪽에 있는 벡터의 엘리먼트보다 크거나 같은지를 체크한다. | v <- c(2,5.5,6,9) t <- c(8,2.5,14,9) print(v>=t) [1] FALSE TRUE FALSE TRUE |
!= | 벡터들의 엘리먼트가 다른지를 체크한다. 다르면 TRUE, 같으면 FALSE | v <- c(2,5.5,6,9) t <- c(8,2.5,14,9) print(v!=t) [1] TRUE TRUE TRUE FALSE |
Operator | Description | Example |
---|---|---|
& | &은 element-wise AND 이다. 각 원소별로 AND 연산을 적용한 결과를 만든다. | v <- c(3,1,TRUE,2+3i) t <- c(4,1,FALSE,2+3i) print(v&t) [1] TRUE TRUE FALSE TRUE |
| | &은 element-wise OR 이다. 각 원소별로 OR연산을 적용한 결과를 만든다. | v <- c(3,0,TRUE,2+2i) t <- c(4,0,FALSE,2+3i) print(v|t) [1] TRUE FALSE TRUE TRUE |
! | element-wise NOT 이다. | v <- c(3,0,TRUE,2+2i) print(!v) [1] FALSE TRUE FALSE FALSE |
Operator | Description | Example |
---|---|---|
&& | 벡터의 첫번째 원소끼리 & 연산한 값 | v <- c(3,0,TRUE,2+2i) t <- c(1,3,TRUE,2+3i) print(v&&t) [1] TRUE |
|| | 벡터의 첫번째 원소끼리 | 연산한 값 | v <- c(0,0,TRUE,2+2i) t <- c(0,3,TRUE,2+3i) print(v||t) [1] FALSE |
Operator | Description | Example |
---|---|---|
<− or = or <<− | 왼쪽에 있는 변수에 값을 할당한다. | v1 <- c(3,1,TRUE,2+3i) v2 <<- c(3,1,TRUE,2+3i) v3 = c(3,1,TRUE,2+3i) print(v1) print(v2) print(v3) [1] 3+0i 1+0i 1+0i 2+3i [1] 3+0i 1+0i 1+0i 2+3i [1] 3+0i 1+0i 1+0i 2+3i |
-> or ->> | 오른쪽에 있는 변수에 값을 할당한다. | c(3,1,TRUE,2+3i) -> v1 c(3,1,TRUE,2+3i) ->> v2 print(v1) print(v2) [1] 3+0i 1+0i 1+0i 2+3i [1] 3+0i 1+0i 1+0i 2+3i |
Operator | Description | Example |
---|---|---|
: | 숫자의 시퀀스를 생성하는 연산자 | v <- 2:8 print(v) [1] 2 3 4 5 6 7 8 |
%in% | 엘리멘터가 벡터에 속해있는지를 체크하는 연산자 | v1 <- 8 v2 <- 12 t <- 1:10 print(v1 %in% t) print(v2 %in% t) [1] TRUE [1] FALSE |
%*% | 행렬을 그것의 transpose와 행렬곱셈을 할 때 쓰인다. | M = matrix( c(2,6,5,1,10,4), nrow = 2,ncol = 3,byrow = TRUE) t = M %*% t(M) print(t) [,1] [,2] [1,] 65 82 [2,] 82 117 |
R - (6) 반복문 (0) | 2017.02.17 |
---|---|
R - (5) If, else if, switch (0) | 2017.02.15 |
R - (3) 변수 (0) | 2017.02.15 |
R - (2) R의 데이터 타입 (자료구조) (0) | 2017.02.13 |
R - (1) Introduction (0) | 2017.02.13 |
https://www.tutorialspoint.com/r/r_variables.htm
변수
변수는 변수명을 통해 프로그램에서 데이터를 조작할 수 있도록 한다. 변수를 통하여 여러가지 자료구조를(atomic vector, vector, R-Object들의 여러가지 조합) 저장할 수 있다. 변수명에는 숫자, 문자, ., _가 포함될 수 있으며, 문자 또는 .을 첫글자로 하여야 한다. 단 .를 첫글자로 할 때는 .뒤에 숫자가 오면 안된다. 아래의 예를 참고하라.
변수 할당
# Assignment using equal operator. var.1 = c(0,1,2,3) # Assignment using leftward operator. var.2 <- c("learn","R") # Assignment using rightward operator. c(TRUE,1) -> var.3 print(var.1) cat ("var.1 is ", var.1 ,"\n") cat ("var.2 is ", var.2 ,"\n") cat ("var.3 is ", var.3 ,"\n")
변수할당은 = 또는 <-, -> 을 통해 할 수 있다. 또한 출력은 print(), cat()을 통해 할 수 있다. cat() 함수는 여러개의 인풋을 합쳐서 프린트한다.
결과
[1] 0 1 2 3 var.1 is 0 1 2 3 var.2 is learn R var.3 is 1 1
변수들의 데이터 타입
R에서 변수의 데이터 타입은 변수에 할당되는 R-Object의 데이터 타입을 따른다. 그래서 R을 동적인 언어(dynamically typed language)라고 부른다. R에서는 변수의 데이터 타입이 하나에 고정되는 것이 아니라 계속해서 바꿀 수 있다.
var_x <- "Hello" cat("The class of var_x is ",class(var_x),"\n") var_x <- 34.5 cat(" Now the class of var_x is ",class(var_x),"\n") var_x <- 27L cat(" Next the class of var_x becomes ",class(var_x),"\n")
The class of var_x is character Now the class of var_x is numeric Next the class of var_x becomes integer
변수 찾기
현재 사용되고 있는 변수들의 목록을 보기 위해서는 ls() 함수를 이용한다. 또한 ls() 함수는 변수를 찾기 위해 '패턴'을 이용할 수도 있다.
print(ls())
[1] "my var" "my_new_var" "my_var" "var.1" [5] "var.2" "var.3" "var.name" "var_name2." [9] "var_x" "varname"
# List the variables starting with the pattern "var". print(ls(pattern = "var"))
[1] "my var" "my_new_var" "my_var" "var.1" [5] "var.2" "var.3" "var.name" "var_name2." [9] "var_x" "varname"
주의할 점은 .으로 시작하는 변수들은 hidden 이다. 이것을 보기 위해서는 아래와 같이 all.name 파라미터를 TRUE로 설정한다.
print(ls(all.name = TRUE))
변수 삭제
변수는 rm() 함수를 사용해 지울 수 있다.
rm(var.3) print(var.3)
위의 스크립트를 실행시키면 var.3 변수를 삭제시키고 두 번째 줄에서는 에러가 뜬다.
rm(list = ls())
print(ls())
모든 변수를 지우고 싶으면 rm()과 ls()를 위와 같이 결합한다.
R - (6) 반복문 (0) | 2017.02.17 |
---|---|
R - (5) If, else if, switch (0) | 2017.02.15 |
R - (4) 연산자 (0) | 2017.02.15 |
R - (2) R의 데이터 타입 (자료구조) (0) | 2017.02.13 |
R - (1) Introduction (0) | 2017.02.13 |
https://www.tutorialspoint.com/r/r_data_types.htm
일반적인 프로그래밍에서는 값들을 저장하기 위하여 다양한 변수(Variables)들이 필요하다. 변수는 값을 저장한 메모리의 위치를 나타낸다. 이것은 변수를 만들면 그것이 메모리를 일정 공간을 차지한다는 것을 뜻한다. 문자, 정수, 실수, 진릿값 등 다양한 데이터를 변수에 저장하는 것이 필요할 것이다. 운영체제는 이러한 데이터 타입에 알맞게 변수에 메모리를 할당한다.
R에서는 C나 Java와 같은 프로그래밍 언어와는 다르게 R 에서는 변수를 만들 때 데이터 타입을 선언하지 않는다. 변수는 R-Object로 할당되며 R-Object의 데이터타입이 변수의 데이터타입이 된다. 다양한 타입의 R-Object가 있지만 자주 사용되는 R-Object의 타입은 아래와 같다.
자주 사용하는 데이터 타입
v <- TRUE print(class(v)) v <- 23.5 print(class(v)) v <- 2L print(class(v)) v <- 2+5i print(class(v)) v <- "TRUE" print(class(v)) v <- charToRaw("Hello") print(class(v))
결과 :
[1] "logical"
[1] "numeric"
[1] "integer"
[1] "complex"
[1] "character"
[1] "raw"
Vectors
R 언어에서 가장 많이 사용되고 기본적인 R-Object는 Vectors이다. 이것은 위의 열거된 atomic vector들을 저장한다. Vectors는 c() 함수를 사용하여 만들 수 있다. 이것은 엘리먼트들을 벡터로 합친다는 뜻이다. (combine의 c)
# Create a vector. apple <- c('red','green',"yellow") print(apple) # Get the class of the vector. print(class(apple))
[1] "red" "green" "1" [1] "character"
Matrices
매트릭스는 2차원의 데이터셋이다. 이것은 매트릭스 함수에 벡터를 제공함으로써 만들 수 있다.
# Create a matrix. M = matrix( c('a','a','b','c','b','a'), nrow = 2, ncol = 3, byrow = TRUE) print(M) print(class(M))
[,1] [,2] [,3] [1,] "a" "a" "b" [2,] "c" "b" "a" [1] "matrix"Arrays
매트릭스는 2차원에 한정되지만 arrays는 어떠한 차원으로 만들 수 있다.
# Create an array.
a <- array(c('green','yellow'),dim = c(3,3,2))
print(a)
, , 1 [,1] [,2] [,3] [1,] "green" "yellow" "green" [2,] "yellow" "green" "yellow" [3,] "green" "yellow" "green" , , 2 [,1] [,2] [,3] [1,] "yellow" "green" "yellow" [2,] "green" "yellow" "green" [3,] "yellow" "green" "yellow"위 코드는 3차원의 array를 만들고, 원소들을 차례대로 green, yellow로 지정한다.Factors
Factors는 vector로 만들어지는 R-object이다. Factors는 vector의 element들의 고유값(distinct value)를 레이블로 저장한다. 이 레이블들은 벡터 원소 타입이 어떻든 간에 항상 문자이다. Factors는 통계적 모델링에 유용하다. Factors는 factor()함수를 사용하여 만들 수 있다. nlevels() 함수를 통해 factors의 레벨을 알 수 있다.
# Create a vector. apple_colors <- c('green','green','yellow','red','red','red','green') # Create a factor object. factor_apple <- factor(apple_colors) # Print the factor. print(factor_apple) print(nlevels(factor_apple))[1] green green yellow red red red green Levels: green red yellow [1] 3Data Frames
데이터프레임은 구조화된 데이터 오브젝트이다. 매트릭스와 다른점은 데이터프레임은 컬럼으로 어떠한 데이터타입이든 넣을 수 있다. 첫 번째 컬럼은 numeric, 두 번째 컬럼은 문자열, 세 번째 컬럼은 논릿값 등 자유롭게 지정할 수 있다. 이것은 같은 길이의 vector들의 list로 볼 수 있다.
데이터 프레임은 data.frame() 함수를 통해 생성할 수 있다.
# Create the data frame.
BMI <- data.frame( gender = c("Male", "Male","Female"), height = c(152, 171.5, 165), weight = c(81,93, 78), Age = c(42,38,26) ) print(BMI)
gender height weight Age 1 Male 152.0 81 42 2 Male 171.5 93 38 3 Female 165.0 78 26
R - (6) 반복문 (0) | 2017.02.17 |
---|---|
R - (5) If, else if, switch (0) | 2017.02.15 |
R - (4) 연산자 (0) | 2017.02.15 |
R - (3) 변수 (0) | 2017.02.15 |
R - (1) Introduction (0) | 2017.02.13 |
원문 : https://www.tutorialspoint.com/r/index.htm
R tutorial
R은 통계 분석, 그래픽 표현 그리고 리포팅을 위한 프로그래밍 언어 및 소프트웨어 환경이다. R은 뉴질랜드 오클랜드 대학교의 Ross Ihaka and Robert Gentleman에 의해 만들어졌고, 현재는 R Development Core Team가 R을 개발하고 있다. R은 GNU(General Public License) 라이센스하에서 자유롭게 이용가능하며, 리눅스, 윈도우즈, 맥과 같은 다양한 운영체제에 컴파일된 바이너리를 제공하고 있다. 이 프로그래밍 언어 R은 두 명의 개발자, Ross Ihaka and Robert Gentleman 이름의 가장 앞 글자를 딴 것이다. 그리고 Bell Labs에서 만든 프로그래밍 언어 S를 근간으로한다.
대상 독자
이 튜토리얼은 R을 이용하여 통계 소프트웨어를 만들고자하는 소프트웨어 개발자, 통계학자, 데이터 마이너를 대상으로 한다. 만약 당신이 R에 처음이라면, 이 튜토리얼을 통해 R 언어의 대부분의 컨셉을 이해할 수 있고, 이를 통해 더 높은 레벨의 전문가가 될 수 있을 것이다.
선행 조건
이 튜토리얼을 시작하기 앞서 컴퓨터 프로그래밍 언어의 용어들에 대한 기본적인 이해가 필요하다. 프로그래밍 언어에 대한 기본적인 이해는 R 언어의 컨셉을 이해하고 학습하는데 도움이 될 것이다.
R - (6) 반복문 (0) | 2017.02.17 |
---|---|
R - (5) If, else if, switch (0) | 2017.02.15 |
R - (4) 연산자 (0) | 2017.02.15 |
R - (3) 변수 (0) | 2017.02.15 |
R - (2) R의 데이터 타입 (자료구조) (0) | 2017.02.13 |