如何创建一个将函数应用于数据集中多个列的 R 函数?

How to create an R function which applies function to more than one column in a dataset?

这是一个示例数据集:

library(tidyverse)
library(lubridate)

db_country <- tibble(country = c("Argentina", "Australia", "Austria"),
                     region = c("Americas", "Asia", "Europe"),
                     start_date = as.numeric(18487, 18487, 18487),
                     end_date = as.numeric(18500, 18500, 18500))

# A tibble: 3 x 4
  country   region   start_date end_date
  <chr>     <chr>         <dbl>    <dbl>
1 Argentina Americas      18487    18500
2 Australia Asia          18487    18500
3 Austria   Europe        18487    18500

我正在尝试制作一个函数,将列中的所有值转换为日期格式。这是我目前所拥有的:

mydate <- function(dataset, column) {
  dataset %>% mutate({{column}} := as_date({{column}}))

我希望能够为我创建的“列”参数输入多个列名。与其对 start_dateend_date 使用我的 mydate() 函数两次,我希望能够编写这样的代码并使用一行代码将该函数应用于多个列:(有点像select()函数)

mydate(db_country, start_date, end_date)

如何编辑我的函数来执行此操作?

非常感谢任何帮助:)

你可以这样做:

mydate <- function(dataset, ...) 
{
  mutate(dataset, across(as.character(ensyms(...)), as_date))
}

允许以下 pipe-friendly 语法:

db_country %>% mydate(start_date, end_date)

#> # A tibble: 3 x 4
#>   country   region   start_date end_date  
#>   <chr>     <chr>    <date>     <date>    
#> 1 Argentina Americas 2020-08-13 2020-08-26
#> 2 Australia Asia     2020-08-13 2020-08-26
#> 3 Austria   Europe   2020-08-13 2020-08-26