如何在R中赋值宏变量?
在SAS中,我将使用以下代码
%LET DEPVAR = sales_ind
PROC REG DATA=mydata;
MODEL &DEPVAR = VAR1 + VAR2;
RUN;然而,在R中,我正在努力做一些类似的事情(这不起作用)
depvar <<- sales_ind
reg<-lm(depvar ~ var1 + var2, data=mydata)有什么想法吗?
谢谢!
发布于 2015-02-13 01:36:55
这样如何:
reg<-lm(formula(paste(depvar ,'~ var1 + var2')), data=mydata)发布于 2015-02-13 02:30:11
让我提供另一种解决方案,因为不需要通过必须解析的字符串来绕过概念:
R允许您通过一组函数(如substitute或bquote )在运行时操作表达式(也就是说,无需将其编码为字符串)。bquote可能是最接近SAS的方法:
depvar = quote(sales.int)
reg = lm(bquote(.(depvar) ~ var1 + var2), mydata)bquote本质上接受一个R表达式,并将.(…)周围的每个变量替换为它的值。第一行指定一个变量的名称-这非常类似于SAS中的实际宏。这需要用quote包围,否则R会尝试将sales.int的内容赋值给depvar,而不是它的名称。除了不能在其中使用.(…)语法替换现有变量之外,quote的工作方式与bquote相同。
您还可以根据用户输入确定此名称(即,通过使用as.name从字符串确定
depvar = as.name('sales.int')as.name将字符串转换为R对象名称。
只是对语言设计的评论,因为这是一个常见的误解:在这方面,R可能不像SAS那么直观,但它在概念上更一致,而且普遍适用。非R统计包本质上提供了围绕语言工作的技巧,而R则将公式完美地集成到语言本身中。
发布于 2016-02-13 02:07:16
它们都不起作用。虽然可以使用new=as.name(" f3 ")或new=quote(f3)来引用f3,但在SAS中使用&可以调用宏变量,但在R中没有使用类似的&。
> 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 2https://stackoverflow.com/questions/28484072
复制相似问题