R 警告:要替换的项目数不是替换长度的倍数
我不明白我的代码运行循环有什么问题。请帮忙R 警告:要替换的项目数不是替换长度的倍数,r,R,我不明白我的代码运行循环有什么问题。请帮忙 P10<-numeric(2000) for(i in 1:2000){ r <- rnorm(10, 0.03, 0.005) P10[i] <- 20 * exp(cumsum(r)) } Warning in P10[i] <- 20 * exp(cumsum(r)): number of items to replace is not ## a multiple of replacement length
P10<-numeric(2000)
for(i in 1:2000){
r <- rnorm(10, 0.03, 0.005)
P10[i] <- 20 * exp(cumsum(r))
}
Warning in P10[i] <- 20 * exp(cumsum(r)): number of items to replace is not
## a multiple of replacement length
你可能想做这样的事情:
P10 <- lapply(1:2000, function(x) {
r <- rnorm(10, 0.03, 0.005)
20 * exp(cumsum(r))
})
P10 <- unlist(P10)
这是相似的,但得到的矩阵是10*2000
P10 <- replicate(2000, {
r <- rnorm(10, 0.03, 0.005)
20 * exp(cumsum(r))
})
不确定您期望的输出应该是什么样子。例如,如果您将P10[i]重命名为P,脚本将在没有警告的情况下运行。您好,wolsx,如果您可以提供具有预期输出的最小示例,这将有所帮助,请参阅这里不清楚您到底想做什么。出现此警告是因为您试图将expcumsumr创建的10个项目的列表分配到一个条目中。下面是对此进行故障排除时的建议。我假设您希望P10[I]包含一个数字。手动运行这个:我找到了!谢谢大家,或者更快:20*EXPAPLYMATRIXRNORMM10*2000,nr=10,2,求和。由于它只进行了一次随机拉动,而不是2000次小的随机拉动,因此使用更大的随机拉动应该会更快。仅供参考:我将其显示为10*2000,以声明形式,目的是生成足够的矩阵。10在10*中显然应该是相同的数字,并且nr=10。