R_기초 다루기(변수,자료형,특수데이터,형변환, 출력함수)

2024. 9. 25. 00:54R분석

R언어의 변수

#변수

name <- '홍길동';
print(name);
num <- 10;
print(num+10);
#저장된 변수는 값처럼 사용가능
#반드시 변수를 먼저 실행한 후 변수 호출할것

#오늘 날짜를 저장하는 day1, day2, day3
#변수만든 후 변수에 저장된 값출력
day1 <- '20240924';
day2 <- 20240924;
day3 <- 2024.0630;
print(day1); #문자열
print(day2); #숫자형(정수형)
print(day3); #숫자형(실수형)

변수는 값을 저장하기 위한 공간이며, 값을 저장하는 이유는 계속해서 재사용하기 위함이다. 

변수를 생성할때는 변수명 <- 저장할 값의 형태로 지정해주어야하며, r에서의 대입연산자는 =이 아닌 <-의 형태를 사용한다.

(=도 대입연산자로 가능하긴하나, 별로 권장하진 않는다..!)

출력된 결과는 R스튜디오의 콘솔창에서 확인이 가능하다.

 

 

R의 자료형

r의 기본 자료형 종류

  • 숫자형(numeric) : 실수 또는 정수
  • 문자형(character) : ' ', " "로 감싸진 문자
  • 논리형(logical) : TRUE , FALSE(대문자로 적어야한다.)

 

r의 자료형을 확인할 수 있는 함수

  • typeof()
  • class()
  • mode()

 

숫자형

#기본자료형
#1)숫자형 자료형
num <- 20; #기존에 있던 변수에 그대로 값을 대입하면 변수 변경
num1 <- 10L; #L은 정수형이라는 뜻
print(class(num)) #numeric출력
print(class(num1)) #integer(정수)출력
print(typeof(num)) #double(실수)출력
print(typeof(num1)) #integer출력
print(mode(num)) #numeric출력
print(mode(num1)) #numeric출력
#type가 가장 구체적으로 알려줌

 

r은 다른 컴퓨터 언어들과는 다르게 숫자형중에서도 실수형이 기본이 되고, 정수가 특수한 경우로 분류된다. numeric은 숫자형이면서 기본이 실수형으로 되어있기때문에 숫자형 중에서도 정수형으로 자료형을 지정하고싶다면 숫자뒤에 대문자L을 붙여 표시한다.

보다 구체적인 자료형 확인을 위해 자료형을 확인할 수 있는 함수를 사용하여 확인해보면 실수는 double, 정수는 integer로 출력된다.

 

문자형

#2)문자형
char1 <- 'hello';
char2 <- '10+20';
print(char1);
print(char2);
print(typeof(char1));
print(typeof(char2)); #''안에 정의됐다면 무조건 문자형
print(class(char1));
print(class(char2));
print(mode(char1));
print(mode(char2));
#전부다 character 출력


문자형은 character로 정의되며 작은 따옴표 안에 들어가있는 모든것은 문자형으로 인식된다. 심지어 '10+20'의 경우 30이 출력되는게 아니라 '10+20'라는 문자형이 출력된다. 자료형을 출력할 수 있는 함수를 통해 조회하면 모두 문자형 자료형인 character를 출력한다.

 

논리형

#3)논리형
log1 <- TRUE;
log2 <- FALSE;
print(log1);
print(log2);
print(class(log1));
print(class(log2));
print(typeof(log1));
print(typeof(log2));
print(mode(log1));
print(mode(log2));
#전부다 logical출력

논리형은 logical로 참과 거짓을 의미하는 TRUE와 FALSE의 자료형이다. TURE와 FALSE가 저장된 변수를 생성하고 자료형을 확인할 수 있는 함수로 출력한결과 모두 logical이 출력된다.

 

자료형 실습

#자료형 실습#
#이름(문자열)을 저장하는 변수 name,
#나이 (숫자형 정수)를 저장하는 변수 age,
#취미(문자형)를 저장하는 변수 hobby
#변수에 저장된값 출력, 타입도 출력

name <- '홍길동';
age <- 20L;
hobby <- '영화시청';

print(name);
print(class(name));
print(age);
print(typeof(age));
print(hobby);
print(mode(hobby));

이름은 홍길동으로 정의하였고 나이의 경우에는 숫자뒤에 대문자L을 붙여 자료형을 출력했을때 integer가 출력되도록했다.

 

 

R언어의 특수데이터

특수데이터의 종류

  • null : 정의되어 있지 않음을 의미, 자료형도 없고 길이도 0
  • NA : 결측값(missing value), 관측/측정에 실패한 값
  • NaN :(Not a Number): 수학적으로 정의가 불가능한 값
  • Inf, -Inf : 양의 무한대, 음의 무한대
