错误:从unix环境中r中C中的segfault



我目前正在使用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的问题。否则,您必须通过提供可再现的示例来帮助我们缩小错误来自哪里。

最新更新