我试图区分函数f_Current_theta和Current_theta,但输出了以下错误:

f_current_theta <- function(current_theta) {
  if(current_theta > 0){
    result <- -log(sqrt(2) * exp(-2*current_theta) / pi * sqrt(current_theta))
    return(result)
  } else {
    result <- -log(0)
    return(result)
  }
}

U_grad <- Deriv::Deriv(f_current_theta)

Error in Deriv_(a, x[ix], env, use.D, dsym, scache, drule. = drule.) : 
  Could not retrieve body of 'return()'

为什么它不能检索到‘Return’的正文?

推荐答案

不要使用显式的return()语句.此外,如果将函数矢量化,则可以将其用作curve()的参数.您可以使用ifelse()而不是if()来实现这一点:

f <- function(theta) {
    ifelse(
        theta > 0,
        -log(sqrt(2) * exp(-2*theta) / pi * sqrt(theta)),
        Inf
    )
}

(df  <- Deriv::Deriv(f))
# function (theta) 
# ifelse(test = theta > 0, yes = -(0.5/theta - 2), no = 0)

然后,我们可以绘制这些图表:

p  <- curve(f, from=0, to=2, , xlab="x", ylab="y", ylim = c(-25,25))
lines(p$x, df(p$x), col = "red")

enter image description here

R相关问答推荐

如何在弹性表中为类别值的背景上色

R Lubridate:舍入/快照日期时间到一天中最近的任意时间?

如何使用rmarkdown和kableExtra删除包含折叠行的表的第一列的名称

矩阵%*%矩阵中的错误:需要数字/复杂矩阵/向量参数

获取一个数据库框架的摘要,该数据库框架将包含一列数据库框架,

如何根据组大小应用条件过滤?

如何使用R对每组变量进行随机化?

将非重复序列高效转换为长格式

使用geom_segment()对y轴排序

计算时间段的ECDF(R)

为什么当用osmdata映射R时会得到相邻状态?

以NA为通配符的R中的FULL_JOIN以匹配其他数据中的任何值.Frame

将多个列合并为一个列的有效方法是什么?

循环遍历多个变量,并将每个变量插入函数R

`-`是否也用于数据帧,有时使用引用调用?

有没有办法将不等长的列表转换为R中的数据帧

为R中的16组参数生成10000个样本的有效方法是什么?

构建一个6/49彩票模拟系统

名字的模糊匹配

R中的交叉表