使用 purrr 和 dplyr: rlang::sym 是最好的方法

2023-12-09

我想编写使用 dplyr 动词的函数,这意味着我必须涉入rlang.

提供一个具体的例子,假设我想使用purrr::map_df()迭代 a 中的变量dplyr::group_by(). The 使用 dplyr 编程小插图走过写一个my_summarise()功能;使用的方法rlang::enquo()在分组变量上,然后取消引用!!。 这种方法可以创建一个类似 dplyr 的新函数,该函数采用不带引号的变量名(my_summarise(df, g1)在小插图中)。

相反,我想 purrr 以字符串形式提供变量名称。是rlang::sym()正确的方法是这样做吗?好像不是,因为sym()dplyr 编程小插图中没有提到,rlang 中也几乎没有提到整洁的评价文章。有没有更好的办法?

library(tidyverse)
my_summarise <- function(df, group_var) {
  group_var <- rlang::sym(group_var)

  df %>%
    group_by(!!group_var) %>%
    summarise(mpg = mean(mpg))
}

# This works. Is that a good thing?
purrr::map_df(c("cyl", "am"), my_summarise, df = mtcars)

# A tibble: 5 x 3
    cyl   mpg    am
  <dbl> <dbl> <dbl>
1  4.00  26.7 NA   
2  6.00  19.7 NA   
3  8.00  15.1 NA   
4 NA     17.1  0   
5 NA     24.4  1.00

作为后续,为什么简单地取消引用(不首先应用enquo or sym)有时工作?在下面的例子中,为什么select()按预期工作但是group_by()不是吗?

x <- "cyl"
select(mtcars, !!x)
group_by(mtcars, !!x)

更新:答案与取消引用无关。就是那个select更灵活,可以处理字符串,而group_by can't.

其他参考:这个博客文章作者:埃德温·托恩。


简短的回答:是的。

如果你想map在列上,sym是一个很好的方法。莱昂内尔·亨利展示sym in the 草稿插图.

如果您想要传递列名称,但不尝试迭代,Kirill Müllerprefers quo。在下面的示例中,它们具有相同的效果。

library(dplyr)

x <- rlang::quo(cyl)
y <- rlang::sym("cyl")
identical(group_by(mtcars, !!x), group_by(mtcars, !!y))  # TRUE
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 purrr 和 dplyr: rlang::sym 是最好的方法 的相关文章