#특수데이터
#1)null : 정의되지 않은 값
null_value <- NULL;
print(null_value);
print(typeof(null_value));
#타입이 null인것이 아니라 비어있다는 뜻

#2)NA : 결측값(측정 / 관측 실패)
na_value <- NA;
print(na_value);


#3)NaN : 수학적으로 정의 불가능한 값
nan_value <- 0/0  #0나누기0
print(nan_value); #nan출력

#4)inf / -inf : 양의무한대와 음의 무한대
inf_value <- 10/0;
print(inf_value); 
#10/0은 수학적으로 양의 무한대를 상징한다.

 

 

자료형 형변환

자료형 형변환 함수

  • as.numeric : 다른 자료형을 숫자로 형변환
  • as.integer : 실수형 숫자를 정수형으로 형변환
  • as.character : 다른 자료형을 문자로 형변환
  • as. logical : 다른 자료형을 논리로 형변환

 

숫자형

#1)숫자형 형변환
num1 <- '10.2';
print(class(num1)); #character

print(as.numeric(num1));
print(class(as.numeric(num1)));#numeric

'10.2'이라는 문자형을 숫자형으로 바꾸기 위해 as.numeric을 사용한다. 출력결과를 살펴보면 작은 따옴표로 감싸져있던 문자형이 숫자형으로 출력된걸 확인할 수 있으며, 자료형 확인함수인 class를 대입하여 출력하면 숫자형인 numeric으로 출력된걸 확인할 수 있다.

 

실수형 -> 정수형

#1-1)실수형-> 정수형
print(as.numeric(num1));
print(typeof(as.numeric(num1))); #double

print(as.integer(num1)); #소수점 버린 정수로 출력됨
print(typeof(as.integer(num1))); #integer

as.interger는 실수형 숫자를 정수형으로 바꾸는 형변환 함수이다. 10.2이라는 실수형 변수의 자료형을 typeof로 확인해보면 실수형 자료형인 double이 추력되는데 이를 정수형으로 형변환 한 후 출력해보면 자료형이 integer로 출력되었으며 변수의 값 역시 소수점 버림 형태인 10으로만 출력된다.

 

논리형 -> 숫자형

#2)논리형
print(as.numeric(TRUE)); #1 출력
print(as.integer(TRUE)); #1 출력
print(class(as.numeric(TRUE))); #numeric
print(as.integer(FALSE)); #0 출력
print(class(as.numeric(FALSE))); #numeric출력
#논리형에서 TRUE는 0외에 모든 값을, FALSE는 0을 의미한다

논리값인 TREU와 FALSE는 숫자로 변형하여 사용이 가능하다. TREU는 0을 제외한 모든값이 TRUE가 될 수 있지만 TRUE자체를 숫자로 형변환 시키면 1이 출력되고 반대로 FALSE는 0을 의미한다. 

 

숫자형 -> 논리

#2-1)숫자형->논리형
num3 <- 10;
num4 <- 0;

print(as.logical(num3)); #TRUE
print(as.logical(num4)); #FALSE출력
print(mode(as.logical(num3))); #logical
print(mode(as.logical(num4))); #logical
print(as.logical(0.0)); #0.0도 FALSE의미!

또한 숫자형 역시 논리형으로 형변환이 가능하다. 10이 저장되어있는 변수를 as.logical로 출력하게 되면 TRUE가 출력되고 0이 저장되어있는 변수를 as.logical로 출력하게 되면 FALSE가 출력된다.

 

문자형->논리형

#3)문자형->논리형
print(as.logical('TRUE')); #따옴표 사라지고 TRUE로 출력
print(as.logical('FALSE'));
print(as.logical('T')); #T대문자로도 가능함
print(as.logical('F'));
print(as.logical(""));
#비어있는 값은 FALSE가 아닌 NA결측값출력

문자형도 논리형으로 변경이 가능한데, 모든 문자열이 가능한것은 아니고 'TRUE'나 'FALSE' 처럼 논리형을 뜻하는 문자만 변경이 가능하며, 단어를 전부 다 적지 않아도 'T'나 'F'의 형태도 logical로 변경이가능하다. 또한 보통 다른 언어에서는 비어있는 값을 null이나 FALSE처리 하지만 r에서 비어이있는 값은 FALSE가 아니며 결측치인 NA를 반환한다.

 

문자형

#4)문자형 형변환
print(as.character(10)); #'10'으로 출력
print(as.character(20));
print(class(as.character(30))); #character
print(as.character(13.3)); #실수도 가능
print(as.character(TRUE)); #'TRUE'
print(as.character(FALSE));

