如何解决if函数中的错误:条件的长度> 1,并且仅使用第一个元素
我想使用1000个重复来绘制L tilde的直方图,其中γ= 0.9 * \ sqrt {2logn},n = 1000。我为L编写了函数,为L tilde编写了“ for,if”循环。但是我在“ if”循环中收到错误,并且当我使用“ replicate”来生成直方图时,它也只有1000个相同的值。
您能帮我解决错误吗?如何使用1000个重复绘制直方图?谢谢!
错误:“如果((数据[i,] 1,并且只会使用第一个元素。
n=10^3
del = 0.9*sqrt(2*log(n))
data <- matrix(replicate(n,rnorm(n,1)),nrow = n)
L = n^{-1}*sum(exp(del*data[1,]-0.5*del^2))
#L tilde
est_L <- function(n){
est=0
for (i in 1:n){
if (data[i,]<sqrt(2*log(n))){
est = est + n^{-1}*sum(exp(del*data[1,]-0.5*del^2))
}
return(est)
}
}
#repeat 1000 times
hist(replicate(1000,est_L(10^3)))
解决方法
出现该错误是因为您只能在if (...)
中评估一个T / F。但是,data[1,] < ...
是向量化评估,它返回长度为n(即上述情况为1000)的T / F向量。不过,我认为您的第二个函数(est_L
)与该图中显示的方程式不匹配。请考虑以下实现:
L <- function(n) {
del <- 0.9 * sqrt(2 * log(n))
data <- rnorm(n)
mean(exp(del * data - 0.5 * del * del))
}
L_tilde <- function(n) {
del <- 0.9 * sqrt(2 * log(n))
data <- rnorm(n)
mean(exp(del * data * ifelse(data < sqrt(2 * log(n)),1,0) - 0.5 * del * del))
}
那你就可以
hist(replicate(1000,L_tilde(1000)))
输出
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。