随机推荐

  • 使用 Python 3.6 通过个人访问令牌向 VisualStudioOnline REST API 进行身份验证

    我正在尝试使用 python 3 6 来使用 VisualStudioOnline REST API 大量使用 python 2 x 的示例 python 脚本响应是通用的 html 登录页面 我已经使用 REST Console Chro
  • getline 无法正常工作?可能是什么原因? [复制]

    这个问题在这里已经有答案了 可能的重复 getline 不要求输入 我的程序中发生了一些独特的事情 以下是一些命令集 cout lt lt Enter the full name of student cin name getline ci
  • 如何更新嵌套字典中键的值?

    items id 1 language English name Sarah description Blah blah id 2 language English name Jessica description More blah d
  • Mercurial 通过变更集获取分支名称

    我已经尝试过 hg log rev branch changeset 但我得到的是这个分支中所有变更集的集合 我想要得到的是目标分支的名称 例如默认 而不是整个集合 有办法实现这个目标吗 这 不是转速设置的目的 你想做一些完全不同的事情 h
  • 如何修复 java.lang.InknownClassChangeError:使用 cxf 实现类

    我们在运行 openjdk 版本 1 8 0 201 的 RedHat linux 环境中的 tomcat 8 上进行 SOAP 客户端调用时遇到问题 而在 Windows 计算机 tomcat 8 Oracle java 8 上使用类似的
  • 在 django 表中设置 AUTOINCRMENT 值

    我在mysql中有如下表 CREATE TABLE portal asset id int 11 unsigned NOT NULL AUTO INCREMENT asset id int 11 NOT NULL ENGINE InnoDB
  • 编译器优化问题

    大部分功能都在
  • Python Git 模块经验? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 人们对 Python 的 Git 模块有什么体验 我知道 GitPython PyGit 和 Dulwich 如果您知道其他的 请随意提及 我正在编写一个程序 该程序必须与 Git 存储库
  • 持久矩形选择器

    我正在尝试开发一个处理天文数据的管道 在某些时候 我需要在图像上绘制一个矩形来选择一个区域 我正在使用 matplotlib widgets RectangleSelector 来做到这一点 对我来说使用起来非常方便 因为它非常容易使用 我
  • 无需 Android Studio 即可运行 AVD 模拟器

    有没有一种方法可以在不先启动 Android Studio 的情况下运行模拟器 也许来自命令行 我知道这个功能在旧版本中可用 但从那时起就消失了 但也许有人知道如何做到这一点 从控制台运行模拟器的方法 我假设您之前使用 Android St
  • 使用“gsub”替换点

    我正在尝试替换所有 在我的数据框的特定列中带有 每个单元格中还有其他字符 我想确保只更改 当我使用 gsub 时 我得到的输出似乎进行了更改 但是当我转到 View 时 实际上并未进行更改 我认为 gsub 应该实际更改数据框中的值 是我使
  • Android Google Mapview Activity 未在 Android Studio 中打开

    我是 Android 新手 正在尝试在 Android 手机上显示 Google 地图 我创建了适用于任何 Android 应用程序的 API 密钥 我没有为我的应用程序提供任何特定的 SHA 我想这应该不重要 使用 Google Andr
  • find 与 find_by 与 where

    我是 Rails 新手 据我所知 查找记录的方法有很多种 find by
  • 如何使用 python pandas 的 read_html 读取具有多个 tbodies 的 html 表?

    这是我的html import pandas as pd html table table thead tr th Col1 th th Col2 th tr thead tbody tr td 1a td td 2a td tr tbod
  • 如何将特定文件从一个 git 存储库复制到另一个 git 存储库,并保留历史记录

    我有一个旧的私人存储库 其中包含我想要放入 GitHub 的文件 但是我只想包含某些文件 或者可能只包含具有特定文件扩展名的文件及其提交历史记录 但是我不想在提交历史记录中包含任何排除的文件 我想提供一个我想要复制的此类文件的列表是理想的
  • 需要几个月之间完整的高图表条形图

    我已经创建了高图表来完全满足我的要求 如附图所示 并且我在小提琴中尝试了下面的代码 fiddle中的示例代码如下 https jsfiddle net vsLr07ak 下面是我的代码 Highcharts chart container
  • 在没有证书的java SSL over https中[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 是否可以使用 sslHttpURLConnection在Java中不使用证书 我想使用随机数或对称密钥 虽然SSL TLS 并不严格要求证书 HTTPS 需要证书 因为RFC 2
  • 是否可以用 CSS 创建这个不规则四边形?

    我已经尝试过perspective解决方案在这里如何分别变换形状的每一面 但可能由于形状不规则而无法使其工作 只有顶部和右侧的柱子是倾斜的 垂直的和底部的柱子是直的 我怎样才能用 CSS 做到这一点 使用 CSS 边框 您可以创建三角形和梯
  • 找不到iPhone模拟器路径[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 目前我正在开发视频上传应用程序 我的问题是 当我尝试在聚光灯下搜索模拟器路径时 我也手动尝试过 我只得到了iPhoneSimulator platform文件 但在此文件中没有任何文件
  • 使用 purrr 和 dplyr: rlang::sym 是最好的方法

    我想编写使用 dplyr 动词的函数 这意味着我必须涉入rlang 提供一个具体的例子 假设我想使用purrr map df 迭代 a 中的变量dplyr group by The 使用 dplyr 编程小插图走过写一个my summari