当我使用映射(或任何 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
任何帮助,将不胜感激!