首页 > 解决方案 > 错误:使用 fredr 时 C 堆栈使用 7969408 太接近限制

问题描述

我正在尝试使用 R fredr 库从 FRED 网站提取州级每个月的时间序列。我遇到了一个我没有上下文的错误,“错误: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)

标签: rc

解决方案


解释:

C使用数据栈来临时保存数据。每次调用 C 函数时,都会将信息压入堆栈;当函数完成时,它会释放它放入堆栈的数据。所以堆栈会增长和缩小。堆栈不是无限的。在某些时候,当调用的函数太多尚未完成时,堆栈将被耗尽。在您的情况下,运行时系统会检查在将数据放入堆栈之前(或之后)是否有足够的存储空间。该系统确定堆栈已用尽并警告您。

一些系统,可能是你的 R,将巨大的“blob”放在堆栈上,有效地制作数据的副本。

您可以浏览您的代码以查看使用大型数据集的位置,并查看是否可以对数据集进行这些引用,从而无需制作这些数据集的副本。我不是那里的专家,把它留给你(或其他 Stack 成员)。


推荐阅读