我想使用以下參數化以下計算dplyr,該計算查找哪些值Sepal.Length與多個值相關聯Sepal.Width:library(dplyr)iris %>% group_by(Sepal.Length) %>% summarise(n.uniq=n_distinct(Sepal.Width)) %>% filter(n.uniq > 1)通常我會這樣寫:not.uniq.per.group <- function(data, group.var, uniq.var) { iris %>% group_by(group.var) %>% summarise(n.uniq=n_distinct(uniq.var)) %>% filter(n.uniq > 1)}但是,由于dplyr使用非標準評估,因此此方法會引發錯誤。該函數應如何編寫?
3 回答

蝴蝶刀刀
TA貢獻1801條經驗 獲得超8個贊
像舊的dplyr版本(最高0.5)一樣,新的dplyr具有標準評估(SE)和非標準評估(NSE)的功能。但是它們的表達方式與以前不同。
如果您需要NSE函數,則可以傳遞裸表達式,并使用enquo將其捕獲為quosure。如果要使用SE函數,只需直接傳遞量(或符號),然后在dplyr調用中取消引用。這是該問題的SE解決方案:
library(tidyverse)
library(rlang)
f1 <- function(df, grp.var, uniq.var) {
df %>%
group_by(!!grp.var) %>%
summarise(n_uniq = n_distinct(!!uniq.var)) %>%
filter(n_uniq > 1)
}
a <- f1(iris, quo(Sepal.Length), quo(Sepal.Width))
b <- f1(iris, sym("Sepal.Length"), sym("Sepal.Width"))
identical(a, b)
#> [1] TRUE
注意SE版本如何使您可以使用字符串參數-只需先使用將它們轉換為符號即可sym()。有關更多信息,請參見使用dplyr小插圖進行編程。
- 3 回答
- 0 關注
- 713 瀏覽
添加回答
舉報
0/150
提交
取消