Размещение данных в глобальной среде

Ранее у меня был следующий код, который работал хорошо, он использовал пакет quantmod для загрузки финансовой информации из Google. Однако с тех пор эта функция перестала работать. К счастью, кто-то попытался получить данные с Yahoo здесь.

library(tidyquant)
#symbols <- c("HOG", "GOOG", "GE")
    stockinfo <- tq_index("SP500")
    symbols <- stockinfo$symbol

    library(quantmod)
    symbols.f <- sapply(symbols, function(x) { paste0(x, ".f") })
    symbols <- sub("\\.f","", symbols.f)

    tickers <- new.env()
    lapply(symbols, getFinancials, env=tickers)
    BS <- data.frame(lapply(tickers, function(x) {viewFinancials(x, type= 'BS', period = 'A')}))
    IS <- data.frame(lapply(tickers, function(x) {viewFinancials(x, type= 'IS', period = 'A')}))
    CF <- data.frame(lapply(tickers, function(x) {viewFinancials(x, type= 'CF', period = 'A')}))

Я применяю следующий код, который включает функцию загрузки финансовой информации с Yahoo;

#########################################################
#Set the function to scrape Yahoo finance

getFin <- function(stock){
  if ("rvest" %in% installed.packages()) {
    library(rvest)
  }else{
    install.packages("rvest")
    library(rvest)
  }
  for (i in 1:length(stock)) {
    tryCatch(
      {
        url <- "https://finance.yahoo.com/quote/"
        url <- paste0(url,stock[i],"/financials?p = ",stock[i])
        wahis.session <- html_session(url)                                
        p <-    wahis.session %>%
          html_nodes(xpath = '//*[@id = "Col1-1-Financials-Proxy"]/section/div[3]/table')%>%
          html_table(fill = TRUE)
        IS <- p[[1]]
        colnames(IS) <- paste(IS[1,])
        IS <- IS[-c(1,5,12,20,25),]
        names_row <- paste(IS[,1])
        IS <- IS[,-1]
        IS <- apply(IS,2,function(x){gsub(",","",x)})
        IS <- as.data.frame(apply(IS,2,as.numeric))
        rownames(IS) <- paste(names_row)
        temp1 <- IS
        url <- "https://finance.yahoo.com/quote/"
        url <- paste0(url,stock[i],"/balance-sheet?p = ",stock[i])
        wahis.session <- html_session(url)
        p <-    wahis.session %>%
          html_nodes(xpath = '//*[@id = "Col1-1-Financials-Proxy"]/section/div[3]/table')%>%
          html_table(fill = TRUE)
        BS <- p[[1]]
        colnames(BS) <- BS[1,]
        BS <- BS[-c(1,2,17,28),]
        names_row <- BS[,1]
        BS <- BS[,-1] 
        BS <- apply(BS,2,function(x){gsub(",","",x)})
        BS <- as.data.frame(apply(BS,2,as.numeric))
        rownames(BS) <- paste(names_row)
        temp2 <- BS
        url <- "https://finance.yahoo.com/quote/"
        url <- paste0(url,stock[i],"/cash-flow?p = ",stock[i])
        wahis.session <- html_session(url)
        p <-    wahis.session %>%
          html_nodes(xpath = '//*[@id = "Col1-1-Financials-Proxy"]/section/div[3]/table')%>%
          html_table(fill = TRUE)
        CF <- p[[1]]
        colnames(CF) <- CF[1,]
        CF <- CF[-c(1,3,11,16),]
        names_row <- CF[,1]
        CF <- CF[,-1] 
        CF <- apply(CF,2,function(x){gsub(",","",x)})
        CF <- as.data.frame(apply(CF,2,as.numeric))
        rownames(CF) <- paste(names_row)
        temp3 <- CF
        assign(paste0(stock[i],'.f'),value = list(IS = temp1,BS = temp2,CF = temp3),envir = parent.frame())

      },
      error = function(cond){
        message(stock[i], "Give error ",cond)
      }
    )
  }
}

################## END OF FUNCTION ######################
#
#########################################################

symbols <- c("HOG", "GOOG", "GE")

Я могу использовать следующий getFin(symbols), который загружает финансовую отчетность. Однако я столкнулся с проблемой, так как хочу иметь данные в том виде, в котором они были раньше, используя;

tickers <- new.env()
lapply(symbols, getFin, env=tickers)
BS <- data.frame(lapply(tickers, function(x) {viewFinancials(x, type= 'BS', period = 'A')}))
IS <- data.frame(lapply(tickers, function(x) {viewFinancials(x, type= 'IS', period = 'A')}))
CF <- data.frame(lapply(tickers, function(x) {viewFinancials(x, type= 'CF', period = 'A')}))

Я столкнулся с ошибкой на lapply(symbols, getFin, env=tickers) и не совсем понимаю, почему, поскольку я помещаю данные в тот же формат, что и раньше.

Обновлено:

Чтобы дать представление о том, чего я пытаюсь достичь (в качестве конечной цели). Мне нужны 3 отдельных фрейма данных для BS - Балансовый отчет, IS - Отчет о прибылях и убытках и CF - Денежный поток`, где каждая из фирм указана в столбце.

Какое точное сообщение об ошибке вы получите?

MrFlick 16.07.2018 22:20

Извините, это ошибка, с которой я столкнулся с lapply(symbols, getFin, env=tickers) Error in FUN(X[[i]], ...) : unused argument (env = <environment>)

user113156 16.07.2018 22:22

Что ж, ваша функция getFin() определяется только одним параметром (запасом). У него нет параметра с именем env=. Вы не можете передать параметр функции, если она этого не запрашивает.

MrFlick 16.07.2018 22:24

да .. так проблема в том, что env = tickers не определяется в функции getFin?

user113156 16.07.2018 22:28

Да, getFin имеет только один параметр - stock. Когда вы делаете вызов lapply(symbols, getFin, env=tickers), lapply пытается передать tickers аргументу env для getFin, которого не существует.

Benjamin Christoffersen 16.07.2018 23:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
56
0

Другие вопросы по теме