2016-11-07 9 views
1

Я озадачен поведением функции uq(). Поведение не то же самое, когда я использую uq() или lazyeval::uq().Как использовать функцию 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_v1(data = table_fruits, var = ~ price) 
[1] 5 6 4 
> toy_function_v2(data = table_fruits, var = ~ price) 
price 

ли какое-то объяснение:

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

Удивительно, но выход v1 и v2 не то же самое?

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

Вот мой session_info:

> 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/[email protected]) 
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) 

ответ