选择函数中数据框的不带引号的列名
Posted
技术标签:
【中文标题】选择函数中数据框的不带引号的列名【英文标题】:unquoted column names of a data frame in select function 【发布时间】:2019-10-02 03:38:26 【问题描述】:我在做作业时遇到了困惑,问题如下: 如果您提供数据框的不带引号的列名,下面定义的此函数是否有效?用 3-4 句话解释为什么或为什么不。
sel <- function(x, col_names)
select(x, col_names)
我以虹膜数据为例:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
我试过了
select(iris, Sepal.Length)
效果很好, 但是尝试时
sel(iris, Sepal.Length)
没用,错误信息如下:
Error in .f(.x[[i]], ...): can't find 'Sepal.Length'
谁能帮帮我?
【问题讨论】:
【参考方案1】:未加引号的列名在函数中不起作用,一种方法是使用 rlang
中的 curly-curly () 运算符。
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
的继承者并评估 (!!
)
sel <- function(x, col_names) dplyr::select(x, !!enquo(col_names))
【讨论】:
谢谢,我学会了窍门。函数运行时,涉及到未加引号的列名,因未定义而被视为非法。【参考方案2】:您可以使用 rlang/tidyeval 方法,或者在这种情况下,基本 R 方法也适用于点、点、点。
library(dplyr)
sel <- function(x, ...) select(x, ...)
# tests
sel(iris, Sepal.Length)
sel(iris, Sepal.Length, Sepal.Width)
【讨论】:
以上是关于选择函数中数据框的不带引号的列名的主要内容,如果未能解决你的问题,请参考以下文章
用于 ggplot2 的不带科学记数法的 R 标记中的 cut 函数