Как правильно передать мои функции в качестве пользовательских аргументов? - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь передать 3 разные функции как аргумент пользователя при запуске программы. Я несколько раз пропускал ошибки функций, или код просто не работает, как предполагалось.

Я пытался переместить свои функции за пределы "основной" функции и несколько вызовов функций. Но я думаю, что они не правы, так как это не работает.

#calculate the root of user-def func "f" on closed
#interval [A,B] using bisection method.

bisec <- function(f,A,B,t){

  abs.dist = abs(B-A)
  rel.dist = (2*abs(B-A))/(abs(A)+abs(B))

  f= f1(x)
  f= f2(x)
  f= f3(x)

  #{stuff happens here}  

  C = (A+B)/2

  while ((abs.dist > t) && (rel.dist > t)){

    if (f(C) < 0 && f(A) < 0){
      A = C
    }
  #{stuff happens here}
  }
  C = (A+B)/2
  return(C)
}

  f1 <- function (x){
    y = cos(x)-0.80+0.10^2
    return (y)
  }
  f2 <- function (x){
    y = -sin(x) + (x/50)
    return (y)
  }
  f3 <- function (x){
    y = (x-3)^5
    return (y)
  }

при запуске должно получиться что-то вроде этого:

> bisec(f1,0,pi,0.001)
[1] 0.7267234

> bisec(f3,0,5,0.0001)
[1] 2.999954

1 Ответ

0 голосов
/ 02 апреля 2019

Вы можете достичь желаемого, используя функцию do.call(), которая используется для запуска функции, хранящейся в переменной / параметре.

Следующий пример иллюстрирует это:

f1 <- function (x){
  y = cos(x)-0.80+0.10^2
  return (y)
}
f2 <- function (x){
  y = -sin(x) + (x/50)
  return (y)
}
f3 <- function (x){
  y = (x-3)^5
  return (y)
}

test_call_function_passed_as_parameter <- function(f, x) {
  cat("The value of ", deparse(substitute(f)), "(", x, ") is: ",
      do.call(f, list(x)), "\n", sep="")  # Note the use of list() to pass the arguments to f()
}

test_call_function_passed_as_parameter(f1, 3)
test_call_function_passed_as_parameter(f1, 5)
test_call_function_passed_as_parameter(f2, 3)
test_call_function_passed_as_parameter(f3, 3)

, который дает следующий вывод:

The value of f1(3) is: -1.779992
The value of f1(5) is: -0.5063378
The value of f2(3) is: -0.08112001
The value of f3(3) is: 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...