2016-02-28 156 views
1

建議在R包函數內調用函數時最好使用標準評估(see here),特別是避免utils::globalVariablesR包函數中的標準評估與非標準評估

如果我使用標準的評價與dplyr包,這將是「翻譯」成下面的代碼片段評價標準 - 尤其是對table -command?

grpdep是數據幀mydf的數值,而x是一個因子。

非標準評價:

pvals <- mydf %>% 
    dplyr::group_by(grp) %>% 
    dplyr::summarise(N = n(), 
    p = suppressWarnings(stats::chisq.test(table(x, dep))$p.value)) 

標準評價?

pvals <- mydf %>% 
    dplyr::group_by_("grp") %>% 
    dplyr::summarise_(N = n(), 
    p = suppressWarnings(stats::chisq.test(table("x", "dep"))$p.value)) 

而且,函數調用ggplot怎麼樣? ggplot是否具有標準評估支持?

編輯:增加了可重現的例子。

library(dplyr) 
data(ChickWeight) 
ChickWeight %>% 
    dplyr::group_by(Diet) %>% 
    dplyr::summarise(N = n(), 
    p = suppressWarnings(stats::chisq.test(table(weight, Time))$p.value)) 
+0

爲什麼不使用其中一個內置數據集以便它可以很容易重現? –

回答

0

如果您wan't使用dplyr我只想忽略編碼工具編碼工具()的假陽性:: checkUsagePackage。

+0

我也想知道,如果使用標準評估是更好的習慣,何時使用它?我有一些函數調用ggplot,我不能使用標準評估,並必須使用'globalVariables'來使我的包通過R CMD檢查。 – Daniel

+0

我只是使用R CMD檢查,如果你得到了積極的態度,你可以用http://www.inside-r.org/r-doc/utils/globalvarariables修復它,但我從來沒有遇到過這個問題。 – Florian

+0

關於標準與非標準,'x < - data.frame(a = 1:4,b = 5:8)'如果你想按兩列排序,你可以做'order(x $ a,x $ b)'或'with(x,order(a,b))'它可以同時工作,在很多情況下,但是,如果R CMD檢查是否所有變量都已定義,那麼migth不會檢查您是否在with中並且會給出誤報。 – Florian