使用quantmod包编写函数获取股票最新成交价遇返回结果异常求助
循环遍历股票列表仅返回单个价格的问题解决
你的代码问题出在循环中每次都覆盖了price变量:
当循环遍历stock_list时,每次执行price <- getQuote(i)都会把之前的price值替换掉,循环结束后price只保留了最后一次迭代的结果,自然无法返回所有股票的价格。
修正方案1:改进循环,收集所有结果
初始化一个空向量存储价格,每次循环将新价格追加进去,同时给结果命名方便对应股票:
library(quantmod) last_price <- function(stock_list){ # 初始化空向量用于存储所有价格 prices <- c() for(ticker in stock_list){ # 获取当前股票的报价 quote_data <- getQuote(ticker) # 将最新价格追加到向量中 prices <- c(prices, quote_data$Last) } # 给价格向量命名,对应股票代码 names(prices) <- stock_list return(prices) } stock_list <- c("AAPL","TSLA") last_price(stock_list)
修正方案2:使用R语言向量化操作(更简洁高效)
用sapply替代循环,批量处理股票列表,自动将结果整理为向量:
library(quantmod) last_price <- function(stock_list){ # 遍历每个股票代码,提取最新成交价 sapply(stock_list, function(ticker){ getQuote(ticker)$Last }) } stock_list <- c("AAPL","TSLA") last_price(stock_list)
额外提示
原函数的参数i没有实际作用,函数内部直接调用了全局变量stock_list,这会降低函数的复用性。上面的修正方案都将stock_list作为参数传入函数,让函数可以处理任意股票列表,更符合编程规范。
内容的提问来源于stack exchange,提问作者Bubbles
相关产品推荐
相关产品推荐

