Я пытаюсь решить неявное уравнение в R, используя функцию multiroot
из пакета rootSolve
.Передача символов в качестве имени переменной в R
Я читаю неявное уравнение из текстового файла, используя parse
. Кроме того, переменная, которую нужно решить, считывается из текстового файла как символ.
Для использования multiroot
,
multiroot(function, initial_guess, ....))
мы должны сгенерировать функцию из уравнения чтения. Я сделал это
fun <- function(op) {fun <- eval(expr.im)}
op = as.name(opim.names)
где expr.im
является прочитанной неявное уравнение как выражение из текстового файла, а opim.names
переменная будет решена, как характер.
Но проблема возникает, когда я передаю переменную op
, чтобы решить ее как символ функции. Это дает ошибку, говорящую о том, что объект
«переменная, подлежащая решению для» не найдена.
Я думаю, что символ переменной не передается правильно в функции.
Пожалуйста, расскажите, как это сделать правильно.
Поскольку в моем коде много чего происходит, я не могу опубликовать все это здесь. Позвольте мне указать небольшой пример этого.
var.name = "x1" # This is what I read from the text file #
var.sym = as.name(var.name)
func <- function(var.sym){
func = x1^2 # the expression x1^2 is also read from a text file #
} # I am trying to solve the implicit equation x1^2 = 0 #
initial_guess = 1
root = multiroot(f=func, start = initial_guess)
В соответствии с просьбой Nicola вот что я хочу - У меня есть текстовый файл, давая мне имя переменной и ее первоначальное предположение. Я прочитал имя переменной (скажем, «x») и начальное значение предположения (скажем 1) в переменные var
(символ) и guess
(числовые). У меня также есть еще один текстовый файл, содержащий следующее уравнение -
x^3-1
Я прочитал это как выражение в переменной expr
.
Я хочу найти решение неявного уравнения expr
. (Текстовые файлы могут иметь разные имена переменных и, соответственно, неявное выражение в другом файле)
Как известно, для использования функции многолучевого ввода нам необходимо иметь функцию. Проблема заключается в том, что я не могу передать имя переменной, сохраненную в var
, функции.
Любые дополнительные разъяснения будут даны, если будут предложены.
Второй аргумент 'multiroot' должен быть числовым вектором. Почему вы проходите мимо символов? Дайте больше информации и попытайтесь создать воспроизводимый пример. Скорее всего, вы используете 'multiroot' неправильно. – nicola
Функция «multroot» @nicola принимает значения угадывания как второй аргумент. Я правильно даю оценки. Я пытаюсь передать имя переменной (которое я прочитал из файла в виде строки) в функцию. –
Вы не определяете функцию 'func' правильно. В этом определении есть несколько проблем. Строка 'var.sym' ничего не добавляет к определению функции; знаете ли вы о различии между объектом и аргументом функции? Просто определите функцию func <-function (x) x^2', и ваш пример работает. – nicola