r语言 - 使用quantmod包编写一个函数来获取最近交易的股票价格


library(quantmod)
last_price<-function(i){
for (i in stock_list)
price<-getQuote(i)
return(price$Last)
}
stock_list<-c("AAPL","TSLA")
last_price(stock_list)

嗨,伙计们,只是有一个函数从定义的股票列表中下载最后交易价格,在这种情况下,理想情况下,函数将返回APPLE的最后交易价格&特斯拉,但是,只有苹果的最后一个交易价格返回,很确定我写函数的方式有问题,介意帮我一下吗?如果我想让我的函数循环遍历列表,我错过了什么吗?非常感谢。

由于这是一个for循环,并且price在每次迭代中更新,因此它只返回最后一个。我们需要创建一个list来存储输出。此外,函数的参数应该匹配。

last_price <- function(stock_list){
out <- vector('list', length(stock_list))
names(out) <- stock_list
for (stock in stock_list)
{
price_last<-getQuote(stock)$Last
out[[stock]] <- price_last
}
return(out)
}

测试

> price_list <- last_price(stock_list)
> str(price_list)
List of 2
$ AAPL: num 142
$ TSLA: num 179

不需要循环,因为getQuote可以取值的向量

> getQuote(stock_list)
Trade Time   Last     Change   % Change   Open   High    Low    Volume
AAPL 2022-12-09 16:00:04 142.16 -0.4899902 -0.3434912 142.34 145.56 140.91  76097011
TSLA 2022-12-09 16:00:04 179.05  5.6100006  3.2345480 173.84 182.50 173.36 104872336
> getQuote(stock_list)$Last
[1] 142.16 179.05

这是一个简单的sapply解决方案。

suppressPackageStartupMessages(
library(quantmod)
)
last_price <- function(stock_list){
sapply(stock_list, (s) getQuote(s)$Last)
}
stock_list<-c("AAPL","TSLA")
last_price(stock_list)
#>   AAPL   TSLA 
#> 142.16 179.05

创建于2022-12-11与reprex v2.0.2


编辑

看完akrun的答案后,如果你想让一个函数得到最后的价格,把他的矢量化的getQuote解转换成一个函数。

last_price <- function(stock_list) {
setNames(getQuote(stock_list)$Last, stock_list)
}
last_price(stock_list)
#>   AAPL   TSLA 
#> 142.16 179.05

创建于2022-12-11与reprex v2.0.2

相关内容

  • 没有找到相关文章

最新更新