Нелинейная оптимизация для нескольких групп на data.frame в R - PullRequest
0 голосов
/ 08 февраля 2019

Мне нужно оптимизировать переменные и найти минимальное значение f, как уже было задано и дано ответом ( здесь ).

Разница в том, что у меня длинный data.frameс несколькими группами (идентификаторами), и нужно позвонить optim() и сохранить результаты для каждой из этих групп.

На примере post , как я мог бы элегантно адаптировать код R для поиска решений для каждого из моих идентификаторов в data.frame «Измеряется» (один номинал Y $ на идентификаториз data.frame)?

Спасибо!

A <- c(0, 10, 20, 40, 32, 65, 78, 12)
B <- c(0, 1.51, 2.51, 4.32, 9.87, 5.33, 6.22, 4.86)
ID <-c("A", "A", "A", "A", "B", "B", "B", "B") 
Measured <- as.data.frame(cbind(A, B, ID))

1 Ответ

0 голосов
/ 09 февраля 2019

Я не могу точно воспроизвести вашу проблему, поскольку вы не включили пример того, как бы вы вызывали функцию optim (), но мне кажется, что вам нужно разделить фрейм данных по ID, а затемиспользуйте lapply для вызова одной и той же функции на подкадре каждого идентификатора.

Вот пример, где я пытаюсь найти значения (A, B), минимизирующие (AB) ^ 2 для каждого идентификатора.Ваш реальный код, скорее всего, будет включать вызов optim () внутри lapply ().

A <- c(0, 10, 20, 40, 32, 65, 78, 12)
B <- c(0, 1.51, 2.51, 4.32, 9.87, 5.33,6.22, 4.86)
ID <-c("A","A","A","A","B","B","B","B") 
Measured <- as.data.frame(cbind(A, B, ID))

# Create a list containing one dataframe per ID
Measured2 <- split(Measured, f = Measured$ID)

# Apply a function to each dataframe in the list
# Let us assume we want to find the A, B pair minimizing (A - B)^2
results <- lapply(Measured2, function(df) {
  vals <- (A - B)^2
  df[which.min(vals), , drop = FALSE]
})

# Combined back to dataframe
do.call(rbind, results)
#>    A    B ID
#> A  0    0  A
#> B 32 9.87  B

Создан в 2019-02-09 пакетом Представление (v0.2.1))

...