문자로 형변환 시킬때는 as.characer를 사용하며, 형변환이 된 값들은 모두 작은 따옴표나 큰 따옴표가 붙여져서 출력된다. 

문자형같지 않은 '10.2'도 숫자가 아니라 작은 따옴표가 붙여져 있기때문에 문자형으로 인식된다.

 

 

출력함수

출력함수 종류

  • print() : 단일값 출력
  • cat(): 콤마로 구분하여 다중값 출력가능
  • sprintf() : 여러종류의 데이터를 하나의 문자열안에서 서식에 맞춰 출력

 

print()

#1) print() : 하나의 값만 출력
print(1);
#print(1,'문자'); 에러! 출력안됨
print(10.3234234,digits=3); 
#값이 아닌 옵션과는 사용가능하지만 어차피 출력값이 1개여야함
#digits=n : 앞에서부터 숫자 n개만 출력하겠다는 뜻

 r에서의 print()출력함수는 단일값만 출력할 수 있다.(파이썬과 가장 큰 차이) print()내부 안에서는 여러값을 나열 할 수 없다.

다만 출력하는 옵션과는 함께 출력해도 무방하나, 이역시 어차피 결과가 단일이기 때문에 가능한 것이지 결과가 다중으로 출력되는 값들은 적을 수 없다.

 

 

cat()

#2)cat() : 콤마를 이용하여 여러개 값 출력
cat(1,'문자',TRUE);
#cat안에 있는 3가지의 값 출력됨

num <- 10;
cat('num에 저장된 값: ',num);
#cat을 활용하면 문장 출력도 가능함

cat()출력함수는 콤마로 값을 구분하여 여러가지 자료형의 값을 한번에 출력할 수 있도록 한다. cat()의 경우 콤마로 값이 구분되었기때문에 한번에 여러값이 출력되었더라도 각각의 값은 각각의 자료형을 가지고 있으며, 만약 숫자형1개, 문자형2개, 논리형1개의 값이 cat()으로 출력되었다면 총 3개의 값이 출력된 것이다.

 

 

sprintf()

#sprint(): 여러종류의 데이터를 하나의 문자열안에서 서식에 맞춰 출력
sprintf("정수형: %d",10);
sprintf("실수형: %f",13.4);
sprintf("실수형 자리수 제한: %.2f",10.123);
#%.nf : n수만큼 자리수 출력
sprintf("논리형: %s",TRUE);
sprintf("문자형: %s","HI");
sprintf('%d %f %s',10,3.14,FALSE);

sprintf()는 서식에 맞춰서 그 서식에 맞는 값을 대입하여 출력하는 방식이다. 출력하고 싶은 문장이나 데이터 안에 서식을 맞춰 넣고 콤마로 구분하여 그 뒤에 서식에 들어갈 값을 적는 형태로 출력한다. sprint()의 경우 형식지정자이기때문에 문자+숫자로 되어있어도 값이 하나로 인식된다. 

 

총합 실습

#실습#
#이름(문자열)을 저장할 변수 name
#나이(정수)를 저장할 변수 age
#오늘날짜를 저장할 변수(실수)를 저장할 변수 date 월까지만

#<출력결과>
#이름: 000
#나이 : 00세
#오늘날짜 : 2023.06

#1)cat()
#2)sprintf()사용

#----------------------#

#변수정의
name <- '홍길동';
age <- 25;
date <- 2024.09;

#cat 사용
cat('이름: ',name);
cat('나이: ',age);
cat('오늘날짜: ',date);
#cat은 콤마로 구분되어있기때문에
#2개의 값이 출력된것.(문자열1개 숫자1개)


#sprintf사용
sprintf('이름: %s ',name);
sprintf('나이: %d ',age);
sprintf('오늘날짜: %.2f',date);
#sprintf는 형식지정자이기때문에
#값이 하나로 인식됨. 문자열안에 숫자형이 들어온것뿐!

 


학습일기

드디어 R복습도 재시작!!! 사실 SQL이나 파이썬은 예전에도 일할때 몇번 사용도 해보고 프로젝트도 하고 했었어서 언어가 나름 손에 익긴했는데 사실R의 경우는 스스로 복습하지 않는 이상 사용할 일이 없었다...ㅠ R복습도 다시 시작하는 만큼 다른 언어들과 마찬가지로 내가 원하는 쿼리문을 적고 출력하고 활용할 수 있는 단계까지 갈 수 있도록 해야겠다..!! 

오늘은 R의 완전 완전 완전 기초부분을 복습해서 그런지 어려운 부분은 아예 없었지만 자료형이나 대입연산자 등 R이 가진 다른 언어와의 차이점만 헷갈리지 않으면 될것같다.!!