亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將參數傳遞給dplyr函數

將參數傳遞給dplyr函數

繁花如伊 2019-10-09 15:46:23
我想使用以下參數化以下計算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小插圖進行編程。


查看完整回答
反對 回復 2019-10-09
  • 3 回答
  • 0 關注
  • 713 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號