r - 错误:使用 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)
解决方案
解释:
C使用数据栈来临时保存数据。每次调用 C 函数时,都会将信息压入堆栈;当函数完成时,它会释放它放入堆栈的数据。所以堆栈会增长和缩小。堆栈不是无限的。在某些时候,当调用的函数太多尚未完成时,堆栈将被耗尽。在您的情况下,运行时系统会检查在将数据放入堆栈之前(或之后)是否有足够的存储空间。该系统确定堆栈已用尽并警告您。
一些系统,可能是你的 R,将巨大的“blob”放在堆栈上,有效地制作数据的副本。
您可以浏览您的代码以查看使用大型数据集的位置,并查看是否可以对数据集进行这些引用,从而无需制作这些数据集的副本。我不是那里的专家,把它留给你(或其他 Stack 成员)。
推荐阅读
- sql - 时间偏移(Paris-Kuwait)不正确的时区差异 SQL Server
- excel - 我需要 Excel VBA 代码以将工作簿另存为非 vba Excel 文件
- c++ - 如何创建 value_type 类型特征?
- excel - 在 VBA 中删除过滤器时,为什么删除的行会重新出现在 Excel 表中?
- python - 用python打印圣诞树
- java - ArrayList 在 Java 中被清除和覆盖
- php - if else WP is_user_logged_in 不显示正确的内容
- selenium - 我如何在多个值上执行鼠标悬停,这些值可以通过样式属性的值来区分,例如“顶部”和“左”
- python - 使用 python ==$0 抓取网页内容在 beautifulsoup 中不可用
- sql - SQL Regexp 对任何单词组合的模式匹配