相当于Stata的宏

时间:2013-10-22 01:18:03

标签: r for-loop stata stata-macros

可以在R中使用宏吗?

我确实看到了与此类似的另一个问题,但无法理解它。

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

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

在Stata中,由于i采用不同的值,因此会生成scalar1scalar2scalar3等。我没有必要在运行循环时输入整个列表(只是i=1/5)。

这可以在R?

中完成

3 个答案:

答案 0 :(得分:9)

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

scalar<-2:6

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

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

答案 1 :(得分:5)

R是一种编程语言。所以你可以做的远远超过其他统计软件包中的“宏”。

至于您的问题,您可以使用assign功能

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

答案 2 :(得分:5)

我希望,这个问题可以在没有争论或不必要的断言的情况下得到解答。字符串处理是许多语言的自然和核心。

在Stata中,你想要的东西也被认为是一个矢量并且自然而然地被处理。名称scalar不是标量的好名称。

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