2017-05-10 1 views
2

을 설정하는 기능 아규먼트를 사용하는 실제 함수 인수를 반영하기 위해 (즉, 다른 데이터 프레임에 사용할 수 있도록) paste0()의 첫 번째 인수를 원합니다.방법은 다음과 같이 내가 dataframe <code>df</code>이 열 이름

원하는 기능 :

df1 <- data.frame(a = c("A", "A", "B", "B"), b = 1:4) 
generateVarMean(df1, a, b) 

    a b.mean 
1 A 1.5 
2 B 3.5 

어떤 도움을 아주 많이 감사 올바른 방향으로 지적하기.

우리는 dplyr의 (STABLE) 버전에서 quosure 사용할 수있다

답변

1

함수에 아무 것도 추가 할 필요가 없습니다. 그냥 그래서 지금 paste0(deparse(substitute(y)), ".mean")

과 기능을 paste0("y", ".mean")를 교체하고, 출력은 다음과 같습니다

> generateVarMean <- function(df, x, y) { 
    mean.df <- df %>% 
    select(x, y) %>% 
    group_by(x) %>% 
    dplyr::summarise(variable.mean = mean(y, na.rm = TRUE)) 
colnames(mean.df)[2] <- paste0(deparse(substitute(y)), ".mean") 
print(mean.df) 
} 

> generateVarMean(df, a, b) 
# A tibble: 2 × 2 
     x b.mean 
    <fctr> <dbl> 
1  A 1.5 
2  B 3.5 
+0

감사 @YannisVassiliadis을. 이 과정에서'deparse'와'substitute'를 사용하는 법을 배웠습니다! –

2

(곧 출시 될 0.6.0는)

generateVarMean <- function(df, x, y) { 
    x <- enquo(x) 
    y <- enquo(y) 
    newName <- paste0(quo_name(y), ".mean") 
    df %>% 
     select(UQ(x), UQ(y)) %>% 
     group_by(UQ(x)) %>% 
     summarise(UQ(newName) := mean(UQ(y), na.rm = TRUE))    
} 

generateVarMean(df1, a, b) 
# A tibble: 2 × 2 
#  a b.mean 
# <fctr> <dbl> 
#1  A 1.5 
#2  B 3.5 

우리는 만들 수 quo_name와 문자열로 quosure 변환 enquoquosure로 입력 인수를 가져 'newName'문자열. 그런 다음 select/group_by/summarise 안에있는 quosure을 따옴표 (UQ 또는 !!)로 평가하십시오. 새 버전에서는 직접 열 이름을 할당하고 할당 연산자 (:=)를 사용합니다.

관련 문제