我正在使用R进行一些集成。
如果我有函数f(x)= x:f<-function(x) return(x)
我创建一个函数g(x)来计算它的积分,如下所示:
g<-function(x) return(integrate(f,0,x))
。
然后我做第三个函数h(x)来处理我从g(x)得到的结果:
h<-function(x) {g(x)+1+2}
但我总是收到错误消息“g(x)+ 1 + 2中的错误:二元运算符的非数字参数”
我该如何解决这个问题?
答案 0 :(得分:0)
您需要使用积分中的值,而不是积分对象本身。如果输入:
> class(integrate(f, 0, 3))
[1] "integrate"
您会注意到该类型为integrate
。这是您遇到的non-numeric argument
错误的来源。
以下定义适合您:
h <- function(x) { g(x)$value + 1 + 2 }
答案 1 :(得分:0)
integrate
不返回数字,它返回类integrate
的对象,它还会告诉您有关数值错误的一些详细信息等。请参阅?integrate
:: Value
这可以通过运行class(g(2))
来看到。
您必须使用g(x)$value
来提取值:
h <- function(x) g(x)$value + 1 + 2
我知道g(x)
可以被视为list
,并使用value
提取dput
:
dput(g(2))
# structure(list(value = 2, abs.error = 2.22044604925031e-14,
# subdivisions = 1L, message = "OK",
# call = integrate(f = f, lower = 0, upper = x)),
# .Names = c("value", "abs.error", "subdivisions",
# "message", "call"),
# class = "integrate")