在R中如何使用字符变量将xts对象转换为矩阵?
如何通过字符变量将xts对象转换为矩阵(批量股票处理场景)
问题原因
你遇到的问题核心是:tickertoget是字符串变量,直接调用as.matrix(tickertoget)只会把字符串本身转换成矩阵,而非获取getSymbols下载的对应xts对象再转换。getSymbols默认会将下载的xts对象以股票代码为名称存入全局环境,而非直接赋值给变量,因此需要通过字符串名称定位到对应的对象。
解决方案
方法1:用get()函数获取全局环境中的xts对象
通过get()函数传入字符串形式的变量名,即可获取对应的xts对象,再转换为矩阵:
library(quantmod) tickertoget = "AAPL" getSymbols(tickertoget, from = "2024-01-01", src="yahoo") m2 = as.matrix(get(tickertoget))
方法2:关闭auto.assign直接获取xts对象
设置getSymbols的auto.assign = FALSE,可以直接将下载的xts对象赋值给变量,避免依赖全局环境,更适合批量处理:
library(quantmod) tickertoget = "AAPL" # 直接将xts对象存入变量 aapl_data = getSymbols(tickertoget, from = "2024-01-01", src="yahoo", auto.assign = FALSE) m2 = as.matrix(aapl_data)
批量处理多个股票代码
如果需要批量处理多只股票,推荐用lapply结合上述方法:
基于方法1的批量处理
tickers = c("AAPL", "MSFT", "GOOG") # 批量下载数据到全局环境 getSymbols(tickers, from = "2024-01-01", src="yahoo") # 批量转换为矩阵并存储到列表 matrices_list = lapply(tickers, function(tick) as.matrix(get(tick))) # 给列表元素命名对应股票代码 names(matrices_list) = tickers
基于方法2的批量处理(更推荐)
tickers = c("AAPL", "MSFT", "GOOG") matrices_list = lapply(tickers, function(tick) { # 直接获取单只股票的xts对象 stock_data = getSymbols(tick, from = "2024-01-01", src="yahoo", auto.assign = FALSE) # 转换为矩阵并返回 as.matrix(stock_data) }) names(matrices_list) = tickers
内容的提问来源于stack exchange,提问作者Donald Rosenthal
相关产品推荐
相关产品推荐

