r中的错误消息:没有要聚合的行

时间:2014-05-20 10:08:29

标签: r csv error-handling

我正在运行用r语言编写的程序,该程序用于将许多csv数据文件编译成一个csv文件,然后生成一个输出文件,其中包含在组合文件中选择的少数变量的简单计算输出。后面的过程是通过使用组合文件作为输入,选择变量并指定我需要的值的类型来完成的。除了这个解释之外,每天都会获得数据文件,这些文件通过r程序获得一些分析,例如所选时间间隔内的数据的最小值,最大值,平均值或总和。

继续讨论我对这个程序的问题,程序通常能够生成组合的csv文件而没有太大问题,但是当涉及到生成输出文件的部分时,程序有时会生成聚合错误消息:

aggregate.date.frame中的错误(mf [1L],mf [-1L],FUN = FUN,...): 没有要聚合的行

此错误消息仅针对某些组合数据文件显示,并且让我更加困惑,因为导致此类问题的组合csv文件中的数据与不会导致此问题的组合文件没有任何差异。但是,目前我仍然怀疑组合数据csv文件而不是程序应该有问题,因为程序通常适用于许多分析案例。

基本上,程序使用聚合函数来计算输出文件。

我很擅长使用r,而我正在使用的程序包含几个阶段,所以如果我的解释不太明确,我会道歉。

至少,我想知道这种聚合错误的可能原因是什么。提前谢谢。

2 个答案:

答案 0 :(得分:3)

发出此错误是因为传递给聚合的对象(与x匹配的任何对象)的行数为零。

以下给出了函数的前10行:

> head(aggregate.data.frame, 10)

1  function (x, by, FUN, ..., simplify = TRUE)                               
2  {                                                                         
3      if (!is.data.frame(x))                                                
4          x <- as.data.frame(x)                                             
5      FUN <- match.fun(FUN)                                                 
6      if (NROW(x) == 0L)                                                    
7          stop("no rows to aggregate")                                      
8      if (NCOL(x) == 0L) {                                                  
9          x <- data.frame(x = rep(1, NROW(x)))                              
10         return(aggregate.data.frame(x, by, function(x) 0L)[seq_along(by)])

所以在你致电aggregate之前,请在对象上调用NROW,它会告诉你它是否为零。这可能是由于一些原因而发生的,但如果没有可重复的例子,则很难知道。一个原因可能是x与错误的参数匹配。但是,如果它对某些csv文件运行良好,那么可能并非如此。这个对象更可能确实有0行,可能是因为子集化。

答案 1 :(得分:0)

只需键入函数名aggregate.data.frame(),查看aggregate.data.frame的源代码,如果NROW(x)为零,您将看到此错误。如果mf[1]没有维度且长度为零,或者其第一维度为零,则会发生这种情况。

如果没有更多的上下文,就不可能说出这是如何发生的,但请看Hadley Wickham's online book以获得有关调试的一些想法。