r - 如何更快地运行for循环R程序?
问题描述
我正在使用以下内容r code
来计算每个的左侧和右侧的对数似然i = 1,2,...,200
。
但是我想对大量生成的数据集执行此过程,例如a = 10000
并多次迭代整个循环1000
。如何加快以下程序?我可以使用apply
函数而不是for
函数吗?
先感谢您!
n1 = 100
n2 = 100
a = 1000
n= n1 + n2
# number of simulated copies of y
sim.data = matrix(NA, nrow = n, ncol = a)
for (i in 1:a) {
#for(j in 1:a){
sim.data[,i] = c(rnorm(n1, 2, 1), rnorm(n-n1, 4, 1))
#}
}
dim(sim.data)
# Compute the log-likelihood
B = ncol(sim.data)
loglike_profb = matrix(NA, n - 1, B)
for (j in 1:B) {
for (i in 1:(n - 1)) {
loglike_profb[i, j] = -0.5*(sum(((sim.data[1:i,j]) - mean(sim.data[1:i,j]))^2) + sum(((sim.data[(i + 1):n,j]) - mean(sim.data[(i +1):n,j]))^2))
}
}
解决方案
您可以将 loglike_profb 的计算放入一个函数中,然后使用mapply
loglike_profb_func <- function(i,j){
-0.5*(sum(((sim.data[1:i,j]) - mean(sim.data[1:i,j]))^2) + sum(((sim.data[(i + 1):n,j]) - mean(sim.data[(i +1):n,j]))^2))
}
mapply(loglike_profb_func, rep(1:(n-1),B), rep(1:B,(n-1)))
推荐阅读
- qt - 旧的 QWidget::event() 返回值问题?
- sql-server - How to insert data into a temporary table using an existing table and new columns
- ruby-on-rails - Rspec 从测试的应用程序接收帖子
- git - 如何在无需收件人进行任何额外配置的情况下对 githooks 进行版本化和共享?
- java - 为多个数组和 ToString 添加方法?
- c - C 是否总是必须使用指针来处理地址?
- amazon-web-services - s3 presigned url multipart formdata上传错误:签名不匹配
- javascript - restful 服务需要用户名和密码才能获取令牌,是否可以将凭据(用户和密码)保存在服务器端 nodejs 中?
- python - Python:如何求解具有多个解的一组非线性方程
- ruby - TypeError:循环遍历散列数组时,没有将符号隐式转换为整数