Мне необходимо выполнить итерацию через набор значений для параметров A,B,C
, чтобы создать таблицу результатов, которая поможет мне проанализировать важность таких параметров. Это для программы в R.Как эффективно выполнять итерацию через сложную функцию, которая выводит данные?
Допустим, что:
A
идет отrangeA = 1:10
B
идет отrangeB = 11:20
C
идет отrangeC = 21:30
Самый простой (не наиболее эффективное) решение, которое я сейчас использую, выглядит примерно так:
### here I create this empty dataframe because I add on each tmp calc later
res <- data.frame()
### here i just create a random dataframe for replicative purposes
dataset <- data.frame(replicate(10,sample(0:1,1000,rep=TRUE)))
ParameterAdjustment() <- function{
for(a in rangeA){
for(b in rangeB){
for(c in rangeC){
### this is a complicated calculation that is much more
### difficult than the replicable example below
tmp <- CalculateSomething(dataset,a,b,c)
### an example calculation
### EDIT NEW EXAMPLE CALCULATION
tmp <- colMeans(dataset+a*b*c)
tmp <- data.frame(data.frame(t(tmp),sd(tmp))
res <- rbind(res,tmp)
}
}
}
return(res)
}
Моя проблема заключается в том, что это отлично работает с моим исходным набором данных, который выполняет вычисления на 7000x500 фрейм данных. Однако мои новые наборы данных намного больше, и производительность стала важной проблемой. Может ли кто-нибудь предложить или помочь с более эффективным решением? Спасибо.
Я думаю, что вам нужно предоставить более реалистичный пример 'CalculateSomething'. В настоящее время это довольно тривиально, так как 'tmp' является скаляром. Хотя, TBH, ваш 'res <- rbind (res, tmp)' не предоставляет пару «ключ-значение», что означает, что как в настоящее время структурированное получение «оптимальных» значений a, b, c из 'res' кажется бесполезным болезненный. –
Кроме того, было бы полезно предварительно выделить память для res и использовать 'res [k] <- tmp' вместо огромного количества вызовов для назначения и rbind –
Я отредактировал пример расчета, чтобы сделать его более подходящим –