R,LME和Tukey Test在排序后产生错误

时间:2016-10-31 17:40:48

标签: r

下面你会发现一个简化的代码片段,它能够重现我得到的错误:

rm(list=ls(all=TRUE))
rawdata <- read.table(file = "test.csv", header=TRUE, sep=",", dec=".", stringsAsFactors = TRUE)
sets <- levels(as.factor(rawdata[,'set']))
index <-  rawdata[,'set']==sets[1]
testdata <- rawdata[index,]

testdata$name <- as.factor(testdata$name)
testdata$name <- factor(testdata$name, as.character(testdata$name))
#### sorting step
sortindex <- with(testdata,order(name))
testdata <- testdata[sortindex,]
####
testdata.lme  <- lme (var~name, random=~1|sample,testdata, method='REML')
testdata.lme.tuk <- summary(glht(testdata.lme, linfct=mcp(name='Tukey'))) 

错误如下:

Error in glht.matrix(model = list(modelStruct = list(reStruct = list(sample = -10.3240629947066)),  : 
  ‘ncol(linfct)’ is not equal to ‘length(coef(model))’
如果省略排序步骤,则不会生成

。但是,我需要在更大的代码中进行排序,以便清理其他功能和数据。另外,我希望第一个变量代表我的控件,因此也就是截距。

之前在其他一些博客中出现了同样的问题,但要么没有解决,要么是数据清理问题。有没有人有想法?

我在这里使用的数据如下所示,但我认为只要包含子集和排序步骤,错误就是可重现的:

name    var sample  set
423 10.31   1   1
423 10.39   1   1
423 10.86   1   1
421 10.75   1   1
421 10.24   1   1
421 10.27   1   1
424 10.75   1   1
424 10.75   1   1
424 10.75   1   1
423 10.14   2   1
423 10.85   2   1
423 10.48   2   1
425 10.56   1   1
425 10.67   1   1
425 10.17   1   1
426 10.50   1   1
426 10.30   1   1
426 10.29   1   1
423 10.57   3   1
423 10.07   3   1
423 10.01   3   1
428 10.26   1   1
428 10.17   1   1
428 10.72   1   1
429 10.88   1   1
429 10.93   1   1
429 10.63   1   1
423 10.38   4   1
423 10.54   4   1
423 10.25   4   1
432 10.72   1   1
432 10.62   1   1
432 10.14   1   1
434 10.45   1   1
434 10.38   1   1
434 10.41   1   1
435 10.64   1   1
435 10.21   1   1
435 10.21   1   1
423 10.46   5   1
423 10.41   5   1
423 10.13   5   1
501 10.09   1   1
501 10.86   1   1
501 10.05   1   1
503 10.22   1   1
503 10.94   1   1
503 10.38   1   1
423 10.31   1   2
423 10.39   1   2
423 10.86   1   2
421 10.75   1   2
421 10.24   1   2
421 10.27   1   2
424 10.75   1   2
424 10.75   1   2
424 10.75   1   2
423 10.14   2   2
423 10.85   2   2
423 10.48   2   2
425 10.56   1   2
425 10.67   1   2
425 10.17   1   2
426 10.50   1   2
426 10.30   1   2
426 10.29   1   2
423 10.57   3   2
423 10.07   3   2
423 10.01   3   2
428 10.26   1   2
428 10.17   1   2
428 10.72   1   2
429 10.88   1   2
429 10.93   1   2
429 10.63   1   2
423 10.38   4   2
423 10.54   4   2
423 10.25   4   2
432 10.72   1   2
432 10.62   1   2
432 10.14   1   2
434 10.45   1   2
434 10.38   1   2
434 10.41   1   2
435 10.64   1   2
435 10.21   1   2
435 10.21   1   2
423 10.46   5   2
423 10.41   5   2
423 10.13   5   2
501 10.09   1   2
501 10.86   1   2
501 10.05   1   2
503 10.22   1   2
503 10.94   1   2
503 10.38   1   2

1 个答案:

答案 0 :(得分:1)

您需要做的就是在子集或排序步骤后再次将factor()函数应用于您的变量:

testdata$name <- factor(testdata$name)