Цикл по строкам фрейма данных для имитации - PullRequest
4 голосов
/ 03 августа 2011

Это больше вопрос программирования на R, чем любой концептуальный вопрос.Я пытался, но моя нехватка опыта в R разочаровывает меня:

У меня есть фрейм данных df с идентификаторами столбцов, xR01, xR02, nR01, nR02, xRsum, и я хочу использовать гипергеометрическую функцию для генерации смоделированных данных.Сделать это для одного значения просто:

df$xSim01 = rhyper(1, df$nR01, df$nR02, df$xRsum)

Но моя проблема в том, что если я применю это в приведенной выше форме, мне кажется, что это дает мне одно значение для всех 20 000 строк.Это заставило меня подумать, что это может работать правильно, если я буду циклически проходить по каждой строке.Итак, что будет наиболее эффективно при использовании apply, with или любой другой функции?

Мой второй вопрос:
Сначала я хотел бы смоделировать эти две 20000 строк, чтобы получить первый смоделированный набор данных, затем хотел быполучить среднее значение этого имитируемого столбца и сохранить его каким-либо образом и повторить моделирование N раз.Это своего рода вложенный цикл, и вы хотите найти эффективный способ сэкономить время вычислений.В правильном коде в R будет оценено.Спасибо

dat.sim$xR01 <- rhyper(1, dat.obs$nR01, dat.obs$nR02, dat.obs$xRsum)

1 Ответ

2 голосов
/ 03 августа 2011

Все функции случайного рисования векторизованы:

df$xSim01 = rhyper(20000, df$nR01, df$nR02, df$xRsum)

Посмотрите на replicate, чтобы делать это многократно и избегать цикла.Вы захотите создать свою собственную функцию, которая рисует наблюдения и принимает среднее значение.Что-то вроде:

draw.mean <- function(dat,n) {
   return( mean(rhyper(n,dat$nR01,dat$nR02,dat$xRsum)) )
}
replicate(1000,draw.mean(dat=df,n=20000))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...