> n_toss = 3; # Number of Tosses
> n_trial = 10; # Number of Trials
>
> mySamples <- sample(c(1,0), n_toss, replace = T, prob=c(0.5,0.5))
> mySamples
[1] 1 0 1
>
> mySamples <- replicate(n_trial,
+ {
+ mySamples <- sample(c(1,0), n_toss, replace = T, prob=c(0.5,0.5))
+ })
> mySamples
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0 1 1 0 1 0 0 0 0 0
[2,] 1 0 1 1 1 0 0 0 0 0
[3,] 0 0 0 0 1 1 1 1 0 1
>
我在这里有两个问题:
mySamples
返回矩阵?它不应该返回最后一个(第10个)向量,因为R会保持对最后一条语句的求值吗?mySamples <- sample(c(1,0), n_toss, replace = T, prob=c(0.5,0.5))
该语句保留在单独的函数中,并且仍然获得相同的结果?答案 0 :(得分:1)
replicate
是sapply
的包装,因此在您的情况下基本上是这样:
n
次-在您的情况下,n_trial = 10
次simplify = FALSE
-在这种情况下,您将获得一个列表(包含10个元素),其中10个复制中的每个复制一个。因此直接回答您的问题:
1)是,R确实返回了最后一条语句的结果,但是进行了n_trial
次并将这些结果组合在一起。这就是为什么要获得矩阵(或列表,如果在对simplify = FALSE
的调用中使用replicate
的原因。)
2)是的,您可以这样做,例如:
n_toss <- 3
n_trial <- 10
sampleFun <- function(n_toss) {
sample(c(1, 0), n_toss, replace = TRUE, prob = c(0.5, 0.5))
}
mySamples <- replicate(n_trial, sampleFun(n_toss = n_toss))