【问题标题】:Error: segfault from C stack overflow in R with Unix environment错误:来自 Unix 环境中 R 中 C 堆栈溢出的段错误
【发布时间】:2017-04-18 09:10:45
【问题描述】:

我目前正在 Unix 环境中使用 R 处理大量数据:

nrow = 32 793 730
ncol = 17

脚本执行的任务是将数据加载到 R 中,选择一定数量的变量以及使用包 data.table 和 RDS 格式创建其他变量。

在我运行这行代码之前一切顺利:

all.RDS <- file[ ,`:=`(TIME=ifelse(TIME==100000, "10:00",
                                   ifelse(nchar(TIME)==5, 
                                          paste0("0",substr(TIME,1,1),
                                                 ":",substr(TIME,2,3)),
                                          paste0(substr(TIME,1,2),":",
                                                 substr(TIME,3,4)))))]
all.RDS[,`:=`(DATETIME=paste0(format(DATE,format="%d%b%Y"),":",TIME))]

此行仅用于将时间变量从格式 100000 转换为格式 10:00:00。但是,我收到错误

错误:来自 C 堆栈溢出的段错误

我应该生成一个大约 600 行和 5800 列的 data.table。 根据我在该平台相关页面中找到的答案,我尝试了几件事: segfault from C stack overflowsegfault from C stack overflow in R using data.table

我已尝试重新加载软件包,以防安装损坏。 我不认为这是空间问题。该脚本是在 Windows 环境(R 3.2.2)下开发的,这行代码在那里运行良好。这似乎与我在 Unix 环境(R 3.2.0)中运行脚本有关。但是,这没有任何意义,因为我的 Unix 环境在计算能力和可用内存方面比我的 Windows 环境强大得多。

我显然受限于必须使用 R 和 Unix 来开发我的解决方案这一事实。

亲爱的社区,你知道这个问题的解决方案吗?

非常感谢!

【问题讨论】:

  • 尊敬的社区,如果有人对此有所了解,那将是非常有帮助的。有什么想法吗?

标签: r unix data.table


【解决方案1】:

你没有给出一个可重现的例子,而且你的代码是一团糟,所以很难理解。我不确定你的段错误来自哪里(你有installed the latest development version of data.table吗?),但这是解决问题的另一种方法:

file[ , TIME := sprintf('%06d', TIME)]
file[ , TIME := gsub('(.{2})(.{2})(.{2})', '\\1:\\2:\\3', TIME)]

希望这可以避免段错误的问题。否则,您将不得不通过providing a reproducible example 帮助我们缩小错误的来源。

【讨论】:

  • 非常感谢您的回答。它有很大帮助。它允许缩小段错误问题。 all.RDS[,:=(DATETIME=paste0(format(DATE,format="%d%b%Y"),":",TIME))] 是段错误问题的原因。我试图将格式和粘贴操作分开。两者似乎都失败了。
猜你喜欢
  • 2016-01-17
  • 1970-01-01
  • 2010-09-10
  • 2011-10-30
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 2013-02-19
相关资源
最近更新 更多