我的猜测是这是由 dbplyr 的翻译方式引起的。它捕获并翻译每个 dplyr 命令的内容。因此,当您调用 summarise(across(everything(), list(mean, median))) 时,across(everything(), list(mean, median)) 会被传递给翻译器(无法按预期翻译)。
如果将across(everything(), list(mean, median)) 转换为每个变量的一行代码(例如var1 = mean(var1) ... var100 = median(var100)),则dbplyr 可以正确翻译这些多行代码。
也许更高版本的 dbplyr 可以在翻译之前将across(.) 转换为多行代码,正如@user63230 的评论所暗示的那样。
我们应该可以按照this答案或this答案中的方法手动执行此操作。类似于以下内容:
library(rlang)
c_names = colnames(remote_table)
patterns <- parse_exprs(paste(c_names, ' = mean(', c_names, ')'))
remote_table %>%
summarise(!!!patterns)
我们的想法是构建我们想要执行的命令的文本字符串,使用 parse_exprs 将它们转换为表达式,最后在 dplyr 调用中取消它们(!!! 似乎在 dbplyr 翻译之前进行评估)。