使用 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 是最好的方法 的相关文章

  • 将循环转换为并行计算的函数

    我正在使用 R 编程语言 我遇到这个问题 我试图找出两个 shapefile 之间的成对交集 即第一个 shapefile 中的每个多边形与第二个 shapefile 中的所有多边形相交的百分比 我想我找到了解决这个问题的基本方法 Load
  • R中添加水印

    我在用magickR中的库 我想在一些图片上添加水印 I used image annotate功能如下 img lt image read C Users Maydin Desktop manzara png image annotate
  • decompose() 的周期太少[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 错误看起来像这样 decompose
  • 基于服务器中的条件逻辑呈现闪亮的用户输入

    我正在尝试设置一个闪亮的导航栏面板页面 其中用户控制我根据一组单选按钮中所做的初始选择来显示更改 我直接在 ui 中渲染单选按钮 然后在 Server r 中的 观察到的 逻辑控制结构内构建条件控件 弹出错误是因为我的初始 if 语句计算结
  • 如何对同一列上的数据帧列表中的所有数据帧进行排序?

    我有一个数据框列表dataframes list 举个例子 我把dput dataframes list 在底部 我想对列列表中的所有数据框进行排序enrichment 我可以对一个数据框进行排序 first dataframe lt da
  • 计算例如具有多列 data.frames 的列表中的平均值

    我有几个 data frames 的列表 每个 data frame 有几列 通过使用mean mylist first dataframe a我可以得到这个 data frame 中 a 的平均值 但是我不知道如何计算列表中存储的所有 d
  • 删除ggplot2中的负图区域[重复]

    这个问题在这里已经有答案了 如何删除 ggplot2 中 x 轴和 y 轴下方的绘图区域 请参见下面的示例 我尝试了几个主题元素 panel border panel margin plot margin 但没有任何运气 p lt ggpl
  • R foreach问题(某些进程返回NULL)

    我遇到了问题foreach我正在 R 中使用的程序的一部分 该程序用于运行不同参数的模拟 然后将结果返回到单个列表 然后用于生成报告 当并非所有分配的模拟运行都在报告上实际可见时 就会出现问题 从各方面来看 似乎只有分配的运行的一个子集实际
  • 在 R 中向散点图添加线条

    如何向图表添加线条 我做了以下 dat lt data frame xvar 1 20 rnorm 20 sd 10 yvar 1 20 rnorm 20 sd 10 zvar 1 20 rnorm 20 sd 10 plot dat 1
  • 如何使用 R 计算成为列表中中位数的概率?

    假设我有以下数据集 其中显示了假设实验的每个状态的三个观察结果的列表 state lt c Iowa Minnesota Illinois outcome lt list c 5 11 11 c 3 12 8 c 9 14 2 dat lt
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这
  • 绘制点之间的所有线

    我有以下 R 代码 x lt c 0 01848598 0 08052353 0 06741172 0 11652034 y lt c 0 4177541 0 4042247 0 3964025 0 4074685 d lt data fr
  • 从命令行运行 R 代码 (Windows)

    我在名为 analysis r 的文件中有一些 R 代码 我希望能够从命令行 CMD 运行该文件中的代码 而无需通过 R 终端 并且我还希望能够传递参数并在我的代码中使用这些参数 例如就像下面的伪代码 C gt execute r scri
  • API 请求和curl::curl_fetch_memory(url, handle = handle) 中的错误:SSL 证书问题:证书已过期

    几天前 我运行了代码几个月 没有任何问题 GET url myurl query 今天我遇到一个错误 Error in curl curl fetch memory url handle handle SSL certificate pro
  • 在 R 格子包中微调点图

    我正在尝试为不同的数据集和不同的算法绘制一堆 ROC 区域 我有三个变量 方案 指定所使用的算法 数据集 是正在测试算法的数据集 以及 Area under ROC 我正在 R 中使用lattice库 命令如下 点图 方案 Area und
  • 以引用透明的方式从函数的省略号参数中提取符号

    事情又发生了 我正要按下发布答案按钮的问题被删除了 我正在寻找一种方法来从函数的省略号参数中提取绑定到符号的对象的值以及符号 也就是说 我试图以引用透明的方式从省略号中提取符号 我尝试过使用替代品和lazy dots 但没有成功 funct
  • ggplot2 geom_密度和geom_histogram在一个图中

    如何制作一个所有条形加起来为 1 的直方图 并在适合的上方添加一个密度层 set seed 1234 df lt data frame sex factor rep c F M each 200 weight round c rnorm 2
  • 朴素贝叶斯分类器仅基于先验概率做出决策

    我试图根据推文的情绪将推文分为三类 买入 持有 卖出 我正在使用 R 和包 e1071 我有两个数据框 一个训练集和一组需要预测情绪的新推文 训练集数据框 text sentiment this stock is a good buy Bu
  • 只读取选定的列

    谁能告诉我如何仅读取下面每年数据的前 6 个月 7 列 例如使用read table Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2009 41 27 25 31 31 39 2
  • 更改闪亮 R 中的默认浏览器

    我在 RStudio 中使用 01 hello 虽然在 IE 中默认打开程序时它不会显示直方图 但即使在 Chrome 中 滑块也不起作用 我无法滑动条形图并看到直方图中的变化 如何更改 R 中的默认浏览器 以便闪亮启动 Chrome 而不

随机推荐

  • 使用 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