为什么copy()返回一个矩阵?

时间:2019-05-31 08:41:02

标签: r simulation probability

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

我在这里有两个问题:

  1. 为什么mySamples返回矩阵?它不应该返回最后一个(第10个)向量,因为R会保持对最后一条语句的求值吗?
  2. 是否可以将mySamples <- sample(c(1,0), n_toss, replace = T, prob=c(0.5,0.5))该语句保留在单独的函数中,并且仍然获得相同的结果?

1 个答案:

答案 0 :(得分:1)

replicatesapply的包装,因此在您的情况下基本上是这样:

  • 求值并返回表达式的结果
  • 进行n次-在您的情况下,n_trial = 10
  • 将这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))