我有一个函数,thatI正在尝试用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时,第一个输出将是根解,依此类推。
发布于 2019-07-24 07:37:59
默认情况下,FUN is是mapply的第一个参数。这似乎就是它给出的错误。(您的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.01和foB = 1.01,f[2]对应于fdr和foB等中的第二个元素。
https://stackoverflow.com/questions/57173162
复制相似问题