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)
})
同じエラーが発生します。
望ましい結果
古い_
ベースの構文が機能します
lapply(names(mtcars),function(x) {
# col_enq <- enquo(x)
mtcars %>%
select_(x) %>%
head(2)
})
一言で言えば、Spark テーブルの列にジャンプして同じ機能を実現したいので、 deprecated を使用したくありませんselect_
。