2016-11-07 37 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_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()在新包中使用該函數是一種很好的做法。那麼在這種情況下最好的解決方案是什麼?

這裏是我的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) 

回答

相關問題