问题标签 [quosure]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
382 浏览

r - 如何使用 quosure 在 dplyr 中将过滤器语句作为函数参数传递

使用中的dplyrR,我想将过滤器语句作为函数中的参数传递。我不知道如何将语句评估为代码而不是字符串。当我尝试下面的代码时,我收到一条错误消息。我假设我需要一个 quosure 什么的,但我没有完全掌握这个概念。

0 投票
5 回答
693 浏览

r - dplyr case_when 具有动态案例数

想要使用 dplyr 并将case_when一系列指标列折叠成一个列。挑战是我希望能够折叠未指定/动态数量的列。

考虑以下数据集,gear已拆分为一系列指标列。

我正在尝试编写一个相反的函数。

当我知道有多少情况下可以这样做:

但是,我希望该combine_indices函数能够处理任意数量的索引列(现在它正好适用于三个)。

根据?case_when文档!!!(但我不能让这个工作:

仅生成一个填充有 NA 的新列。

如果!!!patterns可行,那么获取列表colsvals生成patterns. 但是,我无法得到正确的说法。希望更熟悉quosures的人知道如何。

注意 - 这里的一些类似的问题是使用连接或其他功能解决的。但是,由于在使用 dbplyr 时它如何转换为 sql ,我只能使用它。case_when

0 投票
1 回答
101 浏览

r - 在 ggplot 函数中使用 quosure 注释

我制作了下面的散点图函数。

但是,我无法使方程式的注释部分起作用。如果我调用该函数,则会收到错误消息:

错误:Quosures 只能在 quasiquotation 上下文中不被引用。

坏的:

列表(!!myquosure)

好的:

dplyr::mutate(数据, !!myquosure)

但是,当我删除代码的注释部分时,它工作得很好。我必须对代码进行哪些更改才能使其正常工作?

0 投票
1 回答
81 浏览

r - 当列名有空格时,以编程方式从数据框中选择列

我有一个我想查询的数据框。请注意,该数据框的列可能会更改,并且列名具有 spcaes。我有一个要应用于数据框列的函数。我想我可以通过编程找出存在哪些列,然后使用该列列表将函数应用于存在的列。

当列名没有空格时,我能够弄清楚如何做到这一点:请参阅下面的代码

但是当列名有空格时,这种方法不起作用,下面是我使用的代码:

有没有办法在不更改名称的情况下选择名称中有空格的列?

0 投票
2 回答
98 浏览

r - R 用户定义函数中的整洁评估语法

我想定义一个通用函数

即使IQR为0,它也能够绘制扩展到最小/最大值的箱线图晶须。我试图通过向有罪数据添加微小的随机数(低于显着性水平)来避免IQR = 0来实现这一点。

但是,我一定错过了关于 quosure 的语法,因为运行这个函数

与数据集

给我以下错误

请问我的语法有什么问题?

非常感谢,

一种。

======== 更新 ==========

使用建议的更新功能

结果如下图

在此处输入图像描述

正如我在评论中所说,似乎处理tmp同一年所有行的输出是今年的第一个值yvar,这解释了情节。事实上,评论这个块给出了下图

在此处输入图像描述

0 投票
3 回答
61 浏览

r - 向假人解释 quosure

我正在尝试制作一个函数,当给定将变量传递给绘图时,它将产生一个绘图。该变量是从下拉列表中选择的 - 因此aes_string

我收到此错误:

0 投票
1 回答
68 浏览

r - 在 dplyr 的 left_join 中使用 as_label / as_name 而不是 quo_name 连接两个数据集

根据关于使用 quosure 作为 by 参数连接数据集的答案,建议使用:quo_name为了使用 quosures 连接表;我想使用as_name/ as_labelas得到相同quo_name的结果,目前处于质疑生命周期阶段

这些功能处于质疑生命周期阶段。

as_label()并且as_name()应该用来代替 quo_name()。 as_label()将任何 R 对象转换为字符串,但只能用于创建默认名称。标签化不是一个定义明确的操作,不应对标签做出任何假设。另一方面, as_name() 仅适用于(可能是quosured)符号,但它是一个定义明确且确定性的操作。

例子

错误

错误is_quosure(x)'col_ltr'找不到对象

期望的结果

0 投票
2 回答
41 浏览

r - 与现有列名冲突时强制 dplyr 评估传递的符号/quosure

问题

我想将列名的字符串转换dplyr::arrange为表单am <- "cyl"。目的是按列排序cyl

期望的结果

尝试

1)rlang::quo

amnot排序cyl

2)rang::ensym

amnot排序cyl

3)咖喱卷

未排序。


背景

在实际功能中,我按我正在创建的索引列对数据框进行排序。具有列名称的变量称为index_column。我想保护自己免受实际数据包含index_column. 我可以使用make.names和扫描唯一的列名来解决这个问题,但我对解决上述问题更感兴趣。

0 投票
1 回答
47 浏览

r - 如何将quosure分配给另一个对象?

我想更改某些参数的名称。

按照指南,我应该使用lifecycle::deprecate_warn旧名称,然后将其归属于新名称。

但是,在我的函数中,该参数通常与 quosures 一起使用,因此归因失败并出现错误:

reprex 包(v0.3.0)于 2021-01-28 创建

我盲目地尝试了各种东西,enquo但没有任何效果。

如何将旧名称归因于新名称?

0 投票
1 回答
44 浏览

r - R:在使用 dplyr 的函数中,我如何检查以确保在继续之前没有引用参数名称?

长话短说:我有一个函数可以让参数grouping.var = record_id起作用,但grouping.var = "record_id"会返回不正确的数据而没有错误。所以我希望我的函数检查传递给参数的名称是否不在引号中。

长话短说:我经常有数据,每个研究对象都会有多次访问,每次访问对应一行。一些在访问之间不会改变的数据(例如种族或性别)只出现在一行上。我的函数会将数据从我提供的变量复制到该主题的所有行。

如果我不小心引用了 grouping.var,它将返回错误的数据而不会出错。

如果我没有发现错误,这可能会给我带来很大的麻烦。所以我想添加一个检查来确定传递给该参数的名称是否格式正确。

我已经尝试过if(is.character(grouping.var)),if(is_quosure(grouping.var))if(is.object(grouping.var))语句,但如果 grouping.var 没有被引用(即格式正确),它将返回一个错误。如果名称在引号中,我需要一些可以停止该功能的东西,但如果它不在引号中,则允许它继续。

我承认,quosures 通常让我很困惑,所以我可以在这个问题上使用一些帮助。也欢迎其他主要问题的解决方案。