将股票数据导入 r 时出现错误

I got an error when to import stock data into r

以下是我使用的代码:

library(quantmod)
library(timetk)
library(dplyr)
library(tibble)
library(tidyr)


mdate <- "2015-10-30"
edate <- "2016-01-07"
tickers4 <- c("RTL","RTM")

data <- do.call("cbind", lapply(seq_along(tickers4), function(i){
  try_var <- try(getSymbols(tickers4[i], from = mdate, to = edate, auto.assign = FALSE))
  if(inherits(try_var, "try-error")) {
    i <- i + 1
  } else{
    getSymbols(tickers4[i], from = mdate, to = edate, auto.assign = FALSE)   
  }
}
)
)

# Transpose data.frame: td_data => data.frame
td_data <- within(data.frame(price_var = row.names(t(data)), t(data), row.names = NULL), 
                  {
                    ticker_cd <- as.factor(gsub("[.].*", "", price_var))
                    price_var <- as.factor(gsub(".*[.]", "", price_var))
                  }
)

# Re-order vectors; keep complete cases: td_data_o => data.frame
td_data_o <- td_data[complete.cases(td_data), 
                     c(names(td_data)[sapply(td_data, is.factor)],  
                       names(td_data)[sapply(td_data, function(x){!is.factor(x)})])]

# Reshape: abc => data.frame
abc4 <- do.call("cbind", split(td_data_o, td_data_o$price_var))

当我运行这些代码时,abc4必须有288个变量,但创建了336个变量。 第289和290的值为"X2"。从第 300 个开始,所有其他值都是“2”。 我发现是ticker4中的"RTL"引起的。此代码的值在 mdate 和 edate 之间不存在。 导入股票数据时如何跳过不存在的代码?

 library(quantmod)
# Start date: mdate => character
mdate <- "2015-10-30"

# End date: edate => character
edate <- "2016-01-07"

# tickers4 => character vector: 
tickers4 <- c("RTL","RTM","RTM","RYN","RYU","SAH","SBS","SCCO","SCHC","SCM","SHO","SJI","SLX","SNA","SWN","SWZ","TCO","TDF","THG")

# Create empty list to store xts objects: dlist => list
dlist <- vector("list", length(unique(tickers4)))

# Use quatmod api to retrieve stock data from yahoo finance, dlist => list of xts objects
dlist <- lapply(seq_along(unique(tickers4)), function(i){
        res <- NULL
        try_var <- try(getSymbols(tickers4[i], from = mdate, to = edate, auto.assign = FALSE))
        if(inherits(try_var, "try-error")) {
          i <- i + 1
        } else{
          res <- getSymbols(tickers4[i], from = mdate, to = edate, auto.assign = FALSE)   
        }
      return(res)
    }
  )

# Filter out null values from the list, column bind the results: data => xts object
data <- do.call("cbind", Filter(Negate(is.null), dlist))

# Transpose data.frame: td_data => data.frame
td_data <- within(data.frame(price_var = row.names(t(data)), t(data), row.names = NULL), 
                  {
                    ticker_cd <- as.factor(gsub("[.].*", "", gsub("[.]\d+$", "", price_var)))
                    price_var <- as.factor(gsub(".*[.]", "", gsub("[.]\d+$", "", price_var)))
                  }
)

# Re-order vectors; keep complete cases: td_data_o => data.frame
td_data_o <- td_data[complete.cases(td_data), 
                     c(names(td_data)[sapply(td_data, is.factor)],  
                       names(td_data)[sapply(td_data, function(x){!is.factor(x)})])]

# Reshape: abc => data.frame
abc4 <- do.call("cbind", split(td_data_o, td_data_o$price_var))