데이터 분석/R 데이터 처리 & 분석

[R] get 함수로 문자를 변수로 인식시키기

love R 2021. 6. 7. 21:08
반응형

get 함수로 문자를 변수로 인식시키기

 

데이터 전처리를 하다보면 문자값을 변수로 인식시켜야 할 때가 있습니다.

 

예를 들면 x_test 라는 변수에 c(1, 2, 3) 을 할당하고 x_test를 실행하면 1 2 3이 나옵니다.

x_test <- c(1, 2, 3)
x_test

 

 

이때 get 함수를 이용해서 문자인 "x_test" 를 이용해서 c(1, 2, 3)이 나오게 해봅시다.

# get("문자값")
get
("x_test") 

위에서 보듯 x_test와 "x_test" 는 의미하는 바가 다릅니다.  x_test는 객체(object)로 인식되며 "x_test"는 문자값일 뿐입니다.  그래서 get함수의 기능은 "x_test"(문자값)를 x_test(객체)로 인식시켜주는 역할입니다.

 

주의할 점은 get함수 인자로 반드시 문자형으로 입력해주어야 합니다~ 꼭 따옴표를 붙이세요.

 

 

get 함수는 assign 함수와 반대인 것을 알 수 있습니다.

이 전 포스팅에서 보듯 assign 은 문자형에 어떤 값을 할당하는 함수이고

get 함수는 어떤 문자값이 이미 변수로 생성되어있는 이름과 같다면 문자를 해당하는 변수 내용을 출력합니다.

 

# x라는 변수명에 c(10, 20, 30, 40) 을 할당함
assign("x", c(10, 20, 30, 40))

# x라는 변수명을 문자값을 이용해 반환
get("x")

 

 

반복문을 이용해서 값 저장(assign)과 출력(get)을 함께 사용하여 아래처럼 나타낼 수 있습니다.

# num이라는 변수명에 데이터 저장
num <- c('one','two','three','four','five','six','seven','eight','nine','ten')

# assign함수로 값을 저장하고, get함수로 값을 출력
for(i in 1:10){
      assign(paste0('a_',i),num[i])   # 변수명 a_1, a_2, ..., a_10에 값을 저장
      x <- get(paste0("a_",i)) # 값을 출력
      print(x)
}

 

 

만약 여러 변수를 한꺼번에 출력하고 싶으면 mget 함수를 이용합니다.

mget함수의 출력값 형식은 리스트(list)입니다.

mget함수의 인자는 문자형벡터로 넣어주고 결과를 보면 list형식으로 반환하는 것을 알 수 있습니다.

# mget("문자형벡터")
test1 <-c(10,20,30,40,50)
test2 <- c(100,200,300)
test3 <- c(2002, 2003,2004,2005)

# test1, test2, test3 객체를 문자형 벡터로 구성해서 인자로 삽입
mget_test <- mget(c("test1","test2","test3")) 
mget_test



# list의 요소 접근하기
mget_test["test1"]


mget_test["test2"]



mget_test["test3"]

 

 

이번에는 반복문을 이용해서 값을 각 요소들(test1, test2, test3)의 벡터가 반환되게 만들어봅시다. 

# get 을 이용
for
(x in 1:3){
pr <- get(paste0("test",1:3)[x]) # get함수로 test1, test2, test3를 출력
print(pr) # 반복문이 한번씩 돌때마다 print함수로 찍힘
}



# mget 을 이용
for(x in 1:3){
  pr <- mget(paste0("test",1:3)) #mget함수로
  pr2<- pr[[paste0('test',1:3)[x]]]
  print(pr2)
}

 

 

위에선 벡터를 예시로 들었지만 데이터프레임, 리스트에도 똑같이 적용할 수 있습니다.

dat라는 데이터프레임을 만들고 xx라는 변수명에 할당합니다.

dat <- data.frame(x=c(1,2,3,4),y=c(5,6,7,8))
assign('xx',dat)
get("xx")

 

궁금한 점은 댓글로 남겨주세요^^

반응형