【问题标题】:Not able to use input argument function as filter argument (R/dplyr)无法将输入参数函数用作过滤器参数 (R/dplyr)
【发布时间】:2018-11-19 10:07:54
【问题描述】:

我在 R 中编写函数时遇到了以下问题。我想在我的函数中使用我的一个列名 (id) 作为输入参数 (X) 来过滤我的数据集。

不幸的是,我的函数似乎无法理解 filter() 中的 X 参数。有人对我如何使它起作用有任何建议吗?

谢谢

数据

library(tidyverse)

df_data <- tibble(
  year = c(2004, 2005, 2006),
  id = c(1, 2, 3),
  value = c(10, 12, 1)
)

功能

FUNCTION <- function(data, X, Y){
    result <- df_data %>%
    filter(X == Y) %>%
    glimpse
}

输出

FUNCTION(data = df_data,X = "id", Y = 1)  

Observations: 0
Variables: 3
  $ year  <dbl> 
  $ id    <dbl> 
  $ value <dbl> 

【问题讨论】:

    标签: r function input dplyr


    【解决方案1】:

    如果 'X' 的预期输入参数是字符串,我们可以使用 rlang 中的 sym

    FUNCTION <- function(data, X, Y){
     data %>%
      filter((!! rlang::sym(X)) == Y) 
    }
    
    FUNCTION(data = df_data, X = "id", Y = 1)  
    # A tibble: 1 x 3
    #   year    id value
    #  <dbl> <dbl> <dbl>
    #1  2004     1    10
    

    如果我们对 'X' 使用不带引号的值,请转换为 quosure 然后评估 (!!)

    FUNCTION <- function(data, X, Y){
     X <- enquo(X)
     data %>%
       filter((!! X) == Y)
    
       }
    

    注意:在 OP 的帖子中,FUNCTION 内部的“数据”参数也不同

    FUNCTION(data = df_data, X = id, Y = 1)  
    # A tibble: 1 x 3
    #   year    id value
    #  <dbl> <dbl> <dbl>
    #1  2004     1    10
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多