【问题标题】:R how to fix error non-numeric argument to binary operatorR如何修复二元运算符的错误非数字参数
【发布时间】:2017-11-20 02:59:36
【问题描述】:

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

【问题讨论】:

    标签: r


    【解决方案1】:

    integrate 不返回一个数字,它返回一个integrate 类的对象,它还告诉你一些关于数字错误等的细节。见?integrate::Value

    这可以通过运行class(g(2)) 来查看。

    您必须使用g(x)$value 来提取值:

    h <- function(x) g(x)$value + 1 + 2
    

    我知道g(x) 可以被视为list 并使用dput 提取value

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

    【讨论】:

      【解决方案2】:

      您需要使用积分中的,而不是积分对象本身。如果你输入:

      > class(integrate(f, 0, 3))
      [1] "integrate"
      

      你会注意到类型是integrate。这是您遇到的non-numeric argument 错误的来源。

      以下定义应该适合您:

      h <- function(x) { g(x)$value + 1 + 2 }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-15
        • 1970-01-01
        • 2021-03-24
        • 1970-01-01
        • 2019-05-03
        • 1970-01-01
        • 2016-11-14
        相关资源
        最近更新 更多