非线性优化多个组在R A data.frame

问题描述 投票:0回答:1

我需要优化的变量,并找到f的最小值,如前面提出和回答(here)。

不同的是,我还有很长data.frame,有几组(IDS),并需要调用optim()并存储为这些群体中的每一个结果。

服用post的例子,我怎么能适应典雅,将R代码中查找到每一个我的ID在data.frame“测量”(占data.frame的ID一个Y $ PAR)的解决方案?

谢谢!

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))
r dataframe for-loop nonlinear-optimization
1个回答
0
投票

我无法准确地重现您的问题,因为你不包括你将如何调用的Optim()函数的例子,但在我看来,你需要的是分裂的ID数据框,然后使用lapply到调用每个ID的子数据帧相同的功能。

下面是一个例子,在这里我试图找到(A,B)值最小化(A-B)^ 2为每个ID。你真正的代码将可能涉及调用的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

reprex package创建于2019年2月9日(v0.2.1)

© www.soinside.com 2019 - 2024. All rights reserved.