错误:在Unix环境下,R中C堆栈溢出的段错误

时间:2017-04-18 09:10:45

标签: r unix data.table

我目前正在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来开发我的解决方案的限制。

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

非常感谢提前!

1 个答案:

答案 0 :(得分:0)

你没有给出一个可重复的例子,你的代码很乱,所以很难遵循。我不确定你的段错误来自哪里(你有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发生错误的位置。