如何在调用arrow::open_dataset的R函数中将变量名作为字符串引用?
解决方案:在arrow::open_dataset中传入字符串变量名计算统计量
问题核心是Arrow的表达式引擎不支持R原生的get()函数——get()是在R本地环境中查找变量,而Arrow需要在数据集层面识别变量引用。以下两种方法可以在保留open_dataset()的前提下实现需求:
方法1:用rlang的符号注入
通过rlang::sym()将字符串变量名转换为R符号,再用!!(bang-bang)注入到summarise表达式中,让Arrow能正确识别变量:
library(arrow) library(dplyr) library(rlang) mean_of_var <- function(var) { # 将字符串转成符号 var_symbol <- sym(var) open_dataset('myfile') %>% summarise( meanB = mean(!!var_symbol, na.rm = TRUE), medianB = median(!!var_symbol, na.rm = TRUE) ) %>% collect() } # 调用示例 mean_of_var('myvar')
方法2:用tidyselect的all_of()
借助tidyselect的all_of()函数直接传入字符串变量名,结合across()实现统计量计算,这种方法更贴合tidyverse风格:
library(arrow) library(dplyr) mean_of_var <- function(var) { open_dataset('myfile') %>% summarise( across(all_of(var), list(meanB = ~mean(., na.rm = TRUE), medianB = ~median(., na.rm = TRUE)), .names = "{.fn}") ) %>% collect() } # 调用示例 mean_of_var('myvar')
两种方法都不需要提前将数据集全量加载到内存,完全保留了open_dataset()处理大数据的优势。
内容的提问来源于stack exchange,提问作者LucasMation
相关产品推荐
相关产品推荐

