Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 生成函数向量_R_Function_Vector - Fatal编程技术网

R 生成函数向量

R 生成函数向量,r,function,vector,R,Function,Vector,我有一个单一变量的函数和各种参数 对于其中一个参数的每个值(其他参数是固定的),函数都有一个根。我想从参数的向量生成根的向量(使用uniroot) 我正在研究的实际示例有点混乱,但我会给出它。以下是固定参数: 以下是函数: crossFnc <- function(gamma_dot) tau - gamma_dot*(eta_inf + (eta_0-eta_inf)/(1 + (lambda*gamma_dot)^m)) [1] 0.06900807 我想生成这些根的向量,例如: t

我有一个单一变量的函数和各种参数

对于其中一个参数的每个值(其他参数是固定的),函数都有一个根。我想从参数的向量生成根的向量(使用
uniroot

我正在研究的实际示例有点混乱,但我会给出它。以下是固定参数:

以下是函数:

crossFnc <- function(gamma_dot) tau - gamma_dot*(eta_inf + (eta_0-eta_inf)/(1 + (lambda*gamma_dot)^m))
[1] 0.06900807

我想生成这些根的向量,例如:

tau <- seq(0,10,length.out=101)

tau也许您可以为
循环使用

my.roots <- vector()
tau.seq <- seq(0,10,length.out=101)
for (i in seq_along(tau.seq)) {
  tau <- tau.seq[i]
  my.roots[i] <- uniroot(crossFnc, c(0,1))$root
}
#> head(my.roots)
#[1] 0.000000000 0.000566379 0.001142346 0.001726677 0.002257765 0.002848007

my.root充分利用
sapply

# Notice the second argument
crossFnc <- function(gamma_dot, tau) { 
    tau - gamma_dot*(eta_inf + (eta_0-eta_inf)/(1 + (lambda*gamma_dot)^m))
}

# I only use length.out = 10
tau <- seq(0,10,length.out=10)

# Apply function(x) to every value in tau
myRoots <- sapply(tau, function(x) {
  uniroot(crossFnc, c(0,1), tau=x)$root 
})

myRoots

>[1] 0.000000000 0.006433349 0.013166577 0.020236503 0.027594321 0.035253401 0.043217816 0.051493442 0.060087456
>[10] 0.069008069
请注意第二个参数
这是什么语言?Root是一个坏标签(因为它代表Unix超级用户)。这个问题的答案有用吗:Works!crossFnc2试图避免循环。答案很简单。见上文。谢谢。@SteveK循环怎么了
sapply
只是对您隐藏循环。
my.roots <- vector()
tau.seq <- seq(0,10,length.out=101)
for (i in seq_along(tau.seq)) {
  tau <- tau.seq[i]
  my.roots[i] <- uniroot(crossFnc, c(0,1))$root
}
#> head(my.roots)
#[1] 0.000000000 0.000566379 0.001142346 0.001726677 0.002257765 0.002848007
# Notice the second argument
crossFnc <- function(gamma_dot, tau) { 
    tau - gamma_dot*(eta_inf + (eta_0-eta_inf)/(1 + (lambda*gamma_dot)^m))
}

# I only use length.out = 10
tau <- seq(0,10,length.out=10)

# Apply function(x) to every value in tau
myRoots <- sapply(tau, function(x) {
  uniroot(crossFnc, c(0,1), tau=x)$root 
})

myRoots

>[1] 0.000000000 0.006433349 0.013166577 0.020236503 0.027594321 0.035253401 0.043217816 0.051493442 0.060087456
>[10] 0.069008069