2017-07-08 68 views
2

我正在嘗試在自定義函數中運行t檢驗,並且正在運行到一個靜態錯誤應用程序(我相信)。任何幫助將不勝感激。在自定義函數中使用公式調用公式

library(tidyverse) 

tp_pull <- function(mydata, dv, iv){ 
    dv <- enquo(dv) 
    iv <- enquo(iv) 
    t.test(!!dv ~ !!iv, mydata) 
} 

tp_pull(mydata = mtcars, dv = mpg, iv = vs) 

我的錯誤消息讀取:

numerical expression has 2 elements: only the first usedNAs introduced by 
coercion 
Show Traceback 
Error in quo_name(dv):~!(!iv) : NA/NaN argument 

對於上下文此t-檢驗將是一個較大的自定義功能的一部分。

+3

替換參數通常使用'substitute'完成。例如'tp_pull < - 函數(mydata,dv,iv)t.test(公式(替代(dv〜iv)),mydata)' –

+0

@ G.Grothendieck您的重寫比我的要好,所以我更新了我的答案。希望沒關係。 – MrFlick

回答

4

夸克是tidyeval特有的,並且不是由基本R語言所設想的。現在他們只能使用dplyr。這些將不太可能用於基本功能,如t.test

如果你想與基礎R要做到這一點,你可以使用的

tp_pull <- function(mydata, dv, iv){ 
    t.test(formula(substitute(dv ~ iv)), mydata) 
} 

tp_pull(mydata = mtcars, dv = mpg, iv = vs) 

的替補G.格羅騰迪克的建議捕獲從傳遞到調用的承諾未evaulated符號的名稱,並允許您重新 - 將它們組裝成一個新的表達式。 formula()調用有助於將substitute()返回的未執行表達式轉換爲適當的R公式對象。

+0

非常感謝你的迴應。 – Joe