【问题标题】:Function for uniroot that has two parameters that need to be run across a vector具有两个需要跨向量运行的参数的 uniroot 函数
【发布时间】:2019-07-23 22:51:57
【问题描述】:

我有一个我想用 uniroot 解决的功能。它适用于固定值。如果我想通过将一个参数输入 lapply 并应用一个向量来更改它,它工作正常。但是当我给它提供多个向量来运行时,我无法让它运行。

现在我正在尝试使用 mapply() 或 map2() 开始工作

这行得通

fdr<-seq(0.01,0.1,0.001)

fstar <- function(k,x) (((1-1/sqrt(x+1)-1+1/sqrt(1+fo))/((x)+(k*to)))-1/(2*(x+1)^(3/2)))

f <- sapply(fdr, function(k) uniroot(fstar, c(0,10000),k=k)$root)

这就是我想做的事

fdr<-seq(0.01,0.1,0.001)
foB<- seq(1.01,1.1,0.001)

fstar <- function(k,fo,x) (((1-1/sqrt(x+1)-1+1/sqrt(1+fo))/((x)+(k*to)))-1/(2*(x+1)^(3/2)))

f <- mapply(fdr,foB, function(k,fo) uniroot(fstar, c(0,10000),k=k,fo=fo)$root)
Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'Bk' of mode 'function' was not found

我希望得到一个向量来吐出 - 包含两个向量的每个元素的根解决方案。因此,当 fdr = 0.01 和 foB = 1.01 等时,第一个输出将是根解。

【问题讨论】:

    标签: r vector


    【解决方案1】:

    mapply FUN 默认是第一个参数。这似乎是它给出的错误。 (您的fstar 也有错字。)

    fdr<-seq(0.01,0.1,0.5)
    foB<- seq(1.01,1.1,0.1)
    
    fstar <- function(k,fo,x) (((1-1/sqrt(x+1)-1+1/sqrt(1+fo))/((x)+(k*fo)))-1/(2*(x+1)^(3/2)))
    
    f <- mapply(function(k, fo) uniroot(fstar, interval = c(0,10000), 
        k=k, fo=fo)$root, fdr, foB)
    

    f中,第一个元素f[1]对应fdr = 0.01foB = 1.01f[2]对应fdrfoB中的第二个元素等

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      相关资源
      最近更新 更多