首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在R中使用宏变量?(类似于SAS中的%LET )

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

Stack Overflow用户
提问于 2015-02-13 01:35:22
回答 3查看 22.9K关注 0票数 7

如何在R中赋值宏变量?

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

代码语言:javascript
运行
复制
%LET DEPVAR = sales_ind

PROC REG DATA=mydata;
MODEL &DEPVAR = VAR1 + VAR2;
RUN;

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

代码语言:javascript
运行
复制
depvar <<- sales_ind

reg<-lm(depvar ~ var1 + var2, data=mydata)

有什么想法吗?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-13 01:36:55

这样如何:

代码语言:javascript
运行
复制
reg<-lm(formula(paste(depvar ,'~  var1 + var2')), data=mydata)
票数 7
EN

Stack Overflow用户

发布于 2015-02-13 02:30:11

让我提供另一种解决方案,因为不需要通过必须解析的字符串来绕过概念:

R允许您通过一组函数(如substitutebquote )在运行时操作表达式(也就是说,无需将其编码为字符串)。bquote可能是最接近SAS的方法:

代码语言:javascript
运行
复制
depvar = quote(sales.int)
reg = lm(bquote(.(depvar) ~ var1 + var2), mydata)

bquote本质上接受一个R表达式,并将.(…)周围的每个变量替换为它的值。第一行指定一个变量的名称-这非常类似于SAS中的实际宏。这需要用quote包围,否则R会尝试将sales.int的内容赋值给depvar,而不是它的名称。除了不能在其中使用.(…)语法替换现有变量之外,quote的工作方式与bquote相同。

您还可以根据用户输入确定此名称(即,通过使用as.name从字符串确定

代码语言:javascript
运行
复制
depvar = as.name('sales.int')

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

只是对语言设计的评论,因为这是一个常见的误解:在这方面,R可能不像SAS那么直观,但它在概念上更一致,而且普遍适用。非R统计包本质上提供了围绕语言工作的技巧,而R则将公式完美地集成到语言本身中。

票数 19
EN

Stack Overflow用户

发布于 2016-02-13 02:07:16

它们都不起作用。虽然可以使用new=as.name(" f3 ")或new=quote(f3)来引用f3,但在SAS中使用&可以调用宏变量,但在R中没有使用类似的&。

代码语言:javascript
运行
复制
> test<-data.frame(f1=c(1,2), f2=c("a","b")); test
#   f1 f2
#1  1  a
#2  2  b

> new=as.name("f3"); new; 
#f3
> new=quote(f3); new; 
#f3

> # you still get new rather than f3 as expected
> new<-test$f1; 
> new
#[1] 1 2
票数 -5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28484072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档