如何在R中使用宏变量?(类似于SAS中的%LET)

Chr*_*s L 6 r

如何在R中分配宏变量?

在SAS中,我将使用以下代码

%LET DEPVAR = sales_ind

PROC REG DATA=mydata;
MODEL &DEPVAR = VAR1 + VAR2;
RUN;
Run Code Online (Sandbox Code Playgroud)

然而,在R中,我正在努力做类似的事情(这不起作用)

depvar <<- sales_ind

reg<-lm(depvar ~ var1 + var2, data=mydata)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢!

Kon*_*lph 16

让我提供一个替代解决方案,因为没有必要通过必须解析的字符串去概念性绕道:

R允许您通过一组函数(如substitute或)在运行时操作表达式(不将它们编码为字符串)bquote.bquote可能最接近SAS方法:

depvar = quote(sales.int)
reg = lm(bquote(.(depvar) ~ var1 + var2), mydata)
Run Code Online (Sandbox Code Playgroud)

bquote本质上采用R表达式,并替换.(…)由其值包围的每个变量.第一行为变量指定名称 - 这与SAS中的实际宏非常相似.这需要通过包围quote,否则R.将尝试分配的内容sales.intdepvar,而不是它的名称.除了您不能使用其中的语法来替换现有变量之外,它们的quote工作方式相同.bquote.(…)

您还可以从用户输入(即从字符串中)确定此名称,方法是as.name:

depvar = as.name('sales.int')
Run Code Online (Sandbox Code Playgroud)

as.name 将字符串转换为R对象名称.


只是对语言设计的评论,因为这是一个常见的误解:在这方面R可能不如SAS那么直观,但它在概念上更加一致且普遍适用.非R统计软件包本质上提供了解决语言的方法,而R将公式精美地集成到语言本身中.


Jth*_*rpe 7

这个怎么样:

reg<-lm(formula(paste(depvar ,'~  var1 + var2')), data=mydata)
Run Code Online (Sandbox Code Playgroud)

  • R没有lexer指令告诉词法分析器(程序中将文本分成单个标记的部分)将代码中的文本位替换为另一个文本位,就像`LET`在SAS中所做的那样. (2认同)