如何解决这种特定类型的rbind(deparse.level,...):替换有长度为零的错误?

时间:2017-05-28 14:22:53

标签: r debugging rbind

问题

我正在做一个rbind,我遇到以下错误,如下所示:

Error in rbind(deparse.level, ...) : replacement has length zero

我该如何解决此错误?

详细

代码在循环中。我正在浏览一个数据帧,如果某个行的步骤为空值,我将其替换为某些内容并继续。这很有效,直到我进入第289行,基本上我知道它看起来就像之前那样(除了间隔是0而不是2355,但是当我把它改为2356只是为了检查是不是它,仍然得到相同的错误,所以这是某种格式化的东西)。

代码如下:

rbind(df, row)

我有一个数据框,让我们称之为df,看起来就像这样。

    steps         interval      dates
283 2.6037736     2330          2012-10-01
284 4.6981132     2335          2012-10-01
285 3.3018868     2340          2012-10-01
286 0.6415094     2345          2012-10-01
287 0.2264151     2350          2012-10-01
288 1.0754717     2355          2012-10-01

该行如下:

        steps    interval      dates
289     0        0             2012-10-02

以下是有关df和row的一些详细信息:

data.frame':    288 obs. of  3 variables:
 $ steps   :'data.frame':   288 obs. of  1 variable:
  ..$ steps: num  1.717 0.3396 0.1321 0.1509 0.0755 ...
 $ interval: int  0 5 10 15 20 25 30 35 40 45 ...
 $ dates   : Date, format: "2012-10-01" "2012-10-01" "2012-10-01" "2012-10-01" ...

'data.frame':   1 obs. of  3 variables:
 $ steps   : int 0
 $ interval: int 0
 $ dates   : Date, format: "2012-10-02"

更新

我认为问题在于我的步骤是数据帧中的数据帧。它应该只是一列数值。以下是一些代码,用于指定df的预期定义。请参阅:

df <- data.frame(steps = numeric, date = date, interval = integer)
> str(df)
'data.frame':   0 obs. of  3 variables:
 $ steps   :function (...)  
 $ date    :function (...)  
 $ interval:function (...)  

以下内容不容易重复,我在高级中道歉,但我可以描述代码正在做什么。我的NA数据集中包含steps,我使用row$steps <- subset(avgStepsByInterval, interval == row$interval, steps)NA替换为数字。例如,这个想法是:

     steps    interval      dates
289     NA        0             2012-10-02

变为

     steps    interval      dates
289     0        0             2012-10-02

我使用的循环如下:

for(i in 1:size)
{
  index<-i
  row <- data[i,]
  isNa <- is.na(row$steps)
  if(isNa)
  {
    row$steps <- subset(avgStepsByInterval, interval == row$interval, steps)
  }
  df<-rbind(df, row)
}

不要担心尝试复制上面的代码,我认为这不重要,但我希望它能帮助人们理解我可能正在做的事情。如果没有,请告诉我,我会看看是否可以创建一些可复制的代码(这需要一些时间)。它可能会爆炸,因为steps在某种程度上是df中数据框内的数据框。哪个不对。我们的row定义是正确的。

尝试

我尝试了以下方法无济于事:

  • 使用do.call方法
  • 格式化行
  • 将行转换为data.frame(已经是)
  • 操作步骤中的值和行中的间隔。

我认为我的格式显然有问题,但如果我不知道什么是错的话我无法解决问题。以上是我能够从调试代码中收集到的。坦率地说,我完全不知所措,并且会感谢有经验的人向我表明出现了什么问题,以及我如何才能最好地解决这个问题?任何帮助,问题或评论都是最受欢迎的。

1 个答案:

答案 0 :(得分:0)

简单回答

执行以下操作: row$steps <- subset(avgStepsByInterval, interval == row$interval, steps)

说明

问题是steps是一个数据框对象。换句话说,我们试图将具有所需数据帧定义的row绑定到没有正确定义的数据帧对象df

这是因为 row$steps <- subset(avgStepsByInterval, interval == row$interval, steps)正在返回一个数据框对象。所以我们只需要按如下方式重写它:

row$steps <- as.numeric(subset(avgStepsByInterval, interval == row$interval, steps))

这意味着dfrow的定义会匹配。

摘要

如果您正在搜索stackoverflow并且您看到此错误。确保您尝试rbind的对象具有匹配的预期结构。