我用R的tidyquant抓取S&P500里面的某几个个股数据。
install.packages(c("tidyquant","dplyr","tidyverse"))
library(tidyquant)
library(dplyr)
library(tidyverse)
tq_index("SP500")
stock_symbols <-c("NVDA","TSLA","META")
start_date <- "2018-03-24"
end_date <- "2023-03-24"
stock_prices <- stock_symbols %>%
tq_get(get = "stock.prices",
from = start_date,
to = end_date,
collapse = "daily")
print(stock_prices)
```r
跑动后,系统报错,显示如下
```r
Warning message:
There were 3 warnings in `dplyr::mutate()`.
The first warning was:
ℹ In argument: `data.. = purrr::map(...)`.
Caused by warning:
**! x = 'NVDA', get = 'stock.prices': Error in getSymbols.yahoo(Symbols = "NVDA", env = , verbose = FALSE, : Unable to import “NVDA”.
$ operator is invalid for atomic vectors
Removing NVDA.
ℹ Run dplyr::last_dplyr_warnings() to see the 2 remaining warnings.
这个该怎么解决呢
设置auto.assign=FALSE 设置数据源为: src="yahoo" 还有可能就是NVDA设置的不对,找不到这个,更换其他的试试
该回答引用于ChatGPT:
根据错误信息,是因为 NVDA
这个股票代码无法从 Yahoo Finance 获取到数据导致的。出现这种情况一般有以下几种可能性:
股票代码输错:请确认输入的股票代码是否正确,可以尝试在 Yahoo Finance 等数据源手动查询该股票的数据是否存在。
数据源不可用:Yahoo Finance 可能存在一些临时性的数据访问问题,您可以等待一段时间后再次尝试获取数据,或者尝试使用其他数据源进行获取。
数据获取异常:可能由于网络连接、数据格式等问题导致数据获取失败,请检查您的网络连接和代码逻辑,并尝试调整代码或更换数据源。
针对上述情况,您可以分别采取以下措施:
确认股票代码是否正确,例如使用 quantmod
包中的 getSymbols
函数通过 YAHOO 金融或谷歌等数据源获取该股票的历史数据,以确定是否存在数据源的问题。
尝试更换数据源。您可以使用 quantmod
包中的 getSymbols
函数从其他数据源获取数据,例如从 Alpha Vantage 或 Intrinio APIs 中获取数据。在 tidyquant
中,可以使用 tq_get()
函数的 source
参数来指定数据源,例如:
stock_prices <- stock_symbols %>%
tq_get(source = "av",
get = "stock.prices",
from = start_date,
to = end_date,
collapse = "daily")
source
参数可以是 av
、fmp
、iex
等数据源代码,具体可参考 tidyquant 的文档。
确认数据获取的过程是否正确。请检查您的网络连接和代码逻辑,例如是否需要添加代理、是否正确设置 API key 等等。也可以尝试使用其他的 R 包或 Python 包获取数据并进行比对。
引用chatGPT作答,根据系统报错信息,你的代码中tq_get()函数在获取"NVDA"这只股票的价格数据时遇到了问题,可能是由于Yahoo Finance API无法获取该股票的数据,或者是由于数据格式不正确导致的。在此情况下,可以尝试以下几种解决方法:
1.检查股票代码是否正确。确保使用的股票代码是有效的,并且在指定日期范围内有数据。
2.检查数据源是否可用。Yahoo Finance API是获取股票数据的常用数据源之一,但由于API的限制或服务故障等原因,可能无法获取所有股票的数据。可以尝试使用其他数据源或等待一段时间再尝试。
3.检查R版本和包版本是否正确。在使用R语言的过程中,版本不一致可能会导致某些函数无法正常工作。可以通过检查R和相关包的版本来解决此问题。
4.更改数据获取方式。除了使用tq_get()函数获取数据之外,还可以尝试使用其他函数或API来获取数据,例如使用quantmod包中的getSymbols()函数获取数据。
你可以先尝试以上几种解决方法,如果问题仍然存在,请提供更详细的错误信息以便更好地解决问题。
以下内容部分参考ChatGPT模型:
首先,这个问题的报错信息显示无法导入“NVDA”,可能是因为数据源出现问题,或者是输入的股票代码有误。我们可以尝试更换数据源或者检查输入的股票代码是否正确。
另外,报错信息中也提到了剩下的两个警告,我们可以使用dplyr包中的last_dplyr_warnings()函数来查看这些警告,看是否有其他问题需要解决。
下面是一个可能的解决方案:
# 更换数据源为Yahoo Finance
tq_set_provider("yahoo")
# 检查输入的股票代码是否正确
stock_symbols <- c("NVDA","TSLA","META")
available_symbols <- tq_get(get = "stock.prices", symbols = "all") %>%
rownames_to_column(var = "symbol") %>%
pull(symbol)
invalid_symbols <- setdiff(stock_symbols, available_symbols)
if (length(invalid_symbols) > 0) {
stop("Invalid stock symbol(s): ", paste(invalid_symbols, collapse = ", "))
}
# 抓取数据
start_date <- "2018-03-24"
end_date <- "2023-03-24"
stock_prices <- stock_symbols %>%
tq_get(get = "stock.prices",
from = start_date,
to = end_date,
collapse = "daily")
print(stock_prices)
# 查看剩下的警告
dplyr::last_dplyr_warnings()
这个方案中,我们首先更换了数据源为Yahoo Finance,因为有些数据源可能不支持某些股票代码。然后使用tq_get()函数中的symbols参数来获取所有可用的股票代码,检查输入的股票代码是否正确。最后抓取数据并查看剩下的警告。
如果我的建议对您有帮助、请点击采纳、祝您生活愉快
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据你的代码和错误提示,可能出现了以下情况:
1.无法获取股票信息:可能是因为 getSymbols.yahoo()
函数在获取数据时出现了问题。你可以尝试安装 quantmod
包并使用 getSymbols()
函数获取数据,如下所示:
library(quantmod)
stock_prices <- stock_symbols %>%
map(~getSymbols(Symbols = ., src = "yahoo", from = start_date, to = end_date, auto.assign = FALSE)) %>%
map(~Ad(get(.))) %>%
set_names(stock_symbols) %>%
map(~data.frame(date = index(.), price = as.numeric(.)))
2.股票名字错误:可能是因为输入的股票名称有误。检查股票名称是否正确拼写,或者更换要获取的股票。例如,更换股票 NVDA
为 MSFT
可能会成功获取数据。同时,由于 meta
不是股票名称,所以需要将 meta
更换为正确的股票名称。
下面是完整的修改后的代码,希望能解决你的问题:
library(tidyquant)
library(dplyr)
library(tidyverse)
library(quantmod)
tq_index("SP500")
stock_symbols <- c("AAPL","MSFT","TSLA")
start_date <- "2018-03-24"已黑化的小白 end_date <- "2023-03-24"已黑化的小白 stock_prices <- stock_symbols %>%
map(~getSymbols(Symbols = ., src = "yahoo", from = start_date, to = end_date, auto.assign = FALSE)) %>%
map(~Ad(get(.))) %>%
set_names(stock_symbols) %>%
map(~data.frame(date = index(.), price = as.numeric(.)))
print(stock_prices)
希望对你有所帮助。
如果我的回答解决了您的问题,请采纳!
r
stock_prices <- stock_symbols %>%
tq_get(
get = "stock.prices",
from = start_date,
to = end_date,
collapse = "daily",
source = "yahooj", # 换为使用Yahooj的接口
warnings = FALSE # 不显示警告信息
)
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
这个错误提示显示无法导入 "NVDA",因此建议您检查以下几个方面:
1. 确保您的网络连接正常,因为tidyquant会从Yahoo Finance获取股票数据。
2. 确保股票代码正确。可能是您输入的股票代码有误或者不是有效的股票代码。您可以尝试在Yahoo Finance上搜索这些代码,以确保它们是有效的股票代码。
3. 确保您的tidyquant和quantmod库的版本是最新的。您可以通过运行以下命令来更新这些库:
install.packages(c("tidyquant", "quantmod"))
4. 尝试在tq_get()函数中添加一个参数retry_on_error = TRUE,以便在出现错误时自动重试。
stock_prices <- stock_symbols %>%
tq_get(get = "stock.prices",
from = start_date,
to = end_date,
collapse = "daily",
retry_on_error = TRUE)
如果仍然无法解决问题,请尝试运行dplyr::last_dplyr_warnings(),以查看是否有其他警告。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