2016-06-29 8 views
1

완전 채식주의 자 패키지를 사용하여 PRC를 수행하지만 결과에 Anova를 수행하려고 할 때 문제가 발생합니다.shuffleSet을 사용하여 제한된 순열 (permute)을 사용하지 못하고 셔플을 사용하여 실행합니다.

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

문제는 변경하다 - 패키지의 shuffleSet 기능에서 유래 : 나는 다음과 같은 오류 메시지가 나타납니다. 아래에 재현 가능한 예제를 만들었습니다. 이상한 것은 shuffle-function이 문제를 일으키지 않지만 shuffleSet-function이 문제가된다는 것입니다.

나의 실험에서 3 마리의 치료가 4 마리의 동물에게 주어졌다. 동물들은 다른 순서로 치료를 받았다. 매일 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

를 작동하기 때문에 중요한 문제는 nset = 1 것 같다 : 순열 생성 및 shuffleSet 작동하지만 한 세트의 벡터로 하락하고 print 매트릭스를 기대하기 때문에 결과를 인쇄하는 것은 실패합니다. 당신은 순열을 얻을 수 있습니다, 당신은 순열을 사용할 수 있지만, 당신은 print 수 없습니다.

우리는이 문제를 해결해야합니다.

+0

또한 nset = 10을 사용하여 실패합니다. – Nightingale

+0

확인할 수 없습니다. 시도 할 때 nset = 10으로 정상적으로 작동합니다. 또한,'shuffleSet'은 모든 경우에 동작하며'nset = 1'도 함께 작동합니다. 실패한 것은 결과를 화면에 보여줍니다. 오류 메시지는'print.permutationMatrix()'에서 가져오고'p <- shuffleSet (60, nset = 1, control = ctrl) '을 사용하여 결과를 저장하지 않으면 오류가 발생하지 않습니다. –

+0

그냥 분명히 : 사용자 오류처럼 들리는 오류 메시지 ('대체 할 항목 수는 대체 길이의 배수가 아닙니다')를 본 적이 없습니다. 내가받은 메시지는'dimension 속성이 길이 2 (0)가 아니라면'클래스를 행렬로 설정하는 것은 무효하다.'는 순열을'print'하는 것으로 나온다. 그 이유는 명백합니다 :'nset = 1'을 사용하면 순열은 1 행 행렬이 아닌 벡터로 떨어집니다. 'AnimalDay' 인자로보고 한 두 번째 경우는'print'에서 작동합니다. 벡터에 떨어지지 않기 때문입니다. 두 경우 모두'shuffleSet'이 작동합니다. –