【问题标题】:Looping in R like in Stata像在 Stata 中一样在 R 中循环
【发布时间】:2014-08-02 05:39:30
【问题描述】:

我确信这很简单,但我找不到将 Stata 中的这个简单循环转换为 R 的方法。

在循环中如下

forvalues i=1/8{
  gen foo`i'=foo`i'.bar.1+foo`i'.bar.2
}

foo's 是数字向量变量。因此,循环使用gen 创建八个新变量,每个变量是两组不同变量的总和。我不确定如何将该循环翻译成R

【问题讨论】:

  • 那些Stata名称无效。不允许使用 .s。
  • 循环有什么作用?

标签: r loops for-loop stata


【解决方案1】:

我不是 stata 人,但看起来您正在创建一组变量,通过添加另外两组以相同方式命名的变量(在其他地方创建)来区分其名称中的数字。这通常不是我们在 R 中做事的方式,因为创建变量列表然后通过索引引用每个变量太容易了。有很多选择,但一种 R 方法类似于

foo <- list()
for (i in 1:8){
   foo[[i]] <- foo.bar.1[[i]] + foo.bar.2[[i]]
}

R 实际上有无数类型的数据容器,因此可能有许多其他类型更适合您的应用程序。

但无论如何,如果你真的想在变量名中包含数字,你可以使用assign()get() 函数。类似的东西

for (i in 1:8){
   assign(paste("foo",i,sep=''),get(paste("foo",i,".bar.1",sep=''))+get(paste("foo",i,".bar.2",sep='')))
}

【讨论】:

  • 我认为您应该推荐一个解决方案,涉及第一个示例的左侧和第二个示例的右侧,因为看起来 OP 希望在每个示例中动态生成右侧变量名称循环的迭代。
  • ??在 OP 中生成右侧变量名称涉及更改 r.h.s. 中的 i,这在我的两个示例中都发生了。你能澄清一下你的想法吗?
  • 当 OP 写入 foo`i'.bar.1 时,这在 R 中等同于 get(paste("foo",i,".bar.1",sep=''))(在您的第二个示例中)。我只是建议结合您的答案,以便将 Stata 语法精确翻译为 R 语法。
  • 第二个例子准确地翻译了两边的stata工作。第一个示例是一种更好的方法,它不涉及任何一方的古怪变量名称。我猜我们会让 OP 决定。
  • 是的,我想这是一个结果变量应该在哪里结束的问题,因为在 Stata 中这只是一个可能的位置(回到原始数据集中),而在 R 中它可能会在任何地方结束.无论如何,你已经得到了我的 +1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 2015-11-09
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
相关资源
最近更新 更多