首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用rlang将变量名从公式传递到整洁的函数中

,可以通过以下步骤实现:

  1. 首先,需要安装并加载rlang包,可以使用以下代码完成:
代码语言:txt
复制
install.packages("rlang")
library(rlang)
  1. 创建一个函数,该函数接受一个公式和其他参数作为输入,并在函数内部使用rlang来处理变量名。以下是一个示例函数:
代码语言:txt
复制
my_function <- function(formula, data, ...) {
  vars <- rlang::all_vars(formula)
  # 在这里对变量名进行处理,可以使用vars变量来访问传递的变量名
  # 其他参数可以通过...来传递和使用
  # ...
}
  1. 在函数内部,可以使用rlang的函数和操作符来处理变量名。例如,可以使用rlang::quo_name()函数来获取变量名的字符表示,使用!!操作符来解引用变量名。以下是一些常用的rlang函数和操作符:
  • rlang::quo_name(quo):获取变量名的字符表示。
  • !!quo:解引用变量名,用于在函数中使用变量名。
  • rlang::enquo(arg):将参数转换为引用,用于在函数中捕获变量名。
  • rlang::eval_tidy(expr, data):在给定数据环境中评估表达式。
  1. 在函数中使用rlang处理变量名后,可以根据具体需求进行进一步的操作,例如数据处理、统计分析等。

下面是一个完整的示例,展示了如何使用rlang将变量名从公式传递到整洁的函数中,并进行一些简单的数据处理:

代码语言:txt
复制
install.packages("rlang")
library(rlang)

# 示例函数
my_function <- function(formula, data, ...) {
  vars <- rlang::all_vars(formula)
  var_names <- sapply(vars, rlang::quo_name)
  
  # 在这里对变量名进行处理,可以使用var_names变量来访问传递的变量名
  # 其他参数可以通过...来传递和使用
  # 以下是一个简单的示例,计算变量的均值
  result <- sapply(var_names, function(var) {
    mean(data[[var]], ...)
  })
  
  return(result)
}

# 示例数据
data <- data.frame(x = 1:10, y = 11:20)

# 调用示例函数
my_function(~ x, data)

在上述示例中,my_function函数接受一个公式和数据作为输入,并使用rlang将变量名从公式中提取出来。然后,通过对变量名进行处理,例如计算均值等操作。最后,返回处理结果。

请注意,上述示例仅演示了如何使用rlang将变量名从公式传递到函数中,并进行简单的数据处理。实际应用中,根据具体需求,可以使用rlang进行更复杂的操作,例如创建动态函数、生成动态代码等。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用函数CDN日志存储COS

教程简介 本文介绍如何使用腾讯云函数功能,创建两个函数,实现定时CDN日志存储COS。...1399853-9f69d7e24011faf1.png 主要步骤 本教程介绍如何创建“存储”函数和“任务分发”函数,二者组合在一起并配置定制器触发,即可实现定时CDN日志存储COS。...由于CDN日志默认是12小时才稳定,未避免执行时差影响,因此会下载13小时前日志文件,存储COS。...例如,触发时间为5月17日10:00,那么代码判断5月16日20:00~21:00(13个小时前)CDN日志文件已经收集完毕,不再更新;因此下载该日志文件,存储COS。...那么,假设触发时间为5月17日10:00,那么代码判断5月17日9:00~10:00(即刚刚过去这个小时)CDN日志文件已经收集完毕;因此下载该日志文件,存储COS

5.4K100

R tips: rlangexpression操作符

