问题描述
当我使用 map(或任何 purrr 函数)函数并想利用 map 函数中的“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])),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
任何帮助将不胜感激!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)