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

使用rlang从向量中获取无引号的变量名

rlang 是一个用于处理 R 语言中的数据的强大工具包,它提供了一系列函数来操作环境和表达式。在 R 语言中,有时我们需要从向量中提取变量名,而不是变量的值。rlang 提供了 quo_name()enquo() 等函数来帮助我们实现这一点。

基础概念

在 R 中,变量名实际上是字符串,但在某些情况下,它们被封装在特殊的对象中,如 quo(引用)或 sym(符号)。rlang 提供的工具可以帮助我们将这些封装的对象转换回它们的字符串形式。

相关优势

  • 清晰的语义rlang 的函数提供了清晰的语义,使得代码更易于理解和维护。
  • 强大的抽象能力rlang 允许你在更高的抽象层次上操作数据,而不是仅仅在数据的表面层次上。
  • 与其他包的良好兼容性rlang 设计得非常模块化,可以很容易地与其他 R 包集成。

类型

  • 引用(Quosures)quo() 函数创建一个引用对象,它包含了表达式和它所在的环境。
  • 符号(Symbols)sym() 函数创建一个符号对象,它只是一个变量的名字。

应用场景

当你需要动态地引用变量名,或者在编写函数时需要处理变量名而不是变量值时,rlang 非常有用。

示例代码

假设我们有一个向量,其中包含了几个变量的引用,我们想要获取这些变量的名字:

代码语言:txt
复制
library(rlang)

# 创建一些变量
var1 <- 10
var2 <- 20

# 将变量名放入向量中
vars <- list(quo(var1), quo(var2))

# 使用 rlang 获取无引号的变量名
names <- purrr::map_chr(vars, ~ rlang::quo_name(.x))
print(names)

参考链接

解决问题的思路

如果你在使用 rlang 时遇到了问题,比如无法获取变量名,首先确保你正确地使用了 quo()enquo() 来引用变量。然后,检查你的 rlangpurrr 包是否是最新版本,因为旧版本可能存在 bug。如果问题依旧存在,可以查看 rlang 的 GitHub 仓库中的 issues,看看是否有其他人遇到了类似的问题。

通过上述方法,你应该能够从向量中获取无引号的变量名,并且理解其背后的概念和优势。

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

相关·内容

R tips: rlang中的expression操作符

这是一个rlang包中定义的一个操作符函数。 它的本质原理在于:R在运行代码时,会先将代码解析成叫做expression的中间态,然后再执行expression即可获取代码结果。...在rlang包中,expr函数类似于expression函数(expr函数暂停后的代码对象是call,基本上和expression是一个意思就行,以下统一使用expression),而eval_tidy...var_name =" 但是会报错,原因是因为在R中=操作符要求比较严格,如果是引号括起来就没有问题了,但是括起来的时候,!!...var_name := 1))) #$test #[1] 1 列表可以使用list2函数,但是如果是向量的话,rlang包是没有c2函数的,这个时候可以先用list2处理,然后unlist函数转换为向量...mean_by_group,就像在使用dplyr中的函数一样,不需要引号包括。

1.5K10

R tips:使用!!来增加dplyr的可操作性

dplyr包在数据变换方面非常的好用,它有很多易用性的体现:比如书写数据内的变量名时不需要引号包裹,也不需要绝对引用,而这在多数baseR函数中都不是这样的,比如: library(tidyverse)...下面完成的上述操作的所需的函数都是rlang包中相应函数。 如何使用!!...辅助dplyr完成编程工作 上面的例子中,之所以group_var不起作用,是因为dplyr直接将group_var当做变量名,然后去mtcars中寻找名字叫做group_var的列,这肯定是会报错的。...mean_manual获得此分组元素需要使用ensym,也就是ensym(.grp_v),因为此时的.grp_v是形参,如果要获取实参的值并转换为Symbol,需要使用ensym,而不是sym。...在mutate中完成新变量名的编程 假如想要在mutate中使用变量对新变量进行设置,其结果并不会如愿,比如,将新变量名var_name赋值为“gear_new",使用var_name进行mutate操作

