내가 작성한 함수를 사용하여 R에서 새 열을 만들기 위해 열을 변경하고 있습니다.
내 함수 내에서 변경되는 열의 이름이 포함 된 메시지를 보내고 싶습니다.
mutate 호출 내에서 함수 내부에서 변경되는 열 이름에 어떻게 액세스 할 수 있습니까?
재현 가능한 예 :
data <- tribble(
~colB,
1,
2,
3
)
# Function that will be used in the mutate
add1 <- function(numeric_vector) {
return(1 +numeric_vector)
# I want to message the user the name of the column they are mutating
# This simply returns the entire vector
message("You mutated", numeric vector)
# This returns 'numeric_vector'
message("You mutated", quo_name(quo(numeric_vector)))
}
# Desired Output:
data %>%
mutate(colC = add1(colB))
You mutated colB
colB colC
<dbl> <dbl>
1 2
2 3
3 4
클래스 객체 substitute
를 반환하는 사용 name
. 계산이 실패 할 경우 실행되지 않도록 계산 후에 실행되도록 message
호출을에 래핑했습니다 . 그것은 중요하지 않습니다 경우 대체 단지와 함께 . 참고 자체가 어떤 패키지를 사용하지 않습니다.on.exit
on.exit(message(...))
message(...)
add1
library(dplyr)
add1 <- function(numeric_vector) {
on.exit(message("You mutated ", substitute(numeric_vector)))
1 + numeric_vector
}
BOD %>% mutate(Time = add1(Time))
기부:
You mutated Time
Time demand
1 2 8.3
2 3 10.3
3 4 19.0
4 5 16.0
5 6 15.6
6 8 19.8
rlang을 사용하려면 enexpr
해당 패키지에서 사용하십시오 . dplyr에서 사용할 수 있도록합니다. 클래스 객체를 enexpr
반환 name
합니다.
enexpr
유사 substitute
하지만 처리에 영향을 미치는 한 가지 차이점 substitute
은 약속이 강제되었는지 (즉, 평가되었는지 여부에 관계없이) 약속의 코드 부분을 추출 한다는 것입니다. 그러나 enexpr
강제 약속의 코드는 추출하지만 강제 약속의 가치는 추출합니다. 코드 부분을 원하기 때문에 계산에 사용 되기 전에enexpr(numeric_vector)
실행 되었는지 확인해야합니다 . 처음에 실행되는 새로운 변수 를 도입 하여 강제 인수가 없는지 확인합니다 . numeric_vector
arg_name
enexpr
library(dplyr)
add2 <- function(numeric_vector) {
arg_name <- enexpr(numeric_vector)
on.exit(message("You mutated ", arg_name))
1 + numeric_vector
}
BOD %>% mutate(Time = add2(Time))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다