R,如何在使用箭头 :open_dataset internally 的函数中将变量名称引用为字符串

标签 r get apache-arrow open-dataset

尝试创建一个函数来计算某个变量的平均值,该变量的名称在函数中提供。例如:

mean_of_var <- function(var){
  open_dataset('myfile') %>% summarise(meanB=mean(get(var)    ,na.rm = T),
                                 medianB=median(get(var),na.rm = T)) %>% collect %>% return
}
mean_of_var('myvar')

主要问题是arrow:open_dataset不支持get()函数。所以我收到错误消息:

Error: Error : Expression mean(get(var), na.rm = T) not supported in
   Arrow Call collect() first to pull data into R.

有没有办法编写这样的函数,同时保留“open_dataset('myfile')”函数的使用。

最佳答案

箭头中使用的dplyr动词依赖于“tidy evaluation”。因此,您需要在函数中“拥抱”变量名称:

library(arrow)
library(dplyr)

## create a parquet file to read with `open_dataset()`
pq_file <- tempfile(fileext = ".parquet")
dd <- tibble::tibble(
  col1 = rnorm(100),
  col2 = rnorm(100),
  col3 = rnorm(100)
)
write_parquet(dd, sink = pq_file)

mean_of_var <- function(var) {
  open_dataset(pq_file) %>%
    summarize(
      meanB = mean({{ var }}, na.rm = TRUE),
      medianB = median({{ var }}, na.rm = TRUE)
    ) %>%
    collect()      
}

使用该功能:

mean_of_var(col2)

关于R,如何在使用箭头 :open_dataset internally 的函数中将变量名称引用为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74189190/

相关文章:

pyarrow - 如何使用 pyarrow.read_csv 添加/更改列名称?

javascript - SQL 在浏览器中的 apache 箭头之上?

r - 如何通过URL将参数传递给 Shiny 的应用程序

R 对每行中的某些列求和

javascript - 使用 javascript 从文本文件中获取值

c++ - 在更现代的 cmake 中使用箭头 Parquet 的最佳方法是什么?

r - 从源代码安装包?

r - 如何在R data.table中按组进行子集设置时获取不同行数的切片

php - 如何在 PHP 中获取所有提交的表单值并自动将它们分配给变量?

javascript - IE8 中使用 javascript 打开新窗口时使用 GET 参数时出现的问题