[R] 사용자 정의 함수 관련 잡기술

2024. 10. 19. 18:43·Data Science/Manipulation

1. match.call

간혹 함수를 짜다보면 입력한 인수를 사용했는지 확인이 필요 할 때가 있습니다.

예를 들어, 데이터 프레임에서 특정 열의 Five-Number Summary($\min$, $q_1$, $m$, $q_3$, $\max$)를 해당 데이터 프레임의 이름과 함께 출력하는 함수를 아래와 같이 작성해보았습니다.

fivenum_col <- function(df, col){
  cat("DataFrame :", df)
  print(fivenum(df[[col]]))
}
fivenum_col(iris, "Sepal.Length")

 

결과는 에러가 발생하는데요!

왜냐하면, df를 출력하면 iris의 데이터프레임을 출력하기 때문에 문자열 출력 함수와 호환되지 않기 때문입니다.

이런 에러를 방지하기 위해서 match.call 함수를 사용하는데 인자와 입력된 글자를 호출하는 함수입니다.

fivenum_col <- function(df, col){
  cl <- match.call()
  df_name <- as.character(cl$df)
  cat("DataFrame :", df_name,"\n")
  print(fivenum(df[[col]]))
}
fivenum_col(iris, "Sepal.Length")

 

 

2. 익명함수(anonymous functions)

파이썬의 람다 함수처럼 익명 함수를 지원합니다. R에서는 "\(인자){함수내부..} "와 같이 작성할 수 있습니다.

# 동일함수1
myfun <- function(data){
  data^2/sd(data)}

# 동일함수2 - 익명함수
f <- \(x){x^2/sd(x)}

myfun(1:10)
f(1:10)

 

다만 익명함수에 바로 값을 주면 함수를 리턴하는 이유로 원하는 값을 반환하지 않기에, 다른 객체로 받아서 값을 전달하든, ()로 감싸고 값을 전달해야합니다.

a <- \(x){x^2}(1:5)
# return function
a # \(x){x^2}(1:5)

# 방법1
(\(x){x^2})(1:5) # [1]  1  4  9 16 25

# 방법2
f <- \(x){x^2}
f(1:5) # [1]  1  4  9 16 25

 

익명함수는 map 함수와 같이 함수형 프로그래밍에 좀 더 적합하다고 생각합니다.

아래 예시는 붓꽃 데이터의 종(Speices)마다 데이터를 분할하고 Sepal.Length와 Petal.Length에 대해 회귀분석을 각각 진행해 결과를 보기 좋게 다듬었습니다.

iris |> group_split(Species) |> 
  map(\(species_df){lm(Sepal.Length ~ Petal.Length, data = species_df)}) |> 
  map(\(lm_result) tidy(lm_result)) |> 
  list_rbind()

 

'Data Science > Manipulation' 카테고리의 다른 글

[R] rlang으로 하는 동적 변수 참조와 환경(Environment)  (4) 2024.11.04
[EDA] 상관계수 시각화 (Visualization of Correlation Coefficient) with R  (0) 2024.09.27
[R] slice함수 : 위치를 이용한 행 선택 (Subset rows using position)  (2) 2023.09.06
[Data Science With R] 16. 리스트열(List-column)을 이용한 모델  (0) 2023.09.02
[R] all_of와 any_of를 사용한 변수 선택 (조건을 이용한 선택 추가)  (1) 2023.07.29
'Data Science/Manipulation' 카테고리의 다른 글
  • [R] rlang으로 하는 동적 변수 참조와 환경(Environment)
  • [EDA] 상관계수 시각화 (Visualization of Correlation Coefficient) with R
  • [R] slice함수 : 위치를 이용한 행 선택 (Subset rows using position)
  • [Data Science With R] 16. 리스트열(List-column)을 이용한 모델
임파카
임파카
[ML & Statistics] 모바일 버전에서 수식 오류가 있어 PC 환경에서 접속하는 것을 권장합니다.
  • 임파카
    무기의 스탯(Stat)
    임파카
  • 전체
    오늘
    어제
    • Study (149)
      • Data Science (44)
        • Modeling (18)
        • Manipulation (21)
        • Visualization (4)
      • Statistics (59)
        • Mathmetical Statistics (53)
        • Categorical DA (1)
      • Web Programming (17)
      • AI (26)
        • Machine Learning (16)
        • Deep Learning (10)
      • 활동 및 프로젝트 (3)
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
임파카
[R] 사용자 정의 함수 관련 잡기술
상단으로

티스토리툴바