r - 这行代码在最大化正态似然函数中意味着什么?
问题描述
我正在学习 R 编程并学习如何在 R 中编写函数。下面是我无法理解第 4 行的代码,即 params[!fixed] <- p 。
make.NegLogLik <- function(data, fixed=c(FALSE,FALSE)) {
params <- fixed
function(p) {
params[!fixed] <- p
mu <- params[1]
sigma <- params[2]
a <- -0.5*length(data)*log(2*pi*sigma^2)
b <- -0.5*sum((data-mu)^2) / (sigma^2)
-(a+b)
}
}
set.seed(1);
normals <- rnorm(100, 1, 2)
nLL <- make.NegLogLik(normals)
nLL
optim(c(mu = 0, sigma = 1), nLL)$par
nLL <- make.NegLogLik(normals, c(FALSE, 2))
optimize(nLL, c(-1, 3))$minimum`
解决方案
检查这个:
fixed = c(FALSE, FALSE)
params <- fixed
params
params[!fixed]
[1] FALSE FALSE
最初,您只需传递一个带有两个布尔值的向量。
fixed = c(FALSE, 2)
params <- fixed
params
params[!fixed]
!fixed
> params
[1] 0 2
> params[!fixed]
[1] 0
但是当你给你的函数一个参数时,你会发现没有FALSE
. 这是因为一种叫做强制的东西。FALSE
被强制为 0。
所以现在发生的事情是这样的:你得到了 params 的元素,它不是向量中的第二个元素,它是 0。
像这样的正常索引:c(1,2,3)[2]
推荐阅读
- python-3.x - EOFError:读取一行时出现EOF
- python - 使用 np.logical_and 后内核死机
- java - For循环正在打印出多个打印语句
- android - 如何将 Json 字符串填充到 Android 微调器中
- google-api - 用于组织的 Google 日历 API
- firebase - SwiftUI Firebase - 如何查询文档然后更新?
- sql - SQL Server 替换列值中的不同字符
- python - 插入数据库后,字符串 'ə' 成为 SQL Server 的问号
- webrtc - WebRTC:IceCandidates 不收集在 Chrome/Edge 中
- java - 使用另一个 maven 项目 (Java) 的依赖项构建新项目的简单方法