受限排列(permute)使用 shuffleSet 失败,使用 shuffle 运行
Restricted permutation (permute) fails using shuffleSet and runs using shuffle
我正在使用 vegan-package 进行 PRC,但是 运行 当我尝试对结果执行方差分析时遇到了麻烦。我收到以下错误消息:
Error in doShuffleSet(spln[[i]], nset = nset, control) :
number of items to replace is not a multiple of replacement length
问题出在 permute-package 的 shuffleSet-function 中。我在下面创建了一个可重现的示例。奇怪的是 shuffle-function 不会造成麻烦,但 shuffleSet-function 会。
在我的实验中,对 4 只动物进行了 3 次治疗。这些动物以不同的顺序接受治疗。每天随时间收集 5 个样本。
我想在动物内部而不是动物之间置换我的观察结果。因此我使用 AnimalID 作为一个块。
我想排列天数(在我的实际实验中,动物多次接受相同的治疗)但在一天内保持测量值不变。因此我选择自由排列Days并且在Days内没有排列。
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)
关键问题似乎是 nset = 1
:生成了排列并且 shuffleSet
有效,但是打印结果失败,因为一组被丢弃到一个向量并且 print
期望一个矩阵。你可以得到排列,你可以使用排列,但你不能print
它。
我们必须解决这个问题。
我正在使用 vegan-package 进行 PRC,但是 运行 当我尝试对结果执行方差分析时遇到了麻烦。我收到以下错误消息:
Error in doShuffleSet(spln[[i]], nset = nset, control) :
number of items to replace is not a multiple of replacement length
问题出在 permute-package 的 shuffleSet-function 中。我在下面创建了一个可重现的示例。奇怪的是 shuffle-function 不会造成麻烦,但 shuffleSet-function 会。
在我的实验中,对 4 只动物进行了 3 次治疗。这些动物以不同的顺序接受治疗。每天随时间收集 5 个样本。
我想在动物内部而不是动物之间置换我的观察结果。因此我使用 AnimalID 作为一个块。
我想排列天数(在我的实际实验中,动物多次接受相同的治疗)但在一天内保持测量值不变。因此我选择自由排列Days并且在Days内没有排列。
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)
关键问题似乎是 nset = 1
:生成了排列并且 shuffleSet
有效,但是打印结果失败,因为一组被丢弃到一个向量并且 print
期望一个矩阵。你可以得到排列,你可以使用排列,但你不能print
它。
我们必须解决这个问题。