【问题标题】:R loop to execute the same codeR循环执行相同的代码
【发布时间】:2018-05-02 14:27:50
【问题描述】:

我正在尝试弄清楚如何将相同的代码重复 30 次,而无需一次输入每个代码...任何帮助将不胜感激。

SRS_1 <- sample(1:nrow(MyData_points), size=.10*nrow(MyData_points))

data_sample_1 <- MyData_points[SRS_1,]

fpc.srs <- rep(6399875, 639987)

design_SRS_1 <- svydesign(id=~1, strata=NULL, data=data_sample_1, fpc=fpc.srs)

ONStotal_SRS1 <- svytotal(~data_sample_1$V4, design=design_SRS_1)

ONSmean_SRS1 <- svymean(~data_sample_1$V4, design=design_SRS_1)

CI_SRS_1 <- confint(svytotal(~data_sample_1$V4, design=design_SRS_1))

第一个代码从数据中计算概率为 0.10 的简单随机抽样。第二个从数据中获取样本。第三,计算fpc,即占总数据点的10%。现在,为了估计总体,我需要对样本进行设计而不进行替换,包括 fpc。然后,对于最后三个代码,我根据该样本计算总体估计、均值和置信区间。 改变的是我必须从数据中重复 30 个不同的简单随机抽样。因此,将从 30 个不同的样本中获得最终的估计、均值和置信区间。它们可能接近但不相等

我怎样才能使这段代码变得更好,这样我就可以每次运行 30 次并能够打印带有(ONStotal_SRS1, ONSmean_SRS1,CI_SRS_1) 的表格?

【问题讨论】:

  • 我希望投反对票的人能解释他们为什么这样做,这可能会有所帮助。无论如何,这 30 次发生了什么变化?对于这 30 个中的每一个,您是否想要表格中的一行?
  • 感谢您的评论。第一个代码从数据中计算概率为 0.10 的简单随机抽样。第二个从数据中获取样本。第三,计算fpc,即占总数据点的10%。现在,为了估计总体,我需要对样本进行设计而不进行替换,包括 fpc。然后,对于最后三个代码,我根据该样本计算总体估计值、均值和置信区间。
  • 改变的是我必须从数据中重复 30 个不同的简单随机抽样。因此,将从 30 个不同的样本中获得最终的估计、均值和置信区间。它们可能接近但不相等。
  • 请通过单击编辑按钮将您的 cmets 移动到问题本身。它们是您问题的重要组成部分,并不是每个人都会阅读 cmets。 (我赞成让你回到 0!)

标签: r


【解决方案1】:

通常我会使用data.table 包中的rbindlistdplyr 中的bind_rowslapply 结合使用来一次构建表一行,然后将这些行绑定在一起。以下是使用bind_rowsmtcars 数据集的示例:

library(dplyr)

combined_data <- bind_rows(lapply(1:30, function(...) {
  # Take a sample
  SRS_1 <- sample(1:nrow(mtcars), size = .10 * nrow(mtcars))
  data_sample_1 <- mtcars[SRS_1, ]

  # Compute some things from the sample
  m_disp <- mean(data_sample_1$disp)
  m_hp <- mean(data_sample_1$hp)

  # Make a one row data.frame that will be returned by the function
  data.frame(m_disp, m_hp)
}))

这给了data.frame

> str(combined_data)
'data.frame':   30 obs. of  2 variables:
$ m_disp: num  235 272 410 115 249 ...
$ m_hp  : num  147 159 195 113 154 ...

【讨论】:

  • 顺便说一句,R 的基本方法是do.call("rbind", lapply(1:30, function(...) { 等,但是使用更大的数据集dplyrdata.table 会更有效。
猜你喜欢
  • 2021-04-13
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 2015-03-26
  • 2012-09-02
相关资源
最近更新 更多