【发布时间】:2015-08-03 10:57:50
【问题描述】:
一个 R 函数被传递给我,它在实线的某个区间上定义并返回一个数值。 有没有办法检查函数是否为常数?
示例函数:
f1<-function(x) {11}
f2<-function(x) {x+2}
f3<-function(x) {1+1}
f4<-function(x) {return(3)}
我正在寻找一个测试,它会说 f1,f3,f4 是常量函数,但 f2 不是。有任何想法吗?
编辑:
Frank 和 Gregor 的(编辑: 和 Michael Lawrence 的第二个解决方案)解决方案都适用于上面给出的所有 4 个测试用例(Marat 和 Michael 的解决方案不适用于所有 4 个用例)。所以已经有了解决方案。但是,如果您能找到一个同时为以下 3 个测试功能提供正确答案的解决方案,则额外加分:
f5 <- function(x) ifelse(x == 5.46512616432116, 0, 1)
f6 <- function(x) ifelse(x == 5.46512616432116, 0, 0)
f7 <- function(x) {x - x}
【问题讨论】:
-
你能做的最好的就是尝试一堆值。祝我好运
f3 = function(x) ifelse(x == 5.46512616432116, 0, 1)。 -
不确定是否可以以编程方式执行任意函数。但是,如果您能说出上下文,也许有人可以提出解决方案。
-
没错,Gregor,我希望能够捕捉到这样的功能。这就是为什么我希望有一个完全不测试一堆值的程序解决方案。因为 R 知道函数,所以理论上信息就在那里......
-
但是如果你的域是 0 到 5,我的函数是一个常数函数。为了解决这个问题,我认为你需要能够做出更有力的假设。这些函数是如何创建的?你有固定域名吗?函数有多复杂,它们可以调用其他函数吗?我还可以编写一个看起来很复杂但是始终不变的非常钝的函数。
-
如果要测试代码是否使用
x作为数字,只需传递一个非数字即可享受错误:f1("a"); f2("a")。正如 Gregor 所说,这不会捕获恒定性是数学而非程序性的情况,例如f3 <- function(x){x-x}。为此,Mathematica 也许?我听说它可以简化公式...