- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个函数,该函数使用非标准评估 (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/
有没有办法从字符串中解析和评估 quosure。我想获得与以下示例相同的输出: library(rlang) a ## ~10 + 2 * b 但从 t ~10 + 2 * b 关于r - 从字符
我正在尝试使用 quosures 在自定义函数中传递变量名称以进行数据处理和在公式中使用,但是我在公式中使用 quosures 是不正确的。有没有更好的方法在公式中取消引用参数? library(dp
当我做: > quo(DLX6-AS1) 输出是: expr: ^DLX6 - AS1 env: global 在破折号周围插入空格。 当我尝试将其转换为字符串时,我得到: quo(DLX6-AS
假设我有一个函数,该函数使用非标准评估 (NSE) 接收数据帧和来自该数据帧的不同数量的变量。有没有比选择()这些变量并计算列数更快/更直接的方法来计算提供的变量的数量? # Works but se
问题 我将如何使用 quosures 执行以下操作? library(tidyverse) lkp % select(one_of(lkpOK)) } stringSelect(mtcars) str
我正在尝试编写一个自定义函数,该函数将使用 quosures 作为 left_join() 函数的“by = c()”部分中的参数来连接两个数据集。 这是我目前对该函数的尝试,它在“by = c(!!
如何使用户定义的函数与管道和 group_by 一起很好地工作?这是一个简单的函数: library(tidyverse) fun_head % select(!!column) %>% head
是否可以使用 purrr 返回 quosures 列表? foo [[1]] #> #> expr: ^1L + 2 #> env: 0000000015213C98 #> #> [[2
在 dplyr v0.7.0 ,引入了.data代词,它允许我们用字符串引用变量。我只是好奇这种方法是否比“quosure”方法更受欢迎。例如,以下是使用 .data 代词的方法: varname %
by dplyr::left_join 中的参数(和 friend )需要一个字符串列表。我的代码已经将感兴趣的变量定义为定语列表,因此我希望通过将定语列表转换为字符串列表来避免再次写下该列表。 我去
我想将一堆列传递给 pmap()里面 mutate() .稍后,我想选择那些相同的列。 目前,我将列名列表传递给 pmap()作为一个quosure,效果很好,虽然我不知道这是否是“正确”的方法。但我
我试图将 data.frame 中的一组变量/值传递给 map函数,但不知道如何处理 .x指的是一个需要评估的quosure:mutate(df2 = map2(variable, value, ~f
我正在尝试编写一个函数,该函数使用对象的名称(如未评估的符号)进行下游应用程序。下面是一个体现这种意义的例子: return_obj_name % return_obj_name()) [[1]] [
我正在尝试编写一个函数,该函数使用对象的名称(如未评估的符号)进行下游应用程序。下面是一个体现这种意义的例子: return_obj_name % return_obj_name()) [[1]] [
这是来自 how to combine ggplot and dplyr into a function? 的跟进. 问题是,如何编写一个使用 dplyr 的函数。 , ggplot并可能指定来自 q
我有一个参与者内部设计的结果,其中包含每个试验的时间序列信息。我想重新调整一些排列测试的条件。我需要编写一个函数,这就是我遇到问题的地方。 我的数据看起来像这样: library(tidyverse)
在 rlang 中有一个非常微妙(并且非常令人困惑)的区别...... quosures 不是 quosure 对象!换句话说: quo()和 enquo()退订 quos()和 enquos()退订
我正在构建一个函数,我将根据字符串操作数据框。在该函数中,我将根据字符串构建一个列名称,并使用它来操作数据框,如下所示: library(dplyr) orig_df % filter(!!
我将使用以下示例来解释我的问题。但问题不仅与这个具体示例有关,而且更普遍地与 R 中的元编程有关。 我有两个特定的函数来作图 具体功能1 draw_hists <- function(dts, ind
代码: GeoSeparate % separate(GeoColumn, into = c("Section1", "Section2"), sep = "\\(")%>% sepa
我是一名优秀的程序员,十分优秀!