可以在R中使用宏吗?
我确实看到了与此类似的另一个问题,但无法理解它。
假设我想创建标量,每个标量都有不同的名称和内容。基本上,我想在R中运行的内容可以通过以下虚拟示例来说明:
local i=1
forvalues i=1/5 {
scalar scalar_`i'=`i'+1
}
在Stata中,由于i
采用不同的值,因此会生成scalar1
,scalar2
,scalar3
等。我没有必要在运行循环时输入整个列表(只是i=1/5
)。
这可以在R?
中完成答案 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的语言中有一些共同的根源,但它们是分开演变的。通常,在一种语言中,惯用语和自然语在其他语言中不是惯用语和自然语。作为第一个近似值,最好遵循有经验的用户的风格。