2.5K31
  • 【Debug】如何顺利的重复别人的画图代码?一名Geek粉丝的Debug历程

    第一个图很爽 【画图】SARS-CoV-2结合的宿主细胞受体ACE2在人组织中的表达情况 话说上次站长画了一个图,还公布了代码,我照搬过来很是爽了一下,相当于白piao了站长一回,不过用read.csv...好在R的debug系统非常完善,输入rlang::last_error() 之后就能看上次报错错在哪里,这时候发现原来卡在 rlang::ensym(y) 这里,那么这个函数为什么会报错呢?...简单搜索一下就发现了,原来它还有个兄弟函数叫 rlang::sym( ),rlang::ensym( )的好处是不管字符串加不加引号,都可以转化为字符串,但是,非常坑的地方是rlang::ensym(...)函数在转化字符串的时候,会先判断参数时候是函数,说到这里是不是有点晕了,直接看例子吧: 看到没有,如果rlang::ensym( ) 里面即使放一个向量也是不可以的,必须是字符串,而rlang ::...那么推测原因,ggstatsplot包之前的版本用的是 rlang :: sym ( ) 函数,而新版本的时候作者脑子抽风改成了 rlang::ensym ( )。 那么问题找到了,该怎么办呢?

    31020

    124-R编程18-R的内部机制2

    最近碰巧看到王诗翔的这篇文章,再次学习,顺便将笔记从yuque 发至公众号。共勉。 因为内容有些多,拆成两个部分介绍。...R对象有值,但不必有对应的变量名;变量名必须经过绑定才有对应的值和存储位置。 我们可以通过变量获得对象所在的地址(存储位置),并获得对象的值。...上面操作不难发现,这两个向量值相同,并共享内存地址,说明它们指向相同的数据,而赋值操作并没有自动复制数据。 但当我们对其中一个变量进行修改之后,其立刻制作了副本。...我们使用new.env()函数创建一个新环境: e1 <- new.env() e2 rlang::env( a = 3, b = TRUE, c = 5 ) 或者用rlang::...因为变量对应的环境指向的是同一个内存,修改任意其中一个环境中的变量,均发生修改: e3 rlang::env( a = 4, a = 2 ) e4 <- e3 > e3$b NULL

    64750

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

    标签:机器学习 作者前言 我使用Iris数据集训练了一系列机器学习模型,从数据中的极端值合成了新数据点,并测试了许多机器学习模型来绘制出决策边界,这些模型可根据这些边界在2D空间中进行预测,这对于阐明目的和了解不同机器学习模型如何进行预测会很有帮助...在下面的代码中,我导入了iris数据并删除了一种植物物种virginica,以将其从多重分类转变为二元分类问题。...我首先采用ggplot来绘制数据,以下储存的ggplot对象中,每个图仅更改x和y变量选择。...我将使用到上面图中的每个数据点训练以下模型: 逻辑回归模型 支持向量机+线性核 支持向量机+多项式核 支持向量机 +径向核 支持向量机+sigmoid核 随机森林 默认参数下的XGBoost模型 单层Keras...使用以下软件包版本(即使用最新的软件包版本),代码正常运行。

    1.9K40

    Day 5

    向量2.1 标量和向量的区分元素”:元素指的是数字或者字符串(用chr表示)等,根据它可以区分两个词:①标量:一个元素组成的变量②向量:多个元素组成的变量(补充:一个向量是一排有序排列的元素,以后会用到把一个向量作为数据框中的一列的情况...2.2 从向量中提取元素2.2.1 根据元素位置这里的x是你刚才赋值的变量名,根据自己的情况来修改2.2.2 根据值xx==10#等于10的元素xx向量c(1...分隔符改为逗号,字符串不加双引号(默认格式带由双引号)3.4 变量的保存与重新加载这次没有处理完的数据下次想接着用怎么办?...刚才让师姐测试我教程的时候很担忧你们粗暴地复制我的代码,最后啥也没看懂。)3.6 直接使用数据框中的变量iris是R语言的内置数据,可以直接使用。...提取某两列作散点图:plot(iris$Sepal.Length,iris$Sepal.Width)由于昨天没有用到脚本窗口,这里正好学习一下脚本的使用和保存:将上面的代码复制到一个新的R脚本中。

    8810

    第一章:MATLAB基础教程:变量和数据类型

    例如,要创建一个名为x的变量并将其设置为整数5,您可以使用以下语句: x = 5; 1.1. 命名规则 变量名由字母、数字和下划线组成。 变量名不能以数字开头。 变量名区分大小写。...输出变量值 要输出变量的值,您可以使用disp()函数或直接在命令窗口中输入变量名。...在MATLAB中,整数可以是有符号或无符号的。 a = 5; % 有符号整数 b = uint8(10); % 无符号8位整数 2.2....在MATLAB中,字符串可以使用单引号或双引号表示。 name = 'John'; % 使用单引号表示字符串 message = "Hello, MATLAB!"...; % 使用双引号表示字符串 对字符串进行操作的一种常见方法是使用内置函数,例如length()用于获取字符串的长度。

    13200

    R 数据整理(七:使用tidyr和dplyr处理数据框 2.0)

    2.2 sample_n dplyr 包的 sample_n(tbl, size) 函数可以从数据集 tbl 中随机无放回抽取 size 行,如: > d.class %>% sample_n(size...按列号 select(test,1) select(test,c(1,5)) 按列名 如果想要用向量来存放希望筛选的列名,需要使用函数 one_of 来存放该向量。...对于待分离的对象(col),不必加上引号;但对于即将创建的新列(into),需要使用引号,由于是两列,这里使用向量创建。sep参数设定读取表格信息时以何符号作为分隔符。...对于即将合并的新列,需要使用引号;但对于想要合并的多个列名,可以不用使用引号。sep 参数设定多列合并后不同数据分隔使用的分割符。...,获取指定组别不同类型内容的统计数值。

    10.9K30

    R语言18讲(三)

    我们在做数据分析工作的前提,当然是得有数据,巧妇难为无米之炊,所以数据的获取和产生是非常重要和基础的,然而,在当前互联网时代,信息非常的膨胀,我们获取数据的方式很多,这里简单的将其归为三类, 1,自己输入数据...2,从数据源导入数据 3,从网络上爬取数据.我们按照从易到难,从简单到复杂的方式排列.来讲讲数据的获取....或者 (T,F,T,T,F)我们用C( )创建,括号里写数据就可以,注意字符型要用双引号,或者seq(起始数,终止数,其他参数 )来创建序列向量,rep( 数据,其他参数 )创建重复型的向量...目前数据源太多了,数据源的格式也非常之多,幸好R的兼容性非常好,能从各种不同的数据源中获取数据,这里只简单介绍几个比较常用的数据导入方式 1.导入CSV格式数据 read.csv("E:\\课件\\11....csv")引号下面就是你要导入的文件的路径.当如果文件存放R的工作空间时,便可以直接忽略路径,在引号下写出文件名和后缀即可如 read.csv("21.csv")导入其他格式数据也是如此,当没有写路径时

    1.5K60

    Linux Shell基础篇二 - 变量

    在bash环境中, 变量的默认类型都是字符串类型, 无法直接进行数值运算 变量的值如果有空格, 必须使用双引号括起来 不能使用Shell的关键字作为变量名称 变量的取值: 12345 # 语法1: 直接使用变量名查询...$* 与 $@ 获取所有输入参数数据区别: 如果不使用双引号, 功能一样, 获取所有参数数据为一个字符串, 如果使用了双引号, $@获取的就是参数列表对象, 每个参数都是一个独立字符串。...区别: 不使用双引号括起来, 功能一样 *和@获取所有输入参数,格式为: 1 2 … 使用双引号括起来 “*“获取的所有参数拼接为一个字符串, 格式为: “1 2 … n” “@“获取一组参数列表对象...${变量名:start} 从 string 字符串的左边第 start 个字符开始截取,直到最后。...${变量名#*chars} 从 string 字符串第一次出现*chars的位置开始,截取*chars右边的所有字符。

    2.8K51

    第5天生信学习笔记-微信公众号生信星球

    :标量:一个元素组成的变量向量:多个元素组成的变量(补充:一个向量是一排有序排列的元素,以后会用到把一个向量作为数据框中的一列的情况。)...2.从向量中提取元素(1)根据元素位置#这里的x是你刚才赋值的变量名,根据自己的情况来修改x[4] #x第4个元素x[-4]#排除法,除了第4个元素之外剩余的元素x[2:4]#第2到4个元素x[-(2:...,字符串不加双引号(默认格式带由双引号) (4)变量的保存与重新加载#这次没有处理完的数据下次想接着用怎么办?...RData时的加载命令(5)提取元素(这里的X是的刚才的变量名,实际应用要懂得替换。...提取某两列作散点图:plot(iris$Sepal.Length,iris$Sepal.Width)学习一下脚本的使用和保存:将上面的代码复制到一个新的R脚本中。

    16410

    R 字符串之 glue

    前言 今天我们要介绍的是 tidyverse 中格式化字符串的软件包:glue glue 提供了轻巧、快速和无依赖的可解释字符串,glue 通过将 R 表达式嵌入到花括号中,然后对其求值并将其插入字符串中...通过将变量名放置在一对花括号之间,glue 会将变量名替换为相应的值 字符串可以写成多行的形式,最后会自动将这些行连接起来 > name <- "Fred" > age <- 50 > anniversary...字符串向量的折叠 可以使用 glue_collapse 将任意长度的字符串向量折叠为长度为 1 的字符串向量 glue_collapse(x, sep = "", width = Inf, last =..."") x :字符串向量 sep :用来分隔向量中元素的字符串 width :折叠之后加上 ......单个元素的引用 下面三个对单个元素引用函数可以搭配 glue_collapse 使用 single_quote(x):用单引号包裹字符串元素 double_quote(x):用双引号包裹字符串元素 backtick

    64320

    2023.4生信马拉松day2-数据类型

    not found: 要么该赋值没赋值(该起名字没起名字),要么该加引号没加引号 -(2)could not find function: 函数名字打错了-拼写错误/大小写错误(或者以后会遇到的该装的包还没装...paste0(rep("x",times = 3),1:3) 7.对单个向量的操作 -(1)赋值给一个变量名 -变量名称的选择原则:尽量避免和函数名冲突;尽量不涉及特殊字符,不涉及中文字符;尽量字母在前数字在后...x %in% y #看x的每个元素在y中存在吗 y %in% x #看y的每个元素在x中存在吗 #x == y和x %in% y的区别:前者是x和y对应位置一对一比较,是等位运算;后者是x每一个元素都要和...4] x[c(1,5)] x[-4] x[-(2:4)] -练习题:如何从13个数中筛选大于7的 (1)将13个数作为向量赋值给x (2)x>7 #判断,之后会返还13个TRUE/FAUSE (3)[]...将TRUE对应的值挑选出来,FALSE丢弃 10.修改向量中的某个/某些元素:取子集+赋值 没有赋值就没有发生过!

    72230

    生信学习小组Day5笔记—Chocolate Ice

    图片向量概念解释:元素:指的是数字或者逻辑或者字符串标量:一个元素组成的变量向量:多个元素有序排列组成的变量(元素的数据类型必须统一,要么全是数字,要么全是字符串)图片从向量中提取元素!!!...-(2:4)]#除了第2-4个元素x[c(1,5)] #第1个和第5个元素(2)根据值x[x==10]#等于10的元素x[x向量c(1,2,5)中的元素数据框概念解释...行列之间的数据类型可以不一样(矩阵内的每个元素都必须是一样的数据类型)读取本地数据在工作目录下新建文本文件(.txt),粘贴以下内容X1 X2A 1B 2C 4D 3E 7尝试使用...数据框的导出write.table(X,file = "yu.txt",sep = ",",quote=F)#分隔符改为逗号,字符串不加双引号(默认格式带由双引号) 变量的保存与重新加载save.image...报错原因:没有X这个变量,可能是本来没有新建X这个变量,也可能是变量名字打错了(比如大小写)解决方法:在environment中找找是否有这个变量,核查变量名输入是否正确

    1K00

    R语言基础教程——第8章:文件的输入与输出

    :/”通过SEP来指定; 3) 可以通过list指定读入变量的变量名,同时生成的对象为列表,则可以同时读入字符与数字; 4) skip 从第几行开始读入数据; 5) nlines 指定最大读入行数...> bb = readline() 123434435 > bb [1] "123434435" 3 print()和cat()函数 在交互模式下,只需要键入变量名或者表达式,就可以获取数据结果,但在函数体内部的变量就无法显示...用于指定文件中的数字转换为双精度数据时丢失精度的情况下如何进行转换。 (7)row.names 保存行名的向量。可以使用此参数以向量的形式给出每行的实际行名。...值在读取数据时候转换成NA (11)colClasses 用于指定列所属类的字符串向量。 (12)nrows 整型数。用于指定从文件中读取的最大行数。负数或其它无效值将会被忽略。...读取数据时忽略的行数。 (14)check.names 逻辑值。该参数值设置为TRUE时,数据框中的变量名将会被检查,以确保符在语法上是有效的变量名称。 (15)fill 逻辑值。

    4.7K31

    Day5-学习笔记(2024年2月2日)

    , TRUE)#逻辑型注意:单个向量中的数据必须拥有相同的类型或模式标量是只含一个元素的向量,eg:a 中给定元素所在位置的数值,我们可以访问向量中的元素...制表符/、换行或回车从向量中提取元素1、根据元素位置x[4] #x第4个元素x[-4]#排除法,除了第4个元素之外剩余的元素x[2:4]#第2到4个元素x[-(2:4)]#除了第2-4个元素x[c(1,5...(a,file = "yu.txt",sep = ",",quote=F)#分隔符改为逗号,字符串不加双引号(默认格式带有双引号)4、变量的保存和重新加载#这次没有处理完的数据下次想接着用怎么办?...)6、直接使用数据框中的变量iris是R语言的内置数据,可以直接使用。...提取某两列作散点图:plot(iris$Sepal.Length,iris$Sepal.Width)图片脚本的使用和保存:将上面的代码复制到一个新的R脚本中,然后保存到工作目录下,再次打开,后缀是R。

    14600
    领券