2016-06-29 11 views
1

Я делаю PRC, используя пакет vegan-pack, но столкнулся с трудностями, когда я пытаюсь выполнить Anova по результатам. Я получаю следующее сообщение об ошибке-сообщение:Ограниченная перестановка (перестановка) не выполняется с использованием shuffleSet и выполняется с использованием shuffle

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

Проблема берет свое начало в shuffleSet-функции переставлять-пакета. Я создал воспроизводимый пример ниже. Странно, что функция тасования не вызывает проблем, но функция shuffleSet делает.

В моем эксперименте 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

Только для того, чтобы быть ясным: я никогда не получал сообщение об ошибке, о котором вы сообщали («количество элементов для замены не кратно длины замены»), которое звучит как ошибка пользователя. Сообщение, которое я получил, было 'invalid, чтобы установить класс в матрицу, если атрибут измерения имеет длину 2 (был 0)', который поступает из 'print'ing перестановок. Причина этого очевидна: с 'nset = 1' перестановки сводятся к вектору вместо однорядной матрицы. Второй случай, который вы сообщали с помощью фактора AnimalDay, работает в 'print', потому что он не падает до вектора. В обоих случаях работает 'shuffleSet'. –