我目前正在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 overflow 和segfault from C stack overflow in R using data.table。
我已尝试重新加载软件包,以防安装损坏。 我不认为这是一个太空问题。该脚本是在Windows环境(R 3.2.2)下开发的,这行代码在那里运行良好。这似乎与我在Unix环境(R 3.2.0)中运行脚本的事实有关。但是,它没有意义,因为我的Unix环境在计算能力和可用内存方面比我的Windows环境更强大。
我显然受到必须使用R和Unix来开发我的解决方案的限制。
亲爱的社区,您知道这个问题的解决方案吗?
非常感谢提前!
答案 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发生错误的位置。