Ошибка: C использование стека 7969408 слишком близко к пределу при использовании fredr - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь получить каждый ежемесячный временной ряд на уровне штата с веб-сайта FRED с помощью библиотеки R fredr. У меня проблемы с ошибкой, для которой нет контекста: «Ошибка: C использование стека 7969408 слишком близко к пределу». Я даже не уверен, что такое стек или что такое использование стека. Мой код в полном объеме выглядит следующим образом:

library('fredr')
library('tibble')
library('plyr')

fredr_set_key("9520a1b12422146da1b8126f77b8b53b")

x <- list('al', 'ak', 'az', 'ar', 'ca', 'co', 'ct', 'de', 'fl', 'ga', 'hi', 'id',
          'il', 'in', 'ia', 'ks', 'ky', 'la', 'me', 'md', 'ma', 'mi', 'mn', 'ms',
          'mo', 'mt', 'ne', 'nv', 'nh', 'nj', 'nm', 'new york', 'nc', 'nd', 'oh',
          'ok', 'or', 'pa', 'ri', 'sc', 'sd', 'tn', 'tx', 'ut', 'vt', 'va', 'wa',
          'wv', 'wi', 'wy')

get_monthlies <- function(x){
  offset = 0
  y = fredr_tags_series(tag_names = paste(x, ';monthly'), offset = offset)
  w = fredr_tags_series(tag_names = paste(x, ';monthly'), offset = offset)
  while(nrow(w) == 1000){
    offset = offset + 1000
    w = fredr_tags_series(tag_names = paste(x, ';monthly'), offset = offset)
    y = rbind(y,w)
  }
  y$place = x
  return(y)
}


multiple_calls_monthly <- function(x){
  #y = lapply(x, function(m) multiple_calls_monthly(m)) erroneous recursion
  y = lapply(x, function(m) get_monthlies(m))
  w = ldply(y, rbind)
  return(w)
}

multiple_calls_monthly(x)

1 Ответ

0 голосов
/ 17 января 2020

Объяснение:

C использует стек данных для временного сохранения данных. Каждый раз, когда вызывается функция C, информация помещается в стек; когда функция завершается, она освобождает данные, помещенные в стек. Таким образом, стек растет и сжимается. Стек не бесконечен. В какой-то момент, когда будет вызвано слишком много функций, которые еще не закончили sh, стек будет исчерпан. В вашем случае система во время выполнения проверяет, достаточно ли места для хранения до (или после) размещения данных в стеке. Эта система определила, что стек исчерпан, и предупредила вас.

Некоторые системы, возможно, ваш R, помещают огромные «капли» в стек, эффективно создавая копию данных.

Вы можете ходить через ваш код, чтобы увидеть, где используются большие наборы данных, и посмотреть, можете ли вы сделать эти ссылки на наборы данных, избавляя от необходимости делать копии этих наборов данных. Я там не эксперт, и оставляю это вам (или другим членам стека).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...