0

当我使用映射(或任何 purrr 函数)函数并想利用映射函数中的“x”来调用适当的列表时,如何正确引用 R 中的列表列?例如,如果我有一个 3 列表(我们称之为 testlist),并且在该列表中我有一系列单列(即数据框)。每列包含一个字符向量列表(在这种情况下,它们是要输入到 tidyqant 中的 tq_get 的符号列表)。下面是一些简化的代码来帮助说明。

以下代码有效,但它是硬编码的:

library(tidyverse)
library(lubridate)
library(tidyquant)
library(purrr)
library(dplyr)

str(testlist)
List of 3
 $ 2010-12-31:'data.frame': 12 obs. of  1 variable:
  ..$ symbol: chr [1:12] "ASH" "RS" "FUL" "RGLD" ...
 $ 2011-12-31:'data.frame': 15 obs. of  1 variable:
  ..$ symbol: chr [1:15] "CBT" "RS" "TCK" "MEOH" ...
 $ 2012-12-31:'data.frame': 13 obs. of  1 variable:
  ..$ symbol: chr [1:13] "CBT" "ATI" "RS" "SXT" ...

d <- tq_get((pull(testlist$`2012-12-31`)), 
       get  = "stock.prices",
       from = "2011-12-30",
       to   = "2013-12-31") 

为了澄清,“testlist”列表中的每个数据框都标有日期。在这种情况下 2012-12-31。

但是,在引用“testlist”中的每个数据框时,我想改变日期。例如:

year <- as.Date("2012-12-31")
d <- tq_get((pull(testlist[year])), 
       get  = "stock.prices",
       from = "2011-12-30",
       to   = "2013-12-31") 

这不起作用。我已经确定,如果我指的是数据框中的列,这将起作用:

testlist[,as.character(year)]

但明确地引用数据框中的列与引用列表中的日期框不同。

这是预期的输出。它适用于第一个示例,不适用于第二个示例。

d
# A tibble: 6,526 x 8
   symbol date        open  high   low close volume adjusted
   <chr>  <date>     <dbl> <dbl> <dbl> <dbl>  <dbl>    <dbl>
 1 CBT    2011-12-30  32.2  32.4  32.0  32.1 216100     25.9
 2 CBT    2012-01-03  33.2  33.6  32.9  33.2 410500     26.8
 3 CBT    2012-01-04  33.1  33.4  32.7  33.2 502100     26.8
 4 CBT    2012-01-05  32.9  32.9  32.0  32.7 688400     26.4
 5 CBT    2012-01-06  32.8  33.1  31.7  32.8 951900     26.4
 6 CBT    2012-01-09  32.9  33.2  32.5  32.7 393100     26.4
 7 CBT    2012-01-10  33.3  33.9  33.2  33.3 306300     26.9
 8 CBT    2012-01-11  33.3  33.7  33.2  33.5 209700     27.0
 9 CBT    2012-01-12  33.7  34.4  33.4  34.3 209800     27.7
10 CBT    2012-01-13  34.0  34.2  33.3  33.9 273200     27.4
# ... with 6,516 more rows

任何帮助,将不胜感激!

4

0 回答 0