我在做家庭作业时遇到了一个困惑,问题如下:如果你提供一个数据框的不带引号的列名,下面定义的这个函数是否有效?用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'有谁能帮我吗?
发布于 2019-10-02 11:57:35
未加引号的列名在函数中不起作用,一种方法是使用rlang中的卷曲({{}})运算符。
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 (!!)的后续版本
sel <- function(x, col_names) dplyr::select(x, !!enquo(col_names))发布于 2019-10-02 12:16:05
您可以使用rlang/tidyeval方法,或者在本例中,base R方法也适用于点、点、点。
library(dplyr)
sel <- function(x, ...) select(x, ...)
# tests
sel(iris, Sepal.Length)
sel(iris, Sepal.Length, Sepal.Width)https://stackoverflow.com/questions/58194896
复制相似问题