Мне нужно запустить функцию для набора входов. Имеется 4 входа (pd, cl, va, co) для 5 различных ситуаций (5 строк в кадре данных «входы»). Функция должна запускаться для каждой строки по 100 значениям P. И сохранять ответ, который сводит к минимуму разницу с параметром Гивина (в данном случае это отношение).
Ниже приведен воспроизводимый пример.
Проблема, с которой я столкнулся, заключается в том, что она работает хорошо только для первой строки ввода. Поэтому, это дает мне эту ошибку: Error in $<-.data.frame`(`*tmp*`, min.diff, value = list(response = 20.091674500638)) : replacement has 1 row, data has 5".
Обходя это несколько часов, но не смог выяснить ошибку.
Есть подсказка?
Большое спасибо заранее
inputs <- data.frame(pd=c(38, 50, 50, 86, 38),
cl=c(15, 40, 30, 81, 15),
va=c(150, 145, 160, 141, 150),
co=c(3.0, 4.5, 4.0, 4.8, 1.5))
P <- c(seq(0,150,length.out=100))
eq1 <- function(a,b,c,x){
(a*exp(-((((exp(b)*x))/1000))+c+b))/1000
}
resp.function <- function(pd, cl, va, co, P){
a <- 10000 + 0.01*pd + (-0.1*cl)
b <- 2
c <- -1
ratio <- co / (va/1000)
min.diff <- as.data.frame(eq1(a,b,c,P)) %>%
rename(response = "eq1(a, b, c, P)") %>%
mutate(diff=abs(response - ratio)) %>%
slice(which.min(diff)) %>%
select(response)
return(min.diff)
}
inputs$min.diff <- resp.function(inputs$pd, inputs$cl, inputs$va, inputs$co, P)