【问题标题】:Creating a wrapper function that uses tidyverse-like syntax创建一个使用类似 tidyverse 语法的包装函数
【发布时间】:2022-09-26 18:49:02
【问题描述】:

我正在尝试创建一个包装函数,它可以让我使用类似 tidyverse 的语法(即用 dat, col 替换 dat$col),同时添加一些默认参数。我在第一部分苦苦挣扎 - 可能是因为我没有很好地掌握基础 R(也许是数据屏蔽?)

# What I would like to recreate
summary(mtcars$mpg)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>   10.40   15.43   19.20   20.09   22.80   33.90

# My attempt
tidy_summary <- function(data, variable) {
        variable_name <- {{  variable  }}
        summary(data$variable_name)
}

tidy_summary(mtcars, mpg)
#> Error in tidy_summary(mtcars, mpg): object \'mpg\' not found

由reprex package (v2.0.1) 于 2022 年 9 月 26 日创建

我尝试改用[ 运算符,或者将参数作为字符串传递,但没有运气。

    标签: r wrapper


    【解决方案1】:

    你可以做

    tidy_summary <- function(data, variable) {
      
      summary(data[[deparse(substitute(variable))]])
    }
    
    tidy_summary(mtcars, mpg)
    #>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    #>   10.40   15.43   19.20   20.09   22.80   33.90
    

    $ 运算符在这里不起作用,因为它总是按原样解释。也就是说,data$variable_name 将始终查找字面上称为variable_name 的列。它不会替换存储在变量variable_name 中的名称。相反,我们使用[[ 运算符并传递一个包含实际列名的字符串,我们可以通过deparse(substitute(variable)) 获得

    创建于 2022-09-26,reprex v2.0.2

    【讨论】:

      猜你喜欢
      • 2021-05-30
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多