相当于Stata的宏

PGu*_*pta 2 for-loop r stata stata-macros

可以在R中使用宏吗?

我确实看了一个类似于这个的问题,但是不能理解它.

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

local i=1
forvalues i=1/5 {
    scalar scalar_`i'=`i'+1
}
Run Code Online (Sandbox Code Playgroud)

在Stata,如i取不同的值,scalar1,scalar2,scalar3等等产生的.我没有必要i=1/5在运行循环时输入整个列表(只是).

这可以在R中完成吗?

mri*_*rip 9

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

scalar<-2:6
Run Code Online (Sandbox Code Playgroud)

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

> scalar[1]
[1] 2
> scalar[2]
[1] 3
> scalar[3:5]
[1] 4 5 6
Run Code Online (Sandbox Code Playgroud)


Chi*_*til 5

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

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

for ( i in 1:5) { assign(paste0('scalar_', i), i+1) }
Run Code Online (Sandbox Code Playgroud)


Nic*_*Cox 5

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

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

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