본문 바로가기
R

R ) as.formula 활용하기 formula 인자 변경하면서 반복문 사용

by C.Mond 2022. 11. 30.
728x90
728x90

함수를 사용하다보면 formula인자에 값을 넣어 사용할때가 있습니다.

 

이때 formula인자에 들어가는 값을 바꿔가면서 반복문을 돌리는 등의 코드를 진행하고 싶을때가 있습니다.

 

formula인자에는 문자열등이 들어가는 것이 아니라 다른게 들어가나 봅니다..그래서 그냥 문자열을 넣으면 안되고 as.formula함수를 이용해 문자열을 formula인자에 들어가도록 바꿀 수 있는 것 같습니다.

 

그래서 as.formula를 이용해 formula인자의 값을 바꿔가면서 적용시키는 예제를 해보려고 합니다.

 

dataframe은 iris를 사용하겠습니다.

함수는 doBy 패키지의 orderBy함수를 사용해보려 합니다.

 

oderBy(formula=~정렬할 기준 column, data=dataframe)인자를 갖고 있는 함수입니다.

orderBy(formula=~Petal.Width,data=iris)

위처럼 적용하면 Petal.Width기준으로 data가 정렬되는 것을 볼 수 있습니다.

1. orderBy(formula=~"Petal.Width",data=iris)
2. orderBy(formula=~colnames(iris)[4],data=iris)
3. orderBy(formula=paste0("~",colnames(iris)[4]),data=iris)

1번은 함수가 작동을 하지만

2,3번은 작동을 하지가 않습니다

그래서 반복문을 쓸때에 어려움이 있습니다.

이를 as.formula를 이용해 해결할 수 있습니다.

 

여기서 반복문을 이용해 각 column별로 정렬을 해보겠습니다.

for(i in 1:length(colnames(iris))){
  myformula <- as.formula(paste0("~",colnames(iris)[i]))
  orderdf <- orderBy(formula=myformula,data=iris)
  print(orderdf)
}

위 코드를 진행하면 다음과 같이 작동을 하는것을 볼 수 있습니다.

 

그리고 formula인자에 +를 이용해 여러 column을 기준으로 정렬을 할수도 있습니다.

orderBy(formula=~Petal.Width+Petal.Length,data=iris)

이것도 as.formula를 이용해 반복문을 만들어 보겠습니다. 

for(i in 1:length(colnames(iris))){
  myformula <- as.formula(paste0("~",colnames(iris)[i],"+Sepal.Length"))
  orderdf <- orderBy(formula=myformula,data=iris)
  print(head(orderdf))
  print(myformula)
}

위 처럼 formula인자의 값을 바꿔가며 반복문을 실행할 수 있습니다.

728x90
728x90

댓글