我试图重复这个简单的命令10,000次(通过简单易用的解决方案):
Tandem <- sample(OUT, size = 815, replace = TRUE, prob = NULL); mean(Tandem)
非常感谢任何建议。
答案 0 :(得分:3)
您可以使用replicate
或sapply
:
R> colMeans(replicate(10000, sample(100, size=815, replace=TRUE, prob=NULL)))
R> sapply(seq_len(10000), function(...) mean(sample(100, size=815, replace=TRUE, prob=NULL)))
replicate
是sapply
常用于重复评估表达式的包装器(通常涉及随机数生成)。
答案 1 :(得分:2)
目前尚不清楚你是否在问这个问题,因为你是编程新手,但如果是这样的话,你应该阅读this article on loops并阅读一些有关编程的基本资料。
如果你已经了解控制结构,并且你想要特定于R的实现细节,那么有很多教程,例如this one。另一个答案使用replicate
和colMeans
,这在写入R时是惯用的,并且可能也很快,如果你想要10,000次迭代,这很重要。
然而,一个更通用和(对于初学者)直接处理此类问题的方法是使用for
循环。
> for (ii in 1:5) {
+ print(ii)
+ }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
>
因此,在您的情况下,如果您只想打印Tandem
对象的平均值5次:
for (ii in 1:5) {
Tandem <- sample(OUT, size = 815, replace = TRUE, prob = NULL)
TandemMean <- mean(Tandem)
print(TandemMean)
}
如上所述,replicate
是使用R处理这个特定问题的一种更自然的方式。无论哪种方式,如果你想存储结果 - 肯定是这种情况 - 你需要开始思考关于vectors和lists等数据结构。一旦你存储了一些东西,你将需要能够访问它以便将来使用它,所以一点知识是至关重要的。
set.seed(1234)
OUT <- runif(100000, 1, 2)
tandem <- list()
for (ii in 1:10000) {
tandem[[ii]] <- mean(sample(OUT, size = 815, replace = TRUE, prob = NULL))
}
tandem[1]
tandem[100]
tandem[20:25]
...创建此输出:
> set.seed(1234)
> OUT <- runif(100000, 1, 2)
> tandem <- list()
> for (ii in 1:10000) {
+ tandem[[ii]] <- mean(sample(OUT, size = 815, replace = TRUE, prob = NULL))
+ }
>
> tandem[1]
[[1]]
[1] 1.511923
> tandem[100]
[[1]]
[1] 1.496777
> tandem[20:25]
[[1]]
[1] 1.500669
[[2]]
[1] 1.487552
[[3]]
[1] 1.503409
[[4]]
[1] 1.501362
[[5]]
[1] 1.499728
[[6]]
[1] 1.492798
>