R?

R?,r,R,我知道向量化以及如何应用它来加速R中的循环,但我无法找到一种使用向量来加速代码的方法,因为每次迭代都依赖于前一次迭代的结果,或者依赖于迭代的随机间隔计算 例如: 乔希-很抱歉。下面是更多细节: m <- c(1, 1) w.r <- c(0.33592935393, 0.63825353030, 0.15335253356 ) 如果我猜错了,请看Josh的评论 但是假设你没有遗漏任何东西,w.r是常数,应该从循环中删除。m也是常数。”r'和rlist[[r]]是随机生成的,但参数不

我知道向量化以及如何应用它来加速R中的循环,但我无法找到一种使用向量来加速代码的方法,因为每次迭代都依赖于前一次迭代的结果,或者依赖于迭代的随机间隔计算

例如:


乔希-很抱歉。下面是更多细节:

m <- c(1, 1)
w.r <- c(0.33592935393, 0.63825353030, 0.15335253356 )

如果我猜错了,请看Josh的评论

但是假设你没有遗漏任何东西,w.r是常数,应该从循环中删除。m也是常数。”r'和rlist[[r]]是随机生成的,但参数不变。所以你要做的是用相同的参数生成N次分布,对吗?如果是这样的话,有很多比for循环更好的选择。e、 g

E <- matrix(rep(mvrnorm(1, 
                       m, 
                       rlist[[c(1:3 %*% rmultinom(1, 1, w.r))]]), 
                N),  
            N, 
            2)
根据评论编辑:

r  <- 1:3 %*% rmultinom(N, 1, w.r)
E <- t(sapply(r, function(x) mvrnorm(1, m, rlist[[x]])))

第一个代码块中的w.r是什么?目前,这两个示例都不可复制,如果您也提供在我们的机器上运行的代码,您可能会得到更好的响应!乔希-很抱歉。这里有更多的细节:是的,w.r和m都是常数。我真的不知道你能用那种方式使用rep。太棒了!贾斯汀:你的建议不管用。请参阅我的原始帖子中的编辑。rmultinomN,1,w.r修复它?是的-这修复了主要问题,但没有解决如何将其放在最初发布的rep语句中,因为我无法确定让rep迭代这些索引。
>rep(c(c(1:3) %*% rmultinom(1, 1, ww.r)), 100)
  [1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 [38] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 [75] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

> rep(c(c(1:3) %*% rmultinom(1, 1, ww.r)), 100)
  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
E <- matrix(rep(mvrnorm(1, 
                       m, 
                       rlist[[c(1:3 %*% rmultinom(1, 1, w.r))]]), 
                N),  
            N, 
            2)
my.fun <- function(vec) {
    if(vec[1] & vec[2]) return(1)
    else if(! vec[1] & vec[2]) return(2)
    else if(! vec[1] & ! vec[2]) return(3)
    else if(vec[1] & ! vec[2]) return(4)
}

QQ <- apply(d$V, 1, my.fun)
r  <- 1:3 %*% rmultinom(N, 1, w.r)
E <- t(sapply(r, function(x) mvrnorm(1, m, rlist[[x]])))
t(sapply(1:3 %*% rmultinom(N, 1, w.r), function(x) mvrnorm(1, m, rlist[[x]])))