R 中的 Rename() 函数不适用于循环内的 Dplyr 管道

Rename() function in R not working with Dplyr pipe inside for loop

我使用TidyquantAPI检索了一堆数据,如下:

library(tidyquant)

symbols_list <- c('DGS2', 'DGS5', 'DGS10', 'DGS30')
start_date <- as.Date('2022-01-01')
end_date <- as.Date('2022-03-31')

for (asset in symbols_list){
  
  # retrieves the data
  assign(paste('sym', asset, sep = '_'), tq_get(asset,
                                                 from = start_date,
                                                 to = end_date,
                                                 get = 'economic.data') %>%
        )

}

数据如下:

sym_DGS5

# A tibble: 64 x 3
   symbol date       price
   <chr>  <date>     <dbl>
 1 DGS5   2022-01-03  1.37
 2 DGS5   2022-01-04  1.37
 3 DGS5   2022-01-05  1.43
 4 DGS5   2022-01-06  1.47
 5 DGS5   2022-01-07  1.5 
 6 DGS5   2022-01-10  1.53
 7 DGS5   2022-01-11  1.51
 8 DGS5   2022-01-12  1.5 
 9 DGS5   2022-01-13  1.47
10 DGS5   2022-01-14  1.55
# ... with 54 more rows

我想用符号名称重命名通用 price 列。在这种情况下,我想将“价格”重命名为“DGS5” 为此,我使用 rename() 函数和 dpyr 管道,如下所示:

start_date <- as.Date('2022-01-01')
end_date <- as.Date('2022-03-31')

symbol_list <- c('T10Y2Y', 'DGS2', 'DGS5', 'DGS10', 'DGS30')
symbol_list 

for (asset in symbol_list){
  
   # retrieves the data
   assign(paste('sym', asset, sep = '_'), tq_get(asset,
                                              from = start_date,
                                              to = end_date,
                                              get = 'economic.data'
                                              ) %>% rename(asset = price)
          )
}

但是,这样做会得到:

sym_DGS5

# A tibble: 64 x 3
   symbol date       asset
   <chr>  <date>     <dbl>
 1 DGS5   2022-01-03  1.37
 2 DGS5   2022-01-04  1.37
 3 DGS5   2022-01-05  1.43
 4 DGS5   2022-01-06  1.47
 5 DGS5   2022-01-07  1.5 
 6 DGS5   2022-01-10  1.53
 7 DGS5   2022-01-11  1.51
 8 DGS5   2022-01-12  1.5 
 9 DGS5   2022-01-13  1.47
10 DGS5   2022-01-14  1.55
# ... with 54 more rows

注意该列是如何重命名为“资产”的。我本来希望该列重命名为“DGS5”。

我哪里做错了?

谢谢!

请注意,您在函数参数中有一个 data-variable(即一个包含承诺的 env-variable,您需要用双大括号将其括起来以包含该参数。这称为 [INDIRECTION ],这是一个 glue 语法。

如果你想在输出中使用变量名,你可以结合:=

使用胶水语法

因此你得到

rename({{asset}} = price)

查看here了解更多信息