【问题标题】:Macro equivalent of Stata [duplicate]Stata的宏等价物[重复]
【发布时间】:2013-10-22 01:18:03
【问题描述】:

可以在 R 中使用宏吗?

我确实看过另一个类似的问题,但不能很好地理解它。

假设我想创建标量,每个标量都有不同的名称和内容。基本上,我想在 R 中运行的内容可以通过以下虚拟示例来说明:

local i=1
forvalues i=1/5 {
    scalar scalar_`i'=`i'+1
}

在Stata中,由于i取不同的值,会生成scalar1scalar2scalar3等。在运行循环时,我不必输入整个列表(只需 i=1/5)。

这可以在 R 中完成吗?

【问题讨论】:

标签: r for-loop stata stata-macros


【解决方案1】:

您可以在 R 中执行此操作,如 @geektrader 的回答所示。但是您(可能)不想 - 通过对其名称的字符串操作来处理变量是一个坏主意,原因有很多。相反,您想这样做:

scalar<-2:6

这将创建一个名为 scalar 的数组,其值为 2 到 6,然后您可以像这样访问它:

> scalar[1]
[1] 2
> scalar[2]
[1] 3
> scalar[3:5]
[1] 4 5 6

【讨论】:

  • +1 在几乎所有语言中,通过字符串操作变量名称来处理变量都是一个坏主意。
【解决方案2】:

R 是一种编程语言。因此,您可以做的比“宏”在其他统计包中所做的要多得多。

至于你的问题,你可以使用assign函数

for ( i in 1:5) { assign(paste0('scalar_', i), i+1) }

【讨论】:

    【解决方案3】:

    我希望,这个问题可以在没有关于什么是糟糕的编程风格的争论或不必要的断言的情况下得到回答。字符串处理是很自然的,也是许多语言的核心。

    在 Stata 中,你想要的也被很好地认为是一个向量,并且自然地被这样处理。名称scalar 不是一个标量的好名称。

    R 和 Stata 是不同的语言,在 Unix 和基于 Unix 的语言中有一些共同的根源,但它们是分开发展的。通常,在一种语言中惯用和自然的东西在另一种语言中并不惯用和自然。作为第一个近似值,最好遵循有经验的用户的风格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-26
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多