如何通过用户输入参数正确传递函数?

时间:2019-03-29 17:37:44

标签: r function

运行程序时,我试图通过3个不同的功能作为user-arg。我已经多次错过函数错误,或者代码根本无法按预期工作。

我尝试过将函数移至“主要”函数之外,并且很少进行函数调用。但是我认为他们错了,因为它不起作用。

#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 :(得分:0)

您可以使用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