R - 错误“可变长度不同”

时间:2017-01-18 23:16:43

标签: r

> #transforming length of time
> transLOT<-log(LengthofTimemin)
> 
> #checking for outliers
> fit<-lm(transLOT~DielEnd+TideEnd+TideStart+Moonphase+TideStart*Moonphase, data=resdata)
> outlierTest(fit)
    rstudent unadjusted p-value Bonferonni p
295 4.445284         1.1025e-05    0.0052808
> 
> #getting rid of the outlier data in row 295
> rdata<-resdata[-295, ]
> print(rdata[294:296,5:10])
# A tibble: 3 × 6
  DepartureDate       DepartureTime        LengthofTime LengthofTimemin EventLengthCategories
         <dttm>              <dttm>              <dttm>           <dbl>                 <chr>
1    2016-09-19 1899-12-30 23:46:46 1899-12-30 00:05:49        5.816667                  5-15
2    2016-09-20 1899-12-30 01:55:28 1899-12-30 00:01:20        1.333333                    <5
3    2016-09-20 1899-12-30 04:07:28 1899-12-30 00:01:21        1.350000                    <5
> newfit<-lm(transLOT~DielEnd+TideEnd+TideStart+Moonphase+TideStart*Moonphase, na.action=na.exclude, data=rdata)
Error in model.frame.default(formula = transLOT ~ DielEnd + TideEnd +  : 
  variable lengths differ (found for 'DielEnd')
> #now all of a sudden the variable lengths differ

我理解删除数据行时会出现问题,但我认为na.exclude会解释它。彻底搜索后,我无法确定发生此错误的原因。

1 个答案:

答案 0 :(得分:3)

这是因为您在第一步中在数据框之外创建了一个单独的变量transLOT<-log(LengthofTimemin)。从数据中删除行时,transLOT保持不变。甚至比不同长度更糟糕的是,您的数据不再排列 - 如果忽略不同的长度,则与您删除的行之后的响应相比,您的数据行将“减1”。

简单的解决方案是在数据框中创建transLOT变量。然后,无论何时对数据执行操作(例如删除行),都会对transLOT执行相同的操作。

resdata$transLOT <- log(resdata$LengthofTimemin)

请注意,我还使用您在工作区中看到的resdata$LengthofTimemin而不是LengthofTimemin。你有没有在某个时候使用attach()?出于这个原因,您不应该使用attach。将变量保存在数据框中!