使用dplyr的enquo通过sparklyr访问Spark表列

时间:2017-08-11 13:23:09

标签: r dplyr lapply sparklyr nse

我希望能够在跳过Spark表格列的同时在lapply调用中使用dplyr的enquo

lapply(tbl_vars(sprkTbl),
       function(col_nme) {
           print(col_nme)
           # Enquoe column name
           quo_col_nme <- enquo(col_nme)
           print(quo_col_nme)

           sprkTbl %>%
               select(!!quo_col_nme) %>% 
               # do stuff
               collect -> dta_res
       }) -> l_res

但是,当我尝试运行此代码时,我一直收到错误:

  

(function (x, strict = TRUE)中的错误:参数已经存在   已被评估

我已将错误隔离到enquo

>> lapply(tbl_vars(sprkTbl),
...        function(col_nme) {
...            print(col_nme)
...            # Enquoe column name
...            quo_col_nme <- enquo(col_nme)
...            # print(quo_col_nme)
...            
...            # sprkTbl%>%
...            #     select(!!quo_col_nme) %>% 
...            #     # do stuff
...            #     collect -> dta_res
...        }) -> l_res
[1] "first_column_in_spark"

(然后是相同的错误)

  

(function (x, strict = TRUE)中的错误:参数有   已被评估

我想了解为什么enquo无法像这样使用。 tbl_vars返回一个普通的字符向量,col_name不应该是一个字符串吗?我将设想语法以与以下相同的方式工作:

mtcars %>% select(!!enquote("am")) %>% head(2)
              am
Mazda RX4      1
Mazda RX4 Wag  1

但是,当从lapply内部调用时,显然不是这种情况。

修改

将闪光方面放在一边,可以提供更好,更可重复的例子:

lapply(names(mtcars),function(x) {
    col_enq <- enquo(x)
    mtcars %>% 
        select(!!col_enq) %>% 
        head(2)
})

产生相同的错误。

期望的结果

旧的基于 _ 的语法

lapply(names(mtcars),function(x) {
    # col_enq <- enquo(x)
    mtcars %>% 
        select_(x) %>% 
        head(2)
})

总之,我希望通过跳转到Spark表列来实现相同的功能,我不希望使用已弃用的select_

1 个答案:

答案 0 :(得分:1)

我是否正确理解您的问题,您对此结果感兴趣?或者您是否必须使用enquo而不是quo

library(dplyr)

lapply(names(mtcars),function(x) {
  col_enq <- quo(x)
  mtcars %>% 
    select(!!col_enq) %>% 
    head(2)
})
#> [[1]]
#>               mpg
#> Mazda RX4      21
#> Mazda RX4 Wag  21
#> 
#> [[2]]
#>               cyl
#> Mazda RX4       6
#> Mazda RX4 Wag   6
#> 
#> [[3]]
#>               disp
#> Mazda RX4      160
#> Mazda RX4 Wag  160
#> 
#> [[4]]
#>                hp
#> Mazda RX4     110
#> Mazda RX4 Wag 110
#> 
#> [[5]]
#>               drat
#> Mazda RX4      3.9
#> Mazda RX4 Wag  3.9
#> 
#> [[6]]
#>                  wt
#> Mazda RX4     2.620
#> Mazda RX4 Wag 2.875
#> 
#> [[7]]
#>                qsec
#> Mazda RX4     16.46
#> Mazda RX4 Wag 17.02
#> 
#> [[8]]
#>               vs
#> Mazda RX4      0
#> Mazda RX4 Wag  0
#> 
#> [[9]]
#>               am
#> Mazda RX4      1
#> Mazda RX4 Wag  1
#> 
#> [[10]]
#>               gear
#> Mazda RX4        4
#> Mazda RX4 Wag    4
#> 
#> [[11]]
#>               carb
#> Mazda RX4        4
#> Mazda RX4 Wag    4