Как мне использовать функцию uq() внутри пакета?

Я озадачен поведением uq() функция. Поведение не то же самое, когда я использую uq() или же lazyeval::uq(),

Вот мой воспроизводимый пример:

Во-первых, я генерирую поддельный набор данных

library(tibble)
library(lazyeval)
fruits <- c("apple", "banana", "peanut")
price <- c(5,6,4)
table_fruits <- tibble(fruits, price)

Затем я пишу игрушечную функцию, toy_function_v1, используя только uq():

toy_function_v1 <- function(data, var) {
  lazyeval::f_eval(f = ~ uq(var), data = data)
}

и вторая функция, использующая lazyeval::uq():

toy_function_v2 <- function(data, var) {
  lazyeval::f_eval(f = ~ lazyeval::uq(var), data = data)
}

Удивительно, но выходные данные v1 и v2 не совпадают:

> toy_function_v1(data = table_fruits, var = ~ price)
[1] 5 6 4
> toy_function_v2(data = table_fruits, var = ~ price)
price

Есть ли объяснение?

Я знаю, что это хорошая практика, чтобы использовать синтаксис package::function() использовать функцию внутри нового пакета. Так что же является лучшим решением в этом случае?

Вот моя сессия_инфо:

> devtools::session_info()
Session info ----------------------------------------------------------------------------------------------------------------------------------------------------
 setting  value                       
 version  R version 3.3.1 (2016-06-21)
 system   x86_64, linux-gnu           
 ui       RStudio (1.0.35)            
 language (EN)                        
 collate  C                           
 tz       <NA>                        
 date     2016-11-07                  

Packages --------------------------------------------------------------------------------------------------------------------------------------------------------
 package    * version    date       source                          
 Rcpp         0.12.7     2016-09-05 CRAN (R 3.2.3)                  
 assertthat   0.1        2013-12-06 CRAN (R 3.2.2)                  
 devtools     1.12.0     2016-06-24 CRAN (R 3.2.3)                  
 digest       0.6.10     2016-08-02 CRAN (R 3.2.3)                  
 lazyeval   * 0.2.0.9000 2016-10-14 Github (hadley/lazyeval@c155c3d)
 memoise      1.0.0      2016-01-29 CRAN (R 3.2.3)                  
 tibble     * 1.2        2016-08-26 CRAN (R 3.2.3)                  
 withr        1.0.2      2016-06-20 CRAN (R 3.2.3) 

1 ответ

Решение

Это просто ошибка в функции uq(). Вопрос открыт на Github: https://github.com/hadley/lazyeval/issues/78.

Другие вопросы по тегам