这个功能在做什么?复制

what is this function doing? replication

rep_sample_n <- function(tbl, size, replace = FALSE, reps = 1)
{
rep_tbl = replicate(reps, tbl[sample(1:nrow(tbl), size, replace = replace), 
], simplify = FALSE) %>%
bind_rows() %>%
mutate(replicate = rep(1:reps, each = size)) %>%
select(replicate, everything()) %>%
group_by(replicate)
return(rep_tbl)
}

嘿,有人可以帮我吗?这个函数在做什么?第一行是设置函数的变量吗?然后这个 "replicate" 在做什么?谢谢!

此公式复制了您的数据。假设我们有一个包含 10 个观测值的数据集。为了想出与当前数据集类似的其他数据集,您可以通过引入数据集的随机抽样来复制它。

您可以查看维基百科页面 statistical replication如果你更好奇。

让我们来看一个简单的数据框:

df <- data.frame(x = 1:10, y = 1:10)

df
    x  y
1   1  1
2   2  2
3   3  3
4   4  4
5   5  5
6   6  6
7   7  7
8   8  8
9   9  9
10 10 10

如果我们想对此进行随机抽样,我们可以使用函数 rep_sample_n,它有两个参数 tbl, size,还有另外两个可选参数 replace = FALSE, reps = 1.

这里是一个例子,我们只是从数据中随机选择了 4 列。

rep_sample_n(df, 4)
# A tibble: 4 x 3
# Groups:   replicate [1]
  replicate     x     y
      <int> <int> <int>
1         1     1     1
2         1     3     3
3         1     4     4
4         1    10    10

现在如果我们想从 10 个观测数据集中随机抽取 15 个观测值,它会抛出一个错误。目前 replace = FALSE 参数不允许这样做,因为每次选择样本行时,它都会从池中删除以供下一个样本使用。在上面的例子中,它选择了第一个观测值,然后它选择了第二个(因为我们要求 4 个),它只剩下 2 到 10 个,它选择了第 3 个,然后是第 4 个,然后是第 10 个等等。如果我们允许 replace = TRUE,它每次都会从完整数据集中选择一个观察值。

注意在这个例子中,第 5 个观察值被选择了两次。 replace = FALSE

不会发生这种情况
rep_sample_n(df, 4, replace = TRUE)
# A tibble: 4 x 3
# Groups:   replicate [1]
  replicate     x     y
      <int> <int> <int>
1         1     5     5
2         1     3     3
3         1     2     2
4         1     5     5 

最后也是最重要的是,我们有 reps 参数,它确实是此函数的基础。它允许您对数据集进行多次随机抽样,然后将所有这些样本组合在一起。

下面,我们通过在一个样本中选择其中的 4 个对 10 个观测值的原始数据集进行采样,然后我们将其复制 5 次,因此我们有 5 个不同的样本数据帧,每个观测值由 4 个观测值组合成一个20 个观察数据帧,但唯一的 5 个数据帧中的每一个都用复制 # 标记。复制列将指出哪 4 个观察值与哪个复制数据框相关。

rep_sample_n(df, 4, reps = 5)
# A tibble: 20 x 3
# Groups:   replicate [5]
   replicate     x     y
       <int> <int> <int>
 1         1     8     8
 2         1     4     4
 3         1     3     3
 4         1     1     1
 5         2     4     4
 6         2     5     5
 7         2     8     8
 8         2     3     3
 9         3     6     6
10         3     1     1
11         3     3     3
12         3     2     2
13         4     5     5
14         4     7     7
15         4    10    10
16         4     3     3
17         5     7     7
18         5    10    10
19         5     3     3
20         5     9     9 

我希望这提供了一些清晰度

此函数将数据框作为输入(以及多个输入首选项)。它从 table 中随机抽取 size 行样本,有或没有由 replace 输入设置的替换。它重复随机抽样 reps 次。

然后,它将所有样本绑定到一个数据帧中,添加一个名为 "replicate" 的新列,指示产生每一行的采样重复。

最后,它 "groups" 结果 table,为将来使用 dplyr 进行分组操作做准备。


关于特定函数的一般问题,例如 “这个 "replicate" 在做什么?”,您应该查看函数的帮助页面:键入 ?replicatehelp("replicate") 到达那里。它包括功能描述和使用示例。如果您阅读了说明、运行 示例,但仍然感到困惑,请随时返回一个具体的问题和示例来说明您对什么感到困惑。

类似地,对于 "Is the first line setting the variables of the function?"function() 的参数是函数的输入。如果您有关于 R 的基本问题,例如 "How do functions work",请查看 An Introduction to R, or one of the other sources in the R Tag Wiki