Создание для l oop для двух переменных в R - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть набор данных по количеству фекальных яиц (FE C) у овец, и я хотел бы проверить эффект различных обработок. У меня 120 ферм, обработанных комбинацией разных лекарств. Я использую пакет «eggcount», основанный на байесовском подходе, для моделирования и получения результатов для каждой фермы и лечения (лекарства).

Я хочу сделать al oop для двух переменных; я) Фарм и II) наркотики. Это означает, что for l oop может генерировать выходные данные для каждой фермы и препарата, аналогично функции подмножества.

setwd("C:/Data")
dat <- read.csv("McMaster_UTC.csv", header=T, sep="'", na.string=NA)
dat$EPG1 <- as.numeric(dat$EPG1)
dat$EPG2 <- as.numeric(dat$EPG2)

# subset for Fram & Drug: if I want to run the data for each Farm and Drug. I assume with a loop I don't #need the subset function.
dat1 <-subset(dat, Farm==1 & Drug=="CLO", select=1:9)

# A model to compare the two groups (unpaired)
model <- fecr_stan(egg.1$EPG1/50, egg.1$EPG2/50, rawCounts=FALSE, paired=FALSE, indEfficacy=FALSE)

#This is the for loop that I have in my mind, but not sure how to fit these in the loop:
out <- vectro()
for(i in 1:ncol(dat)) {
  for(j in 1:ncol(dat)) {
....
....
set.seed(1234)
model <- fecr_stan(egg.1$EPG1/50, egg.1$EPG2/50, rawCounts=FALSE, paired=FALSE, indEfficacy=FALSE)

    model[i] <- out[i]

Вот подмножество моих данных:

Примерные данные для 2 ферм с двумя препаратами

1 Ответ

0 голосов
/ 09 апреля 2020

Если я правильно понимаю, что вы хотите, вы просто хотите l oop по каждой комбинации Farm и Drug. Шаг 1 состоит в том, чтобы определить уровни каждого из этих факторов. Если вы прочитали свой CSV-файл без stringsAsFactors, установленного на FALSE, мы можем получить уровни с помощью функции levels:

Farms = levels(dat$Farm)
Drugs = levels(dat$Drug)

Затем для l oop по каждому из них вы можете просто do:

set.seed(1234) ## Only put this inside your loop if you want to use the same
               ## sequence of random numbers for each model.  
for(farm in Farms){
  for(drug in Drugs){
    dat1 <-subset(dat, Farm == farm & Drug == drug, select=1:9)
    model <- fecr_stan(dat1$EPG1/50, dat1$EPG2/50, 
                       rawCounts = TRUE, paired=FALSE, 
                       indEfficacy=FALSE)

   ## Note you'll have to do something to save or store the model output here
  }
}

Спасибо Джеймсу за ваши коды / комментарии, очень признателен. Первый; в моих кодах есть пара ошибок: egg.1$EPG1/50 and egg.1$EPG1/50 должно быть dat$EPG1/50 & dat$EPG1/50. Я должен сказать, что я не очень хорош с петлями, на тот случай, если я задаю глупые вопросы здесь. Да, я хочу сравнить разницу между значениями $ EPG1 / 50 и dat $ EPG2 / 50 для каждого препарата в каждой ферме и сохранить результат в векторе. Когда вы говорите «Я * над каждым», что вы подразумеваете под этим? Вы предлагаете, чтобы я поставил model <- fecr_stan(dat$EPG1/50, dat$EPG2/50, rawCounts=TRUE, paired=FALSE, indEfficacy=FALSE), и это будет работать? Должен ли я поставить setseed(12345) вне l oop? Я ценю ваши мысли! Я приложил образец своих данных в виде изображения, если вы хотите посмотреть. Я не знал, как мне вставить образец моих данных здесь.

...