使用 r 在 for 循环中提取数据

Data extraction in for loop using r

我正在尝试查找和比较 r 中两只股票的每日盈亏百分比。这是代码

library(quantmod) 
stockData <- new.env() #Make a new environment for quantmod to store data in
tickers <- c("AAPL","GOOG") 
#Set start date
start_date=as.Date("2014-01-01")
getSymbols(tickers, src="yahoo", env=stockData,from=start_date)
for (tick in tickers) {
  x <- get(tick, pos=stockData)  # get data from stockData environment  
  x$gl<-((Cl(x)-Op(x))/Op(x))*100 #Daily gain loss percentage
}

我能够计算每日 gain/loss 个别股票的百分比,但我不知道如何进一步进行并分别提取比较多只股票的 gain/loss 百分比。

示例

if AAPL(gain/loss percentage) is greater than GOOG(gain/loss percentage) then 1 else -1

您的代码是一个很好的起点。但是,我建议您将行情数据存储在列表中。就像现在的代码一样,只有循环中处理的最后一个代码的数据存储在x中。

这个稍作修改的版本可能会有所帮助:

library(quantmod) 
stockData <- new.env() #Make a new environment for quantmod to store data in
tickers <- c("AAPL","GOOG","YHOO","FB") 
#Set start date
start_date <- as.Date("2014-01-01")
getSymbols(tickers, src="yahoo", env=stockData, from=start_date)
x <- list()
for (i in 1:length(tickers)) {
  x[[i]] <- get(tickers[i], pos=stockData)  # get data from stockData environment  
  x[[i]]$gl <-((Cl(x[[i]])-Op(x[[i]]))/Op(x[[i]]))*100 #Daily gain loss percentage
}
compare_pl <- function(x,y){ifelse(x$gl > y$gl, 1, -1)}
aapl_vs_goog <- compare_pl(x[[1]],x[[2]])

现在变量 aapl_vs_goog 包含 AAPL 优于 GOOG (+1) 或相反 (-1) 的数据:

> tail(aapl_vs_goog)
#           gl
#2015-08-19 -1
#2015-08-20  1
#2015-08-21  1
#2015-08-24  1
#2015-08-25 -1
#2015-08-26 -1

不用说,这可以用相同的方式对任何其他代码执行。