运行程序时,我试图通过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
答案 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