rlang

rlang:在 tidyr 联合函数中引用 var

这是我的数据: df <- tibble::tribble( ~A, ~B, ~C, "a", "b", 2L, "a", "b", 4L, "c", "d", 3L, "c", "d", 5L ) var <- "AB" 我想得到这个输出: df1 <- df %>% unite("AB", c("A", "B")) %>% ... »

如何延迟 R 中函数参数的评估?

我想延迟 R 中函数参数的评估。示例: my_func <- function(FUN){print(FUN); print(FUN)} my_func(runif(1)) #> [1] 0.2833882 #> [1] 0.2833882 由reprex package (v0.2.1) 于 2019 年 7 月 21 日创建 这是因为 runif(1) 只被评估一次并... »

在捕获环境时在操作后转发点中的表达式

我有一个函数fun_1,它在其... 参数上使用substitute(),另一个函数fun_2 带有签名fun_2(...),它实现了模式do.call(fun_1, dots)。我希望fun_1() 在fun_2() 中看到... 传递给fun_2()。这是我正在尝试做的一个说明。 fun_1 <- function(...) { substitute(list(...))[-1] ... »

创建 dplyr 语句以稍后在 R 中进行评估

我想创建一个名为eval_data 的函数供用户输入 数据帧列表 要应用于数据帧的dplyr 函数列表 要从每个数据框中选择的列列表: 这看起来像: eval_data <- function(data, dplyr_logic, select_vector) { data %>% # this doesn't work eval(dplyr_logic) ... »

在 dplyr 0.7+ 函数中重命名

我在使用 dplyr 重命名函数中的列时遇到困难。我已经找到了关于非标准评估和 enquo 使用的有用帖子(例如,http://dplyr.tidyverse.org/articles/programming.html 和 Changing names of resulting variables in custom dplyr function)。最终目标是使用该函数汇总每个组,然后将列重命名为... »

R rlang:处理 NULL 参数?

我想对dplyr 函数(比如count())使用具有默认NULL 值的可选参数。如果我对!!enquo() 使用标准过程,我会收到错误消息:error: Column NULL is unknown。 有趣的是,rlang/tidyverse 允许缺失值,所以一个技巧可能是在 NULL 时转换为缺失,但看起来很脏(尤其是如果我想在之后使用 facet_grid,它接受 NULL 但不缺失)。 ... »

在 tidyeval (quo_name) 的自制函数中使用管道

我有两个函数:date_diff 和 group_stat。所以我已经阅读了这篇文章tidyverse 并尝试创建简单的函数并使用管道。 第一个函数创建一个difftime 并将它们命名为timex_minus_timey,但是当我将此结果传递到下一个函数时,我必须查看名称以便填写summary_var。有一个更好的方法吗? library(tidyverse) # set.seed(4... »

R如何检查是否在某个包的特定函数中调用了自定义函数

我想创建一个函数myfun,它只能在另一个函数中使用,在我的例子中是dplyrs mutate 或summarise。我更不想依赖dplyrs 内部结构(例如mask$...)。 我想出了一个快速而肮脏的解决方法:一个函数search_calling_fn 检查调用堆栈中的所有函数名称并在调用函数中查找特定模式。 search_calling_fn <- function(pattern) ... »

R 包更新

我在访问 R 中的更新版本的包时遇到了一些问题。 在运行数据分析工作流时,我收到以下错误消息: 库(dplyr) 错误:loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) 中的“dplyr”的包或命名空间加载失败: namespace ‘rlang’ 0.2.1 已经加载,但是 >= 0.2.2 是... »

为什么是 plotly() 和 enquo + !!冲突?

我正在编写一个将 plot_ly 用于饼图的函数。参数标签中的波浪号 (~) = ~ 与取消引用运算符 !! 冲突。这个问题有解决办法吗? pieplotr <- function (df, Property){ Property_Name <- enquo(Property) Pie <- plot_ly(df, labels = ~!!Pro... »

从索引中获取列表元素名称

我正在尝试使用以下 glue 代码来创建信息丰富的错误消息 library(rlang) library(glue) my_function <- function(x) { UseMethod("my_function", x) } my_function.default <- function(x) { abort(glue( "Can't calculate... »

评估作为参数传递的列表中的表达式

假设我想从涉及另一个表中的列的表达式创建一个新表。这很简单: library(rlang) library(purrr) from_exprs = function(tb, ...) { quos(...) %>% map_dfc(~ eval_tidy(., tb)) } 例子: > tb = data.frame(year = 2001:2005, mon... »

将表达式作为参数传入 r

我很难理解将参数从函数传递到 R 函数的问题。我通常可以通过 !!rlang::sym(argument) 让它正常工作。 我想要做的是创建一个函数,让我可以自定义数据集中的哪一列,我想对给定的比较计算计数。 例如,我可能想要计算等于 9999 或大于 5 或​​小于或等于 5 的值的数量。此列也可以更改。 custom_count=function(dataset, expr){ ... »

用 Sys.setenv 中的 rlang tidyeval 替换 `=` 运算符中的 LHS

问题描述 Sys.setenv 没有简单的接口来提供 LHS(环境变量名称)作为参数。如果想要动态定义应该设置什么环境变量,则需要元编程方法。 基础 R 方式 这个小辅助函数按预期工作。 setenv = function(var, value, quiet=TRUE) { stopifnot(is.character(var), !is.na(var), length(value)=... »

如何解析符号的值而不是符号的名称

第一季度: sorting = function (table, column) { # mtcars[order(mpg),] return(table[order(column),]) } sorting(mtcars, "mpg") 等价于mtcars[order("mpg"),] 但不等于我想要得到的结果mtcars[order(mpg),],如何将其从字符串转换为列名。 ... »

如何使用 quosures 将命名向量传递给 dplyr::select?

使用旧的 select_() 函数,我可以将命名向量传递给 select 并立即更改位置和列名: my_data <- data_frame(foo = 0:10, bar = 10:20, meh = 20:30) my_newnames <- c("newbar" = "bar", "newfoo" = "foo") move_stuff <- function(... »

作为列表提供的参数未得到正确评估

我正在开发一个自定义函数,其目标是为分组变量的所有组合运行一个函数 (..f),grouping.var 提供给定的数据帧,然后使用 broom 包将这些结果整理到数据帧中。 这是我编写的自定义函数。请注意,... 提供给 ..f,而 broom::tidy 方法的其他参数通过 tidy.args 列表提供。 # setup set.seed(123) library(tidyverse... »

使用带有 `if` 子句的卷曲 (`{{ }}`) 运算符时出错

我很难理解如何使用{{ }} 运算符在自定义函数中传递裸变量名。将运算符与 if 子句结合使用时出现错误。 此功能有效: f <- function(.data, .vars=NULL){ require(dplyr) df = select(.data, {{ .vars }}) print(head(df)) } f(iris, c(Species, Sepal.Lengt... »