我想成为 ebale在跳过 Spark 表列时enquo
在调用中使用 dplyr。lapply
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 内部调用时,显然情况并非如此。
编辑
将 sparklyr 方面放在一边,可以提供一个更好、更可重复的示例:
lapply(names(mtcars),function(x) {
col_enq <- enquo(x)
mtcars %>%
select(!!col_enq) %>%
head(2)
})
产生相同的错误。
期望的结果
基于 old_
的语法有效
lapply(names(mtcars),function(x) {
# col_enq <- enquo(x)
mtcars %>%
select_(x) %>%
head(2)
})
总之,我想通过跳转到 Spark 表列来实现相同的功能,并且我不想使用 deprecated select_
。