在base R,expression函数可以执行代码暂停到expression中间态,而eval函数(evaluate)则可以继续执行一个被暂停expression语句。...在rlang,expr函数类似于expression函数(expr函数暂停后代码对象是call,基本上和expression是一个意思就行,以下统一使用expression),而eval_tidy...由于“冻结”现象存在,导致变量不会被执行为它值,但是如果一定要执行的话,可以手动冻结代码expression中间态,然后使用!!操作符来强制先优先执行特定变量或表达式即可。...等操作符是rlang定义操作符,list函数并不支持。为了解决这个问题,可以使用rlang定义list2函数,它类似于list函数,只不过宽容度更高。 eval(expr(list(!!...enquo()快捷方式,经常用在对dplyr包函数包装,效果相当于原样传递参数值: mean_by_group <- function(dat, group, var){ var_name

1.5K10
  • 124-R编程18-R内部机制2

    最近碰巧看到王诗翔这篇文章,再次学习,顺便笔记yuque 发至公众号。共勉。 因为内容有些多,拆成两个部分介绍。...python,并不是像C++、JAVA等语言那样, x代表某个存储位置, “x <- c(1,2,3)”代表13这些值存储x所指向存储位置。...<-右边c(1,2,3)是一个表达式, 其结果为一个R对象(object), 而x只是一个变量名, 并没有固定类型、固定存储位置, 赋值结果是x绑定值为(1,2,3)R对象上。...tracemem 追踪变量后,如果变量绑定对象发生了变化,会将变化结果输出到屏幕,如果不希望继续追踪,可以使用函数untracemem。...我们使用new.env()函数创建一个新环境: e1 <- new.env() e2 <- rlang::env( a = 3, b = TRUE, c = 5 ) 或者用rlang::

    63450

    是时候整理烂代码了!

    2、简单、直接 整洁代码应该是简单直接,能让人一目了然代码传递信息,不需要猜测代码意图。...有了可读性才能让代码易于维护,整洁代码能帮助开发者使用较小成本完成需求变更。...没有人可以随意写出整洁代码,重要需是最小细节开始,逐步做出改进。...这并不一定要花多少功夫,也许只是改好一个变量名,调整一下函数参数,解决一些重复代码,总之,当我们离开一段代码时候,它应该更接近整洁代码。 3、测试代码 有了测试,就不用担心对代码修改!...整洁测试应遵循5条规则: 快速:测试应该足够快。才能频繁进行运行测试。 独立:测试应该互相独立。某个测试不应为下一个测试设定条件。 可重复:测试应当可在任何环境重复通过。

    25310

    《高效R语言编程》6--高效数据木匠

    使用broom::tidy()广泛应用于模型数据,并以标准数据框格式返回模型输出。使用变量名非标准化求值更高效,见R语言 dplyr传递参数_自由 平等~忠诚 奉献-CSDN博客[2]。...使用dplyr高效处理数据 这个包名意思是数据框钳,相比基础R优点是运行更快、与整洁数据和数据库配合好。函数部分灵感来自SQL。 ?...与基本R类似函数不同,变量无需使用 $ 操作符就可直接使用,设计与magrittr包%>%管道操作符一起使用,以允许每个数据阶段写成新一行。其是一个大型包,本身可以看成一门语言。...非标准计算 代码没有引号包裹原始名字,这种方式叫做非标准计算(NSE),高效交互使用函数,减少键盘输入,允许Rstudio自动完成。还是函数名多个_。...R会把所有数据加载到内存,数据库是硬盘获取数据

    1.9K20

    旧版本R3.6安装最新版ggplot2

    测试成功安装ggplot2 现在最新R版本是4.2.1,因为有些包只能运行在3.6版本,因此我需要安装3.6,这里安装常用ggplot2时报错了,总结一下问题解决方法。...问题来了,我有两个选择: 第一个:下载旧版本ggplot2,它支持rlang0.4.11版本,但是很多更新函数我无法使用了。测试了一下,可以实现。但我要用第二个。...* installing *source* package 'rlang' ... ** 成功'rlang'程序包解包并MD5和检查 ** using staged installation ** libs...安装Rtools3.6 安装Rtools3.6,然后加入环境变量,重启R语言,然后键入: install.packages("https://cran.r-project.org/src/contrib...这种方法可以推广R3.5,R4.0,R4.1,windows系统安装Rtools就是为了防止本地编译时出错,里面有C,C++,Fortran等各种编译器,一篮子满满。有了它,就不怕R包安装了。

    1.3K30

    独家 | 不同机器学习模型决策边界(附代码)

    标签:机器学习 作者前言 我使用Iris数据集训练了一系列机器学习模型,数据极端值合成了新数据点,并测试了许多机器学习模型来绘制出决策边界,这些模型可根据这些边界在2D空间中进行预测,这对于阐明目的和了解不同机器学习模型如何进行预测会很有帮助...初始化 首先加载一系列程序包,然后新建一个logistic函数,以便稍后log-odds转换为logistic概率函数。...在下面的代码,我导入了iris数据并删除了一种植物物种virginica,以将其多重分类转变为二元分类问题。...(每个组合一个列表),并用合成数据(或每个变量组合最小值最大值数据)给列表赋值。...,我们可以这些预测重新放回数据中用ggplot进行可视化,然后使用patchwork包进行排版。

    1.8K40

    代码整洁之道【笔记】

    Variable一词记录不应当出现在变量名,Table一词永远不应当出现在表名 D.使用读得出来名称 E.使用可搜索名称 1.单字母名称和数字常量有个问题,就是很难在一大篇文字找出来 F...)在系统传递,把它保留在类或近亲类,避免API返回边界接口,或接口作为参数传递给公共API B.浏览和学习边界 C.学习性测试好处不只是免费 1.学习性测试毫无成本,编写测试是获得这些知识...你应当尝试这些变量和方法分拆到两个或多个类,让新类更为内聚 8.函数拆为许多小函数,往往也是类拆分为多个小类时机 C.为了修改而组织 1.在整洁系统,我们对类加以组织,以降低修改风险...5.控制反转第二权责对象拿出来,转移到另一个专注于此对象,从而遵循了单一权责原则。...,不被搞乱 13.人为耦合:不互相依赖东西不该耦合 14.特性依恋:类方法只应对其所属类变量和函数感兴趣,不该垂青其他类变量和函数 15.选择算子参数:使用多个函数,通常优于向单个函数传递某些代码来选择函数行为

    98930

    「R」ggplot2在R包开发使用

    尤其是在R包编程改变了ggplot2引用函数方式,以及在aes()和vars()中使用ggplot2非标准求值方式。...ggplot2列入Depends会让你包在被加载/测试同时加载ggplot2。这会让其他想要使用你包的人通过::使用函数而无需加载它。...这种tidy eval计算符号会捕捉用户提供表达式,并将其传递使用非标准计算函数,如aes()或vars()。...常规任务最佳实践 使用ggplot2可视化一个对象 ggplot2在包通常用于可视化对象(例如,在一个plot()-风格函数)。...不应该停止你创建自己函数可视化对象! 创建一个新主题 当创建一个新主题时,已有主题出发总是好实践(例如,theme_grey()),然后使用%+replace%替换需要该包元素。

    6.7K30

    如何避免自己写代码成为别人眼中一坨屎!

    篇幅有限,本文总结性给出一些实践建议,后续会有文章来给出一些代码整洁之道事例。...,git可以干的事情不要交给代码; 源代码html注释是一种厌物, 增加阅读难度; 注释一定要描述离它最近代码; 注释一定要与代码对应; 公共api需要添加注释,其它代码谨慎使用注释; 典型烂注释...; 给变量名带上重要细节,比如加上单位ms等; 为作用域大名字采用更长名字,作用域小使用短名字; 变量类型为布尔值表达加上is,has,can,should这样词会更明确; 变量名称长短应该与其作用域对应...Inversion Principle),类应该依赖于抽象而不是依赖于具体细节; 类方法越少越好,函数知道变量越少越好,类拥有的实体变量越少越好; 通过减少变量数量和让他们尽量“轻量级”来让代码更有可读性...明确定义并提供尽量少API; 减少重复代码,提高表达力,提早构建,简单抽象; 九、小结 本文注释、命名、方法,单元测试,并发等视角简单给出了一些最佳实践,下文我们会展开来每个方面介绍更多实践事例

    53220

    Python基础

    变量命名和使用变量名只能包含字母、数字和下划线。...不要将python关键字和函数名作为变量名使用小写python变量名 同时给多个变量赋值 x,y,z=1,2,3 2.2字符串处理(用引号括起都是字符串) 方法应用 name= "ada lovelace...range(7): #只指定一个参数时,会0开始打印 print(value) numbers=list(range(1,5)) #使用函数list()range()结果直接转化为列表...#while循环让用户输入姓名,依次输入名和性 传递列表 列表传递函数后,函数就能直接访问其内容 def greet_users(names): '''向列表每位用户发出简单问候'''...','extra cheese') #形参名*让python创建一个名为toppings空元组,并将收集所有值都封装到这个元组 结合使用位置实参和任意数量实参 def make_pizza(

    1.2K00

    如何避免自己写代码成为别人眼中一坨屎!

    篇幅有限,本文总结性给出一些实践建议,后续会有文章来给出一些代码整洁之道事例。...,git可以干的事情不要交给代码; 源代码html注释是一种厌物, 增加阅读难度; 注释一定要描述离它最近代码; 注释一定要与代码对应; 公共api需要添加注释,其它代码谨慎使用注释; 典型烂注释...; 给变量名带上重要细节,比如加上单位ms等; 为作用域大名字采用更长名字,作用域小使用短名字; 变量类型为布尔值表达加上is,has,can,should这样词会更明确; 变量名称长短应该与其作用域对应...Inversion Principle),类应该依赖于抽象而不是依赖于具体细节; 类方法越少越好,函数知道变量越少越好,类拥有的实体变量越少越好; 通过减少变量数量和让他们尽量“轻量级”来让代码更有可读性...明确定义并提供尽量少API; 减少重复代码,提高表达力,提早构建,简单抽象; 九、小结 本文注释、命名、方法,单元测试,并发等视角简单给出了一些最佳实践,下文我们会展开来每个方面介绍更多实践事例

    64370

    如何避免自己写代码成为别人眼中一坨屎!

    篇幅有限,本文总结性给出一些实践建议,后续会有文章来给出一些代码整洁之道事例。...,git可以干的事情不要交给代码; 源代码html注释是一种厌物, 增加阅读难度; 注释一定要描述离它最近代码; 注释一定要与代码对应; 公共api需要添加注释,其它代码谨慎使用注释; 典型烂注释...; 给变量名带上重要细节,比如加上单位ms等; 为作用域大名字采用更长名字,作用域小使用短名字; 变量类型为布尔值表达加上is,has,can,should这样词会更明确; 变量名称长短应该与其作用域对应...Inversion Principle),类应该依赖于抽象而不是依赖于具体细节; 类方法越少越好,函数知道变量越少越好,类拥有的实体变量越少越好; 通过减少变量数量和让他们尽量“轻量级”来让代码更有可读性...明确定义并提供尽量少API; 减少重复代码,提高表达力,提早构建,简单抽象; 九、小结 作为代码整洁之道系列第一篇,本文注释、命名、方法,单元测试,并发等视角简单给出了一些最佳实践,下文我们会展开来每个方面介绍更多实践事例

    72310

    函数

    函数是带名字代码块,用于完成具体工作。通过使用函数,程序编写、阅读、测试和修复都将更容易。1.传递实参:鉴于函数定义可能包含多个形参,因此函数调用也可能包含多个实参。...向函数传递实参方式很多,可使用位置实参,这要求实参顺序与形参顺序相同;也可以使用关键字实参,其中每个实参都由变量名和值组成,还可以使用列表和字典。...3.传递列表:你经常会发现,向函数传递列表很有用,这种列表包含可能是名字,数字或更复杂对象(如字典)。列表传递函数后,函数就能直接访问其内容。...通过给函数指定描述性名称,可让主程序容易理解多。你还可以更近一步,函数存储在被称为模块独立文件,再将模块导入主程序。import语句允许在当前运行程序文件中使用模块代码。...知道如何导入函数还能让你使用其他程序员编写函数库。(1)导入整个模块要让函数时可导入,先得创建模块。模块是扩展名为.py文件,包含要导入程序代码。

    75040
    领券