gpt4 book ai didi

r - 如何计算 R quosure 中变量的数量?

转载 作者:行者123 更新时间:2023-12-05 00:12:04 24 4
gpt4 key购买 nike

假设我有一个函数,该函数使用非标准评估 (NSE) 接收数据帧和来自该数据帧的不同数量的变量。有没有比选择()这些变量并计算列数更快/更直接的方法来计算提供的变量的数量?

# Works but seems non-ideal
nvar <- function(df, vars) {
vars_en <- rlang::enquo(vars)
df_sub <- dplyr::select(df, !!vars_en)
ncol(df_sub)
}
nvar(mtcars, mpg:hp)
#> 4

最佳答案

非常值得怀疑(我意识到这可能会收到反对票) - 我认为最明智的选择是像这样简单地从 data.frame 的列名中进行选择 - 使用 tidyselect::vars_select

nvar1 <- function(df, vars) {
vars_en <- rlang::enquo(vars)
ans <- vars_select(names(df), !! vars_en)
length(ans)
}

但即使这样也比 select(df) %>% ncol
library(microbenchmark)
library(nycflights13)
library(tidyselect)

nvar <- function(df, vars) {
vars_en <- rlang::enquo(vars)
df_sub <- dplyr::select(df, !!vars_en)
ncol(df_sub)
}

identical(nvar(nycflights13::flights, day:sched_arr_time), nvar1(nycflights13::flights, day:sched_arr_time))
# TRUE

microbenchmark(nvar(nycflights13::flights, day:sched_arr_time), nvar1(nycflights13::flights, day:sched_arr_time), unit='relative', times=100L)

# Unit: relative
# expr min lq mean median uq max neval
# nvar(nycflights13::flights, day:sched_arr_time) 1.000000 1.000000 1.00000 1.000000 1.000000 1.0000000 100
# nvar1(nycflights13::flights, day:sched_arr_time) 1.685793 1.680676 1.60114 1.688626 1.660196 0.9878235 100

关于r - 如何计算 R quosure 中变量的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51801259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com