R:如何简单地重复一个命令?

时间:2013-12-31 04:48:10

标签: r

我试图重复这个简单的命令10,000次(通过简单易用的解决方案):

Tandem <- sample(OUT, size = 815, replace = TRUE, prob = NULL); mean(Tandem)

非常感谢任何建议。

2 个答案:

答案 0 :(得分:3)

您可以使用replicatesapply

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)))

replicatesapply常用于重复评估表达式的包装器(通常涉及随机数生成)。

答案 1 :(得分:2)

目前尚不清楚你是否在问这个问题,因为你是编程新手,但如果是这样的话,你应该阅读this article on loops并阅读一些有关编程的基本资料。

如果你已经了解控制结构,并且你想要特定于R的实现细节,那么有很多教程,例如this one。另一个答案使用replicatecolMeans,这在写入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处理这个特定问题的一种更自然的方式。无论哪种方式,如果你想存储结果 - 肯定是这种情况 - 你需要开始思考关于vectorslists等数据结构。一旦你存储了一些东西,你将需要能够访问它以便将来使用它,所以一点知识是至关重要的。

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

>