【问题标题】:Why does replicate() return a matrix?为什么replicate() 返回一个矩阵?
【发布时间】:2019-05-31 08:41:01
【问题描述】:
> 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 &lt;- sample(c(1,0), n_toss, replace = T, prob=c(0.5,0.5)) 这条语句保留在一个单独的函数中并仍然获得相同的结果?

【问题讨论】:

  • 1) 如果您喜欢列表,可以使用simplify = FALSE,复制返回每次迭代的最后一次评估 2) 是的,您可以声明一个新函数并调用它
  • 你的意思是复制还是重复?
  • @user1945827,复制。此处未使用代表。

标签: r simulation probability


【解决方案1】:

replicatesapply 的包装器,因此它基本上适用于您的情况:

  • 计算并返回表达式的结果
  • 这样做ntimes - 在你的情况下n_trial = 10times
  • 将这 10 个结果组合在一起 - 默认情况下,它将简化它们(在您的情况下为矩阵)。如果您不希望简化结果,请使用 simplify = FALSE - 在这种情况下,您将获得一个列表(包含 10 个元素),每 10 次复制都有一个。

所以直接回答你的问题:

1) 是的,R 确实返回了最后一条语句的结果,但是这样做n_trial 次并将这些结果组合在一起。这就是为什么你会得到一个矩阵(或一个列表,如果你在对replicate 的调用中使用simplify = FALSE)。

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

【讨论】:

    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多