나중에 사용하기 위해 dplyr 함수를 "저장"할 수 있습니까?

Aug 21 2020

이것은 호기심이 많은 질문입니다. 실제로이 작업을 수행 할 필요는 없지만 R의 유사 인용 및 깔끔한 평가 기능을 이해하려고 노력 중이며 이것이 도움이 될 것이라고 생각합니다.

starwars데이터 세트 에서 드로이드를 필터링한다고 가정합니다 .

library(dplyr)
library(rlang)

starwars %>% filter(species == "Droid")

filter통화 저장과 같은 작업을 수행 하고 나중에 다시 사용할 수 있습니까? 필터링 할 조건이 많을 경우 간결성을 위해 유용합니다. 같은 것

filter_droid = some_quote(filter(species == "Droid"))

starwars %>% some_unquote(filter_droid)

물론 다음과 같이 할 수 있습니다.

cond = expr(species == "Droid")

starwars %>% filter(eval(cond))

그러나이 아이디어는 여러 인수가있을 때 항상 작동하는 것은 아닙니다. 예를 들어를 사용하여 두 개의 새 열을 만들 때 다음과 mutate같이 작동하지 않습니다.

new_cols = exprs(col1 = 1, col2 = 2)

starwars %>% mutate(eval(new_cols))

내가 스크립트를 작성한다면, 나는 해결하는 것 바로 수행하는 함수를 정의하는 것입니다 mutate내가 그 일을 무시하려는 호기심을 위해서 --- 나를 위해 전화를. 나중에 코드에서 대화식으로 사용하기 위해 mutate/ filter호출 또는 적어도 그 안에있는 인수 를 "저장"할 수 있습니까?

답변

4 MrFlick Aug 21 2020 at 12:38

함수로 만들 수 있습니다.

filt <- . %>% filter(species == "Droid")
starwars %>% filt

또는를 eval()사용하는 대신 !!단일 매개 변수를 삽입 할 때 연산자를 사용하십시오.

cond = expr(species == "Droid")
starwars %>% filter(!!cond)

또는 !!!여러 주입에 사용하십시오 .

new_cols = exprs(col1 = 1, col2 = 2)
starwars %>% mutate(!!!new_cols)