R如何将错误非数字参数修复为二元运算符

时间:2016-04-13 01:08:21

标签: r

我正在使用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中的错误:二元运算符的非数字参数” 我该如何解决这个问题?

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")