2017-10-03 1 views
0

Ich habe eine harte Zeit replizieren die Beispiele in [dplyr.tidyverse.org] http://dplyr.tidyverse.org/articles/programming.html.
Hier ist mein Code und Sitzung Informationen. Ich habe heute viel zu viel Zeit damit verbracht, falsche Leads zu verfolgen und Pakete neu zu installieren. Jede Hilfe wird sehr geschätzt.replizieren dplyr zitieren und enquote Beispiele

library(dplyr) 

df <- tibble( 
g1 = c(1, 1, 2, 2, 2), 
g2 = c(1, 2, 1, 2, 1), 
a = sample(5), 
b = sample(5) 
) 

my_summarise <- function(df, group_by) { 
group_by <- enquo(group_by) 
print(group_by) 

df %>% 
    group_by_(!!group_by) %>% 
    summarise(a = mean(a)) 
} 

my_summarise(df, g1) 

Und hier ist der Fehler, den ich bekommen:

Error in !group_by : invalid argument type 
Called from: compat_lazy_dots(.dots, caller_env(), ...) 

Hier wird die Session-Info ist:

R version 3.4.0 (2017-04-21) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 


Matrix products: default 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C       

[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] dplyr_0.7.4.9000  lubridate_1.5.6  pander_0.6.0   
RevoUtilsMath_10.0.0 

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.11  digest_0.6.9  withr_1.0.2  assertthat_0.2.0 
R6_2.2.0   magrittr_1.5  
[7] git2r_0.18.0  httr_1.2.1  stringi_1.1.5 rlang_0.1.2.9000 
curl_2.6   bindrcpp_0.2  
[13] devtools_1.12.0 RevoUtils_10.0.4 tools_3.4.0  stringr_1.2.0  
glue_1.1.1  compiler_3.4.0  
[19] pkgconfig_2.0.1 memoise_1.1.0 bindr_0.1  knitr_1.16  
tibble_1.3.3  

Antwort

2

Die folgenden Werke für mich. group_by_ ist veraltet, verwenden Sie bitte group_by. Übrigens verwenden Sie group_by als Argumentname für Ihre Funktion. Ich denke das ist eine schlechte Idee, da group_by eine definierte Funktion in dplyr ist. Sie sollten diesen Argumentnamen möglicherweise ändern, um Verwechslungen zu vermeiden.

library(dplyr) 

df <- tibble( 
    g1 = c(1, 1, 2, 2, 2), 
    g2 = c(1, 2, 1, 2, 1), 
    a = sample(5), 
    b = sample(5) 
) 

my_summarise <- function(df, group_by) { 
    group_by <- enquo(group_by) 
    print(group_by) 

    df %>% 
    group_by(!!group_by) %>% 
    summarise(a = mean(a)) 
} 

my_summarise(df, g1) 
<quosure: global> 
~g1 
# A tibble: 2 x 2 
    g1  a 
    <dbl> <dbl> 
1  1  3 
2  2  3 
0

Ich hatte genau das gleiche Problem, bis zu dem Punkt, wo die oben gepostet Code JOC die invalid argument type gab. Es schien nur in der Sitzung aufzutreten, in der ich dplyr aktualisiert hatte. Sobald ich eine neue Sitzung gestartet hatte, funktionierte der Code, den ycw gepostet hatte, gut.