Я делаю 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)
Он также не работает nset = 10 – Nightingale
Я не могу подтвердить это: он работает нормально с nset = 10, когда я пытаюсь. Кроме того, 'shuffleSet' работает во всех случаях, также с' nset = 1'. То, что не удается, показывает его результат на экране. Сообщение об ошибке появляется из 'print.permutationMatrix()', и если вы сохраните результат без отображения с помощью 'p <- shuffleSet (60, nset = 1, control = ctrl)', вы не получите ошибки. –
Только для того, чтобы быть ясным: я никогда не получал сообщение об ошибке, о котором вы сообщали («количество элементов для замены не кратно длины замены»), которое звучит как ошибка пользователя. Сообщение, которое я получил, было 'invalid, чтобы установить класс в матрицу, если атрибут измерения имеет длину 2 (был 0)', который поступает из 'print'ing перестановок. Причина этого очевидна: с 'nset = 1' перестановки сводятся к вектору вместо однорядной матрицы. Второй случай, который вы сообщали с помощью фактора AnimalDay, работает в 'print', потому что он не падает до вектора. В обоих случаях работает 'shuffleSet'. –