将 dplyr::summarize 与 seq_along 一起使用时出错

Error while using dplyr::summarize with seq_along

这里一位无私的会员帮助我编写了以下代码,使用for循环和dplyr::summarize生成变量。正如预期的那样,这段代码工作正常。

library(nycflights13)

flights <- nycflights13::flights %>%
  select(carrier,distance,hour)

by_carrier <- NULL
for ( i in c("distance", "hour") {   
  df <- 
    flights %>%
    dplyr::group_by(carrier) %>%
    dplyr::summarize(!!as.name(i) := sum(!!as.name(i) ))
  by_carrier <- bind_cols(by_carrier,df)
}

但是当我按以下方式更改for循环参数时,遇到错误:

var_interest <- c("distance", "hour")

by_carrier <- NULL

for ( i in seq_along(var_interest)) {   
  df <- 
    flights %>%
    dplyr::group_by(carrier) %>%
    dplyr::summarize(!!as.name(i) := sum(!!as.name(i) ))
  by_carrier <- bind_cols(by_carrier,df)
}

错误如下:

Error: Problem with `summarise()` input `1`.
x object '1' not found
i Input `1` is `sum(`1`)`.
i The error occurred in group 1: carrier = "9E".
Run `rlang::last_error()` to see where the error occurred.

我在这里错过了什么?提前致谢。

由于您使用的是 seq_along i is 1, 2 这不是数据中列的名称。将 for 循环更改为 for (i in var_interest) 或在循环内使用 var_interest[i]

library(dplyr)

by_carrier <- NULL

var_interest <- c("distance", "hour")
for (i in var_interest) {   
  df <- 
    flights %>%
    dplyr::group_by(carrier) %>%
    dplyr::summarize(!!as.name(i) := sum(!!as.name(i) ))
  by_carrier <- bind_cols(by_carrier,df)
}

也许更好的选择是使用 across 而不是循环。

flights %>%
  group_by(carrier) %>%
  summarise(across(all_of(var_interest), sum))