변수 이름을 문자 값으로 동적으로 작성하므로 표준 data.frame 인덱싱을 사용하여 열 이름에 문자 값을 지정할 수 있습니다. 예를 들면 다음과 같습니다.
multipetal <- function(df, n) {
varname <- paste("petal", n , sep=".")
df[[varname]] <- with(df, Petal.Width * n)
df
}
이 mutate
함수를 사용하면 명명 된 매개 변수를 통해 새 열의 이름을 쉽게 지정할 수 있습니다. 그러나 명령을 입력 할 때 이름을 알고 있다고 가정합니다. 열 이름을 동적으로 지정하려면 명명 된 인수도 작성해야합니다.
dplyr 버전> = 0.7
최신 버전 dplyr
(0.7)은 :=
매개 변수 이름을 동적으로 할당 하는 데 사용하여이 작업을 수행 합니다. 함수를 다음과 같이 작성할 수 있습니다.
# --- dplyr version 0.7+---
multipetal <- function(df, n) {
varname <- paste("petal", n , sep=".")
mutate(df, !!varname := Petal.Width * n)
}
자세한 내용은 사용 가능한 설명서를 참조하십시오 vignette("programming", "dplyr")
.
dplyr (> = 0.3 및 <0.7)
약간 이전 버전 dplyr
(> = 0.3 <0.7)에서는 많은 기능에 대한 "표준 평가"대안을 사용하도록 권장했습니다. 자세한 내용은 비표준 평가 비 네트를 참조하십시오 ( vignette("nse")
).
따라서 여기에 대한 대답은 사용 mutate_()
하기보다는 사용 하는 것입니다 mutate()
.
# --- dplyr version 0.3-0.5---
multipetal <- function(df, n) {
varname <- paste("petal", n , sep=".")
varval <- lazyeval::interp(~Petal.Width * n, n=n)
mutate_(df, .dots= setNames(list(varval), varname))
}
dplyr <0.3
이것은 dplyr
질문이 처음 제기되었을 때 존재했던 이전 버전에서도 가능합니다 . 그것은의 신중한 사용을 필요로 quote
하고을 setName
:
# --- dplyr versions < 0.3 ---
multipetal <- function(df, n) {
varname <- paste("petal", n , sep=".")
pp <- c(quote(df), setNames(list(quote(Petal.Width * n)), varname))
do.call("mutate", pp)
}