2015-02-18 2 views
0

У меня есть следующий код для заполнения кадра данных результатом функции row-wise. Результат функции внутри цикла является случайной основой (часть моделирования):Заполнить кадр данных результатом функции

input <- as.data.frame(matrix(seq(1:20),4,5), row.names = c("A", "B", "C", "D")) 
output <- data.frame() 

j = 1 
for (rowname in rownames(input)) { 
    output <- rbind(output,ifelse(runif(5)+2>=rep(1/input[j,1],5),round(rgamma(5,shape=0.8, rate=2),0),rep(0,5))) 
    j = j+1 
} 
rownames(output) <- rownames(input) 

Я хотел бы избежать цикла, и я думаю, там должна быть способом сделать это в менее линии и более эффективный способ в Р. У вас есть идея, как это сделать?

В идеале, я хотел бы передать все аргументы уже во время создания кадра выходных данных.

+0

@akrun Я думаю, что мы пытаемся цикл столько раз, сколько строк. – zx8754

+0

Я знаю, я использую его только для итерации через фрейм данных. Я уверен, есть лучший способ для этого (может быть, «длина»), мои знания R слишком ограничены. Основной проблемой, которую я хочу избежать, является цикл for. – mondano

+0

Просьба пояснить, что происходит внутри цикла. – zx8754

ответ

1

Что-то вроде этого:

ifelse(
    matrix(runif(prod(dim(input)))+2,nrow=nrow(input)) >= 1/input, 
    matrix(round(rgamma(prod(dim(input)),shape=0.8, rate=2),0),nrow=nrow(input)), 
    0) 
+0

спасибо, очень элегантный! – mondano

Смежные вопросы