2024. 9. 25. 14:15ㆍR분석
연산자
R 연산자 종류 (우선계산 순서)
- 최우선 연산자 : (),[]
- 단항 연산자 : +(양수),-(음수) / 덧셈뺄셈 아님. 항이 하나만 필요한 연산자
- 산술 연산자 : +,-,*,/,//,%% ,%/%, **
- 관계 연산자 : <,>,<=,>=,==,!=
- 논리 연산자: &,|,!
- 대입 연산자: <-, ->,=
최우선 연산자
#최우선 연산자#
print((10+1)*2);
print(10+1*2);
#괄호안에 있는것이 먼저 연산
최우선 연산자는 이름에서 알 수 있듯, 최우선으로 연산되는 연산자이다. 수학에서도 곱하기와 나눗셈이 먼저 연산되는 것처럼 r에서도 마찬가지로 계산되는데 필요에따라 더하기나 뺄셈이 먼저 연산되도록 하고싶다면 최우선 연잔자를 사용하여 값을 (),[]괄호로 묶어주면 된다.
단항연산자
#단항연산자
print(+10);
print(+20);
print(-10);
print(-100);
단항연산자는 양의 수, 음의 수 등 단항으로 이루진 연산자이다. -를 적지 않는이상 양의 수가 디폴트값이므로 +로 인식된다. 출력시 +10이라고 적어도 일반 10이라고 출력되며 마이너스일 경우에만 -표시를 적는다.
산술연산자
- 산술연산자 종류
- +덧셈
- -뺄셈
- *곱셈
- /나누기
- %%나머지
- %/%몫
- **거듭제곱
덧셈, 뺄셈, 곱셉, 나눗셈
#산술연산자
num1 <- 10;
num2 <- 3;
#+뎃셈
print(num1+num2);
#-뺄셈
print(num1-num2);
print(num2-num1);#작은 수 에서 큰 수 빼면 마이너스로 출력
#*곱셈
print(num1*num2);
print(num1*1.5); #소수도 가능
#/나눗셈
print(num1/num2);
print(num1/2);
#파이썬에서는 나눗셈결과가 전부 실수지만
#r에서 출력값이 정수면 동일하게 정수로 출력
r에서도 사칙연산은 수학의 원리와 동일하며, 변수에 저장된 값끼리 산술연산이 가능하다. 뺄셈의 경우 작은 수 에서 큰 수를 빼면 에러가 나는것이 아니라 마이너스로 출력되며 , 곱셉의경우에는 소수도 곱셈이가능하다. 나눗셈의 경우, 파이썬에서는 나눈 값들은 무조건 값이 정수로 딱 맞아 떨어져도 소수로 나왔었는데 r의 경우에는 정수로 나눠떨어지면 그냥 정수를 그대로 반환한다.
나머지 연산자, 몫연산자, 거듭제곱
#%%나머지 연산자
print(num1%%2); #0
print(num2%%2); #1
print(27%%3);
#%%나머지 연산자는 짝수,홀수,배수 표현할때 주로사용
#%/%몫연산자
print(num1%/%num2); #3
#**거듭제곱
print(num1**2); #10*10
print(num2**3); #3*3*3
나머지 연산자의 경우 계산된 나머지를 반환하는데 나머지 연산자의경우 값의짝수나 홀수, 배수등을 표현할때 자주 사용된다. 짝수는 2를 나누면 나머지 값이 무조건 0이며, 홀수는 1이기때문이다. 몫연산자의 경우 계산되는 값들의 몫을 반환하며 거듭제곱의 연산자는 곱하기 연산자를 두번사용한 형태(**)로 사용된다.
관계연산자
#관계연산자
num3 <- 10;
num4 <- 15;
print(num3<num4); #num3이 num4보다 작니?
print(num3>num4); #num4가 num3보다 작니?
print(num3 >=num4);
print(num3==10);
print(num!=20);
#==과 !=는 문자형에서도 가능
print('안녕'=='안녕');
print('안녕'!='안녕');
수학에서 관계연산자는 확답의 의미로 사용된다. 10>5라고 되어있다면 [10은 5보다 크다.]라는 정의인데 r에서의 관계연산은 되물어보는 의미를 가진다. 10이 5보다 커? 하고 묻는것이기때문에 만약 맞다면 TRUE를, 아니라면 FALSE를 반환한다.
사용되는 형태는 수학과 동일하게 >,<,<=,>=이 있으며
==과 !=는 문자형 데이터에서도 사용이 가능하다. 문자형데이터에서 사용해도 마찬가지로 TRUE와 FALSE로 값이 반환된다.
논리연산자
#논리연산자
print(TRUE & TRUE);
print(TRUE & FALSE);
print(TRUE | FALSE);
print(!TRUE);
print(!FALSE);
num5 <- 10;
num6 <- 0;
print(num5>10);
print(num5>10 & num5==10);
print(num5==10, num5<20); #둘다 참
print(num5==10 | num5<9); #참 거짓 = 참
print(!(num5==10 & num6<1)); #둘다참 = 거짓
print(!(num6==0 & TRUE==1));
#논리형과 숫자형 관계연산자로 사용가능
r의논리연산자에도 다른 언어와 마찬가지로 and, or, not이 있는데 r에서는 기호로 사용된다.
and=&, or= | , not=!로 사용되며 의미는 다른언어와 동일하다.
둘다 참일경우에만 참을 반환하는 &와 둘중에 하나만 참이더라도 참을 반환하는 |, 그리고 반대의 값을 반환하는 !이 있다.
대입연산자
#대입연산자
#<-사용 (Alt+-)
#값 -> 저장공간도 가능함
num <- 10;
10 ->num2;
print(num);
print(num2); #이것도 가능
r에서 사용하는 대입연산자는 저장공간<- 값의 형태가 기본이지만 반대로 값->저장공간의 형태도 사용이 가능하다.
연산자활용 실습코드
실습코드1
#<실습1> 코인노래방 프로그램 만들기
#코인 노래방에서 한 곡당 가격400원이다.
#투입할 금액을 저장할 변수 생성하고
#투입할 금액으로 부를 수 있는 곡의 개수와
#거스름돈 금액 출력(산술연산자 사용)
coin <- 1500;
sing <- 400;
cat('투입한 금액: ', coin);
cat('부를 수 있는 곡 개수: ', coin%/%sing,'곡');
cat('거스름돈: ',coin%%sing,'원'); #나머지 연산자사용
cat('거스름돈: ',coin-(sing*3),'원'); #최우선 연산자 사용
코인노래방의 프로그램을 제작한다는 가정하에 간단하게 r로 코드를 작성해보자.
먼저 내가 기계에 집어넣을 돈인 1500원을 변수에 저장하고 곡1개의 값도 변수에 저장한다.
이를 cat함수를 사용하여 사용자의 화면에 출력될 수 있도록 문장으로 정리하는데, 부를 수 있는 곡의 개수는 투입한 금액과 1곡의 가격끼리의 몫을 구하면 되기때문에 %/%연산자를 사용하여 답을 구했으며, 거스름돈 역시 %%연산자를 사용하여 계산했다.
또한 최우선 연산자를 사용해서도 거스름돈을 구할 수 있는데, 위의 쿼리로 3곡을 부를 수 있다는것이 도출되었기떄문에 3*400을 먼저 계산되도록 하고 그 값에서 내가 기계에 넣을 돈을 뺄셈해주면 답을 구할 수 있다.
실습코드2
#<실습2>
#나이 저장할 변수를 만들고
#나이가 20살 이상이면 TRUE출력, 아니면 FALSE출력
age <- 20
print(age >= 20);
관계연산자를 통해 쉽게 풀수 있는 문제다. 여기서 age에 저장된 값을 20이하의 수로 바꾸게 되면 FALSE가 출력된다.
실습코드3
#<실습3>
#정수를 저장하는 2개의 변수를 생성하고
#2개의 정수가 모두 양수라면 TRUE
#하나라도 양수가 아니라면 FALSE
num <- 10;
num1 <- 50;
print(num>0 & num1>0);
주어진 문제에서 '모두 양수'라는 조건이 들어가있기때문에 &(and)를 사용하여야 하며, 양수라는 조건에만족하기 위해 0과 비교하여 관계연산자를 작성한후 두 식을 논리연산자로 계산한다.
학습일기
기본중에 기본, 기초중에 기초인 연산자를 다시 복습하니 하나도 어렵지 않아 기분은 좋다...ㅎㅎ r언어가 계속 이런난이도 였으면
좋겠지만..ㅠㅠ연산자에서 딱히 어려운건 없었는데 아직까지 나한테는파이썬이 조금더 익숙해서 나머지연산자나, 몫연산자의 생김새가 약간 다르다는점, 그리고 논리연산자에서 기호를 사용한다는점만 헷갈리지 않도록 하면 될듯..!
예전에도 파이썬만 주구장창 쓰다가 r사용하려니 나도 모르게 and적어놓고 왜 오류가 났는지 한참을 들여다본 전적이 있기때문에..
드디어 다읍부터는 r의 데이터의 구조가 등장한다! 아자아자!
'R분석' 카테고리의 다른 글
R복습_데이터구조 리스트(생성, 인덱스, 슬라이싱, 함수, 결합) (0) | 2024.09.27 |
---|---|
R복습_데이터구조 배열(생성, 인덱스, 슬라이싱, 함수, 연산) (0) | 2024.09.27 |
R복습_데이터구조 행렬(생성, 인덱싱,슬라이싱,특수함수,연산) (1) | 2024.09.26 |
R복습_데이터구조 벡터(생성, 인덱싱,슬라이싱,이름지정,연산) (0) | 2024.09.25 |
R_기초 다루기(변수,자료형,특수데이터,형변환, 출력함수) (4) | 2024.09.25 |