首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算R quosure中的变量数量?

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

Stack Overflow用户
提问于 2018-08-11 23:39:07
回答 1查看 179关注 0票数 4

假设我有一个函数,它使用非标准求值(NSE)接收一个数据帧和该数据帧中不同数量的变量。有没有一种更快/更直接的方法来计算提供的变量的数量,而不是select()这些变量并计算列数?

代码语言:javascript
复制
# 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
EN

回答 1

Stack Overflow用户

发布于 2018-08-12 00:31:32

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

代码语言:javascript
复制
nvar1 <- function(df, vars) {
  vars_en <- rlang::enquo(vars)
  ans <- vars_select(names(df), !! vars_en)
  length(ans)
}

但即使这样也比select(df) %>% ncol

代码语言:javascript
复制
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 
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51801259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档