首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >select函数中数据框的无引号列名

select函数中数据框的无引号列名
EN

Stack Overflow用户
提问于 2019-10-02 11:38:26
回答 2查看 78关注 0票数 0

我在做家庭作业时遇到了一个困惑,问题如下:如果你提供一个数据框的不带引号的列名,下面定义的这个函数是否有效?用3-4句话解释为什么或为什么不。

代码语言:javascript
复制
sel <- function(x, col_names) {
select(x, col_names)}

我以虹膜数据为例:

代码语言:javascript
复制
Sepal.Length    Sepal.Width   Petal.Length   Petal.Width    Species
   5.1              3.5           1.4             0.2        setosa

我试过了

代码语言:javascript
复制
select(iris, Sepal.Length)

它工作得很好,但当尝试的时候

代码语言:javascript
复制
sel(iris, Sepal.Length)

不起作用,错误消息如下:

代码语言:javascript
复制
Error in .f(.x[[i]], ...): can't find 'Sepal.Length'

有谁能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-02 11:57:35

未加引号的列名在函数中不起作用,一种方法是使用rlang中的卷曲({{}})运算符。

代码语言:javascript
复制
library(rlang)
sel <- function(x, col_names) dplyr::select(x, {{col_names}})

sel(iris, Sepal.Length) %>% head

#  Sepal.Length
#1          5.1
#2          4.9
#3          4.7
#4          4.6
#5          5.0
#6          5.4

这是以前的enquo和evaluate (!!)的后续版本

代码语言:javascript
复制
sel <- function(x, col_names)  dplyr::select(x, !!enquo(col_names))
票数 1
EN

Stack Overflow用户

发布于 2019-10-02 12:16:05

您可以使用rlang/tidyeval方法,或者在本例中,base R方法也适用于点、点、点。

代码语言:javascript
复制
library(dplyr)

sel <- function(x, ...) select(x, ...)

# tests
sel(iris, Sepal.Length)
sel(iris, Sepal.Length, Sepal.Width)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58194896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档