Я не могу точно воспроизвести вашу проблему, поскольку вы не включили пример того, как бы вы вызывали функцию 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))