受限制的排列(置换)使用shuffleSet失败并使用shuffle运行

时间:2016-06-29 15:25:46

标签: r shuffle vegan permute

我正在使用纯素包进行PRC,但在尝试对结果执行Anova时会遇到麻烦。我收到以下错误消息:

Error in doShuffleSet(spln[[i]], nset = nset, control) : 
  number of items to replace is not a multiple of replacement length

问题源于permute-package的shuffleSet函数。我在下面创建了一个可重现的示例。奇怪的是,shuffle函数不会造成麻烦,但是shuffleSet函数会起作用。

在我的实验中,对4只动物进行了3次治疗。动物以不同的顺序接受治疗。每天,随着时间的推移收集5个样品。

我想在动物内部而不是在它们之间进行观察。因此我使用AnimalID作为块。

我想置换天数(在我的实际实验中,动物多次接受相同的治疗),但保持一天内的测量完好无损。因此,我选择自由地置换天,并且在几天内没有排列。

require(permute)    
TreatmentLevels=3
Animals=4
TimeSteps=5
AnimalID=rep(letters[1:Animals],each=TreatmentLevels*TimeSteps)
Time=rep(1:TimeSteps,Animals=TreatmentLevels)
#treatments were given in different order per animal. 
Day=rep(c(1,2,3,2,3,1,3,2,1,2,3,1),each=TimeSteps) 
Treatment=rep(rep(LETTERS[1:TreatmentLevels],each=TimeSteps),Animals)
dataset=as.data.frame(cbind(AnimalID,Treatment,Day,Time))

ctrl=how(blocks = dataset$AnimalID,plots = Plots(strata=dataset$Day,type = "free"),
          within=Within(type="none"), nperm = 999)

#this works
shuffle(60,control=ctrl)
#this giveas an error
shuffleSet(60,nset=1,control=ctrl)
shuffleSet(60,nset=10,control=ctrl)

问题似乎出现在障碍中。因为这有效

dataset$AnimalDay=factor(paste0(dataset$AnimalID,dataset$Day))
ctrl=how(plots = Plots(strata=dataset$AnimalDay,type = "free"),
          within=Within(type="none"), nperm = 999)

#this works
shuffle(60,control=ctrl)
shuffleSet(60,nset=1,control=ctrl)
shuffleSet(60,nset=10,control=ctrl)

1 个答案:

答案 0 :(得分:1)

关键问题似乎是nset = 1:生成排列并且shuffleSet有效,但打印结果失败,因为一组被删除到一个向量而print需要一个矩阵。你可以得到排列,你可以使用排列,但你不能print它。

我们必须解决这个问题。