В пакете rootSolve
функция multiroot
требует входной аргумент, который представляет собой набор функций. Я нашел способ динамически определять, сколько функций содержится в этом входном аргументе, но мне нужна помощь сообщества R
в отношении более чистого подхода. Пример входной функции здесь (недоопределено, но это не имеет значения, так как он разбирается)
Kfunc<-function(x) {
z<-c( z1<- 4*var1 -3*var2 +5*var3, z2<-8*var1 +5*var2 -2*var3 )
}
Где z1,z2,z3
- это выходы, а "varJ" - параметры, которые должны быть определены
Я придумал этот стек функций, чтобы выяснить, сколько отдельных функций находится «внутри» определения z
:
bar <- parse(text = (parse(text = body(Kfunc)[2] )[[1]][3]))
length(bar[[1]])
#[1] 3
bar[[1]][1]
#c()
bar[[1]][2]
#(z1 <- 4 * var1 - 3 * var2 + 5 * var3)()
bar[[1]][3]
#(z2 <- 8 * var1 + 5 * var2 - 2 * var3)()
Показывает, что число уравнений равно length(bar[[1]]) - 1
Существует ли более быстрый / короткий / более чистый способ, желательно без использования неосновной библиотеки?