尝试创建一个函数来计算某个变量的平均值,该变量的名称在函数中提供。例如:
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/