我目前正在使用UNIX环境中使用R进行大量数据处理:
nrow = 32 793 730
ncol = 17
脚本执行的任务是将数据加载到r中,选择一定量的变量以及使用软件包data的其他变量的创建。
一切顺利,直到我运行此代码线:
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 stack溢出的segfault
我应该产生一个数据。大约600行和5800列的表。我尝试了几件事,按照我在此平台相关页面中发现的答案:c堆栈溢出的segfault使用data.table。
如果安装损坏,我试图重新加载包装。我认为这不是空间问题。该脚本是在Windows环境(R 3.2.2(下开发的,并且此代码线在那里运行正常。这似乎与我在UNIX环境中运行脚本的事实有关(r 3.2.0(。但是,这是没有意义的,因为我的Unix环境在计算功能和可用内存方面要强大得多。
我显然受到我必须使用R和Unix来开发解决方案的事实。
您知道吗,亲爱的社区,解决这个问题的解决方案?
非常感谢!
您没有给出一个可重复的示例,而您的代码很混乱,因此很难遵循。我不确定您的Segfault来自哪里(您是否安装了data.table
的最新开发版本?(,但这是解决您问题的另一种方法:
file[ , TIME := sprintf('%06d', TIME)]
file[ , TIME := gsub('(.{2})(.{2})(.{2})', '\1:\2:\3', TIME)]
希望能避免使用Segfault的问题。否则,您必须通过提供可再现的示例来帮助我们缩小错误来自哪里。