下面你会发现一个简化的代码片段,它能够重现我得到的错误:
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
答案 0 :(得分:1)
您需要做的就是在子集或排序步骤后再次将factor()
函数应用于您的变量:
testdata$name <- factor(testdata$name)