2

可以在 R 中使用宏吗?

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

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

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

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

这可以在R中完成吗?

4

3 回答 3

9

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

scalar<-2:6

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

> scalar[1]
[1] 2
> scalar[2]
[1] 3
> scalar[3:5]
[1] 4 5 6
于 2013-10-22T01:39:25.120 回答
5

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

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

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

于 2013-10-22T07:44:31.080 回答
5

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

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

for ( i in 1:5) { assign(paste0('scalar_', i), i+1) }
于 2013-10-22T01:22:04.570 回答